Конфигурация и профили моторов
Результат: готов полный файл управления вашей рукой. Конфигурация выбирает порт, моторы и режим работы; профиль задаёт параметры конкретного мотора. Ни калибровка, ни установленные пределы хода в этих файлах не заменяются.
Создать локальные файлы
Для воспроизведения именованных поз начните с примера:
macOS / Linux
cp tools/poses/replay.example.json tools/poses/controller.local.json
cp host/arm-control/profile.example.json tools/poses/motor-1.local.json
Windows PowerShell
Copy-Item tools/poses/replay.example.json tools/poses/controller.local.json
Copy-Item host/arm-control/profile.example.json tools/poses/motor-1.local.json
Теперь редактируйте локальные копии. controller.local.json из примера содержит только мотор 1. Для руки добавьте все ID из записи. Создайте для остальных моторов отдельные motor-2.local.json, motor-3.local.json и так далее; каждый профиль должен быть проверен для своего сустава.
Минимальная структура шестимоторного файла показана ниже. Числа объясняют формат, а не гарантируют безопасные настройки. Порт /dev/ttyUSB0 замените своим; в Windows это, например, COM3. Значение SERVO_PORT из терминала не подставляется в JSON автоматически.
{
"followerPort": "/dev/ttyUSB0",
"baudRate": 1000000,
"maxAgeMs": 100,
"acceleration": 1000,
"rampTimeMs": 50,
"profiles": {
"1": "motor-1.local.json",
"2": "motor-2.local.json",
"3": "motor-3.local.json",
"4": "motor-4.local.json",
"5": "motor-5.local.json",
"6": "motor-6.local.json"
},
"replay": {
"speed": 500,
"holdMs": 1000,
"repeat": 1,
"moveTimeoutMs": 30000,
"toleranceCounts": 10
}
}
Сохраните этот JSON именно как tools/poses/controller.local.json. Файлы motor-1.local.json … motor-6.local.json должны лежать рядом. Для другого набора ID измените ключи profiles, записи поз и список подключённых устройств согласованно.
Что находится в профиле
Пример полного профиля из исходников:
{
"kpQ8": 256,
"kdQ8": 32,
"kiQ8": 0,
"integralLimit": 0,
"effortLimit": 100,
"velocityLimit": 500,
"velocityFilterQ8": 64,
"gravitySlewEffortPerS": 1000,
"velocityFeedforward": {
"positiveGainQ8": 0,
"negativeGainQ8": 0,
"effortLimit": 0
}
}
| Параметр | Как читать |
|---|---|
kpQ8, kdQ8, kiQ8 |
Коэффициент, умноженный на 256: 256 означает 1.0, 32 — 0.125 |
integralLimit |
Предел только интегральной составляющей |
effortLimit |
Предел суммарного воздействия, 1–1000 единиц PWM; это не момент и не амперы |
velocityLimit |
Максимальная скорость этого мотора, отсчёты/с |
velocityFilterQ8 |
1–255; большее значение быстрее реагирует, но слабее фильтрует шум |
gravitySlewEffortPerS |
Предел скорости изменения гравитационной составляющей; сам по себе не включает модель |
velocityFeedforward |
Два неотрицательных коэффициента для направлений и предел их воздействия; три нуля отключают составляющую |
Общие acceleration и rampTimeMs находятся в контроллере. Профиль мотора может переопределить их через accelerationLimit и rampTimeMs. Диапазоны и взаимные ограничения перечислены в регистре конфигурации.
Пути и ID
- Путь к профилю и
gravityModelсчитается от файла контроллера, не от рабочего каталога. - Путь
configв плане настройки считается от файла плана. - Именованные позы задают ID через сам файл записи;
jointsдля такого replay не обязателен. - Настройка и применение профилей требуют
joints: [{"followerId": 1}, …]для всех управляемых моторов. - Телеуправлению и повтору его журнала нужны
leaderId,followerIdиmapping.
Поэтому не переносите один пример между каталогами без проверки путей и не считайте отсутствие joints в примере replay ошибкой.
Что означает применение
Профили записываются в RAM Extension. После сброса их нужно применить заново; EEPROM-калибровка и пределы хода хранятся отдельно. Replay применяет выбранную конфигурацию сам. Если профиль меняется, соответствующий мотор кратковременно отключается; при новом запуске могут отпускаться все настроенные моторы.
Готовые профили host/arm-control/profiles/so101/ и so102/ — записи конкретных вертикально установленных рук с пустым захватом. В SO-101 остаются нерешённые колебания M1 и медленные отклонения M2; быстрый профиль SO-102 ещё требует аппаратной проверки. Это не рекомендуемые универсальные значения для первого запуска.
Проверка файла: JSON корректен, все пути существуют, для каждого мотора есть профиль, значения выбраны для механизма. Затем выполните предварительный просмотр replay. Формальная допустимость файла не доказывает безопасность движения.
Главная раздела · Версия исходников: a995f77. Extension 9.0.