| 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
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
outputs:
- joint_state
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
- image_right
- joint_state
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
outputs:
- odometry
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
outputs:
- action
VLA Pipeline with Robot Arm
nodes:
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/100
outputs:
- image
- id: microphone
build: pip install dora-microphone
path: dora-microphone
inputs:
tick: dora/timer/millis/100
outputs:
- audio
- id: whisper
build: pip install dora-distil-whisper
path: dora-distil-whisper
inputs:
input: microphone/audio
outputs:
- text
- id: policy
build: pip install dora-rdt-1b
path: dora-rdt-1b
inputs:
image: camera/image
instruction: whisper/text
outputs:
- action
- id: arm
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: policy/action
outputs:
- joint_state
- 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:
- 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
- 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
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
- 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
joint_positions = np.array([0.0, -0.5, 0.0, 1.0, 0.0, 0.5, 0.0], dtype=np.float32)
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)
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:
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
- id: yolo
build: pip install dora-yolo
path: dora-yolo
inputs:
image: camera/image
outputs:
- bbox
- id: navigator
path: navigator.py
inputs:
detections: yolo/bbox
outputs:
- velocity
- id: ugv
build: pip install dora-ugv
path: dora-ugv
inputs:
velocity: navigator/velocity
outputs:
- odometry
- 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"
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