Installation¶
Requires Python >= 3.12. Examples use uv (curl -LsSf https://astral.sh/uv/install.sh | sh); plain pip install works too.
Extras matrix¶
| Extra | Pulls in | When you need it |
|---|---|---|
| (none) | core only - Robot factory, registry, lazy imports | Inspect the catalog, write tools |
[sim] |
robot_descriptions |
Sim asset resolution without MuJoCo |
[sim-mujoco] |
sim + mujoco, imageio, imageio-ffmpeg |
Any Robot() with default mode="sim" |
[lerobot] |
lerobot>=0.6.0,<0.7.0 |
LerobotLocalPolicy + dataset recording |
[groot-service] |
pyzmq, msgpack |
Gr00tPolicy (ZMQ to a GR00T container) |
[cosmos3-service] |
msgpack, websockets |
Cosmos3Policy (WebSocket to Cosmos 3 server) |
[mesh] |
eclipse-zenoh, json5 |
Multi-robot mesh discovery + RPC |
[mesh-iot] |
mesh + awsiotsdk, awscrt, boto3 |
AWS IoT Core transport for mesh |
[benchmark-libero] |
libero eval deps |
LIBERO benchmark suite |
[all] |
groot-service + lerobot + sim-mujoco + mesh + mesh-iot |
Demos, CI, exploration |
[dev] |
pytest, pytest-cov, ruff, mypy, pytest-timeout |
Contributing |
uv pip install "strands-robots[sim-mujoco]" # sim only
uv pip install "strands-robots[all]" # everything
uv pip install "strands-robots[sim-mujoco,cosmos3-service]" # Cosmos 3
uv pip install "strands-robots[sim-mujoco,lerobot,mesh]" # pick and choose
Platform notes¶
macOS: works out of the box (arm64 + Intel).
Linux (headless / real hardware):
sudo apt install libosmesa6-dev ffmpeg
sudo usermod -aG dialout $USER # USB serial access; re-login after
Windows: WSL2 + Ubuntu 22.04 (native Windows works for sim, not actively tested).
Jetson / aarch64 (JetPack):
lerobot 0.6 pulls torchcodec on aarch64 itself (its dependency marker now
covers linux aarch64 and pins the torch-ABI-matched torchcodec 0.11), so the
video decoder resolves without a strands override. If torch CUDA is needed on
Jetson, ensure you install from NVIDIA's index or set UV_TORCH_BACKEND=auto:
export UV_TORCH_BACKEND=auto # resolves +cu130 wheels for Thor/Jetson
uv pip install "strands-robots[sim-mujoco,lerobot]"
MolmoAct2 on Jetson¶
MolmoAct2 checkpoints (e.g. allenai/MolmoAct2-SO100_101) resolve straight from
PyPI now that lerobot >= 0.6 ships MolmoAct2Policy (it was added after lerobot
0.5.1). See LeRobot Local: MolmoAct2
for full instructions. Quick path:
# The [molmoact2] extra layers transformers, peft, scipy on top of lerobot >= 0.6;
# lerobot 0.6 pulls the aarch64 torchcodec decoder itself:
uv pip install "strands-robots[molmoact2]"
Headless rendering¶
Or in Python before first import:
Verify¶
from strands_robots import Robot
sim = Robot("so100")
sim.step()
obs = sim.get_observation("so100")
# obs is a flat dict mixing per-joint state floats and per-camera ndarrays:
# {'shoulder_pan.pos': 0.0, ..., 'gripper.pos': 0.0, 'default': <HxWx3 uint8>}
print(list(obs.keys()))
Assets cache under ~/.strands_robots/assets/.
Environment variables¶
| Env var | What | Default |
|---|---|---|
STRANDS_ASSETS_DIR |
Robot model asset cache | ~/.strands_robots/assets/ |
STRANDS_MESH_AUDIT_DIR |
Safety audit log | ~/.strands_robots/ |
MUJOCO_GL |
GL backend | auto |
STRANDS_TRUST_REMOTE_CODE |
Allow HF trust_remote_code=True |
false |
STRANDS_ROBOT_MODE |
Default Robot() mode |
sim |
STRANDS_MESH |
Mesh enabled by default; set to false to disable globally |
true (enabled) |
GROOT_API_TOKEN |
GR00T service API token (falls back from api_token= kwarg) |
unset |
See also¶
- Quickstart - five minutes after install.
- Robot factory - every kwarg
Robot()accepts. - Troubleshooting - install gotchas.