Skip to content

Commit 8a360d9

Browse files
committed
Drive tracking view from OBS message if no tracking or measurement state received
(cherry picked from commit 7a2e445)
1 parent 6880edc commit 8a360d9

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

piksi_tools/console/console.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,8 @@ def __init__(self,
668668
self.link,
669669
name='Local',
670670
relay=False,
671-
dirname=self.directory_name)
671+
dirname=self.directory_name,
672+
tracking_view=self.tracking_view)
672673
self.observation_view_base = ObservationView(
673674
self.link,
674675
name='Remote',

piksi_tools/console/observation_view.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def reset():
155155
self.old_cp = dict(self.new_cp)
156156
self.new_cp.clear()
157157
self.incoming_obs.clear()
158+
self.incoming_obs_cn0.clear()
158159

159160
# Confirm this packet is good.
160161
# Assumes no out-of-order packets
@@ -186,6 +187,8 @@ def reset():
186187

187188
prn = (prn, o.sid.code)
188189

190+
self.incoming_obs_cn0[(prn[1], prn[0])] = float(o.cn0) / 4
191+
189192
# DEP_B and DEP_A obs had different pseudorange scaling
190193
if sbp_msg.msg_type in [SBP_MSG_OBS_DEP_A, SBP_MSG_OBS_DEP_B]:
191194
divisor = 1e2
@@ -285,16 +288,21 @@ def reset():
285288
self.update_scheduler.schedule_update('update_obs', self.update_obs, self.incoming_obs.copy())
286289
self.last_table_update_tow = self.gps_tow
287290
self.last_table_update_time = monotonic()
291+
if self.tracking_view is not None:
292+
self.tracking_view.update_from_obs(self.incoming_obs_cn0)
293+
288294
return
289295

290-
def __init__(self, link, name='Local', relay=False, dirname=None):
296+
def __init__(self, link, name='Local', relay=False, dirname=None, tracking_view=None):
291297
super(ObservationView, self).__init__()
298+
self.tracking_view = tracking_view
292299
self.dirname = dirname
293300
self.last_table_update_tow = 0
294301
self.last_table_update_time = 0
295302
self.old_cp = {}
296303
self.new_cp = {}
297304
self.incoming_obs = {}
305+
self.incoming_obs_cn0 = {}
298306
self.gps_tow = 0.0
299307
self.old_tow = 0.0
300308
self.gps_week = 0

piksi_tools/console/tracking_view.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ def clean_cn0(self, t):
117117
del self.CN0_age[k]
118118

119119
def measurement_state_callback(self, sbp_msg, **metadata):
120+
self._at_least_one_track_received = True
120121
with self.CN0_lock:
121122
codes_that_came = []
122123
t = monotonic() - self.t_init
@@ -148,7 +149,31 @@ def measurement_state_callback(self, sbp_msg, **metadata):
148149
self.clean_cn0(t)
149150
self.update_scheduler.schedule_update('update_plot', self.update_plot)
150151

152+
def update_from_obs(self, obs_dict):
153+
if not self._at_least_one_track_received:
154+
with self.CN0_lock:
155+
codes_that_came = []
156+
t = monotonic() - self.t_init
157+
self.time.append(t)
158+
# first we loop over all the SIDs / channel keys we have stored and set 0 in for CN0
159+
for i, (key, cn0) in enumerate(obs_dict.items()):
160+
code = key[0]
161+
codes_that_came.append(key)
162+
if cn0 != 0:
163+
self.CN0_dict[key].append(cn0)
164+
self.CN0_age[key] = t
165+
received_code_list = getattr(self, "received_codes", [])
166+
if code not in received_code_list:
167+
received_code_list.append(code)
168+
self.received_codes = received_code_list
169+
for key, cno_array in list(self.CN0_dict.items()):
170+
if key not in codes_that_came:
171+
cno_array.append(0)
172+
self.clean_cn0(t)
173+
self.update_scheduler.schedule_update('update_plot', self.update_plot)
174+
151175
def tracking_state_callback(self, sbp_msg, **metadata):
176+
self._at_least_one_track_received = True
152177
with self.CN0_lock:
153178
codes_that_came = []
154179
t = monotonic() - self.t_init
@@ -244,6 +269,7 @@ def get_tracked_sv_labels(self):
244269

245270
def __init__(self, link):
246271
super(TrackingView, self).__init__()
272+
self._at_least_one_track_received = False
247273
self.t_init = monotonic()
248274
self.time = deque([x * 1 / TRK_RATE for x in range(-NUM_POINTS, 0, 1)], maxlen=NUM_POINTS)
249275
self.CN0_lock = threading.Lock()

0 commit comments

Comments
 (0)