Перейти к статье

Настройка компенсации гравитации

Проверено 2026-11-01

Результат: управляющая программа использует модель, соответствующую вашей руке, и вы понимаете поведение при завершении работы. Нужны проверенные калибровка и файл контроллера.

Проверить соответствие модели

Хост рассчитывает воздействие по измеренным положениям, затем отправляет его сервоприводам. Прошивка не содержит геометрию руки. Положительный effort соответствует росту отсчётов энкодера; направление физического угла должно быть учтено в модели.

В исходниках есть две модели вертикально установленных рук с пустым захватом:

Файл в host/arm-control/models/ Рука
arm-upright-empty.json SO-102
so101-upright-empty.json SO-101

Обе задают связанные составляющие для M2–M4 и явный ноль для M1, M5 и M6. В комплектной конфигурации шестимоторной руки используются ID 1–6 с отдельным профилем каждого мотора. Модели привязаны к конкретным смещениям энкодеров, делителю 1 и флагу реверса; preflight сравнивает эти параметры с мотором до включения управления.

Совпадение названия руки или позы с отсчётом 2048 недостаточно. Не копируйте чужие смещения в свои моторы и не меняйте только encoderCalibration, чтобы пройти проверку. При другой калибровке, установке, геометрии или нагрузке нужно адаптировать/подобрать модель и проверить её выход на оборудовании.

Подключить проверенную модель

Для контроллера tools/poses/controller.local.json добавьте поле в существующий JSON-объект, а не отдельный файл из одной строки:

"gravityModel": "../../host/arm-control/models/arm-upright-empty.json"

Это путь для модели SO-102. Файл SO-101 — so101-upright-empty.json; в его статусе прямо указана необходимость проверки на конкретной руке и траектории. Для собственной модели укажите её относительный путь. Не забудьте запятую между полями JSON.

gravitySlewEffortPerS каждого профиля задаёт скорость изменения составляющей; effortLimit ограничивает суммарный выход мотора. Без gravityModel инструменты работают без модели, а при продолжении старой сессии очищают сохранённую гравитацию. Один ненулевой slew не включает компенсацию.

Проверить перед движением

Выполните обычный предварительный просмотр с вашей записью:

macOS / Linux
npm run replay -- tools/poses/controller.local.json POSES.json
Windows PowerShell
npm.cmd run replay -- tools/poses/controller.local.json POSES.json

Несовпадение калибровки, отсутствующий вход или слишком большое рассчитанное воздействие — причина остановиться. Значение выше ограничения модели или мотора отклоняется, а не молча обрезается. Поднимать лимит ради исчезновения ошибки без проверки нагрузки нельзя.

При запуске с --run контроллер рассчитывает, отправляет и подтверждает гравитацию до первой цели движения. Проверьте на поддерживаемой руке соответствие направления и поведения ожидаемому при нескольких позах и нагрузках. Единственная удачная поза не подтверждает модель во всей рабочей области.

Что происходит во время и после работы

Во время работы обратная связь и расчёт гравитации используют один цикл чтения; обновления идут примерно раз в 50 мс. На хосте есть проверки свежести и задержек, но они не превращают его в систему реального времени.

После обычного завершения последняя компенсация остаётся в сервоприводе. Она больше не адаптируется к изменению позы или груза. Потеря сообщений сама по себе также не обнуляет гравитацию: прошивка доходит до последнего заданного значения с настроенной скоростью и сохраняет его. Снятие torque enable очищает её. Порядок завершения описан в первом движении.

Если нужна своя модель

Каждому управляемому мотору нужна явная модель, включая нулевую. Все моторы, участвующие в связанных выражениях, должны измеряться и управляться. Термы имеют вид coefficient × sin(angle) или coefficient × cos(angle), где angle = offsetRad + sum(counts[id] × weights[id]); углы — в радианах, коэффициенты — в единицах PWM effort. Постоянный терм не содержит весов.

Подбор по журналам и независимая проверка входят в процесс настройки. Полученные коэффициенты не являются измерением физического момента и не становятся готовой проверенной моделью автоматически.


Главная раздела · Версия исходников: a995f77. Extension 9.0.