Skip to content

Commit 7a4c337

Browse files
authored
laikad: add residual threshold for pos_fix (#25082)
* laikad: add residual threshold for pos_fix * update ref * update test
1 parent b6df0cd commit 7a4c337

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

selfdrive/locationd/laikad.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
MAX_TIME_GAP = 10
2929
EPHEMERIS_CACHE = 'LaikadEphemeris'
3030
CACHE_VERSION = 0.1
31+
POS_FIX_RESIDUAL_THRESHOLD = 100.0
3132

3233

3334
class Laikad:
@@ -89,9 +90,9 @@ def cache_ephemeris(self, t: GPSTime):
8990

9091
def get_est_pos(self, t, processed_measurements):
9192
if self.last_pos_fix_t is None or abs(self.last_pos_fix_t - t) >= 2:
92-
min_measurements = 5 if any(p.constellation_id == ConstellationId.GLONASS for p in processed_measurements) else 4
93+
min_measurements = 6 if any(p.constellation_id == ConstellationId.GLONASS for p in processed_measurements) else 5
9394
pos_fix, pos_fix_residual = calc_pos_fix_gauss_newton(processed_measurements, self.posfix_functions, min_measurements=min_measurements)
94-
if len(pos_fix) > 0:
95+
if len(pos_fix) > 0 and np.median(np.abs(pos_fix_residual)) < POS_FIX_RESIDUAL_THRESHOLD:
9596
self.last_pos_fix = pos_fix[:3]
9697
self.last_pos_residual = pos_fix_residual
9798
self.last_pos_fix_t = t

selfdrive/locationd/test/test_laikad.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def test_laika_online(self):
138138
laikad = Laikad(auto_update=True, valid_ephem_types=EphemerisType.ULTRA_RAPID_ORBIT)
139139
correct_msgs = verify_messages(self.logs, laikad)
140140

141-
correct_msgs_expected = 560
141+
correct_msgs_expected = 555
142142
self.assertEqual(correct_msgs_expected, len(correct_msgs))
143143
self.assertEqual(correct_msgs_expected, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid]))
144144

@@ -159,7 +159,7 @@ def test_laika_online_nav_only(self):
159159
# Disable fetch_orbits to test NAV only
160160
laikad.fetch_orbits = Mock()
161161
correct_msgs = verify_messages(self.logs, laikad)
162-
correct_msgs_expected = 560
162+
correct_msgs_expected = 559
163163
self.assertEqual(correct_msgs_expected, len(correct_msgs))
164164
self.assertEqual(correct_msgs_expected, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid]))
165165

@@ -168,8 +168,8 @@ def test_laika_offline(self, downloader_mock):
168168
downloader_mock.side_effect = IOError
169169
laikad = Laikad(auto_update=False)
170170
correct_msgs = verify_messages(self.logs, laikad)
171-
self.assertEqual(256, len(correct_msgs))
172-
self.assertEqual(256, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid]))
171+
self.assertEqual(16, len(correct_msgs))
172+
self.assertEqual(16, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid]))
173173

174174
def test_laika_get_orbits(self):
175175
laikad = Laikad(auto_update=False)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
bd2ea158977f5c26658bed8ac683b72c2c592d06
1+
0da0928230d11dd4c76293b9e77b027eb4a1e291

0 commit comments

Comments
 (0)