Skip to content

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):

uv pip install "numpy<2" "pandas==2.1.4"
uv pip install "strands-robots[sim-mujoco,lerobot]"

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

export MUJOCO_GL=osmesa     # software rendering - Linux
export MUJOCO_GL=egl        # hardware EGL

Or in Python before first import:

import os
os.environ["MUJOCO_GL"] = "osmesa"
from strands_robots import Robot

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