Environments – Mobile Robotics
Environments for mobile robot navigation and locomotion tasks.
Aerial (_aerial)
Template environment for aerial mobile robots. Configure via
env.robot=<aerial_robot>.
| Episode Length | 10.0s (250 steps) |
| Reward Terms | 1 |
| Default Robot | Ingenuity |
Compatible Robots
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – |
Ground (_ground)
Template environment for ground mobile robots. Configure via
env.robot=<ground_robot>.
| Episode Length | 10.0s (250 steps) |
| Reward Terms | 1 |
| Default Robot | Cadre |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – |
Orbital (_orbital)
Template environment for orbital mobile robots. Configure via
env.robot=<orbital_robot>.
| Episode Length | 10.0s (250 steps) |
| Reward Terms | 2 |
| Default Robot | Cubesat |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_fuel_consumption | Linear | -1 | – |
Aerial Navigation (aerial_navigation)
Aerial navigation to a dynamic waypoint with terrain-clearance tracking
| Episode Length | 60.0s (1500 steps) |
| Reward Terms | 7 |
| Default Robot | Ingenuity |
Compatible Robots
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| reward_altitude_tracking | HyperbolicTracking | 4 | 1 | |
| reward_waypoint_approach | Hyperbolic | 16 | 2 | |
| penalty_tilt_angle | OffsetLinear | -2 | – | |
| reward_terrain_clearance | HyperbolicBarrier | 8 | 0.5 | |
| penalty_energy | Linear | -0.5 | – | |
| reward_waypoint_reached | Threshold | 32 | – |
Beam Transport (beam_transport)
Two-robot collaborative transport of a rigid beam payload to a target point
Beam transport is the second centralized-policy multi-robot surface task (the companion task is formation following). Two Spot quadrupeds carry a single rigid beam, pre-mounted across the pair, to a target point on procedural lunar terrain (MoonSurface). A single shared policy drives both robots, with their observations concatenated in a fixed order and one joint action split across the pair (the same centralized formulation as formation following).
Payload interface. By default (beam_kinematic_mount_enabled = true) the beam
is kinematically mounted to the two-robot support frame: its pose follows the
midpoint and heading of the robot pair rather than resting on grasp or contact
dynamics. This deliberately sidesteps grasp and contact-stability physics, so the
task scores coordinated transport-frame motion — even a solved policy under this
mount would not yet demonstrate contact-mediated cooperative carrying, which a
more physically detailed coupling (future work) would add. The reward still
enforces support-slot alignment and stable, level transport. A free-beam mode
(beam_kinematic_mount_enabled = false) drops the mount for ablations.
Benchmark protocol (intended; no trained policy ships yet — this is a draft).
The algorithm of record is DreamerV3 (hyperparams/dreamerv3.yaml);
validation specs live under hyperparams/validation/. A policy must be trained
first:
# Train (DreamerV3 is the algorithm of record)
srb agent train --env beam_transport
# Evaluate a trained checkpoint (reports the metrics below)
srb agent eval --algo dreamer --env beam_transport --model <path/to/checkpoint>
The reference runs used 64 parallel environments for 50M agent steps at a 25 Hz control rate; episodes are 30 s (750 steps). Train over independent random seeds and report mean ± standard deviation.
Evaluation. Each rollout reports the closest beam-to-target distance reached
(min_beam_distance_to_target, m) and the success-hold streak, alongside
success_rate; expect success_rate = 0 until the transport is solved, with the
minimum distance as the primary partial-competence signal.
| Episode Length | 30.0s (750 steps) |
| Reward Terms | 15 |
| Default Robot | Spot |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| reward_beam_position | Gaussian | 16 | 1.5 | |
| reward_beam_midpoint_alignment | Gaussian | 10 | 0.25 | |
| reward_robot_support_slots | Gaussian | 12 | 0.2 | |
| reward_beam_progress | Scaled | 8 | – | |
| reward_attachment_balance | Gaussian | 4 | 0.15 | |
| reward_success | Linear | 24 | – | |
| penalty_beam_tilt | Linear | -4 | – | |
| penalty_beam_drop | Linear | -16 | – | |
| penalty_beam_speed | Linear | -2 | – | |
| penalty_joint_torque | Linear | -0.000025 | – | |
| penalty_joint_acceleration | Linear | -0 | – | |
| penalty_undesired_lin_vel_z | Linear | -0.5 | – | |
| penalty_undesired_ang_vel_xy | Linear | -0.1 | – | |
| penalty_gravity_rotation_alignment | Linear | -2 | – |
Success criterion. A rollout succeeds once the beam holds the target pose for
success_hold_steps = 8 consecutive control steps (0.32 s) under all of:
planar distance to target ≤ target_zone_radius_xy = 0.20 m; beam-to-midpoint and
support-slot alignment within beam_attachment_radius_xy = 0.30 m; planar speed ≤
target_speed_threshold_xy = 0.35 m/s; and an uprightness gap 1 - |cos θ| ≤
beam_tilt_tolerance = 0.20 (θ ≲ 37° from vertical). The episode is finite-horizon
(30 s). Each reset randomizes both Spots within a ±1.5 m planar box with full yaw,
so the pair must re-establish the carry from varied starts.
Observation & action spaces. The policy observes, per robot, planar position and velocity and the offset to the beam, plus the beam pose (position and a 6D rotation), the beam-to-target offset and distance, an assignment-invariant support-slot error, and the beam’s planar and angular velocity together with the robot-pair midpoint. The action drives both Spot quadrupeds.
Status and failure signature. Validation rollouts of the centralized-policy baselines reach zero task success, but the failure shape differs from formation following: an intermediate checkpoint approached the 0.20 m distance gate to within a few millimetres (without ever entering it), then longer training regressed to well outside it and never re-approached. That near-solution-then-regression points to optimization and reward-stability issues rather than a model-capacity ceiling. The task is a validated benchmark and workflow contribution — stable training, logging, and reproducibility — with solving the transport left open.
Sim-to-real path. A unit-tested per-robot velocity command interface and the shared SRB domain-randomization terms (terrain, friction, delays, command drift) form a staged transfer plan; no hardware or ROS deployment result is claimed.
Note — the Reward Breakdown table above is regenerated by
srb doc docgenand reflects the core transport-shaping terms. The task additionally applies per-robot locomotion-stability penalties (joint torque and acceleration, vertical velocity, body roll/pitch rate, and projected-gravity alignment) that steady the carry; rerunsrb doc docgento refresh the full table after code changes.
See docs/research/multi_agent_surface_tasks/ for the full research record:
experimental protocol, frozen results, the beam checkpoint-regression curve and
payload-interface ablation, and the raw validation data.
Flight (flight)
Generic powered aerial flight profile with takeoff, transfer, and final landing
The Flight task is a generic lunar takeoff-and-landing aerial mission. The vehicle flies a staged three-phase profile over a 90 s fixed horizon: ascent to a cruise altitude, a planar transfer toward the landing pad, then a guarded approach into the lunar touchdown corridor.
Set env.landing_only=true to skip the ascent and transfer phases and start the
mission directly in the terminal landing-descent phase (phase 2) — a
descent-only scenario for isolating the touchdown problem. (This landing_only
mode is a variant of the aerial Flight task, distinct from the separate orbital
landing task.)
| Episode Length | 90.0s (2250 steps) |
| Reward Terms | 7 |
| Default Robot | Ingenuity |
Compatible Robots
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| reward_waypoint_approach | Hyperbolic | 12 | 4 | |
| reward_altitude_tracking | HyperbolicTracking | 6 | 1 | |
| reward_waypoint_reached | Threshold | 20 | – | |
| penalty_tilt_angle | OffsetLinear | -2 | – | |
| reward_terrain_clearance | HyperbolicBarrier | 6 | 0.8 | |
| penalty_energy | Linear | -0.6 | – |
Formation Following (formation_following)
Multi-robot formation tracking behind a moving formation center
Formation following is one of two centralized-policy multi-robot surface tasks in
SRB (the companion task is beam transport). Three
Cadre-class rovers track a slowly
drifting formation center, each holding a fixed slot of a triangular pattern —
offsets (1.5, 0), (-0.75, 1.3), (-0.75, -1.3) m, one per rover — while a
single shared policy observes and drives the whole team. The center moves as a
smooth random walk (or, with a ROS node attached, follows an external
formation_center TF frame).
Centralized multi-agent formulation. One policy controls all three rovers: their per-robot observations are concatenated in a fixed, index-stable order into one joint observation, and the policy emits a single joint action that is split back across the rovers. Each environment returns one scalar reward for the team. This deliberately sidesteps decentralized communication and role assignment and keeps checkpoints reproducible, at the cost of joint observation and action dimensions that grow linearly with team size — a small-team baseline rather than a scalable coordination method.
Benchmark protocol (intended; no trained policy ships yet — this is a draft).
The algorithm of record is DreamerV3 (hyperparams/dreamerv3.yaml);
validation specs live under hyperparams/validation/. A policy must be trained
first:
# Train (DreamerV3 is the algorithm of record)
srb agent train --env formation_following
# Evaluate a trained checkpoint (reports the metrics below)
srb agent eval --algo dreamer --env formation_following --model <path/to/checkpoint>
The reference runs used 128 parallel environments for 30M agent steps at a 25 Hz control rate; episodes are 60 s (1500 steps). Train over independent random seeds (the committed configs do not pin one) and report mean ± standard deviation.
Evaluation. Each rollout reports the mean per-rover slot-distance error
(formation_distance_error, m), the mean heading error
(formation_orientation_error, rad), and the success-hold streak, alongside
success_rate. Because no policy is trained yet, expect success_rate = 0; the
distance and heading errors are the primary partial-competence signals and should
be reported even at zero success.
| Episode Length | 60.0s (1500 steps) |
| Reward Terms | 9 |
| Default Robot | Cadre |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_formation_tracking | Linear | -1 | – | |
| reward_formation_progress | Scaled | 4 | – | |
| reward_formation_velocity | Linear | 2 | – | |
| reward_point_towards_target | Linear | 0.5 | – | |
| reward_formation_precision | Linear | 4 | – | |
| reward_in_zone | Linear | 0 | – | |
| reward_formation_orientation | Linear | 4 | – | |
| reward_action_rate_in_formation | Linear | 32 | – |
Success criterion. An episode counts as a success once all three rovers
simultaneously sit within formation_success_position_tolerance_xy = 0.20 m of
their slots and within formation_success_yaw_tolerance ≈ 0.349 rad (20°) in
heading, held for success_hold_steps = 8 consecutive control steps (0.32 s). The
task is infinite-horizon (is_finite_horizon = false) and otherwise runs to the
60 s truncation.
Observation & action spaces. Per rover the policy observes the planar offset
to its assigned slot and the heading-to-slot as a (sin, cos) pair, plus the
shared formation-center planar velocity and each rover’s planar velocity. Every
reset adds small fixed episodic sensing noise (1 cm position, 2.5° heading), so
the policy cannot assume a noise-free slot estimate. The action is a planar
velocity command (linear + angular) per rover.
Status and failure signature. Validation rollouts of the centralized-policy baselines reach zero task success, showing a wide, persistent gap: the rovers never approach the position or heading gate and tend to drift further over the rollout — consistent with a coordination behavior never discovered within the training budget (an exploration and curriculum-coverage gap). Unlike beam transport, this wide-gap signature does not by itself rule out a capacity or architecture limit, so capacity is not excluded here. The task is therefore a validated benchmark and workflow contribution: the interface, reward signals, logging, and reproducibility path are exercised end to end, while solving the task is open and gated on better reward shaping and training coverage.
Sim-to-real path. The task carries a deployment-facing interface: with a ROS
node present the formation center is read from a formation_center TF frame
instead of the internal random walk, and a unit-tested per-robot velocity and
formation-center observation interface reconstructs the hardware-facing command
and observation. Domain randomization (terrain, friction, sensing and actuation
delays, command drift) is available as a staged transfer plan. No hardware or ROS
deployment result is claimed.
A full research record for these two tasks — formulation, experimental protocol,
the frozen zero-success results and per-task failure-mode analysis, the analysis
figures, and the raw validation data — is kept in the repository under
docs/research/multi_agent_surface_tasks/.
Formation Following Decentralized (formation_following_decentralized)
Single-rover policy view for decentralized formation following
| Episode Length | 60.0s (1500 steps) |
| Reward Terms | 9 |
| Default Robot | Cadre |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_formation_tracking | Linear | -1 | – | |
| reward_formation_progress | Scaled | 4 | – | |
| reward_formation_velocity | Linear | 2 | – | |
| reward_point_towards_target | Linear | 0.5 | – | |
| reward_formation_precision | Linear | 4 | – | |
| reward_in_zone | Linear | 0 | – | |
| reward_formation_orientation | Linear | 4 | – | |
| reward_action_rate_in_formation | Linear | 32 | – |
Formation Following Orbital (formation_following_orbital)
Orbital formation tracking in microgravity
| Episode Length | 60.0s (600 steps) |
| Reward Terms | 7 |
| Default Robot | Cubesat |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -8 | – | |
| penalty_fuel_consumption | Linear | 0 | – | |
| penalty_action_magnitude | Linear | -8 | – | |
| penalty_formation_tracking | Linear | -2 | – | |
| reward_formation_precision | Linear | 16 | – | |
| reward_formation_orientation | Linear | 48 | – | |
| reward_action_rate_in_formation | Linear | 48 | – |
Landing (landing)
Landing of spacecraft on planetary surfaces with varying terrain and obstacles
| Episode Length | 40.0s (1000 steps) |
| Reward Terms | 11 |
| Default Robot | Peregrine Lander |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_fuel_consumption | Linear | -1 | – | |
| penalty_angular_velocity | Linear | -0.25 | – | |
| penalty_gravity_rotation_alignment | Linear | -1 | – | |
| penalty_horizontal_linear_velocity | Linear | -0.1 | – | |
| reward_vertical_linear_velocity | Hyperbolic | 8 | 1 | |
| reward_landing_angle | Linear | 8 | – | |
| reward_landing_velocity | Linear | 16 | – | |
| reward_landing_fuel | Linear | 4 | – | |
| penalty_crash | Linear | -32 | – | |
| penalty_below_target | Linear | -16 | – |
Locomotion Velocity Tracking (locomotion_velocity_tracking)
Locomotion with legged robots and humanoids while tracking desired velocity commands
| Episode Length | 20.0s (500 steps) |
| Reward Terms | 12 |
| Default Robot | Spot |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cassie | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| reward_cmd_lin_vel_xy | Linear | 4 | – | |
| reward_cmd_ang_vel_z | Linear | 2 | – | |
| penalty_undesired_lin_vel_z | Linear | -0.5 | – | |
| penalty_undesired_ang_vel_xy | Linear | -0.1 | – | |
| penalty_joint_torque | Linear | -0.000025 | – | |
| penalty_joint_acceleration | Linear | -0 | – | |
| penalty_undesired_robot_contacts | Threshold | -2 | – | |
| penalty_gravity_rotation_alignment | Linear | -2 | – | |
| reward_feet_air_time | Linear | 0.75 | – | |
| reward_quadruped_trot | Linear | 1 | – | |
| penalty_foot_slip | Linear | -0.5 | – |
Locomotion Waypoint Navigation (locomotion_waypoint_navigation)
Navigation to a dynamic waypoint with legged robots and humanoids
| Episode Length | 60.0s (1500 steps) |
| Reward Terms | 13 |
| Default Robot | Spot |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cassie | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_position_tracking | Linear | -1 | – | |
| reward_point_towards_target | Linear | 1 | – | |
| reward_position_tracking_precision | Linear | 4 | – | |
| reward_orientation_tracking | Linear | 8 | – | |
| reward_action_rate_at_target | Linear | 16 | – | |
| penalty_joint_torque | Linear | -0.000025 | – | |
| penalty_joint_acceleration | Linear | -0 | – | |
| penalty_undesired_robot_contacts | Threshold | -2 | – | |
| penalty_undesired_lin_vel_z | Linear | -0.5 | – | |
| penalty_undesired_ang_vel_xy | Linear | -0.1 | – | |
| penalty_gravity_rotation_alignment | Linear | -2 | – | |
| reward_feet_air_time | Linear | 0.5 | – |
Episodes terminate when a non-foot body contact exceeds the configured
undesired-contact threshold or when projected gravity’s planar norm exceeds
0.85, indicating a fall. Non-finite contact or gravity state terminates
fail-closed. Episode time limits remain truncations, not terminations.
Moonfall (moonfall)
Heavy-weight lunar descent with deployment stage and multi-stage landing phases
| Episode Length | 70.0s (1750 steps) |
| Reward Terms | 12 |
| Default Robot | Peregrine Lander |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_fuel_consumption | Linear | -1 | – | |
| penalty_angular_velocity | Linear | -0.25 | – | |
| penalty_gravity_rotation_alignment | Linear | -1 | – | |
| penalty_horizontal_linear_velocity | Linear | -0.1 | – | |
| reward_waypoint_progress | Hyperbolic | 4 | 4 | |
| reward_vertical_linear_velocity | Hyperbolic | 8 | 1 | |
| reward_landing_angle | Linear | 8 | – | |
| reward_landing_velocity | Linear | 16 | – | |
| reward_landing_fuel | Linear | 4 | – | |
| penalty_crash | Linear | -32 | – | |
| penalty_below_target | Linear | -16 | – |
Orbital Evasion (orbital_evasion)
Navigation of spacecraft in microgravity while avoiding obstacles
| Episode Length | 30.0s (750 steps) |
| Reward Terms | 7 |
| Default Robot | Cubesat |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_fuel_consumption | Linear | -1 | – | |
| penalty_angular_velocity | Linear | -0.25 | – | |
| reward_obstacle_clearance | HyperbolicBarrier | 4 | 2 | |
| penalty_distance_robot_to_target | Linear | -16 | – | |
| penalty_out_of_bounds | Linear | -16 | – | |
| reward_target_approach | Hyperbolic | 8 | 5 |
Termination semantics. max_target_distance drives the
penalty_out_of_bounds reward and does not set terminated. The physical
collision threshold termination_min_obstacle_distance remains a genuine
termination condition; the time limit is reported as truncated.
Orbital Waypoint Navigation (orbital_waypoint_navigation)
Navigation to a dynamic waypoint in orbital microgravity
| Episode Length | 30.0s (300 steps) |
| Reward Terms | 9 |
| Default Robot | Satellite Mockup |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | LogCosh | -4 | – | |
| penalty_fuel_consumption | Linear | 0 | – | |
| penalty_action_magnitude | LogCosh | -1 | – | |
| penalty_angular_velocity | LogCosh | -2 | – | |
| penalty_position_distance | Linear | -1 | – | |
| penalty_velocity_at_target | LogCosh | -4 | – | |
| reward_position_approach | Hyperbolic | 4 | 2 | |
| reward_position_precision | Scaled | 8 | – | |
| reward_smooth_station_keeping | Scaled | 8 | – |
Rendezvous (rendezvous)
Maneuvering of spacecraft in microgravity to rendezvous with an uncooperative target
| Episode Length | 25.0s (625 steps) |
| Reward Terms | 7 |
| Default Robot | Cubesat |
Compatible Robots
Floating Platform | Int Ball1 | Int Ball2 | Apollo Lander | Peregrine Lander | Vikram Lander | Resilience Lander | Random Lander | Iss | Gateway | Cubesat | Satellite Mockup | Venus Express | Starship | Super Heavy
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_fuel_consumption | Linear | -8 | – | |
| penalty_angular_velocity | Linear | -0.05 | – | |
| penalty_distance_robot_to_target | Linear | -16 | – | |
| penalty_too_far | Linear | -16 | – | |
| reward_precision_position | Gaussian | 128 | 0.025 | |
| reward_precision_orientation | Linear | 128 | – |
Termination semantics. max_target_distance drives the
penalty_too_far reward. Exceeding it leaves terminated false so the agent
can recover; only the time limit sets truncated.
Terrain Landscaping (terrain_landscaping)
Terrain landscaping with a ground mobile robot reshaping a particle bed
The default simulation uses a RaphRover with a separately articulated
RaphShovel. The policy controls filtered linear/angular rover motion plus
continuous shovel extension velocity through a three-dimensional action space.
The same composition is available explicitly as
env.robot=raph_rover+raph_shovel.
RaphShovel resets at its raised 0.2 m joint limit. This keeps the blade clear
of the settled particle layer until the policy commands it downward; zero
shovel velocity then holds the current position through actuator damping.
Launch direct teleoperation with one environment:
srb agent teleop -e terrain_landscaping env.num_envs=1
Keyboard controls use W/S for forward/reverse, C/V for rover yaw, and
Q/E to raise/stow and lower/deploy the shovel. Releasing Q/E sends zero shovel velocity;
the damped actuator resists drift without commanding an automatic retract.
SpaceMouse forward/back and vertical translation control the same rover/shovel
channels. Lateral translation is ignored by the non-holonomic rover.
Learning integrations receive the same ordered action vector:
[rover_linear_velocity, rover_angular_velocity, shovel_linear_velocity].
Each episode draws its own mission. The target is a hashed, mass-balanced
deformation of the flat reset bed: cut and fill volumes cancel to within
1e-4 m³, every requested cut stays above the available-material floor,
every fill stays below the containment ceiling, and every significant
deformation stays inside the reachable work zone. The mission is generated
from a deterministic (env.general_mission_seed, env_id, episode_index)
stream, so a recorded triple regenerates the identical mission in any
process, and its manifest carries its own generator version, seed, frame,
geometry, physical bounds, target-map hash, reset-layout hash, and manifest
hash. A mission that cannot satisfy the declared envelope is rejected and
redrawn; exhausting the attempt budget raises rather than emitting an
infeasible target. The mission profile is Hydra-reachable under
env.general_mission_profile.*.
This task deliberately shares no target, no manifest, and no curriculum stage
with terrain_landscaping_crater: the two tasks share one reward
implementation and one observation contract, and nothing else.
| Episode Length | 60.0s (600 steps) |
| Reward Terms | 0 |
| Default Robot | raph_rover |
Note: The actor observation is produced exclusively through the external heightmap seam, not from a depth sensor. Every policy step the seam publishes one accepted-or-held 10 Hz frame of the work area, rasterized from the live regolith-particle positions (PhysX particle sets are not raycastable), and projects the seven contract leaves: current/target global maps (
16×16), current/target local maps (24×16, rover body frame), the mission-frame pose, the body velocity, and the frame age in seconds. Map elevations are mission-frame+z; deploy adapters use the same vertical datum contract. The measurement model is selectable withenv.external_heightmap.profile(ideal,randomized,failure_stale); onlyidealhas been exercised on this task.
The reward is the single stationary state-quality term 1 / (1 + mae / 0.02)
evaluated on the mission’s fixed grading cells, the same implementation the
crater variant uses. The MDP is continuing (is_finite_horizon=False);
episodes end only by time-limit truncation and success is an evaluation
metric reported there, never a termination or bonus.
The backward-compatible blade_pitch_normalized observation carries the active
shovel joint state for the legacy deploy adapters; it is not an actor leaf. For
RaphShovel it is normalized prismatic extension (0.0–0.2 m, raised/stowed
at 0.2 m), not angular pitch. Legacy Leo rigid/tilt payload configurations
remain available for existing policies and real-hardware adapters.
The seam’s timing contract is fixed: one accepted-or-held frame per policy step
at 10 Hz, with the map, mission pose and body velocity captured in one snapshot
under a single source timestamp (the local crop is sampled at that frame’s own
pose, never an older map with a newer pose). Reset blocks up to 2.0 s for the
first complete frame and raises rather than substituting a zero frame; a frame
older than the 0.5 s hard cutoff is a stale abort outside the MDP; a dropped
update re-publishes the previous complete map and raises the age value rather
than creating holes. There is no cell-validity mask, so full finite coverage of
the 146×146 source is a hard invariant.
Because shovel extension is unobserved, TD-MPC2 is disabled for this task and fails closed before any expensive side effect. No Dreamer learnability evidence exists for it either.
This is simulation-only training geometry, no real-hardware validation exists,
and no learned policy is claimed for it: the scripted-reference
environment-reachability gate for this task does not pass — the reference
finishes 0.18–0.37 mm worse than zero-action on all three declared missions,
against a required 2.0 mm improvement (see
docs/superpowers/evidence/terrain_landscaping/A10.md and
Terrain Landscaping Training Readiness).
Terrain Landscaping Crater (terrain_landscaping_crater)
Separate deterministic baseline: fill one shallow crater from a nearby regolith pile
This is a separate task, not a curriculum stage of terrain_landscaping.
There is no automatic difficulty progression, no scheduler, no implicit
switching between the two task IDs, and no claim that a crater-trained model
solves general landscaping. Each task carries its own readiness claim, and a
result on one is not evidence for the other in either direction.
This deterministic baseline keeps only geometry needed for the first training problem: a layered particle bed with one shallow bowl crater and one loose regolith pile. Particles removed from the crater are reused in the pile, so initial particle count and mass stay constant. The RaphRover starts at a fixed pose with both features inside its forward work area.
The work area uses a visible 4 m slab below the physical ground plane. Dark neutral terrain and lighter regolith keep the crater floor, pile, and remaining bed readable against the lunar skydome in both the viewport and headless captures.
The target is the static analytic flat-bed map materialized from the
checked-in target manifest (crater_target_manifest.json); configuration
fails if any crater/pile/spawner field stops reproducing the manifest’s
hashed reset layout. The reward is the single stationary state-quality term
1 / (1 + mae / 0.02) evaluated on the manifest’s fixed grading cells from
oracle particle truth; success (90 % of grading cells within tolerance for
20 consecutive newly accepted mapper frames) is an evaluation metric reported
at the time-limit truncation, never a termination or bonus. The MDP is
continuing (is_finite_horizon=False); episodes end only by truncation.
Physics perturbations and lighting randomization are disabled in this first
baseline. The action and observation schemas remain compatible with
terrain_landscaping.
Inspect it with direct teleoperation:
srb agent teleop -e terrain_landscaping_crater env.num_envs=1
Before starting any training run here, read Terrain Landscaping Training Readiness. No learned policy is claimed for this task. The scripted-reference environment-reachability gate does not pass — ten distinct controller architectures reached at best +0.31 mm against a required 2.0 mm margin (the ten ran in separate processes, whose ~0.23 mm settled-state spread makes their ranking unresolvable — the ~1.5 mm shortfall is not) — and the bounded Dreamer learnability gate could not be measured at all: 19 of 21 seeded 10,000-step canary attempts died on a mission-pose envelope abort, and the one surviving checkpoint finished worse than doing nothing on every evaluation seed. That abort is learner-independent — it is raised by the environment’s own frame validation (
MeasuredExternalHeightmapSource._validate_frame), and it has already killed a scripted-controller run and 1 of 2 attempts of a 1,000-step Dreamer smoke — so the run below is exposed to exactly the same failure, and will die the same way whenever the rover’s centre crosses the bed edge. The command below runs; it is not evidence that anything learns.
Start a baseline training run:
srb agent train --headless --algo skrl_ppo -e terrain_landscaping_crater
| Episode Length | 30.0s (300 steps) |
| Reward Terms | 0 |
| Default Robot | raph_rover |
Crater center/radius/depth default to (0.45 m, 0.20 m), 0.36 m, and
0.11 m. Pile center/radius/height default to (-0.25 m, -0.20 m), 0.32 m,
and 0.28 m. These fields are Hydra-overridable under env.*; invalid
out-of-bed, overlapping, or under-capacity layouts fail before particle spawn.
Note: The actor observation is the same external-heightmap contract the general task uses, and it comes from no depth sensor. Every policy step the seam publishes one accepted-or-held 10 Hz frame rasterized from the live regolith-particle positions and projects exactly seven leaves: current and target global maps (
16×16), current and target local maps (24×16, rover body frame), the mission-frame pose(x, y, yaw), the body velocity(vx, vy, wz), and the frame age in seconds — flattened to exactly 1287float32in that order. There is no cell-validity mask, so full finite coverage of the146×146source is a hard invariant and an incomplete or out-of-envelope frame is rejected whole rather than filled. Shovel extension, previous action, particle positions, the simulator world pose, and privileged current-minus-target maps are deliberately not observed. The measurement model is selected withenv.external_heightmap.profile(ideal,randomized,failure_stale); onlyidealhas been exercised on a training run. A frame older than the0.5 shard cutoff is rejected as an out-of-MDP stale abort, and reset blocks up to2.0 sfor the first complete frame.
Because shovel extension is unobserved and no approved history/recurrent state
contract exists, TD-MPC2 is disabled for this task and fails closed with an
actionable error before any log directory, config, replay or model is created.
Dreamer’s integration is proven for one environment (env.num_envs=1;
num_envs > 1 is refused fail-closed), but its learnability gate is
blocked — see
Terrain Landscaping Training Readiness.
This is simulation-only training geometry. It does not prove regolith fidelity or physical-rover readiness, and no real-hardware validation exists for it. A CUDA-capable NVIDIA GPU remains required for PhysX particle dynamics: the PBD solver is GPU-only, while the per-particle readback SRB consumes is the CPU-facing USD transport it feeds. The task deliberately uses the CPU simulation readback pipeline because Isaac Sim 6’s CUDA direct-data pipeline does not synchronize PBD particle positions or velocities back to the USD points consumed by the heightmap, reward, and renderer.
Terrain Landscaping Mound (terrain_landscaping_mound)
Separate deterministic baseline: level one regolith mound on a flat bed, graded by excess volume
| Episode Length | 30.0s (300 steps) |
| Reward Terms | 0 |
| Default Robot | raph_rover |
Traversal (traversal)
Straight-line path following at a target velocity
| Episode Length | 120.0s (3000 steps) |
| Reward Terms | 5 |
| Default Robot | Nifty |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.05 | – | |
| penalty_lateral_pos_deviation | Linear | -1 | – | |
| reward_vel_progress | Linear | 8 | – | |
| reward_action_rate_at_target | Linear | 32 | – | |
| penalty_rollover | Linear | -16 | – |
Termination semantics. max_tilt_rad drives the penalty_rollover
reward. Exceeding the tilt threshold leaves terminated false so the rover
can recover; the time limit is reported as truncated.
Velocity Tracking (velocity_tracking)
Basic tracking of desired velocity commands
| Episode Length | 20.0s (500 steps) |
| Reward Terms | 5 |
| Default Robot | Cadre |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| reward_cmd_lin_vel_xy | Linear | 4 | – | |
| reward_cmd_ang_vel_z | Linear | 2 | – | |
| penalty_undesired_lin_vel_z | Linear | -0.5 | – | |
| penalty_undesired_ang_vel_xy | Linear | -0.1 | – |
Waypoint Navigation (waypoint_navigation)
Navigation to a dynamic waypoint
| Episode Length | 60.0s (1500 steps) |
| Reward Terms | 6 |
| Default Robot | Cadre |
Compatible Robots
Anymal C | Anymal D | Random Anymal Quadruped | Cadre | Cassie | Husky | Leo Rover | Mars Rover | Nifty | Open Source Rover | Perseverance | Pragyan | Raph Rover | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped
Reward Breakdown
| Term | Type | Weight | Scale | Notes |
|---|---|---|---|---|
| penalty_action_rate | Linear | -0.1 | – | |
| penalty_position_tracking | Linear | -1 | – | |
| reward_point_towards_target | Linear | 1 | – | |
| reward_position_tracking_precision | Linear | 4 | – | |
| reward_orientation_tracking | Linear | 8 | – | |
| reward_action_rate_at_target | Linear | 16 | – |