Chromapi is an open-source 12-DoF quadruped robot that I design and build on my own.
To build the robot, start with the Bill of Materials and the specifications on the Chroma website.
Requires Python 3.12 and uv (or pip).
git clone https://github.com/Mowibox/chromapi
cd chromapi
uv sync --all-extras # or: pip install -e ".[all]"The audio extra enables sounds on the robot and the rl extra installs MuJoCo for simulation.
from chromapi.chromapi import Chromapi
with Chromapi(backend="mujoco", launch_viewer=True) as robot:
robot.wake_up()
robot.walk_distance(0.3) # [m]
robot.rest()On the Raspberry Pi, once the motherboard firmware is flashed:
chromapi-setup-motors # interactive: set each servo's ID and configuration, one servo at a time
chromapi-scan-motors # check that all 12 servos answer on the bus
chromapi-diagnostics # check the bridge, power monitor, IMU, audio and servosThe same code then runs on the robot with Chromapi(backend="hardware"), which talks to the motherboard over UART communication.
| Resource | Description | Location | Status |
|---|---|---|---|
| 📋 Bill of Materials | Complete hardware, electronics, and 3D printed parts list to build Chromapi from scratch. | Chroma Website | Available |
| 💻 Software API | Python control framework, hardware interfaces, and kinematic solvers. | /src/chromapi |
Work in Progress |
| 📐 CAD Model | 3D Mechanical design and robot assembly workspace. | Onshape Document | Available |
| 📖 Documentation | Specifications, design notes and communication protocol. | Chroma Website | Available |
| 🛠️ Hardware Utilities | Full system diagnostics and motor configuration tools. | /src/chromapi/utils |
Available |
| 🤖 Simulation Models | URDF and MJCF models for MuJoCo simulation. | /src/chromapi/model |
Available |
| ⚡ Electronics | Custom PCB files, schematics, and low-level firmware. | chromapi_motherboard repository |
Available |
![]() |
| Ousmane THIONGANE |
This project has been made possible thanks to the sponsors listed below. Their contributions in manufacturing, assembly, and prototyping have greatly accelerated the development of Chromapi.
Huge thanks to everyone who gave me feedback on the Chromapi's design, shared ideas, or simply took the time to brainstorm with me. This project wouldn't be where it is today without your help!
Contributions are always welcome!
- Report Issues: Found an error or have a feature request? Create a new issue here.
- Fix Bugs & Add Features: Find out where you can lend a hand by checking out existing issues.
Before opening a pull request, don't forget to run the linters and unit tests: uv run ruff check . && uv run mypy && uv run pytest.
By submitting a contribution, you agree that it is published under the license of the part it belongs to.
This repository is multi-licensed:
| Part | Path | License |
|---|---|---|
| Software (Python SDK, tools, tests, scripts) | /src, /tests, /scripts |
Apache 2.0 |
| Robot description (URDF, MJCF, configuration files) | /src/chromapi/model |
Apache 2.0 |
3D meshes (.stl, .part) |
/src/chromapi/model/*/assets |
CC BY-NC-SA 4.0 |
| Documentation and media (README, images, GIFs) | /assets, this README |
CC BY-NC-SA 4.0 |
Third-party content keeps its own license: meshes of off-the-shelf parts (Raspberry Pi 4, IMX219 camera, Noctua NF-A4x10 fan, WS2812B ring, 18650 battery, speaker, microswitch, power switch, connectors, screws) come from their respective manufacturers. The ENSEA and PCBWay logos in /assets are trademarks of their respective owners.




