From 8b1868bd52a7cd7803ff0a29b2a0fd1073f6348d Mon Sep 17 00:00:00 2001 From: Comma Device Date: Wed, 16 Sep 2026 19:08:15 +0800 Subject: [PATCH] honda: use the deprecated RadarPoint group for aRel/yvRel/measured opendbc's RadarPoint keeps aRel, yvRel and measured inside the deprecated group (the upstream fork had them at the top level), so assigning them raised 'struct has no such member; name = aRel'. Point at the group in the radar interface and in the tests. --- .../opendbc/car/honda/radar_interface.py | 18 +++++++++--------- .../car/honda/tests/test_bosch_a_radar.py | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/opendbc_repo/opendbc/car/honda/radar_interface.py b/opendbc_repo/opendbc/car/honda/radar_interface.py index d31d74448..5da604e2f 100755 --- a/opendbc_repo/opendbc/car/honda/radar_interface.py +++ b/opendbc_repo/opendbc/car/honda/radar_interface.py @@ -501,7 +501,7 @@ class RadarInterface(RadarInterfaceBase): accepted_fresh = previous_sample is not None and now_s - previous_sample[0] <= BOSCH_A_STALE_S point = self.pts.get(track_id) if accepted_fresh and point is not None: - point.measured = False + point.deprecated.measured = False else: self.pts.pop(track_id, None) track.prev_frame_idx = idx0 @@ -526,7 +526,7 @@ class RadarInterface(RadarInterfaceBase): point.dRel = dRel point.yRel = yRel point.vRel = track.last_trusted_vrel - point.measured = False + point.deprecated.measured = False else: track.last_trusted_vrel = None track.last_trusted_vrel_nanos = None @@ -563,7 +563,7 @@ class RadarInterface(RadarInterfaceBase): point.dRel = dRel point.yRel = yRel point.vRel = track.last_trusted_vrel - point.measured = False + point.deprecated.measured = False else: track.last_trusted_vrel = None track.last_trusted_vrel_nanos = None @@ -601,14 +601,14 @@ class RadarInterface(RadarInterfaceBase): if matured and track_id not in self.pts: self.pts[track_id] = structs.RadarData.RadarPoint() self.pts[track_id].trackId = track_id - self.pts[track_id].aRel = float('nan') - self.pts[track_id].yvRel = float('nan') + self.pts[track_id].deprecated.aRel = float('nan') + self.pts[track_id].deprecated.yvRel = float('nan') if matured: self.pts[track_id].dRel = dRel self.pts[track_id].yRel = yRel self.pts[track_id].vRel = vRel - self.pts[track_id].measured = True + self.pts[track_id].deprecated.measured = True else: self.pts.pop(track_id, None) @@ -641,9 +641,9 @@ class RadarInterface(RadarInterfaceBase): self.pts[ii].dRel = cpt['LONG_DIST'] # from front of car self.pts[ii].yRel = -cpt['LAT_DIST'] # in car frame's y axis, left is positive self.pts[ii].vRel = cpt['REL_SPEED'] - self.pts[ii].aRel = float('nan') - self.pts[ii].yvRel = float('nan') - self.pts[ii].measured = True + self.pts[ii].deprecated.aRel = float('nan') + self.pts[ii].deprecated.yvRel = float('nan') + self.pts[ii].deprecated.measured = True else: if ii in self.pts: del self.pts[ii] diff --git a/opendbc_repo/opendbc/car/honda/tests/test_bosch_a_radar.py b/opendbc_repo/opendbc/car/honda/tests/test_bosch_a_radar.py index 80ca3770d..4f8c54e24 100644 --- a/opendbc_repo/opendbc/car/honda/tests/test_bosch_a_radar.py +++ b/opendbc_repo/opendbc/car/honda/tests/test_bosch_a_radar.py @@ -603,7 +603,7 @@ class TestVrel: assert len(rr.points) == 1 assert rr.points[0].dRel == pytest.approx(1705 * BOSCH_A_RANGE_SCALE_M - 3.0) assert rr.points[0].vRel == pytest.approx(-2.625) - assert not rr.points[0].measured + assert not rr.points[0].deprecated.measured assert len(ri._tracks[1].samples) == 2 def test_qualified_u11_recovers_immediately_after_high_u10_coast(self): @@ -617,7 +617,7 @@ class TestVrel: rr = ri.update(sweep(0, 3, 0x7, 980, 1024, 7, 150_000_000, with_aux=True, direct_vrel_raw=760, direct_vrel_uncertainty_raw=84)) assert rr.points[0].vRel == pytest.approx((760 - 864) / 64.0) - assert rr.points[0].measured + assert rr.points[0].deprecated.measured assert ri._tracks[1].last_trusted_vrel == pytest.approx((760 - 864) / 64.0) def test_high_u10_coast_cannot_cross_lifecycle_incarnation(self): @@ -724,7 +724,7 @@ class TestVrel: range_sigma_raw=4, existence_raw=0)) assert len(rr.points) == 1 assert rr.points[0].dRel == pytest.approx(accepted_drel) - assert rr.points[0].measured is False + assert rr.points[0].deprecated.measured is False assert len(ri._tracks[1].samples) == 2 def test_exact_peter_reset_sequence_never_rebases_on_rejected_ranges(self): @@ -769,7 +769,7 @@ class TestFallbackNeverPublishes: direct_vrel_raw=864, direct_vrel_uncertainty_raw=0)) rr = ri.update(sweep(0, 1, 0x7, 1000, 1024, 3, 50_000_000, with_aux=True, direct_vrel_raw=864, direct_vrel_uncertainty_raw=0)) - assert rr.points[0].measured is True + assert rr.points[0].deprecated.measured is True assert rr.points[0].vRel == pytest.approx(0.0) # Third sweep: U11 sentinel (unavailable), ratio invalid, and a range jump that -- via the raw @@ -783,7 +783,7 @@ class TestFallbackNeverPublishes: assert implied_fallback_vrel == pytest.approx(-17.136) # confirms the setup would poison, if reached assert abs(implied_fallback_vrel) < BOSCH_A_FALLBACK_RANGE_RATE_MAX_MPS # and clears range_rejected assert len(rr.points) == 1 - assert rr.points[0].measured is False + assert rr.points[0].deprecated.measured is False assert rr.points[0].vRel == pytest.approx(0.0) # coasted trusted value, not the -17 m/s derivative # The KF-facing measurement update never happened: last_trusted_vrel/age is untouched by this cycle. assert ri._tracks[1].last_trusted_vrel == pytest.approx(0.0) @@ -815,7 +815,7 @@ class TestFallbackNeverPublishes: residual = abs(d - d * ratio) assert residual < 2.0 # clears innovation checking regardless of degraded status assert len(rr.points) == 1 - assert rr.points[0].measured is True + assert rr.points[0].deprecated.measured is True expected = d * (1.0 - ratio) / 0.05 assert rr.points[0].vRel == pytest.approx(expected) @@ -860,7 +860,7 @@ class TestAuxiliary: rr = ri.update(sweep(0, 2, 0x7, 1000, 1024, 5, 100_000_000, with_aux=False)) assert len(rr.points) == 1 assert rr.points[0].vRel == pytest.approx(0.0) - assert rr.points[0].measured is False + assert rr.points[0].deprecated.measured is False def test_aux_param_invalid_sentinel(self): ri = make_radar_interface()