Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 Length10.0s (250 steps)
Reward Terms1
Default RobotIngenuity

Compatible Robots

Crazyflie | Ingenuity

Reward Breakdown
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1

Ground (_ground)

Template environment for ground mobile robots. Configure via env.robot=<ground_robot>.

Episode Length10.0s (250 steps)
Reward Terms1
Default RobotCadre

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1

Orbital (_orbital)

Template environment for orbital mobile robots. Configure via env.robot=<orbital_robot>.

Episode Length10.0s (250 steps)
Reward Terms2
Default RobotCubesat

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_fuel_consumptionLinear-1

Aerial Navigation (aerial_navigation)

Aerial navigation to a dynamic waypoint with terrain-clearance tracking

Episode Length60.0s (1500 steps)
Reward Terms7
Default RobotIngenuity

Compatible Robots

Crazyflie | Ingenuity

Reward Breakdown
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
reward_altitude_trackingHyperbolicTracking41
reward_waypoint_approachHyperbolic162
penalty_tilt_angleOffsetLinear-2
reward_terrain_clearanceHyperbolicBarrier80.5
penalty_energyLinear-0.5
reward_waypoint_reachedThreshold32

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 Length30.0s (750 steps)
Reward Terms15
Default RobotSpot

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
reward_beam_positionGaussian161.5
reward_beam_midpoint_alignmentGaussian100.25
reward_robot_support_slotsGaussian120.2
reward_beam_progressScaled8
reward_attachment_balanceGaussian40.15
reward_successLinear24
penalty_beam_tiltLinear-4
penalty_beam_dropLinear-16
penalty_beam_speedLinear-2
penalty_joint_torqueLinear-0.000025
penalty_joint_accelerationLinear-0
penalty_undesired_lin_vel_zLinear-0.5
penalty_undesired_ang_vel_xyLinear-0.1
penalty_gravity_rotation_alignmentLinear-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 docgen and 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; rerun srb doc docgen to 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 Length90.0s (2250 steps)
Reward Terms7
Default RobotIngenuity

Compatible Robots

Crazyflie | Ingenuity

Reward Breakdown
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
reward_waypoint_approachHyperbolic124
reward_altitude_trackingHyperbolicTracking61
reward_waypoint_reachedThreshold20
penalty_tilt_angleOffsetLinear-2
reward_terrain_clearanceHyperbolicBarrier60.8
penalty_energyLinear-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 Length60.0s (1500 steps)
Reward Terms9
Default RobotCadre

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_formation_trackingLinear-1
reward_formation_progressScaled4
reward_formation_velocityLinear2
reward_point_towards_targetLinear0.5
reward_formation_precisionLinear4
reward_in_zoneLinear0
reward_formation_orientationLinear4
reward_action_rate_in_formationLinear32

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 Length60.0s (1500 steps)
Reward Terms9
Default RobotCadre

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_formation_trackingLinear-1
reward_formation_progressScaled4
reward_formation_velocityLinear2
reward_point_towards_targetLinear0.5
reward_formation_precisionLinear4
reward_in_zoneLinear0
reward_formation_orientationLinear4
reward_action_rate_in_formationLinear32

Formation Following Orbital (formation_following_orbital)

Orbital formation tracking in microgravity

Episode Length60.0s (600 steps)
Reward Terms7
Default RobotCubesat

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-8
penalty_fuel_consumptionLinear0
penalty_action_magnitudeLinear-8
penalty_formation_trackingLinear-2
reward_formation_precisionLinear16
reward_formation_orientationLinear48
reward_action_rate_in_formationLinear48

Landing (landing)

Landing of spacecraft on planetary surfaces with varying terrain and obstacles

Episode Length40.0s (1000 steps)
Reward Terms11
Default RobotPeregrine 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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_fuel_consumptionLinear-1
penalty_angular_velocityLinear-0.25
penalty_gravity_rotation_alignmentLinear-1
penalty_horizontal_linear_velocityLinear-0.1
reward_vertical_linear_velocityHyperbolic81
reward_landing_angleLinear8
reward_landing_velocityLinear16
reward_landing_fuelLinear4
penalty_crashLinear-32
penalty_below_targetLinear-16

Locomotion Velocity Tracking (locomotion_velocity_tracking)

Locomotion with legged robots and humanoids while tracking desired velocity commands

Episode Length20.0s (500 steps)
Reward Terms12
Default RobotSpot

Compatible Robots

Anymal C | Anymal D | Random Anymal Quadruped | Cassie | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped

Reward Breakdown
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
reward_cmd_lin_vel_xyLinear4
reward_cmd_ang_vel_zLinear2
penalty_undesired_lin_vel_zLinear-0.5
penalty_undesired_ang_vel_xyLinear-0.1
penalty_joint_torqueLinear-0.000025
penalty_joint_accelerationLinear-0
penalty_undesired_robot_contactsThreshold-2
penalty_gravity_rotation_alignmentLinear-2
reward_feet_air_timeLinear0.75
reward_quadruped_trotLinear1
penalty_foot_slipLinear-0.5

