Back to catalog

COLREGS

H02 COLREGS Thresholds

Boundary correctness tests for COLREGS classification. These cases probe below, edge, above, and mirrored geometries to catch regressions near rule-transition thresholds.

Stem Mission

Baseline scenario context

The shared COLREGS stem mission uses two vessels, ben and abe; ben is the evaluated ownship. Threshold cases reuse the same stem while moving the geometry just below, at, or above classification boundaries.

Examples

Representative runs

This threshold harness uses alog-backed overlay GIFs instead of raw pMarineViewer captures because the cases differ by small geometry changes and the verdict comes from boundary-specific COLREGS publications. The visuals call out the evidence that makes each case pass.

Give-way Bow Distance

Description: The edge fixture remains index 20 with bow distance below 10 and turn gap above 10.

Overtaking Threshold

Description: A 37-meter port-side offset moves the live contact-to-ownship relative bearing above 247.5 degrees and produces giveway:bow index 22.

Case Matrix

All cases

head_on_thresh_below_pass

Ben's eight-degree heading offset produces head-on index 10 while the live contact-to-ownship relative bearing remains within 12 degrees of zero.

head_on_thresh_edge_pass

Ben's 12-degree configured heading offset produces CPA index 50 after the live contact-to-ownship relative bearing moves just outside the 12-degree head-on cutoff.

head_on_thresh_above_pass

Ben's 16-degree heading offset produces CPA index 50 with the live contact-to-ownship relative bearing outside the 12-degree cutoff.

head_on_thresh_below_mirror_pass

The mirrored 352-degree heading produces head-on index 10 while the live contact-to-ownship relative bearing remains within 12 degrees of zero.

head_on_thresh_edge_mirror_pass

The mirrored 348-degree heading produces CPA index 50 after the live contact-to-ownship relative bearing moves just outside the 12-degree cutoff.

head_on_thresh_above_mirror_pass

The mirrored 344-degree heading produces CPA index 50 with the live contact-to-ownship relative bearing outside the 12-degree cutoff.

overtaking_thresh_below_pass

A 36-meter port-side offset keeps the live contact-to-ownship relative bearing inside the 112.5–247.5-degree Rule 13 sector and produces overtaking:port index 43.

overtaking_thresh_edge_pass

A 37-meter port-side offset moves the live contact-to-ownship relative bearing above 247.5 degrees and produces giveway:bow index 22.

overtaking_thresh_above_pass

A 38-meter port-side offset remains above the 247.5-degree sector ceiling and produces giveway:bow index 22.

overtaking_thresh_below_mirror_pass

A 38-meter mirrored offset leaves the live contact-to-ownship relative bearing below 112.5 degrees and produces CPA index 50.

overtaking_thresh_edge_mirror_pass

A 37-meter mirrored offset remains below the 112.5-degree sector floor and produces CPA index 50.

overtaking_thresh_above_mirror_pass

A 36-meter mirrored offset moves the live contact-to-ownship relative bearing inside the Rule 13 sector and produces overtaking:starboard index 47.

overtaken_thresh_below_pass

Ben overtakes from a 22-meter port-side offset and the classifier remains in CPA instead of entering standon_ot.

overtaken_thresh_edge_pass

Moving Ben to an 18-meter port-side offset produces standon_ot:port.

overtaken_thresh_above_pass

Moving Ben to a 14-meter port-side offset produces standon_ot:port.

overtaken_thresh_below_mirror_pass

The mirrored 22-meter offset remains in CPA instead of entering standon_ot.

overtaken_thresh_edge_mirror_pass

The mirrored 16.5-meter offset produces standon_ot:starboard.

overtaken_thresh_above_mirror_pass

The mirrored 14-meter offset produces standon_ot:starboard.

giveway_bowdist_below_pass

The below fixture produces index 20 with XCN_BOW_DIST_BEN<10 and XCN_BOW_TURN_GAP_BEN>10, proving neither bow-selection predicate is active.

giveway_bowdist_edge_pass

The edge fixture remains index 20 with bow distance below 10 and turn gap above 10.

giveway_bowdist_above_pass

The above fixture produces index 22 with bow distance above 10 and turn gap above 10, isolating the bow-distance branch.

giveway_bowdist_below_mirror_pass

The rotated below fixture remains index 20 with bow distance below 10 and turn gap above 10.

giveway_bowdist_edge_mirror_pass

The rotated edge fixture remains index 20 with bow distance below 10 and turn gap above 10.

giveway_bowdist_above_mirror_pass

The rotated above fixture produces index 22 with bow distance above 10 and turn gap above 10.

giveway_turngap_below_pass

The diagonal below fixture produces index 20 with bow distance below 10 and turn gap above 10.

giveway_turngap_above_pass

The diagonal above fixture produces index 22 with both bow distance and turn gap below 10, isolating the turn-gap branch.

giveway_turngap_below_mirror_pass

The rotated below fixture produces index 20 with bow distance below 10 and turn gap above 10.

giveway_turngap_above_mirror_pass

The rotated above fixture produces index 22 with both bow distance and turn gap below 10.

standon_unsurebow_below_pass

Eastbound ownship from (-55,-72) against southbound Ben from (10,-18) produces standon:unsure index 38.

standon_unsurebow_edge_pass

Ownship from (-60,-80) against Ben from (10,-30) produces standon:unsure_bow index 36.

standon_unsurebow_above_pass

The execution-far fixture with ownship (-76,-80) and Ben (10,-12) produces standon:bow index 32.

standon_band270_stern_pass

Eastbound ownship against 1.2 m/s southbound Ben from (10,15) produces standon:stern index 30 while the live ownship-to-contact relative bearing is in the source's 270–315-degree band.

standon_band350_unsurebow_pass

Ownship at (-35,-80) against southbound Ben from (10,-70) produces standon:unsure_bow index 36 while the live ownship-to-contact relative bearing is above 350 degrees.

standon_band315_bow_pass

Ownship at (-35,-80) against southbound Ben from (0,-64) produces standon:bow index 32 while the live ownship-to-contact relative bearing is in the source's 315–350-degree band.

standon_southwest_unsurebow_pass

Southwest-bound Ben from (10,-82) produces standon:unsure_bow index 36.

standon_southwest_unsure_pass

Moving southwest-bound Ben to (10,-76) produces standon:unsure index 38.

standon_southwest_stern_pass

Moving southwest-bound Ben to (10,-70) produces standon:stern index 30.

standon_inextremis_range_below_pass

The wide stand-on fixture produces standon:stern index 30 while live contact range remains above the 18-meter max_util_cpa_dist.

standon_inextremis_range_edge_pass

The edge fixture produces standon:inextremis index 31 with live contact range at or below 18 meters.

standon_inextremis_range_above_pass

Moving Ben half a meter produces standon:inextremis index 31 with live contact range at or below 18 meters.

standon_ot_inextremis_range_below_pass

Ben approaches from (-105,-76) and produces standon_ot:port while live contact range remains above 18 meters.

standon_ot_inextremis_range_edge_pass

Moving Ben to (-52,-76) produces standon_ot:inextremis with live contact range at or below 18 meters.

standon_ot_inextremis_range_above_pass

Moving Ben to (-50,-76) produces standon_ot:inextremis with live contact range at or below 18 meters.

Source links

Harness README Mission README