🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Reachy Mini

by @afalk42

Control a Reachy Mini robot (by Pollen Robotics / Hugging Face) via its REST API and SSH. Use for any request involving the Reachy Mini robot β€” moving the head, body, or antennas; playing emotions or dances; capturing camera snapshots; adjusting volume; managing apps; checking robot status; or any physical robot interaction. The robot has a 6-DoF head, 360Β° body rotation, two animated antennas, a wide-angle camera (with non-disruptive WebRTC snapshot), 4-mic array, and speaker.

Versionv1.1.0
Downloads2,441
Installs3
Stars⭐ 1
TERMINAL
clawhub install reachy-mini

πŸ“– About This Skill


name: reachy-mini description: Control a Reachy Mini robot (by Pollen Robotics / Hugging Face) via its REST API and SSH. Use for any request involving the Reachy Mini robot β€” moving the head, body, or antennas; playing emotions or dances; capturing camera snapshots; adjusting volume; managing apps; checking robot status; or any physical robot interaction. The robot has a 6-DoF head, 360Β° body rotation, two animated antennas, a wide-angle camera (with non-disruptive WebRTC snapshot), 4-mic array, and speaker.

Reachy Mini Robot Control

Quick Start

Use the CLI script or curl to control the robot. The script lives at:

~/clawd/skills/reachy-mini/scripts/reachy.sh

Set the robot IP via REACHY_HOST env var or --host flag. Default: 192.168.8.17.

Common Commands

reachy.sh status                    # Daemon status, version, IP
reachy.sh state                     # Full robot state
reachy.sh wake-up                   # Wake the robot
reachy.sh sleep                     # Put to sleep
reachy.sh snap                      # Camera snapshot β†’ /tmp/reachy_snap.jpg
reachy.sh snap /path/to/photo.jpg   # Snapshot to custom path
reachy.sh play-emotion cheerful1    # Play an emotion
reachy.sh play-dance groovy_sway_and_roll  # Play a dance
reachy.sh goto --head 0.2,0,0 --duration 1.5  # Nod down
reachy.sh volume-set 70             # Set speaker volume
reachy.sh emotions                  # List all emotions
reachy.sh dances                    # List all dances

Environment

| Variable | Default | Description | |----------|---------|-------------| | REACHY_HOST | 192.168.8.17 | Robot IP address | | REACHY_PORT | 8000 | REST API port | | REACHY_SSH_USER | pollen | SSH username (for snap command) | | REACHY_SSH_PASS | root | SSH password (for snap command, uses sshpass) |

Movement Guide

Head Control (6 DoF)

