name: hub-robot description: "Use for robot control nodes in dora. Triggers on: dora-piper, dora-reachy2, dora-ugv, dora-kit-car, dora-rdt-1b, Piper, Reachy, UGV, robot arm, chassis, VLA, robot control, Agilex, joint control, kinematics, teleoperation, 机械臂, 底盘, 机器人控制, 遥操作" globs: ["/dataflow.yml", "/dataflow.yaml"] source: "https://github.com/dora-rs/dora-hub"
Robot Control Nodes
Robot arms, chassis, and vision-language-action models
Available Robot Nodes
| Node | Install | Description | Type |
|---|---|---|---|
| dora-piper | pip install dora-piper |
Agilex Piper arm | Arm |
| dora-reachy2 | pip install dora-reachy2 |
Pollen Reachy 2 humanoid | Humanoid |
| dora-ugv | pip install dora-ugv |
Agilex UGV chassis | Chassis |
| dora-kit-car | pip install dora-kit-car |
Open-source chassis | Chassis |
| dora-rdt-1b | pip install dora-rdt-1b |
Robotic Diffusion Transformer | VLA |
Robot Arm Nodes
dora-piper
Agilex Piper robot arm control.
Prerequisites
Install Agilex Piper SDK:
git clone https://github.com/agilexrobotics/piper_sdk
cd piper_sdk
# Follow setup and installation instructions
Ensure CAN bus is activated and leader arms are not connected.
YAML Configuration
- id: piper
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: policy/positions # Float32Array joint targets
outputs:
- joint_state # Current joint positions
dora-reachy2
Pollen Robotics Reachy 2 humanoid robot.
YAML Configuration
- id: reachy
build: pip install dora-reachy2
path: dora-reachy2
inputs:
command: control/command
outputs:
- image_left # Left camera image
- image_right # Right camera image
- joint_state # Joint positions
Chassis Nodes
dora-ugv
Agilex UGV (Unmanned Ground Vehicle) control.
YAML Configuration
- id: ugv
build: pip install dora-ugv
path: dora-ugv
inputs:
velocity: control/velocity # [linear_x, angular_z]
outputs:
- odometry # Position and velocity feedback
dora-kit-car
Open-source educational chassis.
YAML Configuration
- id: car
build: pip install dora-kit-car
path: dora-kit-car
inputs:
command: control/command
Vision-Language-Action (VLA)
dora-rdt-1b
Robotic Diffusion Transformer for policy inference from images and language.
YAML Configuration
- id: policy
build: pip install dora-rdt-1b
path: dora-rdt-1b
inputs:
image: camera/image
instruction: input/text # Natural language instruction
outputs:
- action # Joint positions/velocities
VLA Pipeline with Robot Arm
nodes:
# Camera
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/100
outputs:
- image
# Microphone for voice commands
- id: microphone
build: pip install dora-microphone
path: dora-microphone
inputs:
tick: dora/timer/millis/100
outputs:
- audio
# Speech to text
- id: whisper
build: pip install dora-distil-whisper
path: dora-distil-whisper
inputs:
input: microphone/audio
outputs:
- text
# VLA policy
- id: policy
build: pip install dora-rdt-1b
path: dora-rdt-1b
inputs:
image: camera/image
instruction: whisper/text
outputs:
- action
# Robot arm
- id: arm
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: policy/action
outputs:
- joint_state
# Visualization
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
image: camera/image
joint_state:
source: arm/joint_state
metadata:
primitive: "jointstate"
Teleoperation Pipeline
nodes:
# Leader arm (human operated)
- id: leader
build: pip install dora-piper
path: dora-piper
inputs:
tick: dora/timer/millis/20
outputs:
- joint_state
env:
MODE: leader
CAN_INTERFACE: can0
# Follower arm (robot)
- id: follower
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: leader/joint_state
outputs:
- joint_state
env:
MODE: follower
CAN_INTERFACE: can1
# Camera for recording
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
# Recording for imitation learning
- id: recorder
build: pip install llama-factory-recorder
path: llama-factory-recorder
inputs:
image_right: camera/image
ground_truth: leader/joint_state
outputs:
- text
Joint State Data Format
Float32Array for Joint Positions
import pyarrow as pa
import numpy as np
# 7-DOF arm joint positions (radians)
joint_positions = np.array([0.0, -0.5, 0.0, 1.0, 0.0, 0.5, 0.0], dtype=np.float32)
# Send joint command
node.send_output("joint_positions", pa.array(joint_positions), {
"num_joints": 7,
"primitive": "jointstate"
})
Receiving Joint State
if event["type"] == "INPUT":
joint_state = event["value"].to_numpy()
print(f"Joint positions: {joint_state}")
Pose Data Format (for end-effector)
# 7 values: [x, y, z, qx, qy, qz, qw]
pose = np.array([0.5, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)
node.send_output("pose", pa.array(pose), {"primitive": "pose"})
Mobile Robot Pipeline
nodes:
# Camera
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
# Object detection
- id: yolo
build: pip install dora-yolo
path: dora-yolo
inputs:
image: camera/image
outputs:
- bbox
# Navigation control (custom node)
- id: navigator
path: navigator.py
inputs:
detections: yolo/bbox
outputs:
- velocity
# Chassis
- id: ugv
build: pip install dora-ugv
path: dora-ugv
inputs:
velocity: navigator/velocity
outputs:
- odometry
# Visualization
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
image: camera/image
detections: yolo/bbox
URDF Visualization with Rerun
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
jointstate_piper: arm/joint_state
env:
piper_urdf: /path/to/piper.urdf
piper_transform: "0 0.3 0" # x y z offset
Note: URDF file paths in the URDF are relative to the dataflow working directory.
Related Skills
- hub-camera - Camera input for robot vision
- hub-detection - Object detection for manipulation
- hub-recording - Data recording for imitation learning
- data-pipeline - LeRobot recording and replay