Настройка программного обеспечения

Установка SDK, настройка драйвера SocketCAN, интеграция ROS2, настройка LeRobot и справочник по API Python. Все, от новой установки Ubuntu до работающей руки.

Перейти в раздел:

Шаг 1 — Установка SDK

Установка SDK

OpenArm SDK распространяется как roboticscenter Пакет Python. Он включает в себя openarm_can (библиотека низкоуровневого интерфейса CAN) и все вспомогательные утилиты.

Создайте виртуальную среду (рекомендуется)

python3 -m venv ~/.venvs/openarm
source ~/.venvs/openarm/bin/activate

Установите SDK

pip install roboticscenter

Проверьте установку

python3 -c "import openarm_can; print(openarm_can.__version__)"

Вы должны увидеть строку версии. Если вы видите ошибку импорта, см. Раздел устранения неполадок.

Установить из исходного кода (необязательно)

git clone https://github.com/reazon-research/openarm.git
cd openarm
pip install -e .
Шаг 2 — Настройка драйвера CAN

Настройка драйвера SocketCAN

OpenArm обменивается данными через шину CAN с использованием SocketCAN — подсистемы ядра Linux. Драйверы уже есть в ядре; вам просто нужно загрузить модули и вызвать интерфейс.

Загрузка модулей ядра

sudo modprobe can
sudo modprobe can_raw
sudo modprobe slcan   # for USB-serial CAN adapters (CANable)

Поднимите CAN-интерфейс

Для прилагаемого USB-адаптера CANable 2.0:

# Find the USB serial device (usually /dev/ttyACM0 or /dev/ttyUSB0)
ls /dev/ttyACM*

# Bring up CAN interface at 1 Mbps
sudo slcand -o -c -s8 /dev/ttyACM0 can0
sudo ip link set up can0

Убедитесь, что интерфейс работает

ip link show can0
# Expected output: can0: <NOARP,UP,LOWER_UP> mtu 16 ...

Сделать его постоянным при перезагрузках

Создайте службу systemd или добавьте в /etc/rc.local. См. Руководство по настройке SocketCAN для полного шаблона службы systemd.

Проверка связи CAN

# Install can-utils
sudo apt install can-utils -y

# Listen for CAN packets
candump can0

# In another terminal, power on the arm and look for motor heartbeats
Шаг 3 — Интеграция ROS2

Интеграция ROS2

OpenArm поставляется с openarm_ros2, полный пакет на основе ros2_control. Он поддерживает ложный аппаратный режим для тестирования без физической руки.

Установите ROS2 Humble (Ubuntu 22.04)

sudo apt update && sudo apt install software-properties-common curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | \
  sudo apt-key add -
sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" \
  > /etc/apt/sources.list.d/ros2.list'
sudo apt update
sudo apt install ros-humble-desktop ros-humble-ros2-control \
  ros-humble-ros2-controllers ros-humble-joint-state-publisher-gui -y

Клонировать и собрать openarm_ros2

mkdir -p ~/openarm_ws/src && cd ~/openarm_ws/src
git clone https://github.com/reazon-research/openarm_ros2.git
cd ~/openarm_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install

Запуск в ложном аппаратном режиме (рука не требуется)

source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true

Запуск на реальном оборудовании

ros2 launch openarm_ros2 openarm.launch.py \
  use_fake_hardware:=false \
  can_interface:=can0

Отправьте команду тестового движения

ros2 topic pub /joint_trajectory_controller/joint_trajectory \
  trajectory_msgs/msg/JointTrajectory \
  '{joint_names: ["joint1"], points: [{positions: [0.5], time_from_start: {sec: 2}}]}'

См. Руководство по управлению ROS2 для полной конфигурации контроллера, параметров запуска файла и настройки траектории.

Шаг 4 — Интеграция LeRobot

Интеграция ЛеРобота

LeRobot (от HuggingFace) — это основная платформа для сбора данных и обучения политике OpenArm. Он управляет записью эпизодов, форматированием набора данных и напрямую взаимодействует с ACT и Diffusion Policy.

Установить ЛеРобот

pip install lerobot

Настройте своего робота

Создайте файл конфигурации робота для OpenArm. LeRobot использует конфигурацию робота на основе YAML:

# ~/.lerobot/robots/openarm.yaml
robot_type: openarm
can_interface: can0
num_joints: 8
camera_names:
  - wrist_cam
  - overhead_cam

Запись набора данных

python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube"

Загрузить в HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place

См. Страница сбора данных для полного процесса записи эпизодов и проверки качества.

Шаг 5 — API Python

Краткое руководство по API Python

The openarm_can библиотека обеспечивает прямой низкоуровневый доступ ко всем 8 суставам через SocketCAN. Для базового управления не требуется ROS2.

