The Problem

Robotic teams need a single repository that bundles model appearance, motion policies, and environment maps for the 22‑DoF crab robot Jumper. Existing toolchains are fragmented across separate projects, making it hard to keep hardware, learning, and deployment in sync.

What This Does

jumper is the AI toolkit that ties those pieces together.

  • Python core – controller/__main__.py launches the CLI, loads the robot definition (assets/jumper/jumper.xml) and motor configuration (assets/jumper/motor/motor_config.yaml), and dispatches tasks.
  • Rust FSM – deploy/fsm/src/lib.rs implements a finite‑state machine that drives runtime behaviour; it is compiled as a library referenced by the Python side.
  • Task libraries – tasks/jumper/five_foot/deploy/lib.rs is a Rust module that packages motion primitives into a deployable .app.
  • Build & CI – pyproject.toml pulls Python dependencies; deploy/fsm/Cargo.toml pulls Rust dependencies; Dockerfiles in deploy/convert and deploy/fsm enable image builds for conversion and FSM runtime.

How It Is Wired

  1. Entry Point – python -m controller runs controller/__main__.py.
  2. __main__ parses sys.argv and imports tasks modules.
  3. For deployment, it imports the Rust library via ctypes or cffi: import tasks.jumper.five_foot.deploy.lib.
  4. tasks in turn calls into the FSM: import deploy.fsm.src.lib.
  5. deploy.fsm.src.lib loads its own Rust‑compiled binary (libfsm.so) and executes state transitions, writing logs to out/ and generating a .app bundle in deploy/.
  6. The process ends by writing the bundle and exiting; no network traffic is emitted unless ROS topics are explicitly enabled (not shown in the source tree).

The call chain is linear: __main__ → tasks/.../lib → deploy.fsm.src.lib → OS file writes. The only external effect is filesystem I/O; the code never opens sockets or writes to a database.

How To Use It

# 1. Clone
git clone https://github.com/moses-y/jumper

# 2. Install Python deps (uv or pip)
uv pip install -e .

# 3. Build Rust components
cd deploy/fsm
cargo build --release

# 4. Build Docker image for conversion
docker build -t jumper/convert -f deploy/convert/Dockerfile .

# 5. Run the controller
python -m controller <command> [options]

Configuration

  • .env – optional secrets (currently empty).
  • assets/jumper/jumper.xml – robot URDF.
  • assets/jumper/motor/motor_config.yaml – motor limits.

Running a Task

python -m controller deploy --task five_foot

The command triggers tasks/jumper/five_foot/deploy/lib.rs to produce an .app bundle under deploy/.

Real‑World Use

A typical workflow for training a gait and deploying it:

# Train (see docs/TUTORIAL.md for details)
python -m training.train --config configs/quad_walk.yaml

# Package the policy
python -m controller deploy --task quad_walk

# Flash to robot
./scripts/flash_app.sh deploy/quad_walk.app

Code Health & Issues

  • Low (Secret) – .env present but empty; no secrets committed.
  • No linting or static analysis reports were found.
  • Tests are present (tests/), but CI only runs checks.yml which covers linting and basic unit tests.

The Bottom Line

The repo offers a solid bridge between Python learning code and Rust‑based deployment for the Jumper robot. Its modular layout and Docker support simplify continuous integration, but the lack of comprehensive static analysis and limited documentation on the Rust/Python interface could slow onboarding. It is well‑suited for developers who build custom motions and need a reproducible deployment pipeline.