Структуры регистров Extension
Справочник блоков протокола v9.0. Числа смещений отсчитываются от начала каждого блока, а не являются отдельными адресами Legacy-регистров. Читайте блок целиком указанной длины. Формат пакета и порядок запуска описаны отдельно.
Смещение — начальный байт поля, считая с нуля внутри блока. Смещения ниже десятичные, селекторы — шестнадцатеричные (0x...). Все записи используют инструкцию 0x91, чтения — 0x90 с точным количеством байт.
| Селектор | Блок | Доступ | Байт |
|---|---|---|---|
0x90 |
Capabilities | Чтение | 8 |
0xA0 |
Configuration | Чтение/запись | 24 |
0xB8 |
Выбор контроллера и подготовка сессии | Запись | 3 |
0xC1 |
Рабочая обратная связь | Чтение | 32 |
0xC2 |
Обратная связь для настройки | Чтение | 54 |
Capabilities — 0x90
| Смещение | Тип | Значение / смысл |
|---|---|---|
| 0–3 | 4 байта | ASCII ARMC |
| 4 | u8 |
Основная версия: 9 |
| 5 | u8 |
Дополнительная версия: 0 |
| 6 | u8 |
Резерв: 0 |
| 7 | u8 |
Обычный период регулятора: 1 мс |
Версия протокола определяет доступные блоки и точную длину каждого. Выбор режима и подготовка сессии используют один блок только для записи, описанный ниже.
Конфигурация — 0xA0
| Смещение | Тип | Поле | Единицы / допустимый диапазон |
|---|---|---|---|
| 0 | u16 |
kp_q8 |
Коэффициент × 256; 0–65535 |
| 2 | u16 |
kd_q8 |
Коэффициент × 256; 0–65535 |
| 4 | u16 |
ki_q8 |
Коэффициент × 256; 0–65535 |
| 6 | u16 |
integral_limit |
Воздействие; 0–effort_limit |
| 8 | u16 |
effort_limit |
Воздействие; 1–1000 |
| 10 | u16 |
velocity_limit |
Отсчёты/с; 1–65535 |
| 12 | u16 |
acceleration_limit |
Отсчёты/с²; 1–30000 |
| 14 | u8 |
velocity_filter_q8 |
Отклик фильтра скорости; 1–255, больше — быстрее |
| 15 | u8 |
ramp_time_ms |
Нарастание ускорения; 1–255 мс |
| 16 | u16 |
velocity_ff.positive_gain_q8 |
Воздействие/(отсчёт/с) × 256; 0–65535 |
| 18 | u16 |
velocity_ff.negative_gain_q8 |
Воздействие/(отсчёт/с) × 256; 0–65535 |
| 20 | u16 |
velocity_ff.effort_limit |
Воздействие; 0–основной effort_limit |
| 22 | u16 |
gravity_slew |
Изменение компенсации, единицы воздействия/с; 1–10000 |
Коэффициенты передаются умноженными на 256. Единицы: воздействие/отсчёт для P, воздействие/(отсчёт/с) для D и воздействие/(отсчёт·с) для I. Например, P = 4.5 даёт 4.5 единицы воздействия на отсчёт ошибки и передаётся как 1152.
У сервопривода одна активная конфигурация. Запись требует выключенного мотора и неактивной сессии. Каждая запись заменяет всю конфигурацию, включая feedforward. Некорректные настройки отклоняют запись целиком, ничего не изменяя. Прочитайте 0xA0, чтобы проверить принятые значения.
Коэффициенты velocity feedforward неотрицательны. Нулевой предел этой составляющей требует нулевых коэффициентов. Один предел действует в обоих направлениях и не должен превышать основной предел воздействия.
После сброса настройте сервопривод до включения мотора. Сохранённые настройки и альтернативные коэффициенты храните на хосте; меняйте их между запусками при поддерживаемой руке и выключенном моторе.
Выбор режима и подготовка сессии — 0xB8
| Смещение | Тип | Значение |
|---|---|---|
| 0 | u8 |
Режим: 0 Legacy, 1 Extension |
| 1 | u16 |
Сессия: 0 для Legacy, 1–65535 для Extension |
Точная длина данных — 3 байта, сессия передаётся little-endian. Например, Extension с сессией 0x1234 — 01 34 12; Legacy — 00 00 00. Некорректная комбинация отклоняет запись целиком без изменения состояния. Оба режима требуют выключенного мотора и заменяют прежнюю подготовку сессии. Один выбор режима не запускает управление и не фиксирует позицию удержания.
Legacy-регистр включения удержания 40 запускает подготовленную Extension-сессию при записи 1. Требуются доступный выход мотора, корректная конфигурация, инициализированные датчики с возрастом показаний не более 2 мс, отсутствие неисправности, требующей отключения, и пригодные сохранённые Legacy-пределы. При включённых пределах измеренная позиция должна быть внутри. Проверки выполняются в момент включения, поэтому учитываются движение и неисправности между подготовкой и включением.
Torque-off отменяет и работающее управление, и неиспользованную подготовку. Ошибка датчиков, защитное отключение, изменение пределов позиции или смещения энкодера, калибровка и сохранение постоянных настроек также отменяют подготовку. Проверяйте обратную связь для подтверждения запуска: отдельной команды ARM нет. Прежний селектор 0xBA и прежние однобайтовые данные выбора режима отклоняются.
Рабочая обратная связь — 0xC1
| Смещение | Тип | Поле / единицы |
|---|---|---|
| 0 | u32 |
Время измерения, мс с запуска; после 4294967295 возвращается к нулю |
| 4 | u16 |
Номер измерения; после 65535 возвращается к нулю |
| 6 | u16 |
Сессия |
| 8 | u16 |
Номер принятой цели |
| 10 | u16 |
Номер принятой гравитации |
| 12 | u16 |
Флаги, см. ниже |
| 14 | i32 |
Измеренная позиция, отсчёты Q8 |
| 18 | i32 |
Отфильтрованная измеренная скорость, отсчёты/с Q8 |
| 22 | i16 |
Приложенное воздействие; положительное — в сторону роста отсчётов |
| 24 | i16 |
Показание датчика тока относительно базового уровня; не амперы |
| 26 | u8 |
Напряжение питания, единицы 0.1 В |
| 27 | u8 |
Проверенная температура, °C |
| 28 | u8 |
Legacy-флаги неисправностей/состояния |
| 29 | u8 |
Резерв: ноль |
| 30 | u16 |
Возраст измерения при чтении, мс; максимум 65535 |
| Бит флага | Значение при установке |
|---|---|
| 0 | Измерение свежее и пригодно для текущего состояния управления |
| 1 | Регулятор активен |
| 2 | Резерв: ноль |
| 3 | Выход мотора ограничен |
| 4 | Привод руки включён |
| 5 | Сессия запущена через torque enable |
| 6 | Резерв: ноль |
| 7 | Выход готов |
| 8 | Получена команда гравитации |
| 9 | Резерв: ноль |
| 10 | Доступна проверенная температура |
| 11 | Резерв: ноль |
| 12 | Цель движения активна |
| 13 | Резерв: ноль |
| 14 | Выбран контроллер руки |
| 15 | Резерв: ноль |
Каждый флаг — один бит: бит 0 имеет значение 1, бит 1 — 2, бит 2 — 4 и так далее. Одновременно могут быть установлены несколько флагов. Активный регулятор со сброшенным битом 12 удерживает цель. Один сброшенный бит движения не означает, что мотор включён или готов.
Обратная связь описывает зафиксированное измерение. Если состояние изменилось до чтения хостом, часть полей может относиться к прежнему состоянию. Бит 0 сбрасывается, если измерению больше 2 мс, контроллер больше не выбран, не запущен, не управляет выходом или не готов, либо не совпадают номера сессии/команд. Проверяйте бит 0, возраст, сессию и принятый номер вместе.
Позиция и показания состояния доступны также в Legacy и при выключенном моторе. Недоступные управляющие поля равны нулю. Номер измерения увеличивается при получении данных, а не при каждом чтении хостом, и различает измерения с одинаковой миллисекундной меткой. Неожиданные большие скачки температуры проверяются на нескольких чтениях до отображения; см. ограничение защиты.
Обратная связь для настройки — 0xC2
Байты 0–31 в точности повторяют 0xC1. Остальные байты:
| Смещение | Тип | Поле / единицы |
|---|---|---|
| 32 | i32 |
Заданная позиция, отсчёты Q8 |
| 36 | i32 |
Заданная скорость, отсчёты/с Q8 |
| 40 | i16 |
Запрошенное воздействие после настроенного ограничения, до защиты мотора |
| 42 | i16 |
P-составляющая, воздействие |
| 44 | i16 |
D-составляющая, воздействие |
| 46 | i16 |
Интегральная составляющая, воздействие |
| 48 | i16 |
Применяемая компенсация гравитации, воздействие |
| 50 | i16 |
Локальная velocity feedforward, воздействие |
| 52 | u16 |
Накопленная дополнительная задержка регулятора, мс; максимум 65535 |
Счётчик задержки добавляет лишнее время, когда обновление регулятора занимает больше обычной 1 мс (elapsed_ms − 1). Он не считает потерянные сообщения. Показания P и D ограничены ±32767, поэтому сумма отображённых составляющих может не совпасть с полным внутренним расчётом.
Сервопривод передаёт обратную связь только по запросу. Для обычного наблюдения используйте 0xC1, для настройки с дополнительными данными — 0xC2. Чтение 0xC2 уже включает всё из 0xC1; чтение обоих блоков создаёт лишний трафик. Раздельные чтения могут описывать разные моменты: сравнивайте время и номера измерений.
Правила интерпретации
effort — знаковая команда в единицах PWM, не амперы и не измеренный момент. currentAdcDelta — относительное показание датчика тока, не физический ток без отдельного преобразования. У позиции и скорости Q8 разные единицы; деление на 256 убирает масштаб, но не переводит отсчёты в градусы. Для градусов нужна физическая привязка сустава.
Температура в Extension-ответе проверяется для подавления одиночных скачков. Температурная защита мотора при этом использует сырые показания: отсутствие скачка в C1/C2 не доказывает, что он не повлиял на защиту.
Главная раздела · Версия исходников: a995f77. Extension 9.0.
