parent
							
								
									c1762af4e7
								
							
						
					
					
						commit
						7558a02c91
					
				
				 3 changed files with 83 additions and 198 deletions
			
			
		| @ -1,112 +0,0 @@ | ||||
| import copy | ||||
| import json | ||||
| import os | ||||
| import numpy as np | ||||
| import tomllib | ||||
| from abc import abstractmethod, ABC | ||||
| from enum import StrEnum | ||||
| from typing import Any, NamedTuple | ||||
| from collections.abc import Callable | ||||
| from functools import cache | ||||
| 
 | ||||
| from cereal import car | ||||
| from openpilot.common.basedir import BASEDIR | ||||
| from openpilot.common.simple_kalman import KF1D, get_kalman_gain | ||||
| from openpilot.selfdrive.car import DT_CTRL, apply_hysteresis, gen_empty_fingerprint, scale_rot_inertia, scale_tire_stiffness, get_friction, STD_CARGO_KG | ||||
| from openpilot.selfdrive.car import structs | ||||
| from openpilot.selfdrive.car.interfaces import MAX_CTRL_SPEED | ||||
| from openpilot.selfdrive.car.can_definitions import CanData, CanRecvCallable, CanSendCallable | ||||
| from openpilot.selfdrive.car.conversions import Conversions as CV | ||||
| from openpilot.selfdrive.car.helpers import clip | ||||
| from openpilot.selfdrive.car.values import PLATFORMS | ||||
| from openpilot.selfdrive.controls.lib.events import Events | ||||
| 
 | ||||
| ButtonType = structs.CarState.ButtonEvent.Type | ||||
| GearShifter = structs.CarState.GearShifter | ||||
| EventName = car.CarEvent.EventName | ||||
| 
 | ||||
| 
 | ||||
| def create_common_events(CP: structs.CarParams, cs_out, extra_gears=None, pcm_enable=True, allow_enable=True, | ||||
|                          enable_buttons=(ButtonType.accelCruise, ButtonType.decelCruise)): | ||||
|   events = Events() | ||||
| 
 | ||||
|   if cs_out.doorOpen: | ||||
|     events.add(EventName.doorOpen) | ||||
|   if cs_out.seatbeltUnlatched: | ||||
|     events.add(EventName.seatbeltNotLatched) | ||||
|   if cs_out.gearShifter != GearShifter.drive and (extra_gears is None or | ||||
|      cs_out.gearShifter not in extra_gears): | ||||
|     events.add(EventName.wrongGear) | ||||
|   if cs_out.gearShifter == GearShifter.reverse: | ||||
|     events.add(EventName.reverseGear) | ||||
|   if not cs_out.cruiseState.available: | ||||
|     events.add(EventName.wrongCarMode) | ||||
|   if cs_out.espDisabled: | ||||
|     events.add(EventName.espDisabled) | ||||
|   if cs_out.espActive: | ||||
|     events.add(EventName.espActive) | ||||
|   if cs_out.stockFcw: | ||||
|     events.add(EventName.stockFcw) | ||||
|   if cs_out.stockAeb: | ||||
|     events.add(EventName.stockAeb) | ||||
|   if cs_out.vEgo > MAX_CTRL_SPEED: | ||||
|     events.add(EventName.speedTooHigh) | ||||
|   if cs_out.cruiseState.nonAdaptive: | ||||
|     events.add(EventName.wrongCruiseMode) | ||||
|   if cs_out.brakeHoldActive and CP.openpilotLongitudinalControl: | ||||
|     events.add(EventName.brakeHold) | ||||
|   if cs_out.parkingBrake: | ||||
|     events.add(EventName.parkBrake) | ||||
|   if cs_out.accFaulted: | ||||
|     events.add(EventName.accFaulted) | ||||
|   if cs_out.steeringPressed: | ||||
|     events.add(EventName.steerOverride) | ||||
|   if cs_out.brakePressed and cs_out.standstill: | ||||
|     events.add(EventName.preEnableStandstill) | ||||
|   if cs_out.gasPressed: | ||||
|     events.add(EventName.gasPressedOverride) | ||||
|   if cs_out.vehicleSensorsInvalid: | ||||
|     events.add(EventName.vehicleSensorsInvalid) | ||||
| 
 | ||||
|   # Handle button presses | ||||
|   for b in cs_out.buttonEvents: | ||||
|     # Enable OP long on falling edge of enable buttons (defaults to accelCruise and decelCruise, overridable per-port) | ||||
|     if not CP.pcmCruise and (b.type in enable_buttons and not b.pressed): | ||||
|       events.add(EventName.buttonEnable) | ||||
|     # Disable on rising and falling edge of cancel for both stock and OP long | ||||
|     if b.type == ButtonType.cancel: | ||||
|       events.add(EventName.buttonCancel) | ||||
| 
 | ||||
|   # Handle permanent and temporary steering faults | ||||
|   self.steering_unpressed = 0 if cs_out.steeringPressed else self.steering_unpressed + 1 | ||||
|   if cs_out.steerFaultTemporary: | ||||
|     if cs_out.steeringPressed and (not self.CS.out.steerFaultTemporary or self.no_steer_warning): | ||||
|       self.no_steer_warning = True | ||||
|     else: | ||||
|       self.no_steer_warning = False | ||||
| 
 | ||||
|       # if the user overrode recently, show a less harsh alert | ||||
|       if self.silent_steer_warning or cs_out.standstill or self.steering_unpressed < int(1.5 / DT_CTRL): | ||||
|         self.silent_steer_warning = True | ||||
|         events.add(EventName.steerTempUnavailableSilent) | ||||
|       else: | ||||
|         events.add(EventName.steerTempUnavailable) | ||||
|   else: | ||||
|     self.no_steer_warning = False | ||||
|     self.silent_steer_warning = False | ||||
|   if cs_out.steerFaultPermanent: | ||||
|     events.add(EventName.steerUnavailable) | ||||
| 
 | ||||
|   # we engage when pcm is active (rising edge) | ||||
|   # enabling can optionally be blocked by the car interface | ||||
|   if pcm_enable: | ||||
|     if cs_out.cruiseState.enabled and not self.CS.out.cruiseState.enabled and allow_enable: | ||||
|       events.add(EventName.pcmEnable) | ||||
|     elif not cs_out.cruiseState.enabled: | ||||
|       events.add(EventName.pcmDisable) | ||||
| 
 | ||||
|   return events | ||||
| 
 | ||||
| 
 | ||||
| def create_car_events(CP: structs.CarParams, cs_out: car.CarState): | ||||
|   events = create_common_events(CP, cs_out) | ||||
					Loading…
					
					
				
		Reference in new issue