@@ -50,22 +50,27 @@ def _update(self, updated_messages):
5050 for addr in range (RADAR_START_ADDR , RADAR_START_ADDR + RADAR_MSG_COUNT ):
5151 msg = self .rcp .vl [f"RADAR_TRACK_{ addr :x} " ]
5252
53- if addr not in self .pts :
54- self .pts [addr ] = structs .RadarData .RadarPoint ()
55- self .pts [addr ].trackId = self .track_id
56- self .track_id += 1
53+ # STATE: 1=New, 2=New_updated, 3=Updated, 4=Coasting, 7=New_coasting
54+ valid = msg ['STATE' ] in (1 , 2 , 3 , 4 , 7 )
55+
56+ # Rivian's Short Range Radar (SSR) detects close stationary objects like guardrails, which cause phantom braking.
57+ # MODE: 1=SRR, 2=LRR, 3=SRR_and_LRR
58+ valid = valid and msg ['MODE' ] in (2 , 3 )
5759
58- valid = msg ['STATE' ] in (3 , 4 ) and msg ['STATE_2' ] == 1
5960 if valid :
61+ if addr not in self .pts or msg ['STATE' ] in (1 , 2 , 7 ):
62+ self .pts [addr ] = structs .RadarData .RadarPoint ()
63+ self .pts [addr ].trackId = self .track_id
64+ self .track_id += 1
65+
66+ self .pts [addr ].measured = msg ['STATE' ] in (2 , 3 )
6067 azimuth = math .radians (msg ['AZIMUTH' ])
61- self .pts [addr ].measured = True
6268 self .pts [addr ].dRel = math .cos (azimuth ) * msg ['LONG_DIST' ]
6369 self .pts [addr ].yRel = 0.5 * - math .sin (azimuth ) * msg ['LONG_DIST' ]
6470 self .pts [addr ].vRel = msg ['REL_SPEED' ]
6571 self .pts [addr ].aRel = float ('nan' )
6672 self .pts [addr ].yvRel = float ('nan' )
67-
68- else :
73+ elif addr in self .pts :
6974 del self .pts [addr ]
7075
7176 ret .points = list (self .pts .values ())
0 commit comments