commons/grabette
Open robotic data-recording device for collecting manipulation demonstrations.
A GRABETTE rig records synchronized camera + IMU streams from hand-held or gripper-mounted devices, recovers camera trajectories with SLAM, and exports LeRobot datasets for policy learning. The data-collection pipeline is robot-agnostic.
🔩 Build the hardware: Bill of Materials · CAD — Onshape · Assembly guides: Grabette · Gripette <br><br><br>
https://github.com/user-attachments/assets/6db9dd7b-1762-4004-8a76-ce76323499ba
<br><br><br>
Components
packages/ — robot-agnostic core
| Package | Role | Target | Interface |
|---|---|---|---|
grabette | Hand held data-collection device | Raspberry Pi | HTTP/WebSocket, :8000 |
gripette | Robot mounted Gripper motor | Raspberry Pi Zero 2W | gRPC, :50051 |
grabette-postprocess | Data postprocess + SLAM → LeRobot dataset generation | Workstation | CLI |
grabette-chunkrel | Optional chunk-relative action representation (maths + LeRobot processor steps); per-step deltas stay the default | Workstation / GPU | Python library |
casquette (WIP) | POV head-mounted device | Raspberry Pi Zero 2W | HTTP/WebSocket, :8001 |
integrations/ — integration example (OpenArm 7-DOF arm + Gripette)
| Package | Role |
|---|---|
openarm_gripette | Code to control the OpenArm + Gripette robot |
openarm_gripette_simu | MuJoCo simulation of OpenArm + Gripette and synthetic data collection |
openarm_gripette_model | Robot description (URDF / MuJoCo XML) and mesh assets, generated from Onshape |
DiffusionPolicy | Diffusion Policy training code |
Pi05 | π0.5 VLA fine-tuning, gates, and remote-GPU deployment (shares the DiffusionPolicy dataset pipeline) |
Using GRABETTE with a different robot arm:
the core in packages/ carries no
OpenArm dependency. To target another platform, add an
integrations/<your-arm>/ alongside openarm/ — the OpenArm integration is the
reference example.
Cloning
The repo uses Git LFS for mesh assets (*.stl, see .gitattributes). Install LFS once per workstation, then clone normally:
sudo apt install git-lfs # Debian / Ubuntu / Pi OS — install the binary first
# (macOS: brew install git-lfs; see git-lfs.com for others)
git lfs install # one-time per user — configures git filters
git clone git@github.com:pollen-robotics/grabette.git
If you cloned before git lfs install, the .stl files are 130-byte pointer text files. Fetch the real binaries:
cd grabette
git lfs pull
Verify:
file packages/grabette/urdf/grabette_right/assets/*.stl | head -3
# expected: "Binary" | bad: "ASCII text" (pointer file → run `git lfs pull`)
For on-device installs where you don't need the meshes (Pi services don't load them), skip LFS to save disk + bandwidth:
GIT_LFS_SKIP_SMUDGE=1 git clone git@github.com:pollen-robotics/grabette.git
Development
Requires uv. Python ≥ 3.11.
uv sync --all-packages # full workspace dev environment
uv run --package grabette python packages/grabette/main.py # run a service (mock backend by default)
The one rule to know: this repo is a single uv workspace — one shared
.venvand oneuv.lockat the root. A bareuv sync, run from anywhere in the repo, builds the whole workspace and installs every package's dependencies — gigabytes of torch/mujoco on a Raspberry Pi if you're not careful. Therefore:
- Single package / deployment →
uv sync --package <name>(extras attach to it:uv sync --package grabette --extra rpi).- Full dev environment →
uv sync --all-packages.integrations/DiffusionPolicyis deliberately standalone (ownuv.lock, heavy training pins) — inside it a plainuv syncis correct.
On-device install (Raspberry Pi): each device package ships a make install-rpi target that builds the --system-site-packages venv picamera2
needs (a bare uv sync skips it and the service falls back to the mock
backend). Follow the package's own README for the exact steps:
grabette, gripette,
casquette (WIP).
Note — lerobot / Python 3.12: grabette-postprocess's LeRobot commands,
the real OpenArm driver, and the sim's dataset/eval extras require Python
≥ 3.12 (gated by env markers so the device packages remain installable on
3.11). The OpenArm sim also needs the system liburdfdom package for placo.
License
Apache-2.0. See LICENSE.