First robot, in simulation¶
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.