Tweaks to playback and logging

pull/40/head
Mark Jessop 2021-09-11 13:58:38 +09:30
rodzic f443a8fb9c
commit 64d289a893
2 zmienionych plików z 25 dodań i 14 usunięć

Wyświetl plik

@ -85,6 +85,7 @@ car_track = GenericTrack()
# Bearing store
bearing_store = None
bearing_mode = False # Flag to indicate if we are receiving bearings
# Habitat/Sondehub Chase-Car uploader object
online_uploader = None
@ -881,17 +882,19 @@ def udp_listener_car_callback(data):
bearing_store.update_car_position(_state)
# Add the car position to the logger, but only if we are moving (>10kph = ~3m/s)
if (_speed > 3.0) and chase_logger:
# .. or if are receving bearing data, in which case we want to store high resolution position data.
if ( (_speed > 3.0) or bearing_mode) and chase_logger:
_car_position_update["speed"] = _speed
_car_position_update["heading"] = _heading
chase_logger.add_car_position(_car_position_update)
def udp_listener_bearing_callback(data):
global bearing_store, chase_logger
global bearing_store, bearing_mode, chase_logger
if bearing_store != None:
bearing_store.add_bearing(data)
bearing_mode = True
if chase_logger:
chase_logger.add_bearing(data)

Wyświetl plik

@ -20,7 +20,7 @@ import traceback
from dateutil.parser import *
def send_bearing(json_data, udp_port=55672):
def send_bearing(json_data, udp_port=55672, hostname='<broadcast>'):
"""
Grab bearing data out of a json log entry and send it via UDP.
@ -38,11 +38,11 @@ def send_bearing(json_data, udp_port=55672):
"""
packet = {
'type' : 'BEARING',
'bearing' : json_data['bearing'],
'confidence': json_data['confidence'],
'power': json_data['power'],
'raw_bearing_angles': json_data['raw_bearing_angles'],
'raw_doa': json_data['raw_doa'],
'bearing' : int(json_data['bearing']),
'confidence': int(json_data['confidence']),
'power': int(json_data['power']),
'raw_bearing_angles': [int(x) for x in json_data['raw_bearing_angles']],
'raw_doa': [round(x,2) for x in json_data['raw_doa']],
'bearing_type': 'relative',
'source': 'playback'
}
@ -59,8 +59,11 @@ def send_bearing(json_data, udp_port=55672):
pass
s.bind(('',udp_port))
try:
s.sendto(json.dumps(packet).encode('ascii'), ('<broadcast>', udp_port))
except socket.error:
s.sendto(json.dumps(packet).encode('ascii'), (hostname, udp_port))
except socket.error as e:
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
if hostname != '<broadcast>':
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
@ -88,6 +91,9 @@ def send_car_position(json_data, udp_port=55672):
'valid': True
}
if 'heading' in json_data:
packet['heading'] = json_data['heading']
# Set up our UDP socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.settimeout(1)
@ -147,7 +153,7 @@ def send_balloon_telemetry(json_data, udp_port=55672):
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0):
def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0, hostname='<broadcast>'):
""" Read in a JSON log file and play it back in real-time, or with a speed factor """
with open(filename, 'r') as _log_file:
@ -173,20 +179,22 @@ def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0):
# Running timer
_run_time = (_new_time - _first_time).total_seconds()
if _run_time < start_time:
continue
_time_min = int(_run_time)//60
_time_sec = _run_time%60.0
time.sleep(_time_delta/speed)
if (_time_delta < 100):
time.sleep(_time_delta/speed)
if _log_data['log_type'] == 'CAR POSITION':
send_car_position(_log_data, udp_port)
print("%02d:%.2f - Car Position" % (_time_min, _time_sec))
elif _log_data['log_type'] == 'BEARING':
send_bearing(_log_data, udp_port)
send_bearing(_log_data, udp_port, hostname=hostname)
print("%02d:%.2f - Bearing Data" % (_time_min, _time_sec))
elif _log_data['log_type'] == 'BALLOON TELEMETRY':
@ -226,5 +234,5 @@ if __name__ == '__main__':
else:
print("USAGE: python log_playback.py filename.log <speed_multiplier> <start_time>")
playback_json(filename, udp_port, speed, start_time)
playback_json(filename, udp_port, speed, start_time, hostname=hostname)