Command Replay and Experiments
Command replay sends repeatable open-loop vehicle wrench and manipulator torque commands from CSV files. Use it for payload identification probes, vehicle force tests, and whole-body experiments where the same command sequence should be applied across runs.
Workflow
In RViz:
Select the active robot from
Robots.Select
CmdReplayfrom the robot controller menu.Select a replay profile from
Cmd Replay > Profiles.Use
Cmd Replay > Reset Robot + Playbackto prepare the initial condition and start playback.Use
Cmd Replay > Stopto stop playback and publish zero replay effort/wrench commands.
Selecting CmdReplay chooses the replay controller. Playback starts after a
replay profile is selected and Reset Robot + Playback is requested.
Replay Profile Layout
Replay profiles live in:
uvms-simlab/resource/playback_profile/<profile_name>/
Each replay profile contains:
commands.csv: the time-indexed command sequence.replay.json: metadata describing the CSV columns, reset state, dynamics profile, subsystem policy, repeat behavior, and optional recording.
Use descriptive names because replay profiles appear directly in the RViz
Cmd Replay menu. Examples:
arm_payload_0p76kgvehicle_fx_10n_20s
Command CSV
commands.csv uses time_sec as the replay timeline. Each row is held
until the next timestamp.
For a constant 20 second vehicle Fx command:
time_sec,vehicle_fx
0.0,10.0
20.0,10.0
Common command columns:
Vehicle wrench:
vehicle_fx,vehicle_fy,vehicle_fz,vehicle_tx,vehicle_ty,vehicle_tz.Manipulator torque:
tau_axis_e,tau_axis_d,tau_axis_c,tau_axis_b,tau_axis_a.
Columns omitted from the CSV are filled with zero. This supports manipulator-only, vehicle-only, and whole-body replay profiles.
Dynamics Profiles
Dynamics profiles live in:
uvms-simlab/resource/dynamics_profiles/<profile_name>.json
A dynamics profile defines the robot parameter set used by simulator dynamics
services and supported hardware-side dynamics paths. It can be selected during
live simulation from the RViz Dynamics Profile menu, or referenced by a
replay profile through reset.robot_dynamics_profile.
Installed examples:
dory_alpha: nominal Dory Alpha profile.dory_alpha_payload_0p76kg: Dory Alpha with a 0.76 kg manipulator payload.
Each dynamics profile contains:
use_coupled_dynamics:falsefor independent vehicle/manipulator parameter blocks;truefor one coupled UVMS dynamics model.vehicle: lumped vehicle parameters, damping/restoring terms, current velocity, and the 6x8 thruster configuration matrix.manipulator: link inertial parameters, friction terms, gravity vector, payload mass/inertia, base/world/tip offsets, and simulated manipulator constraint parameters.
For hardware namespaces, the vehicle parameter block is skipped. The manipulator parameter block is sent to the hardware-side dynamics path when the interface supports parameter updates.
Replay Metadata
replay.json connects the CSV, reset request, dynamics profile, subsystem
policy, repeat behavior, and recording option.
Example:
{
"csv": "commands.csv",
"time_column": "time_sec",
"columns": {
"vehicle": ["vehicle_fx", "vehicle_fy", "vehicle_fz", "vehicle_tx", "vehicle_ty", "vehicle_tz"],
"manipulator": ["tau_axis_e", "tau_axis_d", "tau_axis_c", "tau_axis_b", "tau_axis_a"]
},
"playback": {
"repeats": 3,
"loop": false
},
"control_policy": {
"vehicle": "hold",
"manipulator": "replay",
"stabilizing_controller": "PID"
},
"reset": {
"hardware_settle": {
"controller": "PID",
"position_tolerance": 0.18,
"velocity_tolerance": 0.03,
"vehicle_position_tolerance": 0.08,
"vehicle_velocity_tolerance": 0.05,
"timeout_sec": 30.0
},
"reset_manipulator": true,
"reset_vehicle": true,
"require_release_after_reset": false,
"manipulator": {
"enabled": true,
"position": [3.1, 0.7, 0.4, 2.1, 0.0],
"velocity": [0.0, 0.0, 0.0, 0.0, 0.0]
},
"vehicle": {
"enabled": true,
"pose": [0.0, 0.0, 2.0, 0.0, 0.0, 0.0],
"twist": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"wrench": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
},
"robot_dynamics_profile": "dory_alpha_payload_0p0kg"
},
"recording": {
"enabled": false
}
}
Control Policy
control_policy defines each subsystem’s command source during replay:
"replay": use commands from the CSV."hold": use the configured stabilizing controller to hold the initial state."zero": publish zero effort/wrench commands for that subsystem.
Typical experiment policies:
Manipulator probe with vehicle station keeping:
vehicle = "hold",manipulator = "replay".Vehicle force test with manipulator hold:
vehicle = "replay",manipulator = "hold".Whole-body replay:
vehicle = "replay",manipulator = "replay".
Reset Behavior
Replay reset prepares the robot before each pass.
In simulation, replay calls reset services and sets the requested manipulator and vehicle state.
On hardware,
reset.hardware_settleuses the configured controller to move the physical system toward the requested initial condition before playback.
For payload identification profiles, keep robot_dynamics_profile matched to
the payload being tested.
Repeats and Looping
For finite repeated playback, the sequence is:
reset -> CSV pass 1 -> reset -> CSV pass 2 -> reset -> CSV pass 3
Use repeats for identification experiments where each pass should begin
from the configured initial state. Use loop for continuous replay.
Recording
Replay session recording is controlled per replay profile:
"recording": {
"enabled": true
}
Recorded rows cover the replay interval. Typical columns include:
Arm position:
q_alpha_axis_e/d/c/b.Arm velocity:
dq_alpha_axis_e/d/c/b.Arm acceleration:
ddq_alpha_axis_e/d/c/b.Arm measured/applied effort:
effort_alpha_axis_e/d/c/b.Arm command:
cmd_tau_axis_e/d/c/b/a.Vehicle pose, body velocity, body acceleration, wrench, and command wrench.
Keep recording.enabled set to false for profiles where per-pass replay
logs are unnecessary.