openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.
 
 
 
 
 
 

81 lines
2.0 KiB

#!/usr/bin/env python3
import os
import time
from multiprocessing import Process
from tqdm import tqdm
os.environ['FILEREADER_CACHE'] = '1'
from common.realtime import config_realtime_process, Ratekeeper
from selfdrive.boardd.boardd import can_capnp_to_can_list
from tools.lib.logreader import LogReader
from panda import Panda
try:
from panda_jungle import PandaJungle # pylint: disable=import-error
except Exception:
PandaJungle = None # type: ignore
ROUTE = "77611a1fac303767/2020-03-24--09-50-38"
NUM_SEGS = 10 # route has 82 segments available
print("Loading log...")
CAN_MSGS = []
for i in tqdm(list(range(1, NUM_SEGS))):
log_url = f"https://commadataci.blob.core.windows.net/openpilotci/{ROUTE}/{i}/rlog.bz2"
lr = LogReader(log_url)
CAN_MSGS += [can_capnp_to_can_list(m.can) for m in lr if m.which() == 'can']
def send_thread(sender, core):
config_realtime_process(core, 55)
if "Jungle" in str(type(sender)):
sender.set_ignition(False)
time.sleep(3)
sender.set_ignition(True)
else:
sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT)
sender.set_can_loopback(False)
log_idx = 0
rk = Ratekeeper(100)
while True:
snd = CAN_MSGS[log_idx]
log_idx = (log_idx + 1) % len(CAN_MSGS)
snd = list(filter(lambda x: x[-1] <= 2, snd))
sender.can_send_many(snd)
# Drain panda message buffer
sender.can_recv()
rk.keep_time()
def connect():
serials = {}
while True:
# look for new devices
for p in [Panda, PandaJungle]:
if p is None:
continue
for s in p.list():
if s not in serials:
print("starting send thread for", s)
serials[s] = Process(target=send_thread, args=(p(s), 3))
serials[s].start()
# try to join all send procs
cur_serials = serials.copy()
for s, p in cur_serials.items():
p.join(0.01)
if p.exitcode is not None:
del serials[s]
time.sleep(1)
if __name__ == "__main__":
while True:
try:
connect()
except Exception:
pass