Robotics Quickstart¶
Get the AutonomyOps ROS2 governance demo running in 10 minutes.
This quickstart targets the Community Edition distribution of the
autonomy CLI on a single-node setup. (autonomy-ce-<os>-<arch> is the
release artifact prefix; once installed it is on PATH simply as
autonomy.) No orchestrator, fleet, or paid-tier deployment is required
to complete every step on this page. Advanced flows that depend on a
running autonomy-orchestrator are called out explicitly under “Advanced”.
What you will do¶
Build the demo ROS2 image
Run the governed arm-demo stack
Watch PASS markers to confirm governance checkpoints
Query the
/arm/get_statusservice through the containerInspect the demo bundle that carries the safety policy
Prerequisites¶
Tool |
Version |
Purpose |
|---|---|---|
Docker |
24+ |
Container execution path |
|
latest |
Governance and bundle commands |
ROS2 Humble |
optional |
Native fallback path only |
Install the autonomy CLI:
bash scripts/install-ce.sh
Verify:
autonomy version
Step 1 — Build the demo image¶
From the repository root:
docker build -t ghcr.io/autonomyops/adk-ros2-runtime:local demo/ros2-runtime/
The Dockerfile uses ghcr.io/autonomyops/adk-runtime:latest as the base and
builds the demo_robot workspace via colcon build at image-build time. The
entrypoint adk_ros2_entrypoint.sh sources both the Humble base overlay and the
workspace overlay.
Expected: Successfully tagged ghcr.io/autonomyops/adk-ros2-runtime:local
Step 2 — Run the governed arm demo¶
Both tiers require --image whenever Docker is available on the host. The
container path is selected automatically when the Docker daemon is reachable;
without --image the container path returns ErrImageRequired. Pass
--image to both commands below:
CE-tier (dispatch via autonomy run)¶
autonomy run \
--image ghcr.io/autonomyops/adk-ros2-runtime:local \
ros2.launch launch demo_robot arm_demo.launch.py
On a host without Docker and with ros2 in PATH, the native fallback path is
taken and --image may be omitted. The governance posture is reduced in that
case (see ROS2 Governance).
Step 3 — Watch PASS markers¶
The governance stack emits PASS markers to stdout at each checkpoint. You should see all five within the first 5–10 seconds:
PASS ros2-telemetry-active context=container
PASS ros2-runtime-container-ready context=container
PASS ros2-stack-start context=container
PASS ros2-policy-enforced context=container
PASS ros2-wal-recording context=container
If any marker is missing, check the Markers and Observability guide for diagnostic steps.
Shortly after, the demo nodes start logging:
[arm_demo] launching in mode=sim — governed by AutonomyOps ROS2 policy
[distance_sensor]: distance_sensor ready — rate=10.0 Hz range=[0.05, 2.0] m
[arm_controller]: arm_controller ready — max_velocity=1.0 m/s safety_stop_distance=0.3 m
...
[arm_controller]: PROXIMITY STOP — obstacle at 0.192 m (threshold=0.3 m)
...
[arm_controller]: proximity cleared — obstacle at 0.352 m, resuming
The proximity stop fires once per 8-second obstacle cycle generated by the
distance_sensor sine-wave model. No hardware is required.
Step 4 — Query the arm status service¶
While the stack is running, open a second terminal and run:
container=$(docker ps -q -f ancestor=ghcr.io/autonomyops/adk-ros2-runtime:local)
docker exec "$container" bash -c "
source /opt/ros/humble/setup.bash
source /opt/ros2_ws/install/setup.bash
ros2 service call /arm/get_status std_srvs/srv/Trigger
"
The response depends on where the 8-second proximity-stop cycle is when you call.
success is True when the arm is idle or moving and False when in the
e_stopped state (proximity stop active). Both are valid outputs during a
normal demo run:
# Idle or moving — no active stop
response: std_srvs.srv.Trigger_Response(
success=True,
message='state=idle joint[0]=0.000 rad e_stop=False'
)
# During a proximity stop
response: std_srvs.srv.Trigger_Response(
success=False,
message='state=e_stopped joint[0]=0.000 rad e_stop=True'
)
Wait a few seconds and call again if the first response shows success=False;
the proximity stop clears automatically when the simulated obstacle recedes.
The /arm/get_status service is the only service permitted by the demo policy;
any other service call is denied by the fail-closed default.
Step 5 — Inspect the demo bundle¶
The demo bundle (demo/bundles/ros2.tar) carries the safety policy that governs
this run. Inspect it without a registry:
autonomy bundle inspect demo/bundles/ros2.tar --local
Expected output (key fields):
name: ros2-demo
version: 0.1.0
channel: dev
entrypoint: ros2 launch demo_robot arm_demo.launch.py
policy_ref: policies/ros2_safety.rego
To view the policy itself:
autonomy bundle inspect demo/bundles/ros2.tar --local --show-policy
Step 6 — Stop the demo and inspect the local WAL¶
Press Ctrl-C in the terminal running autonomy run ros2.launch (or
autonomy ros2 run).
The governance stack flushes the local WAL before exit. To inspect what was recorded — every PASS marker, every policy decision — read the local WAL directly. No orchestrator required:
autonomy wal status
autonomy wal inspect --limit 20
autonomy wal inspect --kind PASS --limit 20
autonomy wal inspect reads the local telemetry WAL on this machine. The
output includes the five ros2-* PASS markers plus any policy-evaluation
events that occurred during the run.
Troubleshooting¶
No PASS markers appear
Confirm Docker is running:
docker infoConfirm the image was built:
docker image inspect ghcr.io/autonomyops/adk-ros2-runtime:localIf Docker is absent the native fallback path is taken;
ros2-runtime-container-readywill not appear.
ErrImageRequired
Both autonomy ros2 run and autonomy run ros2.launch require --image when
the Docker daemon is reachable. If --image is omitted on a Docker-capable
host you will see:
ros2: container path selected but no image specified
Pass --image ghcr.io/autonomyops/adk-ros2-runtime:local to either command.
ErrNeitherAvailable
Docker is absent and ros2 is not in PATH. Install Docker for full governance
or install ROS2 Humble for the native fallback path.
Next steps¶
CE-tier follow-ups (single-node, no orchestrator):
I want to … |
Read |
|---|---|
Understand policy governance |
|
Run the Gazebo simulation stack |
|
Use NVIDIA GPU inference |
|
Inspect, stage, and verify bundles offline |
|
Understand PASS markers and the local WAL |
|
Adapt the demo to real hardware |