Install¶
A Python environment where Robot imports, MuJoCo renders offscreen and the robot model files are on disk.
At the end of this page you have a Python environment where from strands_robots import Robot works, a MuJoCo robot renders offscreen, and the robot model files are on disk.
Requirements¶
Python >=3.12. A CPU is enough for the MuJoCo path; a GPU is only needed for the Newton and Isaac backends and for policy inference at speed.
pip install works the same way. The bare package has four dependencies (strands-agents, numpy, opencv-python-headless, Pillow); everything else is an extra.
Pick extras¶
Most people start with sim-mujoco: MuJoCo, robot_descriptions for asset download, imageio for video, mink for inverse kinematics. Add lerobot when a physical arm arrives, mesh when a second machine does.
Every extra, read from pyproject.toml at build time:
| extra | installs | purpose |
|---|---|---|
cosmos3-service |
msgpack, websockets |
Cosmos 3 service client |
cosmos3-diffusers |
diffusers, torch, transformers, accelerate |
Cosmos 3 through diffusers |
cosmos3-sim |
mink, mujoco, qpsolvers[quadprog] |
IK solvers for the Cosmos 3 sim path |
moveit2 |
pyzmq, msgpack |
MoveIt 2 planning client |
curobo |
cuRobo planning (no pins, install cuRobo yourself) | |
flux3 |
FLUX 3 Action policies (no pins, install flux-action yourself) | |
wbc |
onnxruntime, pyyaml, huggingface_hub |
whole body controller (ONNX checkpoints from the Hub) |
kimodo |
torch, diffusers, transformers, huggingface_hub, accelerate, scipy |
Kimodo diffusion policies |
protomotions |
onnxruntime, pyyaml, huggingface_hub |
ProtoMotions humanoid checkpoints |
holosoma |
onnxruntime, huggingface_hub |
Holosoma G1 locomotion (ONNX checkpoints from the Hub) |
microduck |
onnxruntime, huggingface_hub |
Microduck walking policy |
crazyflie |
cflib |
Crazyflie radio driver |
ur |
ur-rtde |
Universal Robots RTDE driver |
xarm |
xarm-python-sdk |
UFactory xArm driver |
earthrover |
requests |
Earth Rover HTTP driver |
rby1 |
rby1-sdk |
Rainbow Robotics RB-Y1 driver |
spot |
bosdyn-client |
Boston Dynamics Spot driver |
stretch |
hello-robot-stretch-body |
Hello Robot Stretch driver |
serial |
pyserial |
Feetech and Dynamixel serial drivers, serial_tool, pose_tool |
lerobot |
lerobot[feetech,dataset], psutil |
lerobot drivers, teleoperation, recording, Feetech buses |
molmoact2 |
[lerobot], lerobot[molmoact2] |
MolmoAct 2 policies through lerobot |
smolvla |
[lerobot], lerobot[smolvla] |
SmolVLA policies through lerobot |
groot |
[lerobot], lerobot[groot] |
GR00T N1.7 through lerobot (policy_type groot) |
sim |
robot_descriptions |
asset download through robot_descriptions |
rl |
[sim-mujoco], torch, gymnasium |
reinforcement learning on the MuJoCo backend |
sim-mujoco |
[sim], mujoco, imageio, imageio-ffmpeg, mink, qpsolvers[daqp] |
MuJoCo simulation, offscreen rendering, IK (the default sim) |
sim-urdf |
[sim-mujoco], trimesh, pycollada, xacrodoc |
URDF robots compiled for MuJoCo (Collada mesh conversion) |
sim-newton |
[sim-mujoco], newton, warp-lang, mujoco, mujoco-warp, trimesh |
Newton GPU simulation on warp |
sim-mjlab |
[sim-mujoco], mjlab, mujoco, mujoco-warp, warp-lang, onnxruntime |
mjlab GPU-vectorized MuJoCo (MuJoCo-Warp), rsl_rl training, ONNX policies |
sim-isaac |
[sim], usd-core, imageio, imageio-ffmpeg, mujoco, mink, qpsolvers[daqp] |
Isaac Sim backend (USD assets) |
sim-gs |
gsplat, plyfile, torch |
Gaussian splat rendering (gsplat) |
mesh |
eclipse-zenoh, json5, cryptography |
Zenoh fleet mesh |
mesh-iot |
[mesh], awsiotsdk, awscrt, boto3, botocore |
AWS IoT Core bridge for the mesh |
device-connect |
device-connect-edge, device-connect-agent-tools |
device-connect edge agent |
ros2 |
cyclonedds |
pure DDS (cyclonedds) ROS 2 bridge |
ollama |
strands-agents[ollama] |
Ollama model provider for the agent |
foxglove |
foxglove-sdk, mcap |
live Foxglove view and MCAP recording |
inference |
websockets |
WebSocket inference server |
rosbridge |
roslibpy |
rosbridge WebSocket client |
sagemaker |
boto3 |
SageMaker endpoints |
dashboard |
fastapi, uvicorn[standard], webauthn, python-multipart, PyJWT, [serial], opencv-python-headless, huggingface_hub |
the web dashboard |
voice |
strands-agents[bidi] |
the dashboard's speech-to-speech voice operator |
all |
[moveit2], [lerobot], [sim-mujoco], [sim-urdf], [rl], [mesh], [mesh-iot], [device-connect], [wbc], [holosoma], [kimodo], [protomotions], [molmoact2], [smolvla], [groot], [ollama], [inference], [foxglove], [rby1], [rosbridge], [sagemaker], [earthrover], [xarm], [spot], [serial], [dashboard] |
a curated bundle; GPU backends, cosmos3, ros2 and the hardware drivers stay opt-in |
dev |
pytest, pytest-cov, ruff, mypy, pytest-timeout, pytest-xdist |
tests and linters |
Robot models¶
Simulation loads a robot from its MJCF or URDF. Models are not in the wheel. The first Robot("so101") resolves the file through robot_descriptions and caches it under ~/.strands_robots/assets/. Set STRANDS_ASSETS_DIR to move that cache.
To fetch models ahead of time, or on a machine that will go offline, call the download tool. It is a plain function as well as an agent tool:
from strands_robots import download_assets
report = download_assets(action="status")
print("\n".join(report["content"][0]["text"].splitlines()[:3]))
You should see a count, then one line per robot with a model to fetch, [ok] when its files are present and [--] when they are not:
<available> available, <missing> missing
[ok] ability_hand hand PSYONIC Ability Hand (5-finger prosthetic, 11-DOF)
[ok] adam_lite humanoid PNDbotics Adam Lite Humanoid (26-DOF)
action="download" fetches what is missing; robots="so101,panda" narrows the set, category="arm" filters by family, force=True refetches. A download that fetched nothing returns status="error" naming the cause, not a success with zeros.
Rendering¶
MuJoCo reads MUJOCO_GL once, on first import, and the package sets it when it is unset: on Linux without a display egl or osmesa, whichever is present; on macOS cgl, the only backend, which needs a logged-in window server. Set it yourself only when that choice is wrong:
export MUJOCO_GL=egl # Linux, headless, NVIDIA or Mesa EGL
export MUJOCO_GL=osmesa # Linux, headless, software rendering
Check¶
No probe touches hardware or the network; Doctor lists each and what a FAIL means. Then move a robot: First robot.