The head accepts pitch, yaw, roll in radians:
  • Pitch (look up/down): -0.5 (up) to 0.5 (down)
  • Yaw (look left/right): -0.8 (right) to 0.8 (left)
  • Roll (tilt sideways): -0.5 to 0.5
  • # Look up
    reachy.sh goto --head -0.3,0,0 --duration 1.0

    Look left

    reachy.sh goto --head 0,0.4,0 --duration 1.0

    Tilt head right, look slightly up

    reachy.sh goto --head -0.1,0,-0.3 --duration 1.5

    Return to neutral

    reachy.sh goto --head 0,0,0 --duration 1.0

    Body Rotation (360Β°)

    Body yaw in radians. 0 = forward, positive = left, negative = right.
    reachy.sh goto --body 1.57 --duration 2.0   # Turn 90Β° left
    reachy.sh goto --body -1.57 --duration 2.0  # Turn 90Β° right
    reachy.sh goto --body 0 --duration 2.0      # Face forward
    

    Antennas

    Two antennas [left, right] in radians. Range ~-0.5 to 0.5.
    reachy.sh goto --antennas 0.4,0.4 --duration 0.5    # Both up
    reachy.sh goto --antennas -0.3,-0.3 --duration 0.5   # Both down
    reachy.sh goto --antennas 0.4,-0.4 --duration 0.5    # Asymmetric
    

    Combined Movements

    # Look left and turn body left with antennas up
    reachy.sh goto --head 0,0.3,0 --body 0.5 --antennas 0.4,0.4 --duration 2.0
    

    Interpolation Modes

    Use --interp with goto:
  • minjerk β€” Smooth, natural (default)
  • linear β€” Constant speed
  • ease β€” Ease in/out
  • cartoon β€” Bouncy, exaggerated
  • Emotions & Dances

    Playing Emotions

    80+ pre-recorded expressive animations. Select contextually appropriate ones:
    reachy.sh play-emotion curious1       # Curious look
    reachy.sh play-emotion cheerful1      # Happy expression
    reachy.sh play-emotion surprised1     # Surprise reaction
    reachy.sh play-emotion thoughtful1    # Thinking pose
    reachy.sh play-emotion welcoming1     # Greeting gesture
    reachy.sh play-emotion yes1           # Nodding yes
    reachy.sh play-emotion no1            # Shaking no
    

    Playing Dances

    19 dance moves, great for fun or celebration:
    reachy.sh play-dance groovy_sway_and_roll
    reachy.sh play-dance chicken_peck
    reachy.sh play-dance dizzy_spin
    

    Full Lists

    Run reachy.sh emotions or reachy.sh dances to see all available moves.

    Motor Modes

    Before movement, motors must be enabled. Check with reachy.sh motors.

    reachy.sh motors-enable     # Enable (needed for movement commands)
    reachy.sh motors-disable    # Disable (robot goes limp)
    reachy.sh motors-gravity    # Gravity compensation (manually pose the robot)
    

    Volume Control

    reachy.sh volume            # Current speaker volume
    reachy.sh volume-set 50     # Set speaker to 50%
    reachy.sh volume-test       # Play test sound
    reachy.sh mic-volume        # Microphone level
    reachy.sh mic-volume-set 80 # Set microphone to 80%
    

    App Management

    Reachy Mini runs HuggingFace Space apps. Manage them via:

    reachy.sh apps              # List all available apps
    reachy.sh apps-installed    # Installed apps only
    reachy.sh app-status        # What's running now
    reachy.sh app-start NAME    # Start an app
    reachy.sh app-stop          # Stop current app
    

    Important: Only one app runs at a time. Starting a new app stops the current one. Apps may take exclusive control of the robot β€” stop the running app before sending manual movement commands if the robot doesn't respond.

    Camera Snapshots

    Capture JPEG photos from the robot's camera (IMX708 wide-angle) via WebRTC β€” non-disruptive to the running daemon.

    reachy.sh snap                        # Save to /tmp/reachy_snap.jpg
    reachy.sh snap /path/to/output.jpg    # Custom output path
    

    Requirements: SSH access to the robot (uses sshpass + REACHY_SSH_PASS env var, default: root).

    How it works: Connects to the daemon's WebRTC signalling server (port 8443) using GStreamer's webrtcsrc plugin on the robot, captures one H264-decoded frame, and saves as JPEG. No daemon restart, no motor disruption.

    Note: The robot must be awake (head up) for a useful image. If asleep, the camera faces into the body. Run reachy.sh wake-up first.

    Audio Sensing

    reachy.sh doa               # Direction of Arrival from mic array
    
    Returns angle in radians (0=left, Ο€/2=front, Ο€=right) and speech detection boolean.

    Contextual Reactions (Clawdbot Integration)

    Use reachy-react.sh to trigger contextual robot behaviors from heartbeats, cron jobs, or session responses.

    ~/clawd/skills/reachy-mini/scripts/reachy-react.sh
    

    Reactions

    reachy-react.sh ack           # Nod acknowledgment (received a request)
    reachy-react.sh success       # Cheerful emotion (task done)
    reachy-react.sh alert         # Surprised + antennas up (urgent email, alert)
    reachy-react.sh remind        # Welcoming/curious (meeting reminder, to-do)
    reachy-react.sh idle          # Subtle animation (heartbeat presence)
    reachy-react.sh morning       # Wake up + greeting (morning briefing)
    reachy-react.sh goodnight     # Sleepy emotion + sleep (night mode)
    reachy-react.sh patrol        # Camera snapshot, prints image path
    reachy-react.sh doa-track     # Turn head toward detected sound source
    reachy-react.sh celebrate     # Random dance (fun moments)
    

    Pass --bg to run in background (non-blocking).

    Built-in Behaviors

  • Quiet hours (22:00–06:29 ET): All reactions except morning, goodnight, and patrol are silently skipped.
  • Auto-wake: Reactions ensure the robot is awake before acting (starts daemon + wakes if needed).
  • Fault-tolerant: If robot is unreachable, reactions exit cleanly without errors.
  • Integration Points

    | Trigger | Reaction | Notes | |---------|----------|-------| | Morning briefing cron (6:30 AM) | morning | Robot wakes up and greets | | Goodnight cron (10:00 PM) | goodnight | Robot plays sleepy emotion, goes to sleep | | Heartbeat (periodic) | idle | Subtle head tilt, antenna wave, or look-around | | Heartbeat (~1 in 4) | doa-track | Checks for nearby speech, turns toward it | | Heartbeat (~1 in 6) | patrol | Camera snapshot for room awareness | | Important unread email | alert | Antennas up + surprised emotion | | Meeting <2h away | remind | Welcoming/curious emotion | | Request from Alexander | ack | Quick head nod | | Task completed | success | Random cheerful/happy emotion | | Good news or celebration | celebrate | Random dance move |

    DOA (Direction of Arrival) Tracking

    The doa-track reaction uses the robot's 4-mic array to detect speech direction and turn the head toward the speaker. The DOA angle (0=left, Ο€/2=front, Ο€=right) is mapped to head yaw. Only triggers when speech is actively detected.

    Camera Patrol

    The patrol reaction captures a snapshot and prints the image path. Use this during heartbeats to check the room periodically. Combine with image analysis to detect activity or changes.

    Direct API Access

    For anything not covered by the CLI, use curl or the raw command:

    # Via raw command
    reachy.sh raw GET /api/state/full
    reachy.sh raw POST /api/move/goto '{"duration":1.0,"head_pose":{"pitch":0.2,"yaw":0,"roll":0}}'

    Via curl directly

    curl -s http://192.168.8.17:8000/api/state/full | jq curl -s -X POST -H "Content-Type: application/json" \ -d '{"duration":1.5,"head_pose":{"pitch":0,"yaw":0.3,"roll":0}}' \ http://192.168.8.17:8000/api/move/goto

    Reference

    For the complete API endpoint list, schemas (GotoModelRequest, FullBodyTarget, XYZRPYPose), and full emotion/dance catalogs, see references/api-reference.md.

    Troubleshooting

  • Robot doesn't move: Check reachy.sh motors β€” must be enabled. Run reachy.sh motors-enable.
  • No response: Check reachy.sh status. State should be running. If not, run reachy.sh reboot-daemon.
  • Movements ignored: An app may have exclusive control. Run reachy.sh app-stop first.
  • Network unreachable: Verify the robot IP with ping $REACHY_HOST. Check reachy.sh wifi-status.
  • Snap shows black image: Robot is likely asleep (head down). Run reachy.sh wake-up first.
  • Snap fails with SSH error: Ensure sshpass is installed and REACHY_SSH_PASS is set correctly.
  • πŸ’‘ Examples

    Use the CLI script or curl to control the robot. The script lives at:

    ~/clawd/skills/reachy-mini/scripts/reachy.sh
    

    Set the robot IP via REACHY_HOST env var or --host flag. Default: 192.168.8.17.

    Common Commands

    reachy.sh status                    # Daemon status, version, IP
    reachy.sh state                     # Full robot state
    reachy.sh wake-up                   # Wake the robot
    reachy.sh sleep                     # Put to sleep
    reachy.sh snap                      # Camera snapshot β†’ /tmp/reachy_snap.jpg
    reachy.sh snap /path/to/photo.jpg   # Snapshot to custom path
    reachy.sh play-emotion cheerful1    # Play an emotion
    reachy.sh play-dance groovy_sway_and_roll  # Play a dance
    reachy.sh goto --head 0.2,0,0 --duration 1.5  # Nod down
    reachy.sh volume-set 70             # Set speaker volume
    reachy.sh emotions                  # List all emotions
    reachy.sh dances                    # List all dances
    

    πŸ“‹ Tips & Best Practices

  • Robot doesn't move: Check reachy.sh motors β€” must be enabled. Run reachy.sh motors-enable.
  • No response: Check reachy.sh status. State should be running. If not, run reachy.sh reboot-daemon.
  • Movements ignored: An app may have exclusive control. Run reachy.sh app-stop first.
  • Network unreachable: Verify the robot IP with ping $REACHY_HOST. Check reachy.sh wifi-status.
  • Snap shows black image: Robot is likely asleep (head down). Run reachy.sh wake-up first.
  • Snap fails with SSH error: Ensure sshpass is installed and REACHY_SSH_PASS is set correctly.