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

Конфигурация и профили моторов

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

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

Создать локальные файлы

Для воспроизведения именованных поз начните с примера:

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.