· Робототехника и дроны

Шина реального времени для суставов робота: как удерживают цикл 250 мкс

Исследователи Висконсинского университета в Мадисоне реализовали на Raspberry Pi 4 мастер CANopen over EtherCAT с циклом 250 мкс для полуактивного протеза голеностопа и измерили, чем именно определяется стабильность периода.

Голеностоп полуактивного протеза должен успеть изменить положение за одну фазу переноса. При нормальной ходьбе фаза переноса длится всего несколько сотен миллисекунд, и за это время должны завершиться связь, вычисления и исполнение. Если стопа не успеет занять нужное положение, она ударится о землю. Время, отведённое протоколу связи, в миллисекундах — это уже считается щедро.

Kieran M. Nichols, Rebecca A. Roembke и Peter G. Adamczyk с кафедры машиностроения Висконсинского университета в Мадисоне предложили в журнале Actuators конкретный подход: одна плата Raspberry Pi 4 напрямую несёт мастер-станцию CANopen over EtherCAT, управляет двумя драйверами бесколлекторных двигателей постоянного тока, а период команд положения сжат до 250 мкс. Настоящая ценность этой статьи не в дешевизне оборудования, а в том, что она разобрала на части и измерила, чем именно определяется работа в реальном времени.

Список оборудования короток. Контроллер — Raspberry Pi 4: четырёхъядерный Broadcom BCM2711 с ядрами Cortex-A72, 4 ГБ памяти LPDDR4, разгон до 2,0 ГГц; встроенный порт Ethernet служит физическим уровнем связи. Два драйвера Elmo Gold Twitter, каждый с бесколлекторным двигателем постоянного тока Faulhaber 3216W012BXTHIEF3-1024L, за двигателем — редуктор 22GPT с передаточным числом 14:1, номинальный момент 0,532 Н·м, номинальная скорость 4,59 об/с. Вся система питается от литиевой батареи 12 В: напряжение повышается до 24 В для сигналов разрешения, 5 В идёт на датчики Холла, а сама Raspberry Pi получает 5 В из 12 В через один понижающий преобразователь.

Механическая часть — двухосевой карданный шарнир и два клиновидных кулачка, наклонённых на 5 градусов относительно оси двигателя и соединённых с валами двигателей через муфты типа «паук»; стопа — готовая протезная деталь. Диапазон регулировки угла голеностопа — от 0 до 10 градусов как в сагиттальной, так и во фронтальной плоскости.

Стек протоколов — CANopen over EtherCAT. EtherCAT определяет, как передаются данные, CANopen — как они описываются; вместе они дают и детерминированную передачу, и готовый словарь объектов. Мастер — открытый SOEM, режим управления — циклический синхронный режим положения, то есть драйвер получает команды положения с фиксированным периодом и синхронно их исполняет. Настройка параметров идёт через сервисные объекты данных, данные реального времени — через объекты процессных данных; первые медленные, вторые обновляются каждый цикл.

Стабильность периода определяется синхронизацией распределённых часов. Часы на стороне Linux должны быть выровнены с часами драйверов, а погрешность складывается из мелких накладных расходов: джиттера планировщика, обработки прерываний Ethernet, копирования памяти. Авторы заменили ядро на образ Debian LinuxCNC с патчем реального времени PREEMPT (ядро версии 4.19.71 с патчем rt24) и жёстко распределили роли ядер процессора: ядро 0 выполняет ядро ОС, ядра 1 и 2 — общие задачи и программы, ядро 3 отведено исключительно под поток реального времени для синхронизации часов, а ядро 2 одновременно несёт поток связи. Изоляция и привязка ядер выполнены через isolcpu и taskset.

Одного ядра реального времени недостаточно. Поток синхронизации при каждом ожидании выполняет пропорционально-интегральную компенсацию: пропорциональная ошибка — разница между фактической длительностью предыдущего цикла и заданным периодом, интегральная ошибка накапливается со знаком пропорциональной. Если коэффициенты компенсации подобраны неудачно, период будет перерегулироваться туда и обратно; если слишком консервативно — ошибка не сойдётся.

