You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.6 KiB
46 lines
1.6 KiB
# mock_gps.py: Publishes a generated path moving at 15m/s to gpsLocation
|
|
# USAGE: python mock_gps.py
|
|
# Then start manager
|
|
|
|
from itertools import cycle
|
|
import time
|
|
import zmq
|
|
|
|
from cereal import log
|
|
import cereal.messaging as messaging
|
|
from cereal.services import service_list
|
|
|
|
degrees_per_meter = 0.000009000009 # approximation
|
|
start_lat = 43.64199141443989
|
|
start_lng = -94.97520411931725
|
|
|
|
def gen_path(length_seconds, speed=15):
|
|
return [{"lat": start_lat,
|
|
"lng": start_lng + speed * i * degrees_per_meter, # moving along longitudinal axis at speed m/s
|
|
"speed": speed}
|
|
for i in range(1, length_seconds + 1)]
|
|
|
|
if __name__ == '__main__':
|
|
gpsLocation = messaging.pub_sock('gpsLocation')
|
|
|
|
path_stopped_5s = [{"lat": start_lat, "lng": start_lng, "speed": 0}] * 5
|
|
path_moving = gen_path(30, speed=15)
|
|
path_stopped_5s_then_moving = path_stopped_5s + path_moving
|
|
|
|
for point in cycle(path_stopped_5s_then_moving):
|
|
print('sending gpsLocation from point: {}'.format(str(point)))
|
|
dat = messaging.new_message()
|
|
dat.init('gpsLocation')
|
|
dat.gpsLocation.latitude = point['lat']
|
|
dat.gpsLocation.longitude = point['lng']
|
|
dat.gpsLocation.speed = point['speed']
|
|
dat.gpsLocation.flags = 0
|
|
dat.gpsLocation.altitude = 0
|
|
dat.gpsLocation.bearing = 0 # todo we can mock this
|
|
dat.gpsLocation.accuracy = 1
|
|
dat.gpsLocation.timestamp = int(time.time() * 1000)
|
|
dat.gpsLocation.source = log.GpsLocationData.SensorSource.android
|
|
|
|
gpsLocation.send(dat.to_bytes())
|
|
time.sleep(1)
|
|
|
|
|