Laikad: fix qcom report collection (#28879)

* Make report aggregation variable

* Add laikad test now it passes

---------

Co-authored-by: Comma Device <device@comma.ai>
pull/28862/head
Harald Schäfer 2 years ago committed by GitHub
parent 305ab3cb3e
commit 221cd0ab09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      selfdrive/locationd/laikad.py
  2. 18
      system/sensord/rawgps/test_rawgps.py

@ -103,6 +103,10 @@ class Laikad:
self.first_log_time = None self.first_log_time = None
self.ttff = -1 self.ttff = -1
# qcom specific stuff
self.qcom_reports_received = 1
self.qcom_reports = []
def load_cache(self): def load_cache(self):
if not self.save_ephemeris: if not self.save_ephemeris:
return return
@ -211,18 +215,19 @@ class Laikad:
def read_report(self, gnss_msg): def read_report(self, gnss_msg):
if self.use_qcom: if self.use_qcom:
# QCOM reports are per constellation, should always send 3 reports # QCOM reports are per constellation, so we need to aggregate them
report = gnss_msg.drMeasurementReport report = gnss_msg.drMeasurementReport
report_time = self.gps_time_from_qcom_report(gnss_msg) report_time = self.gps_time_from_qcom_report(gnss_msg)
if report_time - self.last_report_time > 0: if report_time - self.last_report_time > 0:
self.qcom_reports_received = max(1, len(self.qcom_reports))
self.qcom_reports = [report] self.qcom_reports = [report]
else: else:
self.qcom_reports.append(report) self.qcom_reports.append(report)
self.last_report_time = report_time self.last_report_time = report_time
new_meas = [] new_meas = []
if len(self.qcom_reports) == 3: if len(self.qcom_reports) == self.qcom_reports_received:
for report in self.qcom_reports: for report in self.qcom_reports:
new_meas.extend(read_raw_qcom(report)) new_meas.extend(read_raw_qcom(report))

@ -5,12 +5,13 @@ import time
import datetime import datetime
import unittest import unittest
import subprocess import subprocess
import numpy as np
import cereal.messaging as messaging import cereal.messaging as messaging
from system.hardware import TICI from system.hardware import TICI
from system.sensord.rawgps.rawgpsd import at_cmd from system.sensord.rawgps.rawgpsd import at_cmd
from selfdrive.manager.process_config import managed_processes from selfdrive.manager.process_config import managed_processes
from common.transformations.coordinates import ecef_from_geodetic
GOOD_SIGNAL = bool(int(os.getenv("GOOD_SIGNAL", '0'))) GOOD_SIGNAL = bool(int(os.getenv("GOOD_SIGNAL", '0')))
UPDATE_MS = 100 UPDATE_MS = 100
@ -106,14 +107,17 @@ class TestRawgpsd(unittest.TestCase):
at_cmd("AT+QGPSDEL=0") at_cmd("AT+QGPSDEL=0")
managed_processes['rawgpsd'].start() managed_processes['rawgpsd'].start()
#managed_processes['laikad'].start() managed_processes['laikad'].start()
assert self._wait_for_location(120) assert self._wait_for_location(120)
assert self.sm_gps_location['gpsLocation'].flags == 1 assert self.sm_gps_location['gpsLocation'].flags == 1
#module_fix = [self.sm['gpsLocation'].latitude, self.sm['gpsLocation'].longitude, self.sm['gpsLocation'].altitude] module_fix = ecef_from_geodetic([self.sm_gps_location['gpsLocation'].latitude,
#assert self._wait_for_laikad_location(90) self.sm_gps_location['gpsLocation'].longitude,
#assert self.sm['gnssMeasurements'].flags == 1 self.sm_gps_location['gpsLocation'].altitude])
#print(self.sm_gnss_measurements['gnssMeasurements']) assert self._wait_for_laikad_location(90)
#managed_processes['laikad'].stop() total_diff = np.array(self.sm_gnss_measurements['gnssMeasurements'].positionECEF.value) - module_fix
print(total_diff)
self.assertLess(np.linalg.norm(total_diff), 100)
managed_processes['laikad'].stop()
managed_processes['rawgpsd'].stop() managed_processes['rawgpsd'].stop()
if __name__ == "__main__": if __name__ == "__main__":

Loading…
Cancel
Save