Авторы провели сканирование по трём переменным: пропорциональный коэффициент 0,02, 0,1 и 0,5; интегральный коэффициент 0,002, 0,01 и 0,05; заданный период 250, 500 и 1000 мкс — всего семь конфигураций, каждая прогонялась семь раз. Результаты различаются заметно. Для базовой группы (пропорциональный 0,1, интегральный 0,01, период 250 мкс) фактический период составил 249,65 мкс, средний джиттер 0,35 мкс, максимальный абсолютный джиттер 60,96 мкс, стандартное отклонение периода 6,59 мкс, загрузка процессора 13,37%. При повышении пропорционального коэффициента до 0,5, сохранении интегрального 0,01 и том же периоде 250 мкс фактический период стал 249,98 мкс, средний джиттер снизился до 0,02 мкс, максимальный абсолютный джиттер — 46,40 мкс, стандартное отклонение — 4,51 мкс, загрузка процессора — 12,48%. Все три показателя улучшились одновременно — это самый красивый набор данных во всей статье.

Расширение периода, напротив, нагружает процессор сильнее. При заданном периоде 500 мкс загрузка выросла до 36,81%, при 1000 мкс — 26,67%, а максимальный абсолютный джиттер увеличился до 119,3 мкс. Авторы объясняют это тем, что чем длиннее период, тем шире окно ожидания потока синхронизации и тем выше вероятность его вытеснения другими задачами. Это показывает, что в системах реального времени более длинный период не означает меньше усилий: подходящий важнее, чем свободный.

Двигательные характеристики проверялись так: 33 предустановленные конфигурации голеностопа случайным образом повторялись девять раундов — всего 297 команд движения, из которых 6 исключены из-за заклинивания, действительная выборка — 291. Время нарастания до 95% в среднем 0,128 с при стандартном отклонении 0,037 с; время установления, определяемое по снижению скорости ниже 1 градуса в секунду, в среднем 0,193 с при стандартном отклонении 0,076 с. Конечная угловая ошибка в среднем 0,107 градуса в сагиттальной плоскости и 0,153 градуса во фронтальной — обе в пределах 0,2 градуса.

Вернём эти цифры в контекст сценария. Медиана времени установления — 0,185 с, максимум — 0,45 с. В фазе переноса нужен запас: медиана определяет, сможет ли протез успевать за обычной походкой, а максимум — это граница проектирования. Цель статьи — чтобы протез завершал регулировку за одну фазу переноса; по данным, медианы достаточно, а с «длинным хвостом» ещё предстоит поработать на стороне контроллера.

Авторы сопоставили результаты с существующими платформами. Система на Intel i3 при том же периоде 250 мкс показала максимальный джиттер около 64 мкс, средний джиттер 0,008 мкс, стандартное отклонение 23 мкс и загрузку процессора 3,8%; коллаборативный робот на Intel i7 при периоде 1000 мкс — максимальный джиттер 10 мкс. Данная система с максимальным абсолютным джиттером 46,40 мкс и средним джиттером 0,02 мкс находится между ними.

Источник разрыва объясним. Максимальный джиттер определяется задержкой планирования в худшем случае и зависит от абсолютной производительности процессора, пропускной способности памяти и задержки прерываний — одноплатные компьютеры вроде Raspberry Pi здесь проигрывают изначально. Средний джиттер отражает обычный режим, и его удаётся сильно снизить патчем реального времени и изоляцией ядер. Это же объясняет, почему авторы остановились на 250 мкс, а не стали сжимать период дальше к 100 мкс.

Помимо оборудования есть и ещё один смысл. Раньше для такого управления в реальном времени обычно требовался специализированный контроллер с микросхемой ведомого устройства EtherCAT либо промышленный компьютер с ядром реального времени. Реализация этого на универсальном одноплатном компьютере с открытым мастером меняет и структуру затрат, и цепочку отладки. Статья не обходит цену: функции безопасной остановки и безопасного отключения момента в эксперименте были отключены, а значит, прототипу ещё далеко до сертифицированного продукта.

Материал 21IC, перевод ЭлектроПоиск.
Оригинал публикации: https://www.21ic.com/a/1013329.html
Смотреть в каталоге

Другие новости

Заметили ошибку?