Настройка компенсации гравитации
Результат: управляющая программа использует модель, соответствующую вашей руке, и вы понимаете поведение при завершении работы. Нужны проверенные калибровка и файл контроллера.
Проверить соответствие модели
Хост рассчитывает воздействие по измеренным положениям, затем отправляет его сервоприводам. Прошивка не содержит геометрию руки. Положительный 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.