Базовый совместный контроль

from openarm_can import OpenArm

# Connect to the arm
arm = OpenArm(can_interface="can0")
arm.connect()

# Enable all joints
arm.enable_all()

# Move joint 1 to 45 degrees (in radians: ~0.785)
arm.set_position(joint_id=1, position=0.785, kp=50, kd=1)

# Read current state
state = arm.get_state()
print(f"Joint positions: {state.positions}")
print(f"Joint velocities: {state.velocities}")
print(f"Joint torques: {state.torques}")

# Zero torque (safe shutdown)
arm.disable_all()
arm.disconnect()

МОЙ режим управления

from openarm_can import OpenArm, MITCommand

arm = OpenArm(can_interface="can0")
arm.connect()
arm.enable_all()

# Send a MIT control command: position + velocity + torque feedforward
cmd = MITCommand(
    joint_id=1,
    position=0.5,      # rad
    velocity=0.0,      # rad/s
    kp=80.0,           # position gain
    kd=2.0,            # velocity gain
    torque_ff=0.0      # feedforward torque (Nm)
)
arm.send_mit_command(cmd)

arm.disable_all()
arm.disconnect()

Чтение данных датчика в цикле

import time
from openarm_can import OpenArm

arm = OpenArm(can_interface="can0", control_rate_hz=500)
arm.connect()
arm.enable_all()

for _ in range(1000):  # 2 seconds at 500 Hz
    state = arm.get_state()
    print(state.positions)
    time.sleep(1 / 500)

arm.disable_all()
arm.disconnect()
Дополнительно — моделирование

Поддержка моделирования

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

Поддельное оборудование ROS2 (встроенное — без установки)

Самый быстрый способ протестировать программное обеспечение без использования физической руки. Состояние отражает реальный аппаратный интерфейс.

ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true

МуДжоКо

Калиброванная физическая модель. Идеально подходит для обучения политике и перехода от сим-карты к реальности.

pip install mujoco
# Clone the OpenArm MuJoCo model
git clone https://github.com/reazon-research/openarm_mujoco.git
# Run the default sim
python openarm_mujoco/examples/run_sim.py

NVIDIA Исаак Сим

Моделирование с ускорением на графическом процессоре для крупномасштабной генерации синтетических данных. Требуется графический процессор NVIDIA и лицензия Isaac Sim. Видеть статья о платформе, ориентированной на данные для получения подробной информации о конфигурации Исаака Сима.

Сим-к-реальному выравниванию — Имитационные модели OpenArm отражают кинематику, динамику и пределы срабатывания реального оборудования. Это означает, что вы можете обучить политику с помощью моделирования и развернуть ее непосредственно на реальном оборудовании с минимальной настройкой.

Поиск неисправностей

Топ-3 распространенных проблемы

Ошибка 1 CAN-интерфейс не найден: no such device can0

Интерфейс SocketCAN не работает. Почти всегда это происходит потому, что USB-CAN-адаптер не подключен или модули ядра не загружены.

Исправить:

# 1. Check if the USB adapter is detected
lsusb | grep -i "can\|serial"

# 2. Load the modules
sudo modprobe can && sudo modprobe can_raw && sudo modprobe slcan

# 3. Bring up the interface
sudo slcand -o -c -s8 /dev/ttyACM0 can0
sudo ip link set up can0

# 4. Verify
ip link show can0
Ошибка 2 Суставы не реагируют после arm.enable_all()

Двигатели не получают команды. Чаще всего возникает из-за неправильных идентификаторов CAN, кадра ошибки шины CAN или недостаточного питания.

Исправить:

# 1. Check for CAN error frames
candump can0 | grep -i "error"

# 2. Check power supply — arm requires 24V @ 150W minimum
# Voltage sag under load causes motor timeouts

# 3. Verify motor CAN IDs match your config
python3 -c "from openarm_can import OpenArm; a=OpenArm('can0'); a.scan_motors()"

# 4. Reset the arm (power cycle) and retry
Ошибка 3 Запуск ROS2 не удался: controller_manager not found

Пакеты ros2_control не установлены или рабочее пространство задано неправильно.

Исправить:

# 1. Install missing packages
sudo apt install ros-humble-ros2-control \
  ros-humble-ros2-controllers \
  ros-humble-joint-state-publisher-gui -y

# 2. Rebuild the workspace
cd ~/openarm_ws && colcon build --symlink-install

# 3. Source both ROS2 and your workspace (order matters)
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash

# 4. Retry launch
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true

Все еще застрял? Спросите на Форум OpenArm или проверьте существующие Проблемы с GitHub.

Программное обеспечение работает? Начните сбор данных.

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