Back to catalog

Behavior Correctness

H01 Convoy Behavior

Behavior correctness tests for BHV_Convoy. These cases verify convoy mark queues, following geometry, speed-control branches, runtime updates, warning paths, geometry recovery, and invalid parameter handling.

Stem Mission

Baseline scenario context

The stem mission uses two simulated vehicles: abe runs BHV_Convoy while ben creates the breadcrumb trail. Case overlays vary mark queues, following geometry, speed branches, and runtime updates.

Examples

Representative runs

Static Convoy

Description: Uses the stock five-meter breadcrumb spacing and 80-meter queue cap while Abe follows eastbound Ben; passes at 45 seconds when QLEN>=2, 10<=TLEN<=95, MXRNG=80, AVG2>=1, AVG5>=1, Abe's speed is at least 0.4, Ben's is at least 0.9, and no behavior error was observed.

Angled Entry

Description: Starts Abe at (-85,-125) heading 40 degrees toward Ben's eastbound track; passes at 65 seconds when QLEN>=2, 10<=TLEN<=95, MXRNG=80, AVG2>=1, both vehicles are moving, Abe has converged to -102<=Y<=-58, and no behavior error was observed.

Lead S-turn

Description: Starts Abe at (-20,-80), changes the convoy trail to radius=3.5, inter_mark_range=1.5, and max_mark_range=40, and sends Ben through 25,-80:55,-50:70,-50:70,-90:105,-90; passes at 145 seconds when QLEN>=2, 10<=TLEN<=55, MXRNG=40, AVG2>=0.6, Abe is moving within 55<=X<=68,-58<=Y<=-48, Ben is at X>=72,Y<=-90, the active breadcrumb is at X>=70,Y>=-68, and no behavior error was observed.

Case Matrix

All cases

static_convoy_pass

Uses the stock five-meter breadcrumb spacing and 80-meter queue cap while Abe follows eastbound Ben; passes at 45 seconds when QLEN>=2, 10<=TLEN<=95, MXRNG=80, AVG2>=1, AVG5>=1, Abe's speed is at least 0.4, Ben's is at least 0.9, and no behavior error was observed.

fine_mark_spacing_pass

Sets inter_mark_range=3 to retain more breadcrumbs; passes when QLEN>=12, 30<=TLEN<=95, MXRNG=80, AVG2>=1, and no behavior error was observed.

coarse_mark_spacing_pass

Sets inter_mark_range=12 to retain fewer breadcrumbs; passes at 40 seconds when 2<=QLEN<=6, 20<=TLEN<=95, MXRNG=80, AVG2>=1, and no behavior error was observed.

short_mark_queue_pass

Sets max_mark_range=30 to trim the convoy trail; passes at 25 seconds when QLEN>=2, TLEN<=38, MXRNG=30, AVG2>=1, and no behavior error was observed.

long_mark_queue_pass

Sets max_mark_range=140 to permit a longer trail; passes when QLEN>=6, TLEN>=35, MXRNG=140, AVG2>=1, and no behavior error was observed.

cruise_speed_pass

Configures cruise_speed=1.2 with spd_max=4; once the convoy has QLEN>=2, TLEN>=20, AVG2>=1, and Ben is moving at least 0.9 m/s, passes when Abe is moving at 0.90–1.00 m/s, MXRNG=80, and no behavior error was observed before the deadline.

cruise_speed_cap_warn_pass

Configures cruise_speed=5 above spd_max=2; passes at 20 seconds when QLEN>=2, TLEN>=10, AVG2>=1, at least one BHV_WARNING was observed, and no behavior error was observed.

safety_range_autoadjust_warn_pass

Configures the compressed safety ranges rng_estop=2, rng_tgating=5, and rng_lagging=6 with safety enabled; passes at 20 seconds when QLEN>=2, TLEN>=10, AVG2>=1, at least one behavior warning was observed, and no behavior error was observed.

tailgating_speed_slow_pass

Sets rng_estop=5, rng_tgating=200, rng_lagging=220, and spd_slower=0.5 so Abe remains in the tailgating speed regime; passes when QLEN>=2, TLEN>=10, Abe's speed is at most 0.8, Ben's is at least 0.9, and no behavior error was observed.

lagging_speed_fast_pass

Sets the safety ranges to 5,10,20 and spd_faster=2 so Abe remains in the lagging regime; passes when QLEN>=4, TLEN>=20, MXRNG=80, AVG2>=1, Abe's speed is at least 1.4, Ben's is at least 0.9, and no behavior error was observed.

estop_speed_zero_pass

Raises the safety ranges to rng_estop=200, rng_tgating=210, and rng_lagging=220 so Abe remains inside the emergency-stop range; passes when QLEN>=2, TLEN>=10, Abe's speed is at most 0.25, Ben's is at least 0.9, and no behavior error was observed.

view_point_post_pass

Uses the stock convoy configuration and watches VIEW_POINT; passes when at least one view point was posted, QLEN>=2, TLEN>=10, and no behavior error was observed.

angled_entry_pass

Starts Abe at (-85,-125) heading 40 degrees toward Ben's eastbound track; passes at 65 seconds when QLEN>=2, 10<=TLEN<=95, MXRNG=80, AVG2>=1, both vehicles are moving, Abe has converged to -102<=Y<=-58, and no behavior error was observed.

cross_track_entry_pass

Starts Abe at (-35,-145) heading north across Ben's eastbound track; passes at 65 seconds under the same queue, trail, speed, -102<=ABE_NAV_Y<=-58, and no-error convergence bounds.

opposite_heading_recover_pass

