reachy_mini_danceml / docs /CHOREOGRAPHY_GUIDE.md
Boopster's picture
docs: enhance choreography guide with detailed movement parameters and remove outdated voice control plan.
d86bdca

Reachy Mini Choreography Guide

This guide provides physics rules and artistic principles for creating custom movements. Referenced by get_choreography_guide tool and used when creating sequences via execute_sequence.

1. Physical Constraints

Head Movement

Axis Range Sign Convention
Roll (Tilt L/R) ±45° Positive = Tilt Right
Pitch (Up/Down) ±45° Negative = Look UP, Positive = Look DOWN
Yaw (Turn L/R) ±65° Positive = Robot's Left

Body Rotation

Axis Range Notes
body_yaw ±160° Full rotation works! 170° = facing away

Antennas

Parameter Range Notes
Both ±90° 0° = vertical/neutral
Individual ±90° Use left_antenna_amplitude / right_antenna_amplitude in generate_motion

Expressiveness:

  • Forward (+): Alert, interested, angry (if rigid)
  • Backward (-): Sad, scared, aerodynamic
  • Asymmetric: Confused, playful (one up, one down)

2. Timing & Smoothness

Speed Duration Use Case
Fast 0.2-0.3s Small twitches, excitement
Normal 0.5-1.0s Looking around
Slow 1.5s+ Breathing, sad movements

Rules:

  • Use minimum-jerk / S-curve easing for smooth motion
  • Head motions ≤ 4 Hz overall
  • Antenna flicks ≤ 0.12s each
  • Design for 80% of limits unless user asks for "big/extreme"

Velocity Limits (Soft)

Component Max Speed
Head yaw 120°/s
Head pitch 90°/s
Head roll 90°/s
Body yaw 90°/s

3. Using generate_motion

For continuous procedural animations, use generate_motion with these motion types:

Type Best For Key Parameters
nod Yes/agreement pitch_amplitude=12-20°, tempo=1.5-3.0 Hz
shake No/disagreement yaw_amplitude=14-22°, tempo=1.5-2.5 Hz
sway / groove Dancing yaw_amplitude=10-16°, roll_amplitude=6-12°, tempo=0.8-1.6 Hz
spiral / figure8 Playful loops yaw=16-24°, pitch=8-14°, tempo=0.6-1.2 Hz
bounce Energetic z_offset=6-12mm, tempo=1.3-2.2 Hz
peek Peek-a-boo style Duck + peek side to side
dizzy Wobbly circles Small yaw=18°, pitch=8°, roll=6-10°

Advanced Parameters

  • Drift: z_drift=0.02 for rising "snake charmer" effect
  • Start offset: z_start_offset=-0.02 + z_drift=0.02 for crouch→rise
  • Antenna control: left_antenna_amplitude, right_antenna_amplitude for individual control
  • Body swivel: body_yaw_amplitude for dancing turns

4. Choreography Patterns

"The Breath" (Idle/Calm)

Gentle, slow pitch movement with slight antenna swaying.

goto_pose(pitch=5, duration=2.0)   # Inhale/Up
goto_pose(pitch=0, duration=2.0)   # Exhale

"The Scan" (Searching)

Head stays level (pitch 0), yaw sweeps, antennas alert.

goto_pose(yaw=-30, duration=1.0)  # Look left
goto_pose(yaw=30, duration=1.0)   # Look right

"The Jiggle" (Excitement)

Use generate_motion for rapid oscillation:

generate_motion(motion_type="groove", roll_amplitude=8, tempo=2.0, duration=1.0)

5. Safety Rules

  1. Collision avoidance: If pitch < -20° (looking down hard), keep antennas < 20°
  2. Speed limits: Required speed ≈ Δangle / duration. If exceeding limits, increase duration
  3. Coupling: If body_yaw_amplitude > 20°, halve head yaw amplitude
  4. Clamp to hard caps: System will scale amplitudes proportionally if needed