Open Street Maps integration
Added OSM to openpilot to use speed limits and road names. Credit goes to Pfeiferj! https: //github.com/pfeiferj Co-Authored-By: Jacob Pfeifer <jacob@pfeifer.dev>
This commit is contained in:
56
selfdrive/frogpilot/functions/mapd.py
Normal file
56
selfdrive/frogpilot/functions/mapd.py
Normal file
@@ -0,0 +1,56 @@
|
||||
# PFEIFER - MAPD
|
||||
import os
|
||||
import subprocess
|
||||
import urllib.request
|
||||
from openpilot.common.realtime import Ratekeeper
|
||||
import stat
|
||||
|
||||
VERSION = 'v1.8.1'
|
||||
URL = f"https://github.com/pfeiferj/openpilot-mapd/releases/download/{VERSION}/mapd"
|
||||
MAPD_PATH = '/data/media/0/osm/mapd'
|
||||
VERSION_PATH = '/data/media/0/osm/mapd_version'
|
||||
|
||||
def download():
|
||||
mapd_dir = os.path.dirname(MAPD_PATH)
|
||||
if not os.path.exists(mapd_dir):
|
||||
os.makedirs(mapd_dir)
|
||||
with urllib.request.urlopen(URL) as f:
|
||||
with open(MAPD_PATH, 'wb') as output:
|
||||
output.write(f.read())
|
||||
os.fsync(output)
|
||||
current_permissions = stat.S_IMODE(os.lstat(MAPD_PATH).st_mode) # <-- preserve permissions
|
||||
os.chmod(MAPD_PATH, current_permissions | stat.S_IEXEC) # <-- preserve permissions
|
||||
with open(VERSION_PATH, 'w') as output:
|
||||
output.write(VERSION)
|
||||
os.fsync(output)
|
||||
|
||||
def mapd_thread(sm=None, pm=None):
|
||||
rk = Ratekeeper(0.05, print_delay_threshold=None)
|
||||
|
||||
while True:
|
||||
try:
|
||||
if not os.path.exists(MAPD_PATH):
|
||||
download()
|
||||
continue
|
||||
if not os.path.exists(VERSION_PATH):
|
||||
download()
|
||||
continue
|
||||
with open(VERSION_PATH) as f:
|
||||
content = f.read()
|
||||
if content != VERSION:
|
||||
download()
|
||||
continue
|
||||
|
||||
process = subprocess.Popen(MAPD_PATH)
|
||||
process.wait()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
rk.keep_time()
|
||||
|
||||
|
||||
def main(sm=None, pm=None):
|
||||
mapd_thread(sm, pm)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user