openpilot v0.8.2 release

This commit is contained in:
Vehicle Researcher
2021-02-23 16:46:22 -08:00
parent 22a4193109
commit aed724beda
415 changed files with 14846 additions and 26654 deletions
+4 -10
View File
@@ -24,23 +24,19 @@ import argparse
import re
from collections import defaultdict
import selfdrive.manager as manager
# Do statistics every 5 seconds
PRINT_INTERVAL = 5
SLEEP_INTERVAL = 0.2
monitored_proc_names = [
# openpilot procs
'controlsd', 'locationd', 'loggerd','plannerd',
'ubloxd', 'thermald', 'uploader', 'deleter', 'radard', 'logmessaged', 'tombstoned',
'logcatd', 'proclogd', 'boardd', 'pandad', './ui', 'ui', 'calibrationd', 'params_learner', 'modeld', 'dmonitoringd',
'dmonitoringmodeld', 'camerad', 'sensord', 'updated', 'gpsd', 'athena', 'locationd', 'paramsd',
# offroad APK
'ai.comma.plus.offroad',
# android procs
'SurfaceFlinger', 'sensors.qcom'
]
] + manager.car_started_processes + manager.persistent_processes
cpu_time_names = ['user', 'system', 'children_user', 'children_system']
@@ -48,9 +44,7 @@ timer = getattr(time, 'monotonic', time.time)
def get_arg_parser():
parser = argparse.ArgumentParser(
description="Unlogger and UI",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("proc_names", nargs="?", default='',
help="Process names to be monitored, comma seperated")
+6 -6
View File
@@ -16,11 +16,11 @@ def cycle_alerts(duration=200, is_metric=False):
print(alerts)
CP = CarInterface.get_params("HONDA CIVIC 2016 TOURING")
sm = messaging.SubMaster(['thermal', 'health', 'frame', 'model', 'liveCalibration',
'dMonitoringState', 'plan', 'pathPlan', 'liveLocationKalman'])
sm = messaging.SubMaster(['deviceState', 'pandaState', 'roadCameraState', 'modelV2', 'liveCalibration',
'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman'])
controls_state = messaging.pub_sock('controlsState')
thermal = messaging.pub_sock('thermal')
deviceState = messaging.pub_sock('deviceState')
idx, last_alert_millis = 0, 0
@@ -56,9 +56,9 @@ def cycle_alerts(duration=200, is_metric=False):
controls_state.send(dat.to_bytes())
dat = messaging.new_message()
dat.init('thermal')
dat.thermal.started = True
thermal.send(dat.to_bytes())
dat.init('deviceState')
dat.deviceState.started = True
deviceState.send(dat.to_bytes())
frame += 1
time.sleep(0.01)
+42 -18
View File
@@ -3,7 +3,8 @@ import argparse
import json
import cereal.messaging as messaging
from tools.lib.logreader import LogReader
from tools.lib.route import Route
LEVELS = {
"DEBUG": 10,
@@ -23,32 +24,55 @@ ANDROID_LOG_SOURCE = {
}
def print_logmessage(t, msg, min_level):
try:
log = json.loads(msg)
if log['levelnum'] >= min_level:
print(f"[{t / 1e9:.6f}] {log['filename']}:{log.get('lineno', '')} - {log.get('funcname', '')}: {log['msg']}")
except json.decoder.JSONDecodeError:
print(f"[{t / 1e9:.6f}] decode error: {msg}")
def print_androidlog(t, msg):
source = ANDROID_LOG_SOURCE[msg.id]
print(f"[{t / 1e9:.6f}] {source} {msg.pid} {msg.tag} - {msg.message}")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--level', default='DEBUG')
parser.add_argument('--addr', default='127.0.0.1')
parser.add_argument("socket", type=str, nargs='*', help="socket name")
parser.add_argument("route", type=str, nargs='*', help="route name + segment number for offline usage")
args = parser.parse_args()
sm = messaging.SubMaster(['logMessage', 'androidLog'], addr=args.addr)
logs = None
if len(args.route):
r = Route(args.route[0])
logs = r.log_paths() # TODO: switch to qlogs when logs are in there
if len(args.route) == 2 and logs:
n = int(args.route[1])
logs = [logs[n]]
min_level = LEVELS[args.level]
while True:
sm.update()
if logs:
for log in logs:
if log:
lr = LogReader(log)
for m in lr:
if m.which() == 'logMessage':
print_logmessage(m.logMonoTime, m.logMessage, min_level)
elif m.which() == 'androidLog':
print_androidlog(m.logMonoTime, m.androidLog)
else:
sm = messaging.SubMaster(['logMessage', 'androidLog'], addr=args.addr)
while True:
sm.update()
if sm.updated['logMessage']:
t = sm.logMonoTime['logMessage']
try:
log = json.loads(sm['logMessage'])
if log['levelnum'] >= min_level:
print(f"[{t / 1e9:.6f}] {log['filename']}:{log.get('lineno', '')} - {log.get('funcname', '')}: {log['msg']}")
except json.decoder.JSONDecodeError:
print(f"[{t / 1e9:.6f}] decode error: {sm['logMessage']}")
if sm.updated['logMessage']:
print_logmessage(sm.logMonoTime['logMessage'], sm['logMessage'], min_level)
if sm.updated['androidLog']:
t = sm.logMonoTime['androidLog']
m = sm['androidLog']
source = ANDROID_LOG_SOURCE[m.id]
print(f"[{t / 1e9:.6f}] {source} {m.pid} {m.tag} - {m.message}")
if sm.updated['androidLog']:
print_androidlog(sm.logMonoTime['androidLog'], sm['androidLog'])
+1 -1
View File
@@ -37,7 +37,7 @@ def get_fingerprint(lr):
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: ./get_fingerprint_internal.py <route>")
print("Usage: ./fingerprint_from_route.py <route>")
sys.exit(1)
route = Route(sys.argv[1])
+7 -8
View File
@@ -1,9 +1,8 @@
#!/usr/bin/env python3
import argparse
import numpy as np
from cereal.messaging import SubMaster
from common.numpy_fast import mean
def cputime_total(ct):
@@ -34,7 +33,7 @@ if __name__ == "__main__":
parser.add_argument('--cpu', action='store_true')
args = parser.parse_args()
sm = SubMaster(['thermal', 'procLog'])
sm = SubMaster(['deviceState', 'procLog'])
last_temp = 0.0
last_mem = 0.0
@@ -47,10 +46,10 @@ if __name__ == "__main__":
while True:
sm.update()
if sm.updated['thermal']:
t = sm['thermal']
last_temp = np.mean(t.cpu)
last_mem = t.memUsedPercent
if sm.updated['deviceState']:
t = sm['deviceState']
last_temp = mean(t.cpuTempC)
last_mem = t.memoryUsagePercent
if sm.updated['procLog']:
m = sm['procLog']
@@ -72,7 +71,7 @@ if __name__ == "__main__":
total_times = total_times_new[:]
busy_times = busy_times_new[:]
print("CPU %.2f%% - RAM: %.2f - Temp %.2f" % (100. * np.mean(cores), last_mem, last_temp))
print("CPU %.2f%% - RAM: %.2f - Temp %.2f" % (100. * mean(cores), last_mem, last_temp))
if args.cpu and prev_proclog is not None:
procs = {}
+2 -2
View File
@@ -46,8 +46,8 @@ if __name__ == "__main__":
lr = LogReader(qlog_path)
for msg in lr:
if msg.which() == "health":
if msg.health.hwType not in ['uno', 'blackPanda']:
if msg.which() == "pandaState":
if msg.pandaState.pandaType not in ['uno', 'blackPanda']:
dongles.append(dongle_id)
break
+5 -5
View File
@@ -3,20 +3,20 @@ import time
import cereal.messaging as messaging
from selfdrive.manager import start_managed_process, kill_managed_process
services = ['controlsState', 'thermal', 'radarState'] # the services needed to be spoofed to start ui offroad
services = ['controlsState', 'deviceState', 'radarState'] # the services needed to be spoofed to start ui offroad
procs = ['camerad', 'ui', 'modeld', 'calibrationd']
[start_managed_process(p) for p in procs] # start needed processes
pm = messaging.PubMaster(services)
dat_cs, dat_thermal, dat_radar = [messaging.new_message(s) for s in services]
dat_cs, dat_deviceState, dat_radar = [messaging.new_message(s) for s in services]
dat_cs.controlsState.rearViewCam = False # ui checks for these two messages
dat_thermal.thermal.started = True
dat_deviceState.deviceState.started = True
try:
while True:
pm.send('controlsState', dat_cs)
pm.send('thermal', dat_thermal)
pm.send('deviceState', dat_deviceState)
pm.send('radarState', dat_radar)
time.sleep(1 / 100) # continually send, rate doesn't matter for thermal
time.sleep(1 / 100) # continually send, rate doesn't matter for deviceState
except KeyboardInterrupt:
[kill_managed_process(p) for p in procs]