From 7d46dddb7f696f7afcb5c7da43404c5de6b1410d Mon Sep 17 00:00:00 2001 From: Vincent Tumminello Date: Sat, 29 Aug 2026 13:35:31 +1000 Subject: [PATCH 1/2] Put the profile amplitudes next to the sweep ranges The profile runs behind figures 01 and 02 took their command amplitudes from the ProfileCfg defaults, so widening the sweep ranges in collect_comparison.sh changed every figure except those two, with nothing in the file being edited to suggest why. The amplitudes are now shell variables beside the sweep axes and passed explicitly. They stay separate values rather than being derived from the sweep endpoints: a sweep is meant to overshoot what a controller can hold, so that the stability envelope has an outside to it, while a profile is meant to show a controller tracking a command that moves. Driving the profile lanes at the sweep maximum would only produce six lanes that fall over. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LpiDUGzS7JCuZfgfzVd3kk --- scripts/eval/README.md | 9 +++++++++ scripts/eval/collect_comparison.sh | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/scripts/eval/README.md b/scripts/eval/README.md index 737164ceea..988b324c1a 100644 --- a/scripts/eval/README.md +++ b/scripts/eval/README.md @@ -132,6 +132,15 @@ Fourteen runs for two controllers: a profile run each, three single-axis sweeps and three two-axis grids, all on the evaluation plant, 60 s a command with the first 8 s discarded. About twenty-five minutes on an RTX 3060. +The command envelope lives in two places in that script, deliberately. The +`*_MIN` / `*_MAX` / `*_STEP` variables set the sweep and grid axes, which feed +figures 03 to 07; the `PROFILE_*` variables set the amplitudes of the profile +lanes, which are figures 01 and 02 and nothing else. Widening the sweeps does +not widen the profile, and it should not: a sweep is meant to overshoot what a +controller can do so the stability envelope has an outside, while a profile is +meant to show a controller tracking a moving command, which it cannot do at a +speed it falls over at. + The RL half runs first. The checkpoint is checked for existence before anything starts, but a checkpoint that exists can still fail to load, and putting the quintic half first would hide that failure behind twenty minutes of work. The grids carry diff --git a/scripts/eval/collect_comparison.sh b/scripts/eval/collect_comparison.sh index a9554e1530..84f34be568 100755 --- a/scripts/eval/collect_comparison.sh +++ b/scripts/eval/collect_comparison.sh @@ -54,6 +54,22 @@ WZ_MIN=-3.0 WZ_MAX=3.0 WZ_STEP=0.05 +# Command amplitudes for the profile runs -- figures 01 and 02. +# +# Separate from the sweep ranges above, and deliberately smaller. A sweep is +# meant to overshoot what a controller can do, so that the stability envelope +# has an outside to it; a profile run is meant to show a controller *tracking* a +# command that moves, and an amplitude past its envelope only produces six lanes +# that fall over. Set these to speeds you expect the controller to hold. +PROFILE_VX=0.35 +PROFILE_VY=0.20 +PROFILE_WZ=0.60 +# The combined lanes hold one axis while another moves, so each component is +# lower than the single-axis amplitude above it. +PROFILE_COMBINED_VX=0.25 +PROFILE_COMBINED_VY=0.15 +PROFILE_COMBINED_WZ=0.40 + # Grid axes (used for plotting) VX_GRID_MIN=-2.0 VX_GRID_MAX=2.0 @@ -112,6 +128,12 @@ run_engine() { echo "=== ${engine}: velocity profile ===" uv run python scripts/eval/eval_velocity_profile.py \ --engine "${engine}" "${extra[@]}" \ + --profile.vx "${PROFILE_VX}" \ + --profile.vy "${PROFILE_VY}" \ + --profile.wz "${PROFILE_WZ}" \ + --profile.combined-vx "${PROFILE_COMBINED_VX}" \ + --profile.combined-vy "${PROFILE_COMBINED_VY}" \ + --profile.combined-wz "${PROFILE_COMBINED_WZ}" \ --profile.hold 6.0 --profile.ramp 1.5 --profile.replicas 4 \ --output-dir "${OUT}" --tag "profile_${engine}" From 462b4b3135895f4f3c27bd979e778a943e4384ef Mon Sep 17 00:00:00 2001 From: Vincent Tumminello Date: Sat, 29 Aug 2026 14:22:13 +1000 Subject: [PATCH 2/2] clean comments --- scripts/eval/collect_comparison.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/scripts/eval/collect_comparison.sh b/scripts/eval/collect_comparison.sh index 84f34be568..de7f28f517 100755 --- a/scripts/eval/collect_comparison.sh +++ b/scripts/eval/collect_comparison.sh @@ -55,12 +55,6 @@ WZ_MAX=3.0 WZ_STEP=0.05 # Command amplitudes for the profile runs -- figures 01 and 02. -# -# Separate from the sweep ranges above, and deliberately smaller. A sweep is -# meant to overshoot what a controller can do, so that the stability envelope -# has an outside to it; a profile run is meant to show a controller *tracking* a -# command that moves, and an amplitude past its envelope only produces six lanes -# that fall over. Set these to speeds you expect the controller to hold. PROFILE_VX=0.35 PROFILE_VY=0.20 PROFILE_WZ=0.60