from cereal import car, log from openpilot.common.numpy_fast import clip from openpilot.common.realtime import DT_CTRL from openpilot.system.version import get_build_metadata EventName = car.OnroadEvent.EventName MIN_SPEED = 1.0 CONTROL_N = 17 CAR_ROTATION_RADIUS = 0.0 # EU guidelines MAX_LATERAL_JERK = 5.0 MAX_VEL_ERR = 5.0 def clip_curvature(v_ego, prev_curvature, new_curvature): v_ego = max(MIN_SPEED, v_ego) max_curvature_rate = MAX_LATERAL_JERK / (v_ego**2) # inexact calculation, check https://github.com/commaai/openpilot/pull/24755 safe_desired_curvature = clip(new_curvature, prev_curvature - max_curvature_rate * DT_CTRL, prev_curvature + max_curvature_rate * DT_CTRL) return safe_desired_curvature def get_speed_error(modelV2: log.ModelDataV2, v_ego: float) -> float: # ToDo: Try relative error, and absolute speed if len(modelV2.temporalPose.trans): vel_err = clip(modelV2.temporalPose.trans[0] - v_ego, -MAX_VEL_ERR, MAX_VEL_ERR) return float(vel_err) return 0.0 def get_startup_event(car_recognized, controller_available, fw_seen): build_metadata = get_build_metadata() if build_metadata.openpilot.comma_remote and build_metadata.tested_channel: event = EventName.startup else: event = EventName.startupMaster if not car_recognized: if fw_seen: event = EventName.startupNoCar else: event = EventName.startupNoFw elif car_recognized and not controller_available: event = EventName.startupNoControl return event