mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 21:43:59 +08:00
* vipc support. modeld and dmonitoringmodeld configs * Update cereal * Add vision meta * Use vision meta in process replay * Exclude modeld and dmonitoringmodeld from test_processes * Refactor other pieces of code to use vision meta * remove unnecessary imports * Add MAX_FRAMES_PER_SEGMENT * cameraState migration * Move camera state migration to migration module * model_replay refactor * Fix lint issues * Reduce number of vipc buffers to 2 * Update spinner message * Update model replay ref * Support the new log order * Replace CameraFrameSizes with dict. Add encode_index field * Migrate camera states based on encode indices * Refactor process replay * Refactor model replay * Remove unnecessary print * Update model replay ref * Make camera state migration optional * Remove unused import * Add ignore_alive_pubs field * Add assertion for carParams inside fingerprinting callback * Remove WideCameraOnly param setup * Refactor ModeldCameraSyncRcvCallback * Update model replay ref commit * Fix camera state migration * Only migrate camera states when process has vision pubs * Refactor model replay again * Fix linter issues * One more linter fix * Update model replay ref commit
110 lines
3.4 KiB
Python
110 lines
3.4 KiB
Python
from collections import defaultdict
|
|
|
|
from cereal import messaging
|
|
from selfdrive.test.process_replay.vision_meta import meta_from_encode_index
|
|
|
|
|
|
def migrate_all(lr, old_logtime=False, camera_states=False):
|
|
msgs = migrate_sensorEvents(lr, old_logtime)
|
|
msgs = migrate_carParams(msgs, old_logtime)
|
|
if camera_states:
|
|
msgs = migrate_cameraStates(msgs)
|
|
|
|
return msgs
|
|
|
|
|
|
def migrate_cameraStates(lr):
|
|
all_msgs = []
|
|
frame_to_encode_id = defaultdict(dict)
|
|
|
|
for msg in lr:
|
|
if msg.which() not in ["roadEncodeIdx", "wideRoadEncodeIdx", "driverEncodeIdx"]:
|
|
continue
|
|
|
|
encode_index = getattr(msg, msg.which())
|
|
meta = meta_from_encode_index(msg.which())
|
|
|
|
assert encode_index.segmentId < 1200, f"Encoder index segmentId greater that 1200: {msg.which()} {encode_index.segmentId}"
|
|
frame_to_encode_id[meta.camera_state][encode_index.frameId] = encode_index.segmentId
|
|
|
|
for msg in lr:
|
|
if msg.which() not in ["roadCameraState", "wideRoadCameraState", "driverCameraState"]:
|
|
all_msgs.append(msg)
|
|
continue
|
|
|
|
camera_state = getattr(msg, msg.which())
|
|
encode_id = frame_to_encode_id[msg.which()].get(camera_state.frameId)
|
|
if encode_id is None:
|
|
print(f"Missing encoded frame for camera feed {msg.which()} with frameId: {camera_state.frameId}")
|
|
continue
|
|
|
|
new_msg = messaging.new_message(msg.which())
|
|
new_camera_state = getattr(new_msg, new_msg.which())
|
|
new_camera_state.frameId = encode_id
|
|
new_camera_state.encodeId = encode_id
|
|
new_camera_state.timestampSof = camera_state.timestampSof
|
|
new_camera_state.timestampEof = camera_state.timestampEof
|
|
new_msg.logMonoTime = msg.logMonoTime
|
|
new_msg.valid = msg.valid
|
|
|
|
all_msgs.append(new_msg.as_reader())
|
|
|
|
return all_msgs
|
|
|
|
|
|
def migrate_carParams(lr, old_logtime=False):
|
|
all_msgs = []
|
|
for msg in lr:
|
|
if msg.which() == 'carParams':
|
|
CP = messaging.new_message('carParams')
|
|
CP.carParams = msg.carParams.as_builder()
|
|
for car_fw in CP.carParams.carFw:
|
|
car_fw.brand = CP.carParams.carName
|
|
if old_logtime:
|
|
CP.logMonoTime = msg.logMonoTime
|
|
msg = CP.as_reader()
|
|
all_msgs.append(msg)
|
|
|
|
return all_msgs
|
|
|
|
|
|
def migrate_sensorEvents(lr, old_logtime=False):
|
|
all_msgs = []
|
|
for msg in lr:
|
|
if msg.which() != 'sensorEventsDEPRECATED':
|
|
all_msgs.append(msg)
|
|
continue
|
|
|
|
# migrate to split sensor events
|
|
for evt in msg.sensorEventsDEPRECATED:
|
|
# build new message for each sensor type
|
|
sensor_service = ''
|
|
if evt.which() == 'acceleration':
|
|
sensor_service = 'accelerometer'
|
|
elif evt.which() == 'gyro' or evt.which() == 'gyroUncalibrated':
|
|
sensor_service = 'gyroscope'
|
|
elif evt.which() == 'light' or evt.which() == 'proximity':
|
|
sensor_service = 'lightSensor'
|
|
elif evt.which() == 'magnetic' or evt.which() == 'magneticUncalibrated':
|
|
sensor_service = 'magnetometer'
|
|
elif evt.which() == 'temperature':
|
|
sensor_service = 'temperatureSensor'
|
|
|
|
m = messaging.new_message(sensor_service)
|
|
m.valid = True
|
|
if old_logtime:
|
|
m.logMonoTime = msg.logMonoTime
|
|
|
|
m_dat = getattr(m, sensor_service)
|
|
m_dat.version = evt.version
|
|
m_dat.sensor = evt.sensor
|
|
m_dat.type = evt.type
|
|
m_dat.source = evt.source
|
|
if old_logtime:
|
|
m_dat.timestamp = evt.timestamp
|
|
setattr(m_dat, evt.which(), getattr(evt, evt.which()))
|
|
|
|
all_msgs.append(m.as_reader())
|
|
|
|
return all_msgs
|