Hardware tools¶
from strands_robots.tools import (
lerobot_calibrate, lerobot_camera, lerobot_teleoperate, lerobot_train,
pose_tool, serial_tool, download_assets,
gr00t_inference, # see GR00T page
robot_mesh, # see multi-robot page
use_ros, # see ROS 2 integration page
use_rtps, # see Pure-RTPS ROS 2 page
)
# All return {"status": ..., "content": [{"text": "..."}]}
Tools¶
| Tool | Key actions | What |
|---|---|---|
lerobot_calibrate |
"list", "info", "search", "compare", "backup" |
Manage existing calibration JSONs under ~/.cache/huggingface/lerobot/calibration/ (this tool inspects/organizes - actual calibration is run via the LeRobot CLI) |
lerobot_camera |
"list", "test", "stream" |
Enumerate, test, stream connected cameras |
lerobot_teleoperate |
"start", "stop", "status", "replay", "dagger" |
Leader-follower teleop session, episode replay, and DAgger correction collection |
lerobot_train |
"start", "status", "stop", "list" |
Fine-tune a policy on a local dataset via lerobot-train |
pose_tool |
"fk", "ik", "set_gripper" |
Forward/inverse kinematics, gripper control |
serial_tool |
"list", "send" |
Enumerate serial ports, send raw commands |
download_assets |
- | Pre-fetch MJCF assets to ~/.strands_robots/assets/ |
gr00t_inference |
"start_container", … |
GR00T container lifecycle - see GR00T |
robot_mesh |
"tell", "broadcast", "emergency_stop" |
Agent-driven mesh ops - see Multi-robot |
use_ros |
"list_topics", "echo", "publish", "service_call", "info" |
Bridge to any ROS 2 robot/sim - see ROS 2 integration |
use_rtps |
"types", "advertise", "publish", "subscribe", "echo" |
Join a ROS 2 graph over pure RTPS (no rclpy) - see Pure-RTPS ROS 2 |
Parse results via result["content"][0]["text"], not custom keys like result["ports"].
Examples¶
result = serial_tool(action="list")
print(result["content"][0]["text"])
result = lerobot_calibrate(action="list", device_type="robots")
result = lerobot_camera(action="list", camera_type="opencv")
result = pose_tool(action="fk", robot_id="so101_follower", port="/dev/ttyACM0")
# DAgger / teleop takeover: a policy drives the follower while the leader can
# pre-empt to record corrections (appended to the dataset as new episodes).
# Drives lerobot-rollout with --strategy.type=dagger.
result = lerobot_teleoperate(
action="dagger",
robot_type="so101_follower", robot_port="/dev/ttyACM0",
teleop_type="so101_leader", teleop_port="/dev/ttyACM1",
policy_path="user/act_fold", # policy to roll out
dataset_repo_id="user/fold_corrections",
dataset_single_task="fold the towel",
dagger_num_episodes=10, # cap collected corrections
)
Use with an agent¶
from strands import Agent
from strands_robots import Robot
from strands_robots.tools import lerobot_calibrate, lerobot_camera, pose_tool, serial_tool
agent = Agent(tools=[
Robot("so100"),
lerobot_calibrate, lerobot_camera, pose_tool, serial_tool,
])
agent("Find a connected so100, calibrate it, then stream the wrist camera for 10 seconds")
See also¶
- Robot control - the
HardwareRobotclass. - Real hardware - when each tool runs.
- GR00T -
gr00t_inferencecontainer lifecycle.