Locomotion Waypoint Navigation (locomotion_waypoint_navigation)

Navigation to a dynamic waypoint with legged robots and humanoids

Episode Length60.0s (1500 steps)
Reward Terms13
Default RobotSpot

Compatible Robots

Anymal C | Anymal D | Random Anymal Quadruped | Cassie | Spot | Unitree A1 | Unitree Go1 | Unitree Go2 | Random Unitree Quadruped

Reward Breakdown
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_position_trackingLinear-1
reward_point_towards_targetLinear1
reward_position_tracking_precisionLinear4
reward_orientation_trackingLinear8
reward_action_rate_at_targetLinear16
penalty_joint_torqueLinear-0.000025
penalty_joint_accelerationLinear-0
penalty_undesired_robot_contactsThreshold-2
penalty_undesired_lin_vel_zLinear-0.5
penalty_undesired_ang_vel_xyLinear-0.1
penalty_gravity_rotation_alignmentLinear-2
reward_feet_air_timeLinear0.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 Length70.0s (1750 steps)
Reward Terms12
Default RobotPeregrine 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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_fuel_consumptionLinear-1
penalty_angular_velocityLinear-0.25
penalty_gravity_rotation_alignmentLinear-1
penalty_horizontal_linear_velocityLinear-0.1
reward_waypoint_progressHyperbolic44
reward_vertical_linear_velocityHyperbolic81
reward_landing_angleLinear8
reward_landing_velocityLinear16
reward_landing_fuelLinear4
penalty_crashLinear-32
penalty_below_targetLinear-16

Orbital Evasion (orbital_evasion)

Navigation of spacecraft in microgravity while avoiding obstacles

Episode Length30.0s (750 steps)
Reward Terms7
Default RobotCubesat

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_fuel_consumptionLinear-1
penalty_angular_velocityLinear-0.25
reward_obstacle_clearanceHyperbolicBarrier42
penalty_distance_robot_to_targetLinear-16
penalty_out_of_boundsLinear-16
reward_target_approachHyperbolic85

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 Length30.0s (300 steps)
Reward Terms9
Default RobotSatellite 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
TermTypeWeightScaleNotes
penalty_action_rateLogCosh-4
penalty_fuel_consumptionLinear0
penalty_action_magnitudeLogCosh-1
penalty_angular_velocityLogCosh-2
penalty_position_distanceLinear-1
penalty_velocity_at_targetLogCosh-4
reward_position_approachHyperbolic42
reward_position_precisionScaled8
reward_smooth_station_keepingScaled8

Rendezvous (rendezvous)

Maneuvering of spacecraft in microgravity to rendezvous with an uncooperative target

Episode Length25.0s (625 steps)
Reward Terms7
Default RobotCubesat

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_fuel_consumptionLinear-8
penalty_angular_velocityLinear-0.05
penalty_distance_robot_to_targetLinear-16
penalty_too_farLinear-16
reward_precision_positionGaussian1280.025
reward_precision_orientationLinear128

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 Length60.0s (600 steps)
Reward Terms0
Default Robotraph_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 with env.external_heightmap.profile (ideal, randomized, failure_stale); only ideal has 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.00.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 Length30.0s (300 steps)
Reward Terms0
Default Robotraph_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 1287 float32 in that order. There is no cell-validity mask, so full finite coverage of the 146×146 source 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 with env.external_heightmap.profile (ideal, randomized, failure_stale); only ideal has been exercised on a training run. A frame older than the 0.5 s hard cutoff is rejected as an out-of-MDP stale abort, and reset blocks up to 2.0 s for 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 Length30.0s (300 steps)
Reward Terms0
Default Robotraph_rover

Traversal (traversal)

Straight-line path following at a target velocity

Episode Length120.0s (3000 steps)
Reward Terms5
Default RobotNifty

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.05
penalty_lateral_pos_deviationLinear-1
reward_vel_progressLinear8
reward_action_rate_at_targetLinear32
penalty_rolloverLinear-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 Length20.0s (500 steps)
Reward Terms5
Default RobotCadre

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
reward_cmd_lin_vel_xyLinear4
reward_cmd_ang_vel_zLinear2
penalty_undesired_lin_vel_zLinear-0.5
penalty_undesired_ang_vel_xyLinear-0.1

Waypoint Navigation (waypoint_navigation)

Navigation to a dynamic waypoint

Episode Length60.0s (1500 steps)
Reward Terms6
Default RobotCadre

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
TermTypeWeightScaleNotes
penalty_action_rateLinear-0.1
penalty_position_trackingLinear-1
reward_point_towards_targetLinear1
reward_position_tracking_precisionLinear4
reward_orientation_trackingLinear8
reward_action_rate_at_targetLinear16