# Hub Robot

> Robot Control Nodes

- Skill: `zhanghandong/hub-robot` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zhanghandong/hub-robot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhanghandong/hub-robot/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ZhangHanDong (https://skillmd.com/u/zhanghandong)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zhanghandong/hub-robot

---


# 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:
```bash
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

```yaml
- 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

```yaml
- 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

```yaml
- 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

```yaml
- 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

```yaml
- 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

```yaml
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

```yaml
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

```python
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

```python
if event["type"] == "INPUT":
    joint_state = event["value"].to_numpy()
    print(f"Joint positions: {joint_state}")
```

## Pose Data Format (for end-effector)

```python
# 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

```yaml
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

```yaml
- 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

