Skip to content

First robot, in simulation

python3 -m pip install "strands-robots[sim]"
from strands_robots import Robot

with Robot("so101", mode="sim") as arm:
    obs = arm.observe()
    print(sorted(obs.joints))                  # six joints, radians
    receipt = arm.act({"shoulder_pan": 0.3})   # one position command
    print(receipt.commanded, receipt.clamped)  # what was written; True if the step clamp engaged

What happened:

line contract
Robot("so101", mode="sim") the registry row so101 has a MuJoCo asset; Robot builds a SimDriver over a MujocoEngine
observe() Observation(joints, images, sensors, t, frame); frame is the driver's UnitFrame (radians)
act({...}) the chokepoint: keys checked against joint_names, values finite, step clamped to the row's max_step
with close() frees the engine; is_connected() asks the leaf

The same from the shell:

strands-robots list
strands-robots observe so101 --mode sim
strands-robots move so101 '{"shoulder_pan": 0.3}' --mode sim

Every robot with a sim tag on the cards works here. Next: the same arm, real.