Руководство по настройке Damiao AGV
От распаковки до управления через браузер. Охватывает вопросы безопасности при распаковке, зарядке, программном обеспечении, дистанционном управлении, автономной навигации и креплении на кронштейне.
Распаковка и проверка безопасности
Осмотрите AGV и подготовьте рабочее место.
- Снимите упаковку. Осторожно снимите все пенопластовые вставки, кабельные стяжки и транспортировочные ограничители. Осмотрите колеса на предмет повреждений при транспортировке — все четыре колеса Mecanum должны свободно вращаться вручную.
- Осмотрите разъемы. Убедитесь, что все разъемы кабелей на главном контроллере установлены на свои места. Вибрация при транспортировке иногда ослабляет разъемы JST или Deans.
- Освобождение рабочего места. Перед включением питания освободите не менее 2 м открытого пространства во всех направлениях. AGV может быстро ускоряться — во время первых испытаний наблюдателям следует отойти в сторону.
- Аварийная остановка. Найдите главный выключатель питания на корпусе. Прежде чем включать питание, узнайте, как добраться до него. Во время первого сеанса всегда держите одну руку возле точки отсечки.
- Проверка поверхности. Для правильной работы во всех направлениях колесам Mecanum требуется плоская твердая поверхность (бетон, деревянный пол или гладкая плитка). Ковровое покрытие и неровные поверхности значительно снижают эффективность бокового контроля.
Зарядка аккумулятора и включение питания
Полностью зарядите аккумулятор перед первым использованием.
- Подключите зарядное устройство. Найдите порт зарядки аккумулятора на шасси AGV (обычно это большой цилиндрический разъем или порт XT60). Подключите прилагаемое зарядное устройство. Подключите зарядное устройство к заземленной розетке 110/220 В.
- Зарядите по полной. Перед первым использованием дайте аккумулятору полностью зарядиться — обычно это 2–4 часа в зависимости от исходного состояния. По завершении светодиод зарядного устройства загорится зеленым (или перестанет мигать). Не оставляйте без присмотра во время первой зарядки.
- Проверьте напряжение аккумулятора. После зарядки напряжение аккумулятора должно соответствовать номинальному уровню полностью заряженного аккумулятора (проверьте этикетку аккумулятора). Используйте мультиметр или встроенный дисплей, если он имеется.
- Последовательность включения. Подключите аккумулятор к основному контроллеру. Переключите главный выключатель питания. Контроллер должен загрузиться в течение 5–10 секунд — светодиоды-индикаторы стабилизируются. Не отправляйте команды движения во время загрузки.
Программное обеспечение и навигационный стек ROS2
Установите агент Python и дополнительные пакеты ROS2 на свой компьютер.
The dami_agent.py скрипт является основным мостом между платформой Fearless и оборудованием AGV. Для этого требуется Python 3.8+ и два пакета pip.
# Install dependencies pip install pyserial websockets # Confirm your USB-to-TTL adapter appears ls /dev/ttyUSB* # Linux # Add your user to the dialout group (Linux) if you get permission errors sudo usermod -aG dialout $USER # Log out and back in for group change to take effect
Подключите адаптер USB-TTL: подключите адаптер TX контакт с главным контроллером AGV UART5_RX (контакт PD2). Подключите GND к GND. НЕ подключайте контакт RX адаптера или 5 В к AGV.
Для интеграции с ROS2 установите навигационный стек:
# ROS2 Humble (Ubuntu 22.04) — adjust for your distro
sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup ros-humble-slam-toolbox
python3 dami_agent.py --session RC-XXXX-XXXX --mock
Режим Mock пропускает открытие последовательного порта. Весь синтаксический анализ команд WebSocket, пересылка телеметрии и логика безопасности по тайм-ауту выполняются одинаково.
Телеоперация
Управляйте AGV из браузера через платформу Fearless
- Открыть platform.roboticscenter.ai, перейдите в раздел Teleop и создайте новый сеанс. Скопируйте идентификатор сеанса (формат:
RC-XXXX-XXXX). - Запустите агент с вашим последовательным портом и идентификатором сеанса:
python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --backend ws://localhost:8000
- Агент подключается к платформе, регистрирует узел AGV как
device_type: "mobile_base", и начинает контур управления с частотой 30 Гц. - Откройте URL-адрес сеанса в браузере. Используйте элементы управления направлением для отправки
moveкоманды. AGV реагирует в течение одного такта контура управления (33 мс при 30 Гц).
Типы команд, принимаемые агентом:
# Move forward along X axis {"type": "move", "axis": "x", "dir": 1} # Move laterally right (Y axis) {"type": "move", "axis": "y", "dir": 1} # Rotate counter-clockwise (Z axis) {"type": "move", "axis": "z", "dir": -1} # Stop all motion immediately {"type": "stop"} # Goal-based delta movement {"type": "goal", "delta": {"x": 0.5, "y": 0.0, "yaw": 0.0}}
Для регулировки скорости движения используйте --amp параметр (по умолчанию 660, рекомендуемый диапазон 500–760). Более высокие значения обеспечивают более быстрое движение:
python3 dami_agent.py --session RC-XXXX-XXXX --serial-port /dev/ttyUSB0 --amp 500
Если AGV движется в неправильном направлении, используйте --invert-x, --invert-y, или --invert-z перевернуть оси без изменения прошивки.
Настройка автономной навигации
Настройте ROS2 nav2, SLAM и следование маршрутной точке.
Для автономной навигации публикуйте данные одометрии и датчиков (с LiDAR или камеры глубины на AGV) в темах ROS2, а затем используйте nav2 для планирования пути.
# Launch SLAM Toolbox for mapping ros2 launch slam_toolbox online_async_launch.py # In a second terminal — launch nav2 with the AGV base footprint ros2 launch nav2_bringup navigation_launch.py \ params_file:=/path/to/your/agv_nav2_params.yaml # Send a navigation goal via CLI ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \ "{pose: {header: {frame_id: map}, pose: {position: {x: 1.0, y: 0.5}, orientation: {w: 1.0}}}}"
Ключевые параметры nav2 для настройки Damiao AGV:
- robot_radius — Установите половину ширины AGV плюс запас безопасности (обычно 0,4–0,6 м).
- max_vel_x / max_vel_y — Установите на основе вашего
--ampзначение и измеренную максимальную скорость. Начните консервативно (0,3 м/с). - max_vel_theta — Ограничение скорости вращения. Измеряйте медленно
--amp 400сначала протестируй. - голономный — Установить на
trueв локальном планировщике DWB, чтобы включить планирование бокового движения (требуется для колес mecanum/omni).
Установка манипулятора робота
Прикрепите OpenArm или DK1 к верхней пластине и зарегистрируйте оба за один сеанс работы с платформой.
Верхняя пластина Damiao AGV предназначена для установки стандартных фланцев основания манипулятора робота. Этот шаг охватывает физическую интеграцию и настройку многоузлового сеанса Fearless Platform.
Физический монтаж
- Выключите AGV и поставьте на охрану. перед любыми механическими работами.
- Расположите опорную пластину манипулятора робота над монтажными отверстиями верхней панели AGV. Используйте прилагаемые болты с головкой под торцевой ключ M6 (или M5 для более легкого оружия). Нанесите резьбовой фиксатор на все крепежные детали.
- Проложите кабели питания рычага и кабели CAN/USB через канал для прокладки кабелей на верхней пластине в отсек шасси AGV. Закрепите с помощью кабельных стяжек — обеспечьте достаточную слабину для всего рабочего пространства руки, не натягивая ее.
- Питание манипулятора осуществляется от отдельной батареи или от регулируемого источника питания в шасси AGV. Не используйте батарею привода AGV совместно с контроллером руки без соответствующей изоляции.
Сеанс многоузловой платформы
Запустите оба агента, указывающие на один и тот же идентификатор сеанса. Они регистрируются как независимые узлы, и платформа записывает оба потока синхронно:
# Terminal 1 — AGV agent python3 dami_agent.py \ --session RC-XXXX-XXXX \ --serial-port /dev/ttyUSB0 \ --node-id damiao-base # Terminal 2 — OpenArm agent (example) python3 openarm_agent.py \ --session RC-XXXX-XXXX \ --can-interface can0 \ --node-id openarm-right
На панели телеоперации «Бесстрашная платформа» появляются оба узла. Операторы могут отправлять команды движения на AGV (ось x/y/z) и команды постановки на охрану независимо в одном сеансе. Запись эпизода фиксирует телеметрию всех узлов в одном архиве JSONL — полную траекторию мобильных манипуляций, включая базовую скорость и положения суставов рук, синхронизированную по временной метке.
Конфигурация CAN-шины и двигателя
Настройте шину CAN FD и установите идентификаторы двигателей для любых приводов Damiao, установленных на AGV.
Когда рычаг OpenArm или DK1 установлен на верхней панели AGV, его двигатели Damiao QDD обмениваются данными с бортовым компьютером по шине CAN FD. В этом разделе описывается подключение шины, присвоение идентификатора двигателя, команды ввода в эксплуатацию и светодиодная диагностика.
Установите can-utils
# Install SocketCAN utilities (Ubuntu / Debian)
sudo apt update && sudo apt install -y can-utils
Вызовите интерфейс CAN FD
CAN FD при номинальной скорости 1 Мбит/с + скорости передачи данных 5 Мбит/с является рекомендуемым режимом для всех новых развертываний:
# Bring interface down first if already up sudo ip link set can0 down # Configure CAN FD: 1M nominal baud, 5M data baud, FD mode enabled sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on # Bring interface up sudo ip link set can0 up # Verify — output should show "fd on" ip link show can0
Если у вас установлен OpenArm PPA, вспомогательный сценарий включает в себя следующие команды:
# CAN FD single arm openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000 # Classic CAN 2.0 (legacy / compatibility) openarm-can-configure-socketcan can0
Следить за автобусом
# Dump all CAN frames — verify connectivity before sending commands candump -x can0 # Dump with timestamps candump -td can0
Назначение идентификатора двигателя (J1–J8)
Каждый двигатель Damiao на шине CAN должен иметь уникальную пару идентификаторов: идентификатор передатчика (хост → двигатель) и идентификатор приемника (двигатель → хост). Идентификаторы настраиваются с помощью инструмента отладки Damiao Windows перед сборкой рычага. Стандартное сопоставление OpenArm:
| Соединение | Модель двигателя | Идентификатор TX (хост → двигатель) | Идентификатор RX (двигатель → хост) |
|---|---|---|---|
| J1 — вращение базы | DM-J4340p-2EC | 0x01 | 0x11 |
| J2 — шаг плеча | DM-J4340p-2EC | 0x02 | 0x12 |
| J3 — перекат через плечо | DM-J4340p-2EC | 0x03 | 0x13 |
| J4 — шаг локтя | DM-J4340-2EC | 0x04 | 0x14 |
| J5 — перекат локтями | DM-J4340-2EC | 0x05 | 0x15 |
| J6 — шаг запястья | DM-J4340-2EC | 0x06 | 0x16 |
| J7 — перекат запястьем | DM-J4310-2EC V1.1 | 0x07 | 0x17 |
| J8 — захват | DM-J4310-2EC V1.1 | 0x08 | 0x18 |
Идентификаторы уникальны для каждой CAN-шины, а не глобально. Бимануальная установка (две руки) использует вторую шину — can1 — с той же схемой идентификации.
можно отправить тестовые команды
Использовать cansend для низкоуровневого ввода в эксплуатацию. Заменять 001 с шестнадцатеричным идентификатором TX целевого соединения (например, 002 для J2).
## CAN FD commands (use when interface has "fd on") # Enable motor — motor holds position and accepts commands cansend can0 001##1FFFFFFFFFFFFFFFC # Disable motor — motor becomes free-wheeling cansend can0 001##1FFFFFFFFFFFFFFFD # Clear motor error — required before re-enabling after a fault cansend can0 001##1FFFFFFFFFFFFFFFB ## CAN 2.0 equivalents (use when interface is classic CAN, no fd on) cansend can0 001#FFFFFFFFFFFFFFFC # Enable cansend can0 001#FFFFFFFFFFFFFFFD # Disable cansend can0 001#FFFFFFFFFFFFFFFB # Clear error
##1 Синтаксис CAN FD, когда интерфейс был настроен с fd onи сингл # классический синтаксис для CAN 2.0. Смешение типов кадров на одной шине приведет к ошибкам шины.
Светодиодные индикаторы состояния
Каждый двигатель Damiao имеет один встроенный светодиод, видимый через окно корпуса:
| Светодиодный узор | Состояние | Требуется действие |
|---|---|---|
| Зеленый (постоянный) | Двигатель включен и готов | Нет — двигатель активен и принимает команды |
| Красный (постоянный) | Двигатель отключен (питание включено, не включено) | Отправьте команду включения, чтобы активировать двигатель. |
| Красный (мигающий) | Неисправность двигателя/состояние ошибки | Отправьте команду «Очистить ошибку», выясните причину, затем снова включите |
Распространенные причины неисправностей: перегрузка по току (уменьшите коэффициент усиления или нагрузку), перегрев (позволите охладить), ошибка энкодера (переподключите кабели), пониженное напряжение (питание ниже ~18 В в системе 24 В), отключение шины CAN (проверьте клеммы и проводку).
Предупреждения о флэш-записи
--flash флаг идет только в ОЗУ и не использует циклы флэш-памяти. Избегайте сценариев, которые неоднократно перепрошивают параметры двигателя.