Starts Abe behind Ben at (-55,-80) but heading west; passes at 65 seconds under the same queue, trail, speed, -102<=ABE_NAV_Y<=-58, and no-error convergence bounds.

close_offset_tailgate_pass

Starts Abe close to Ben's track at (3,-60) heading south; passes at 65 seconds under the same queue, trail, speed, -102<=ABE_NAV_Y<=-58, and no-error convergence bounds.

lead_right_turn_pass

Replaces Ben's straight leg with 55,-80:55,-35:125,-35; passes at 85 seconds when Ben has reached X>=50,Y>=-45, QLEN>=2, 10<=TLEN<=130, MXRNG=80, AVG2>=0.6, Abe's speed is at least 0.4, Ben's is at least 0.8, and no behavior error was observed.

lead_s_turn_pass

Starts Abe at (-20,-80), changes the convoy trail to radius=3.5, inter_mark_range=1.5, and max_mark_range=40, and sends Ben through 25,-80:55,-50:70,-50:70,-90:105,-90; passes at 145 seconds when QLEN>=2, 10<=TLEN<=55, MXRNG=40, AVG2>=0.6, Abe is moving within 55<=X<=68,-58<=Y<=-48, Ben is at X>=72,Y<=-90, the active breadcrumb is at X>=70,Y>=-68, and no behavior error was observed.

short_queue_turn_pass

Sets max_mark_range=30 while Ben follows 40,-80:40,-40:105,-40; passes at 85 seconds when 2<=QLEN<=6, 10<=TLEN<=55, MXRNG=30, AVG2>=0.6, both vehicles are moving, Ben has reached X>=35,Y>=-50, and no behavior error was observed.

slow_follower_pass

Sets spd_slower=0.5, spd_faster=1, and max_mark_range=100; once the convoy has QLEN>=6, TLEN>=35, and AVG2>=1, passes when Abe is moving at 0.80–0.90 m/s, Ben is moving at least 1.00 m/s, MXRNG=100, and no behavior error was observed before the deadline.

fast_follower_pass

Sets spd_slower=1 and spd_faster=2; passes when QLEN>=4, TLEN>=20, MXRNG=80, AVG2>=1, Abe's speed is at least 1.4, Ben's is at least 0.9, and no behavior error was observed.

runtime_inter_mark_coarse_pass

Posts CONVOY_UPDATES=inter_mark_range=12 at 12 seconds; passes at 40 seconds when 2<=QLEN<=6, 20<=TLEN<=95, MXRNG=80, AVG2>=1, and no behavior error was observed.

runtime_max_mark_short_pass

Posts CONVOY_UPDATES=max_mark_range=30 at 12 seconds; passes at 25 seconds when QLEN>=2, TLEN<=38, MXRNG=30, AVG2>=1, and no behavior error was observed.

runtime_cruise_speed_pass

Posts CONVOY_UPDATES=cruise_speed=1.2 at 12 seconds; once the convoy has QLEN>=2, TLEN>=20, AVG2>=1, and Ben is moving at least 0.9 m/s, passes when Abe is moving at 0.90–1.00 m/s, MXRNG=80, and no behavior error was observed before the deadline.

runtime_cruise_cap_warn_pass

Posts cruise_speed=5 at 12 seconds and spd_max=2 at 13 seconds through CONVOY_UPDATES; passes at 20 seconds when QLEN>=2, TLEN>=10, AVG2>=1, at least one behavior warning was observed, and no behavior error was observed.

runtime_estop_speed_zero_pass

Posts rng_estop=200, rng_tgating=210, and rng_lagging=220 at 12, 13, and 14 seconds; passes when QLEN>=2, TLEN>=10, Abe's speed is at most 0.25, Ben's is at least 0.9, and no behavior error was observed.

runtime_bad_update_recover_pass

Posts invalid inter_mark_range=-1 at 12 seconds and restores inter_mark_range=5 at 15 seconds; passes under the stock 45-second queue, trail-length, reported-cap, average-speed, vehicle-speed, and final no-error bounds.

missing_contact_warn_pass

Sets contact=ghost with on_no_contact_ok=true; passes at eight seconds when QLEN=0, TLEN=0, a behavior warning was observed, and no behavior error was observed.

missing_contact_fail

Sets contact=ghost with on_no_contact_ok=false; after clearing startup errors at 15 seconds, this expected-negative case passes when a new BHV_ERROR arrives while the helm remains in DRIVE and the 25-second deadline is still false.

missing_contact_param_fail

Omits contact and sets on_no_contact_ok=false; after clearing startup errors at 15 seconds, this expected-negative case passes when a new BHV_ERROR arrives while the helm remains in DRIVE and the 25-second deadline is still false.

bad_inter_mark_range_fail

Sets inter_mark_range=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_max_mark_range_fail

Sets max_mark_range=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_radius_fail

Sets radius=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_nm_radius_fail

Sets nm_radius=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_spd_slower_fail

Sets spd_slower=1.5, above the accepted multiplier range; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_spd_faster_fail

Sets spd_faster=0.5, below the accepted multiplier range; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_spd_max_fail

Sets spd_max=0; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_rng_estop_fail

Sets rng_estop=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_rng_tgating_fail

Sets rng_tgating=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_rng_lagging_fail

Sets rng_lagging=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_rng_safety_fail

Sets the boolean rng_safety=maybe; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

bad_cruise_speed_fail

Sets cruise_speed=-1; this expected-negative case passes only when IVPHELM_STATE=MALCONFIG is observed before the fallback deadline.

Source links

Harness README Mission README