Software-Setup

SDK-Installation, SocketCAN-Treiberkonfiguration, ROS2-Integration, LeRobot-Setup und Python-API-Referenz. Alles von einer frischen Ubuntu-Installation bis hin zu einem laufenden Arm.

Zu einem Abschnitt springen:

Schritt 1 – SDK-Installation

SDK-Installation

Das OpenArm SDK wird als verteilt roboticscenter Python-Paket. Es beinhaltet openarm_can (die Low-Level-CAN-Schnittstellenbibliothek) und alle unterstützenden Dienstprogramme.

Erstellen Sie eine virtuelle Umgebung (empfohlen)

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

Installieren Sie das SDK

pip install roboticscenter

Überprüfen Sie die Installation

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

Sie sollten eine Versionszeichenfolge sehen. Wenn Sie einen Importfehler sehen, lesen Sie die Abschnitt zur Fehlerbehebung.

Von der Quelle installieren (optional)

git clone https://github.com/reazon-research/openarm.git
cd openarm
pip install -e .
Schritt 2 – CAN-Treiber-Setup

SocketCAN-Treiber-Setup

OpenArm kommuniziert über den CAN-Bus mit SocketCAN – einem Linux-Kernel-Subsystem. Die Treiber sind bereits im Kernel; Sie müssen lediglich die Module laden und die Schnittstelle aufrufen.

Laden Sie Kernelmodule

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

Rufen Sie die CAN-Schnittstelle auf

Für den mitgelieferten CANable 2.0 USB-Adapter:

# 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

Stellen Sie sicher, dass die Schnittstelle aktiv ist

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

Sorgen Sie dafür, dass es über Neustarts hinweg dauerhaft bleibt

Erstellen Sie einen systemd-Dienst oder fügen Sie ihn hinzu /etc/rc.local. Siehe die SocketCAN-Setup-Anleitung für eine vollständige systemd-Dienstvorlage.

CAN-Kommunikation testen

# 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
Schritt 3 – ROS2-Integration

ROS2-Integration

OpenArm wird mit geliefert openarm_ros2, ein vollständiges ros2_control-basiertes Paket. Es unterstützt den Fake-Hardware-Modus zum Testen ohne den physischen Arm.

Installieren Sie 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

Klonen und erstellen Sie 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

Starten Sie im Fake-Hardware-Modus (kein Arm erforderlich)

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

Starten Sie mit echter Hardware

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

Senden Sie einen Testbewegungsbefehl

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

Siehe die ROS2-Steuerungshandbuch für vollständige Controller-Konfiguration, Startdateioptionen und Flugbahnoptimierung.

Schritt 4 – LeRobot-Integration

LeRobot-Integration

LeRobot (von HuggingFace) ist das primäre Datenerfassungs- und Richtlinienschulungs-Framework für OpenArm. Es übernimmt die Aufzeichnung von Episoden, die Formatierung von Datensätzen und ist direkt mit ACT und Diffusion Policy verbunden.

Installieren Sie LeRobot

pip install lerobot

Konfigurieren Sie Ihren Roboter

Erstellen Sie eine Roboterkonfigurationsdatei für OpenArm. LeRobot verwendet eine YAML-basierte Roboterkonfiguration:

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

Zeichnen Sie einen Datensatz auf

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"

Auf HuggingFace Hub hochladen

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

Siehe die Seite zur Datenerfassung für den gesamten Episodenaufzeichnungs-Workflow und Qualitätsprüfungen.

Schritt 5 – Python-API

Python-API-Schnellstart

Der openarm_can Die Bibliothek bietet direkten Low-Level-Zugriff auf alle 8 Gelenke über SocketCAN. Für die Grundsteuerung ist kein ROS2 erforderlich.

Grundlegende gemeinsame Kontrolle

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()

MEIN Steuermodus

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()

Sensordaten in einer Schleife auslesen

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()
Optional – Simulation

Simulationsunterstützung

OpenArm unterstützt drei Simulationsumgebungen. Alle teilen identische Zustandsdefinitionen und Aktionsräume mit der realen Hardware und ermöglichen so eine Übertragung von der Simulation zur Realität.

ROS2 Fake Hardware (integriert – keine Installation)

Der schnellste Weg, Software ohne den physischen Arm zu testen. Der Status spiegelt die reale Hardwareschnittstelle wider.

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

MuJoCo

Kalibriertes Physikmodell. Ideal für Richtlinienschulungen und Simulation-zu-Realität-Übertragung.

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 Isaac Sim

GPU-beschleunigte Simulation für die Generierung synthetischer Daten in großem Maßstab. Erfordert eine NVIDIA-GPU und eine Isaac-Sim-Lizenz. Sehen Der Artikel zur datenzentrierten Plattform für Isaac Sim-Konfigurationsdetails.

Sim-zu-Real-Ausrichtung — Die Simulationsmodelle von OpenArm spiegeln reale Hardware-Kinematik, Dynamik und Betätigungsgrenzen wider. Dies bedeutet, dass Sie eine Richtlinie in der Simulation trainieren und sie mit minimalem Tuning direkt auf realer Hardware bereitstellen können.

Fehlerbehebung

Die drei häufigsten Probleme

Fehler 1 CAN-Schnittstelle nicht gefunden: no such device can0

Die SocketCAN-Schnittstelle ist nicht aktiv. Dies liegt fast immer daran, dass der USB-CAN-Adapter nicht angeschlossen ist oder die Kernelmodule nicht geladen sind.

Fix:

# 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
Fehler 2 Gelenke reagieren danach nicht mehr arm.enable_all()

Motoren empfangen keine Befehle. Die häufigste Ursache sind falsche CAN-IDs, ein CAN-Bus-Fehlerrahmen oder eine unzureichende Stromversorgung.

Fix:

# 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
Fehler 3 Der Start von ROS2 schlägt fehl: controller_manager not found

Die ros2_control-Pakete sind nicht installiert oder der Arbeitsbereich ist nicht korrekt bezogen.

Fix:

# 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

Stecken Sie immer noch fest? Fragen Sie auf der OpenArm-Forum oder vorhandene prüfen GitHub-Probleme.

Funktioniert die Software? Beginnen Sie mit der Datenerfassung.

Sobald sich der Arm bewegt, erfolgt im nächsten Schritt die Teleoperation und Datensatzaufzeichnung.