RynnMotion

February 17, 2026 · View on GitHub

A framework aiming to bridge fast robot prototyping, predefined motion promitives, heterogeneous teleoperation, data collection, and flexible deployment across diverse robot platforms.

License C++20 Python 3.13+ Version MuJoCo 3.5.0 Pinocchio 3.7.0

Quick StartFeaturesExamplesArchitectureDocsCommunity


🚀 Quick Start

# 1. Install dependencies (one-time, 30-60 min)
sudo ./scripts/setup_dependencies.sh  # Linux
# OR
./scripts/setup_dependencies.sh       # macOS (no sudo)

# 2. Build
mkdir build && cd build
cmake ..
make -j$(nproc)

# 3. Run your first simulation
./mujocoExe fr3 ui
./mujocoExe ur5e pickplace

See detailed guide: Installation Documentation

Option 2: Docker (Experimental - Untested)

⚠️ Note: Docker setup has not been fully tested. For production use, please use native installation above.

# Clone repository
git clone https://github.com/alibaba-damo-academy/RynnMotion.git
cd RynnMotion

# Build and run Docker container
./scripts/docker-build.sh
./scripts/docker-run.sh

# Inside container: build
mkdir build && cd build
cmake .. && make -j$(nproc)
./mujocoExe fr3 ui

See detailed guide: Docker Setup (experimental)


Prerequisites

  • Ubuntu 22.04+ or macOS 13+
  • Internet connection

Quick Setup

# 1. Clone repository
git clone https://github.com/alibaba-damo-academy/RynnMotion.git
cd RynnMotion

# 2. Install dependencies
sudo ./scripts/setup_dependencies.sh  # Linux
# OR
./scripts/setup_dependencies.sh       # macOS (no sudo)

# 3. Build RynnMotion
mkdir build && cd build
cmake ..
make -j$(nproc)

# 4. Install Python package (optional)
cd ../python
pip install -e .

# 5. Test it works!
./build/mujocoExe fr3 1

What Gets Installed

Dependencies: Eigen (≥3.3.0), Boost (≥1.65), Pinocchio (v3.7.0), MuJoCo (3.3.5), yaml-cpp, qpOASES, LCM, FCL, Ruckig (v0.15.3), OpenCV, nlohmann/json

Installation locations: /usr/local/ (Linux/macOS)

Troubleshooting

See comprehensive Installation Guide for:

  • Platform-specific instructions
  • Manual dependency installation
  • Common errors and solutions
  • Verification steps
🐳 Docker Installation (Experimental)

⚠️ Experimental Status: Docker setup has not been fully tested. For production use, please use native installation.

Quick Setup

# 1. Build Docker image
./scripts/docker-build.sh

# 2. Run container
./scripts/docker-run.sh

# 3. Build inside container
mkdir build && cd build
cmake .. && make -j$(nproc)

# 4. Test
./mujocoExe fr3 ui

🎬 Demos & Features

1. Single-Arm Robot Control

OSC-based trajectory tracking with real-time visualization:

Single-Arm Robot Control

High-performance operational space control with MuJoCo simulation. Track complex trajectories with sub-millimeter precision.

# Run single-arm demo
cd build
./mujocoExe fr3 ui       # FR3 robot with interactive UI
./mujocoExe ur5e ui      # UR5e robot with interactive UI

2. Dual-Arm Coordination

Synchronized dual-arm control with independent OSC controllers:

Dual-Arm Coordination

Coordinate two robot arms seamlessly. Each arm runs independent OSC with nullspace optimization for redundancy resolution.

# Run dual-arm demo
./mujocoExe dual_fr3 ui      # Dual FR3 with interactive UI
./mujocoExe dual_ur5e ui     # Dual UR5e with interactive UI
./mujocoExe piper ui         # Piper with interactive UI

3. Pick-and-Place Automation

State machine-based object manipulation with dual-arm robots:

Pick-and-Place Demo

Fully automated pick-and-place pipeline with visual feedback. FSM handles approach, grasp, transfer, and release phases.

# Run pick-and-place demo
./mujocoExe dual_fr3 pickplace

4. Multi-Robot Teleoperation

1 Master → 4 Slave Robots in real-time teleoperation:

Multi-Robot Teleoperation

One SO101 master arm controlling 4 different slave robots (FR3, UR5e, Piper, RM75) simultaneously.

cd robots/RynnLeRobot
./setup_env.sh && source venv/bin/activate
multi-teleop -d

5. Data Recording

Record simulation data for imitation learning and analysis:

Record joint states, end-effector poses, actions, and video during simulation. Data is saved in LeRobot-compatible format for training.

Configuration

Edit config/mujoco.yaml:

recorder:
  data_format: "auto"      # "auto", "parquet", "hdf5", or "none"
  record_video: true       # Record camera video
  video_codec: "h264"      # "h264" or "av1"
  crf: 23                  # Video quality (lower = better, 18-28 typical)
  chunks_size: 1000        # Frames per data chunk
FormatDescriptionDependency
autoAuto-detect best available (Parquet → HDF5 → None)-
parquetApache Parquet (recommended for ML)libarrow-dev, libparquet-dev
hdf5HDF5 formatlibhdf5-dev
noneDisable data recording (video only if enabled)-

Recording Data

# Run simulation - press 'R' to start/stop recording
./build/mujocoExe fr3 ui

# Keyboard controls:
#   R - Start/Stop recording episode
#   N - Start new episode (auto-saves current)
#   ESC - Exit (auto-saves if recording)

Output Location

Data is saved to record/ directory:

record/
└── mj_YYYYMMDD_HHMM/           # Session folder (auto-generated)
    ├── meta/
    │   ├── info.json           # Dataset metadata
    │   ├── episodes.jsonl      # Episode index
    │   └── tasks.jsonl         # Task descriptions
    ├── data/
    │   ├── chunk-000/
    │   │   └── episode_000000.parquet  # Joint states, actions, timestamps
    │   └── chunk-001/
    │       └── ...
    └── videos/
        ├── chunk-000/
        │   └── episode_000000/
        │       └── camera_0.mp4        # Camera recordings
        └── ...

Recorded Features

FeatureShapeDescription
observation.state(mdof,)Joint positions
observation.velocity(mdof,)Joint velocities
action(mdof,)Commanded joint positions
observation.ee_pos(num_ee * 3,)End-effector positions
observation.ee_quat(num_ee * 4,)End-effector orientations
timestampscalarSimulation time
frame_indexscalarFrame number in episode

Optional Dependencies

Parquet support requires Apache Arrow (auto-detected at build time):

# Ubuntu/Debian
wget -q https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb -O /tmp/arrow.deb
sudo apt install -y /tmp/arrow.deb && sudo apt update
sudo apt install -y libarrow-dev libparquet-dev

# macOS
brew install apache-arrow

# Verify detection
cd build && cmake .. | grep -i parquet
# Output: -- Parquet recording support: ENABLED (auto-detected)