Revert "move car.capnp to opendbc" (#33725)
	
		
	
				
					
				
			Revert "move car.capnp to opendbc (#33722)"
This reverts commit 8149f7cb11.
			
			
				pull/33726/head
			
			
		
							parent
							
								
									8149f7cb11
								
							
						
					
					
						commit
						9d52a5b485
					
				
				 14 changed files with 845 additions and 41 deletions
			
			
		| @ -1 +0,0 @@ | |||||||
| ../opendbc_repo/opendbc/car/car.capnp |  | ||||||
| @ -0,0 +1,722 @@ | |||||||
|  | using Cxx = import "./include/c++.capnp"; | ||||||
|  | $Cxx.namespace("cereal"); | ||||||
|  | 
 | ||||||
|  | @0x8e2af1e708af8b8d; | ||||||
|  | 
 | ||||||
|  | # ******* events causing controls state machine transition ******* | ||||||
|  | 
 | ||||||
|  | # IMPORTANT: This struct is to not be modified so old logs can be parsed | ||||||
|  | struct OnroadEventDEPRECATED @0x9b1657f34caf3ad3 { | ||||||
|  |   name @0 :EventName; | ||||||
|  | 
 | ||||||
|  |   # event types | ||||||
|  |   enable @1 :Bool; | ||||||
|  |   noEntry @2 :Bool; | ||||||
|  |   warning @3 :Bool;   # alerts presented only when  enabled or soft disabling | ||||||
|  |   userDisable @4 :Bool; | ||||||
|  |   softDisable @5 :Bool; | ||||||
|  |   immediateDisable @6 :Bool; | ||||||
|  |   preEnable @7 :Bool; | ||||||
|  |   permanent @8 :Bool; # alerts presented regardless of openpilot state | ||||||
|  |   overrideLateral @10 :Bool; | ||||||
|  |   overrideLongitudinal @9 :Bool; | ||||||
|  | 
 | ||||||
|  |   enum EventName @0xbaa8c5d505f727de { | ||||||
|  |     canError @0; | ||||||
|  |     steerUnavailable @1; | ||||||
|  |     wrongGear @4; | ||||||
|  |     doorOpen @5; | ||||||
|  |     seatbeltNotLatched @6; | ||||||
|  |     espDisabled @7; | ||||||
|  |     wrongCarMode @8; | ||||||
|  |     steerTempUnavailable @9; | ||||||
|  |     reverseGear @10; | ||||||
|  |     buttonCancel @11; | ||||||
|  |     buttonEnable @12; | ||||||
|  |     pedalPressed @13;  # exits active state | ||||||
|  |     preEnableStandstill @73;  # added during pre-enable state with brake | ||||||
|  |     gasPressedOverride @108;  # added when user is pressing gas with no disengage on gas | ||||||
|  |     steerOverride @114; | ||||||
|  |     cruiseDisabled @14; | ||||||
|  |     speedTooLow @17; | ||||||
|  |     outOfSpace @18; | ||||||
|  |     overheat @19; | ||||||
|  |     calibrationIncomplete @20; | ||||||
|  |     calibrationInvalid @21; | ||||||
|  |     calibrationRecalibrating @117; | ||||||
|  |     controlsMismatch @22; | ||||||
|  |     pcmEnable @23; | ||||||
|  |     pcmDisable @24; | ||||||
|  |     radarFault @26; | ||||||
|  |     brakeHold @28; | ||||||
|  |     parkBrake @29; | ||||||
|  |     manualRestart @30; | ||||||
|  |     joystickDebug @34; | ||||||
|  |     longitudinalManeuver @124; | ||||||
|  |     steerTempUnavailableSilent @35; | ||||||
|  |     resumeRequired @36; | ||||||
|  |     preDriverDistracted @37; | ||||||
|  |     promptDriverDistracted @38; | ||||||
|  |     driverDistracted @39; | ||||||
|  |     preDriverUnresponsive @43; | ||||||
|  |     promptDriverUnresponsive @44; | ||||||
|  |     driverUnresponsive @45; | ||||||
|  |     belowSteerSpeed @46; | ||||||
|  |     lowBattery @48; | ||||||
|  |     accFaulted @51; | ||||||
|  |     sensorDataInvalid @52; | ||||||
|  |     commIssue @53; | ||||||
|  |     commIssueAvgFreq @109; | ||||||
|  |     tooDistracted @54; | ||||||
|  |     posenetInvalid @55; | ||||||
|  |     soundsUnavailable @56; | ||||||
|  |     preLaneChangeLeft @57; | ||||||
|  |     preLaneChangeRight @58; | ||||||
|  |     laneChange @59; | ||||||
|  |     lowMemory @63; | ||||||
|  |     stockAeb @64; | ||||||
|  |     ldw @65; | ||||||
|  |     carUnrecognized @66; | ||||||
|  |     invalidLkasSetting @69; | ||||||
|  |     speedTooHigh @70; | ||||||
|  |     laneChangeBlocked @71; | ||||||
|  |     relayMalfunction @72; | ||||||
|  |     stockFcw @74; | ||||||
|  |     startup @75; | ||||||
|  |     startupNoCar @76; | ||||||
|  |     startupNoControl @77; | ||||||
|  |     startupNoSecOcKey @125; | ||||||
|  |     startupMaster @78; | ||||||
|  |     fcw @79; | ||||||
|  |     steerSaturated @80; | ||||||
|  |     belowEngageSpeed @84; | ||||||
|  |     noGps @85; | ||||||
|  |     wrongCruiseMode @87; | ||||||
|  |     modeldLagging @89; | ||||||
|  |     deviceFalling @90; | ||||||
|  |     fanMalfunction @91; | ||||||
|  |     cameraMalfunction @92; | ||||||
|  |     cameraFrameRate @110; | ||||||
|  |     processNotRunning @95; | ||||||
|  |     dashcamMode @96; | ||||||
|  |     selfdriveInitializing @98; | ||||||
|  |     usbError @99; | ||||||
|  |     cruiseMismatch @106; | ||||||
|  |     canBusMissing @111; | ||||||
|  |     selfdrivedLagging @112; | ||||||
|  |     resumeBlocked @113; | ||||||
|  |     steerTimeLimit @115; | ||||||
|  |     vehicleSensorsInvalid @116; | ||||||
|  |     locationdTemporaryError @103; | ||||||
|  |     locationdPermanentError @118; | ||||||
|  |     paramsdTemporaryError @50; | ||||||
|  |     paramsdPermanentError @119; | ||||||
|  |     actuatorsApiUnavailable @120; | ||||||
|  |     espActive @121; | ||||||
|  |     personalityChanged @122; | ||||||
|  |     aeb @123; | ||||||
|  | 
 | ||||||
|  |     radarCanErrorDEPRECATED @15; | ||||||
|  |     communityFeatureDisallowedDEPRECATED @62; | ||||||
|  |     radarCommIssueDEPRECATED @67; | ||||||
|  |     driverMonitorLowAccDEPRECATED @68; | ||||||
|  |     gasUnavailableDEPRECATED @3; | ||||||
|  |     dataNeededDEPRECATED @16; | ||||||
|  |     modelCommIssueDEPRECATED @27; | ||||||
|  |     ipasOverrideDEPRECATED @33; | ||||||
|  |     geofenceDEPRECATED @40; | ||||||
|  |     driverMonitorOnDEPRECATED @41; | ||||||
|  |     driverMonitorOffDEPRECATED @42; | ||||||
|  |     calibrationProgressDEPRECATED @47; | ||||||
|  |     invalidGiraffeHondaDEPRECATED @49; | ||||||
|  |     invalidGiraffeToyotaDEPRECATED @60; | ||||||
|  |     internetConnectivityNeededDEPRECATED @61; | ||||||
|  |     whitePandaUnsupportedDEPRECATED @81; | ||||||
|  |     commIssueWarningDEPRECATED @83; | ||||||
|  |     focusRecoverActiveDEPRECATED @86; | ||||||
|  |     neosUpdateRequiredDEPRECATED @88; | ||||||
|  |     modelLagWarningDEPRECATED @93; | ||||||
|  |     startupOneplusDEPRECATED @82; | ||||||
|  |     startupFuzzyFingerprintDEPRECATED @97; | ||||||
|  |     noTargetDEPRECATED @25; | ||||||
|  |     brakeUnavailableDEPRECATED @2; | ||||||
|  |     plannerErrorDEPRECATED @32; | ||||||
|  |     gpsMalfunctionDEPRECATED @94; | ||||||
|  |     roadCameraErrorDEPRECATED @100; | ||||||
|  |     driverCameraErrorDEPRECATED @101; | ||||||
|  |     wideRoadCameraErrorDEPRECATED @102; | ||||||
|  |     highCpuUsageDEPRECATED @105; | ||||||
|  |     startupNoFwDEPRECATED @104; | ||||||
|  |     lowSpeedLockoutDEPRECATED @31; | ||||||
|  |     lkasDisabledDEPRECATED @107; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # ******* main car state @ 100hz ******* | ||||||
|  | # all speeds in m/s | ||||||
|  | 
 | ||||||
|  | struct CarState { | ||||||
|  |   # CAN health | ||||||
|  |   canValid @26 :Bool;       # invalid counter/checksums | ||||||
|  |   canTimeout @40 :Bool;     # CAN bus dropped out | ||||||
|  |   canErrorCounter @48 :UInt32; | ||||||
|  | 
 | ||||||
|  |   # car speed | ||||||
|  |   vEgo @1 :Float32;            # best estimate of speed | ||||||
|  |   aEgo @16 :Float32;           # best estimate of aCAN cceleration | ||||||
|  |   vEgoRaw @17 :Float32;        # unfiltered speed from wheel speed sensors | ||||||
|  |   vEgoCluster @44 :Float32;    # best estimate of speed shown on car's instrument cluster, used for UI | ||||||
|  | 
 | ||||||
|  |   vCruise @53 :Float32;        # actual set speed | ||||||
|  |   vCruiseCluster @54 :Float32; # set speed to display in the UI | ||||||
|  | 
 | ||||||
|  |   yawRate @22 :Float32;     # best estimate of yaw rate | ||||||
|  |   standstill @18 :Bool; | ||||||
|  |   wheelSpeeds @2 :WheelSpeeds; | ||||||
|  | 
 | ||||||
|  |   # gas pedal, 0.0-1.0 | ||||||
|  |   gas @3 :Float32;        # this is user pedal only | ||||||
|  |   gasPressed @4 :Bool;    # this is user pedal only | ||||||
|  | 
 | ||||||
|  |   engineRpm @46 :Float32; | ||||||
|  | 
 | ||||||
|  |   # brake pedal, 0.0-1.0 | ||||||
|  |   brake @5 :Float32;      # this is user pedal only | ||||||
|  |   brakePressed @6 :Bool;  # this is user pedal only | ||||||
|  |   regenBraking @45 :Bool; # this is user pedal only | ||||||
|  |   parkingBrake @39 :Bool; | ||||||
|  |   brakeHoldActive @38 :Bool; | ||||||
|  | 
 | ||||||
|  |   # steering wheel | ||||||
|  |   steeringAngleDeg @7 :Float32; | ||||||
|  |   steeringAngleOffsetDeg @37 :Float32; # Offset betweens sensors in case there multiple | ||||||
|  |   steeringRateDeg @15 :Float32; | ||||||
|  |   steeringTorque @8 :Float32;      # TODO: standardize units | ||||||
|  |   steeringTorqueEps @27 :Float32;  # TODO: standardize units | ||||||
|  |   steeringPressed @9 :Bool;        # if the user is using the steering wheel | ||||||
|  |   steerFaultTemporary @35 :Bool;   # temporary EPS fault | ||||||
|  |   steerFaultPermanent @36 :Bool;   # permanent EPS fault | ||||||
|  |   invalidLkasSetting @55 :Bool;    # stock LKAS is incorrectly configured (i.e. on or off) | ||||||
|  |   stockAeb @30 :Bool; | ||||||
|  |   stockFcw @31 :Bool; | ||||||
|  |   espDisabled @32 :Bool; | ||||||
|  |   accFaulted @42 :Bool; | ||||||
|  |   carFaultedNonCritical @47 :Bool;  # some ECU is faulted, but car remains controllable | ||||||
|  |   espActive @51 :Bool; | ||||||
|  |   vehicleSensorsInvalid @52 :Bool;  # invalid steering angle readings, etc. | ||||||
|  |   lowSpeedAlert @56 :Bool;  # lost steering control due to a dynamic min steering speed | ||||||
|  | 
 | ||||||
|  |   # cruise state | ||||||
|  |   cruiseState @10 :CruiseState; | ||||||
|  | 
 | ||||||
|  |   # gear | ||||||
|  |   gearShifter @14 :GearShifter; | ||||||
|  | 
 | ||||||
|  |   # button presses | ||||||
|  |   buttonEvents @11 :List(ButtonEvent); | ||||||
|  |   leftBlinker @20 :Bool; | ||||||
|  |   rightBlinker @21 :Bool; | ||||||
|  |   genericToggle @23 :Bool; | ||||||
|  | 
 | ||||||
|  |   # lock info | ||||||
|  |   doorOpen @24 :Bool; | ||||||
|  |   seatbeltUnlatched @25 :Bool; | ||||||
|  | 
 | ||||||
|  |   # clutch (manual transmission only) | ||||||
|  |   clutchPressed @28 :Bool; | ||||||
|  | 
 | ||||||
|  |   # blindspot sensors | ||||||
|  |   leftBlindspot @33 :Bool; # Is there something blocking the left lane change | ||||||
|  |   rightBlindspot @34 :Bool; # Is there something blocking the right lane change | ||||||
|  | 
 | ||||||
|  |   fuelGauge @41 :Float32; # battery or fuel tank level from 0.0 to 1.0 | ||||||
|  |   charging @43 :Bool; | ||||||
|  | 
 | ||||||
|  |   # process meta | ||||||
|  |   cumLagMs @50 :Float32; | ||||||
|  | 
 | ||||||
|  |   struct WheelSpeeds { | ||||||
|  |     # optional wheel speeds | ||||||
|  |     fl @0 :Float32; | ||||||
|  |     fr @1 :Float32; | ||||||
|  |     rl @2 :Float32; | ||||||
|  |     rr @3 :Float32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct CruiseState { | ||||||
|  |     enabled @0 :Bool; | ||||||
|  |     speed @1 :Float32; | ||||||
|  |     speedCluster @6 :Float32;  # Set speed as shown on instrument cluster | ||||||
|  |     available @2 :Bool; | ||||||
|  |     speedOffset @3 :Float32; | ||||||
|  |     standstill @4 :Bool; | ||||||
|  |     nonAdaptive @5 :Bool; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum GearShifter { | ||||||
|  |     unknown @0; | ||||||
|  |     park @1; | ||||||
|  |     drive @2; | ||||||
|  |     neutral @3; | ||||||
|  |     reverse @4; | ||||||
|  |     sport @5; | ||||||
|  |     low @6; | ||||||
|  |     brake @7; | ||||||
|  |     eco @8; | ||||||
|  |     manumatic @9; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   # send on change | ||||||
|  |   struct ButtonEvent { | ||||||
|  |     pressed @0 :Bool; | ||||||
|  |     type @1 :Type; | ||||||
|  | 
 | ||||||
|  |     enum Type { | ||||||
|  |       unknown @0; | ||||||
|  |       leftBlinker @1; | ||||||
|  |       rightBlinker @2; | ||||||
|  |       accelCruise @3; | ||||||
|  |       decelCruise @4; | ||||||
|  |       cancel @5; | ||||||
|  |       altButton1 @6; | ||||||
|  |       altButton2 @7; | ||||||
|  |       mainCruise @8; | ||||||
|  |       setCruise @9; | ||||||
|  |       resumeCruise @10; | ||||||
|  |       gapAdjustCruise @11; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   # deprecated | ||||||
|  |   errorsDEPRECATED @0 :List(OnroadEventDEPRECATED.EventName); | ||||||
|  |   brakeLightsDEPRECATED @19 :Bool; | ||||||
|  |   steeringRateLimitedDEPRECATED @29 :Bool; | ||||||
|  |   canMonoTimesDEPRECATED @12: List(UInt64); | ||||||
|  |   canRcvTimeoutDEPRECATED @49 :Bool; | ||||||
|  |   eventsDEPRECATED @13 :List(OnroadEventDEPRECATED); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # ******* radar state @ 20hz ******* | ||||||
|  | 
 | ||||||
|  | struct RadarData @0x888ad6581cf0aacb { | ||||||
|  |   errors @0 :List(Error); | ||||||
|  |   points @1 :List(RadarPoint); | ||||||
|  | 
 | ||||||
|  |   enum Error { | ||||||
|  |     canError @0; | ||||||
|  |     fault @1; | ||||||
|  |     wrongConfig @2; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   # similar to LiveTracks | ||||||
|  |   # is one timestamp valid for all? I think so | ||||||
|  |   struct RadarPoint { | ||||||
|  |     trackId @0 :UInt64;  # no trackId reuse | ||||||
|  | 
 | ||||||
|  |     # these 3 are the minimum required | ||||||
|  |     dRel @1 :Float32; # m from the front bumper of the car | ||||||
|  |     yRel @2 :Float32; # m | ||||||
|  |     vRel @3 :Float32; # m/s | ||||||
|  | 
 | ||||||
|  |     # these are optional and valid if they are not NaN | ||||||
|  |     aRel @4 :Float32; # m/s^2 | ||||||
|  |     yvRel @5 :Float32; # m/s | ||||||
|  | 
 | ||||||
|  |     # some radars flag measurements VS estimates | ||||||
|  |     measured @6 :Bool; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   # deprecated | ||||||
|  |   canMonoTimesDEPRECATED @2 :List(UInt64); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # ******* car controls @ 100hz ******* | ||||||
|  | 
 | ||||||
|  | struct CarControl { | ||||||
|  |   # must be true for any actuator commands to work | ||||||
|  |   enabled @0 :Bool; | ||||||
|  |   latActive @11: Bool; | ||||||
|  |   longActive @12: Bool; | ||||||
|  | 
 | ||||||
|  |   # Final actuator commands | ||||||
|  |   actuators @6 :Actuators; | ||||||
|  | 
 | ||||||
|  |   # Blinker controls | ||||||
|  |   leftBlinker @15: Bool; | ||||||
|  |   rightBlinker @16: Bool; | ||||||
|  | 
 | ||||||
|  |   orientationNED @13 :List(Float32); | ||||||
|  |   angularVelocity @14 :List(Float32); | ||||||
|  | 
 | ||||||
|  |   cruiseControl @4 :CruiseControl; | ||||||
|  |   hudControl @5 :HUDControl; | ||||||
|  | 
 | ||||||
|  |   struct Actuators { | ||||||
|  |     # lateral commands, mutually exclusive | ||||||
|  |     steer @2: Float32;  # [0.0, 1.0] | ||||||
|  |     steeringAngleDeg @3: Float32; | ||||||
|  |     curvature @7: Float32; | ||||||
|  | 
 | ||||||
|  |     # longitudinal commands | ||||||
|  |     accel @4: Float32;  # m/s^2 | ||||||
|  |     longControlState @5: LongControlState; | ||||||
|  | 
 | ||||||
|  |     # these are only for logging the actual values sent to the car over CAN | ||||||
|  |     gas @0: Float32;   # [0.0, 1.0] | ||||||
|  |     brake @1: Float32; # [0.0, 1.0] | ||||||
|  |     steerOutputCan @8: Float32;   # value sent over can to the car | ||||||
|  |     speed @6: Float32;  # m/s | ||||||
|  | 
 | ||||||
|  |     enum LongControlState @0xe40f3a917d908282{ | ||||||
|  |       off @0; | ||||||
|  |       pid @1; | ||||||
|  |       stopping @2; | ||||||
|  |       starting @3; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct CruiseControl { | ||||||
|  |     cancel @0: Bool; | ||||||
|  |     resume @1: Bool; | ||||||
|  |     override @4: Bool; | ||||||
|  |     speedOverrideDEPRECATED @2: Float32; | ||||||
|  |     accelOverrideDEPRECATED @3: Float32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct HUDControl { | ||||||
|  |     speedVisible @0: Bool; | ||||||
|  |     setSpeed @1: Float32; | ||||||
|  |     lanesVisible @2: Bool; | ||||||
|  |     leadVisible @3: Bool; | ||||||
|  |     visualAlert @4: VisualAlert; | ||||||
|  |     audibleAlert @5: AudibleAlert; | ||||||
|  |     rightLaneVisible @6: Bool; | ||||||
|  |     leftLaneVisible @7: Bool; | ||||||
|  |     rightLaneDepart @8: Bool; | ||||||
|  |     leftLaneDepart @9: Bool; | ||||||
|  |     leadDistanceBars @10: Int8;  # 1-3: 1 is closest, 3 is farthest. some ports may utilize 2-4 bars instead | ||||||
|  | 
 | ||||||
|  |     enum VisualAlert { | ||||||
|  |       # these are the choices from the Honda | ||||||
|  |       # map as good as you can for your car | ||||||
|  |       none @0; | ||||||
|  |       fcw @1; | ||||||
|  |       steerRequired @2; | ||||||
|  |       brakePressed @3; | ||||||
|  |       wrongGear @4; | ||||||
|  |       seatbeltUnbuckled @5; | ||||||
|  |       speedTooHigh @6; | ||||||
|  |       ldw @7; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     enum AudibleAlert { | ||||||
|  |       none @0; | ||||||
|  | 
 | ||||||
|  |       engage @1; | ||||||
|  |       disengage @2; | ||||||
|  |       refuse @3; | ||||||
|  | 
 | ||||||
|  |       warningSoft @4; | ||||||
|  |       warningImmediate @5; | ||||||
|  | 
 | ||||||
|  |       prompt @6; | ||||||
|  |       promptRepeat @7; | ||||||
|  |       promptDistracted @8; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   gasDEPRECATED @1 :Float32; | ||||||
|  |   brakeDEPRECATED @2 :Float32; | ||||||
|  |   steeringTorqueDEPRECATED @3 :Float32; | ||||||
|  |   activeDEPRECATED @7 :Bool; | ||||||
|  |   rollDEPRECATED @8 :Float32; | ||||||
|  |   pitchDEPRECATED @9 :Float32; | ||||||
|  |   actuatorsOutputDEPRECATED @10 :Actuators; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct CarOutput { | ||||||
|  |   # Any car specific rate limits or quirks applied by | ||||||
|  |   # the CarController are reflected in actuatorsOutput | ||||||
|  |   # and matches what is sent to the car | ||||||
|  |   actuatorsOutput @0 :CarControl.Actuators; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # ****** car param ****** | ||||||
|  | 
 | ||||||
|  | struct CarParams { | ||||||
|  |   carName @0 :Text; | ||||||
|  |   carFingerprint @1 :Text; | ||||||
|  |   fuzzyFingerprint @55 :Bool; | ||||||
|  | 
 | ||||||
|  |   notCar @66 :Bool;  # flag for non-car robotics platforms | ||||||
|  | 
 | ||||||
|  |   pcmCruise @3 :Bool;        # is openpilot's state tied to the PCM's cruise state? | ||||||
|  |   enableDsu @5 :Bool;        # driving support unit | ||||||
|  |   enableBsm @56 :Bool;       # blind spot monitoring | ||||||
|  |   flags @64 :UInt32;         # flags for car specific quirks | ||||||
|  |   experimentalLongitudinalAvailable @71 :Bool; | ||||||
|  | 
 | ||||||
|  |   minEnableSpeed @7 :Float32; | ||||||
|  |   minSteerSpeed @8 :Float32; | ||||||
|  |   safetyConfigs @62 :List(SafetyConfig); | ||||||
|  |   alternativeExperience @65 :Int16;      # panda flag for features like no disengage on gas | ||||||
|  | 
 | ||||||
|  |   # Car docs fields | ||||||
|  |   maxLateralAccel @68 :Float32; | ||||||
|  |   autoResumeSng @69 :Bool;               # describes whether car can resume from a stop automatically | ||||||
|  | 
 | ||||||
|  |   # things about the car in the manual | ||||||
|  |   mass @17 :Float32;            # [kg] curb weight: all fluids no cargo | ||||||
|  |   wheelbase @18 :Float32;       # [m] distance from rear axle to front axle | ||||||
|  |   centerToFront @19 :Float32;   # [m] distance from center of mass to front axle | ||||||
|  |   steerRatio @20 :Float32;      # [] ratio of steering wheel angle to front wheel angle | ||||||
|  |   steerRatioRear @21 :Float32;  # [] ratio of steering wheel angle to rear wheel angle (usually 0) | ||||||
|  | 
 | ||||||
|  |   # things we can derive | ||||||
|  |   rotationalInertia @22 :Float32;    # [kg*m2] body rotational inertia | ||||||
|  |   tireStiffnessFactor @72 :Float32;  # scaling factor used in calculating tireStiffness[Front,Rear] | ||||||
|  |   tireStiffnessFront @23 :Float32;   # [N/rad] front tire coeff of stiff | ||||||
|  |   tireStiffnessRear @24 :Float32;    # [N/rad] rear tire coeff of stiff | ||||||
|  | 
 | ||||||
|  |   longitudinalTuning @25 :LongitudinalPIDTuning; | ||||||
|  |   lateralParams @48 :LateralParams; | ||||||
|  |   lateralTuning :union { | ||||||
|  |     pid @26 :LateralPIDTuning; | ||||||
|  |     indiDEPRECATED @27 :LateralINDITuning; | ||||||
|  |     lqrDEPRECATED @40 :LateralLQRTuning; | ||||||
|  |     torque @67 :LateralTorqueTuning; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   steerLimitAlert @28 :Bool; | ||||||
|  |   steerLimitTimer @47 :Float32;  # time before steerLimitAlert is issued | ||||||
|  | 
 | ||||||
|  |   vEgoStopping @29 :Float32; # Speed at which the car goes into stopping state | ||||||
|  |   vEgoStarting @59 :Float32; # Speed at which the car goes into starting state | ||||||
|  |   stoppingControl @31 :Bool; # Does the car allow full control even at lows speeds when stopping | ||||||
|  |   steerControlType @34 :SteerControlType; | ||||||
|  |   radarUnavailable @35 :Bool; # True when radar objects aren't visible on CAN or aren't parsed out | ||||||
|  |   stopAccel @60 :Float32; # Required acceleration to keep vehicle stationary | ||||||
|  |   stoppingDecelRate @52 :Float32; # m/s^2/s while trying to stop | ||||||
|  |   startAccel @32 :Float32; # Required acceleration to get car moving | ||||||
|  |   startingState @70 :Bool; # Does this car make use of special starting state | ||||||
|  | 
 | ||||||
|  |   steerActuatorDelay @36 :Float32; # Steering wheel actuator delay in seconds | ||||||
|  |   longitudinalActuatorDelay @58 :Float32; # Gas/Brake actuator delay in seconds | ||||||
|  |   openpilotLongitudinalControl @37 :Bool; # is openpilot doing the longitudinal control? | ||||||
|  |   carVin @38 :Text; # VIN number queried during fingerprinting | ||||||
|  |   dashcamOnly @41: Bool; | ||||||
|  |   passive @73: Bool;   # is openpilot in control? | ||||||
|  |   transmissionType @43 :TransmissionType; | ||||||
|  |   carFw @44 :List(CarFw); | ||||||
|  | 
 | ||||||
|  |   radarTimeStep @45: Float32 = 0.05;  # time delta between radar updates, 20Hz is very standard | ||||||
|  |   radarDelay @74 :Float32; | ||||||
|  |   fingerprintSource @49: FingerprintSource; | ||||||
|  |   networkLocation @50 :NetworkLocation;  # Where Panda/C2 is integrated into the car's CAN network | ||||||
|  | 
 | ||||||
|  |   wheelSpeedFactor @63 :Float32; # Multiplier on wheels speeds to computer actual speeds | ||||||
|  | 
 | ||||||
|  |   secOcRequired @75 :Bool;  # Car requires SecOC message authentication to operate | ||||||
|  |   secOcKeyAvailable @76 :Bool;  # Stored SecOC key loaded from params | ||||||
|  | 
 | ||||||
|  |   struct SafetyConfig { | ||||||
|  |     safetyModel @0 :SafetyModel; | ||||||
|  |     safetyParam @3 :UInt16; | ||||||
|  |     safetyParamDEPRECATED @1 :Int16; | ||||||
|  |     safetyParam2DEPRECATED @2 :UInt32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LateralParams { | ||||||
|  |     torqueBP @0 :List(Int32); | ||||||
|  |     torqueV @1 :List(Int32); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LateralPIDTuning { | ||||||
|  |     kpBP @0 :List(Float32); | ||||||
|  |     kpV @1 :List(Float32); | ||||||
|  |     kiBP @2 :List(Float32); | ||||||
|  |     kiV @3 :List(Float32); | ||||||
|  |     kf @4 :Float32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LateralTorqueTuning { | ||||||
|  |     useSteeringAngle @0 :Bool; | ||||||
|  |     kp @1 :Float32; | ||||||
|  |     ki @2 :Float32; | ||||||
|  |     friction @3 :Float32; | ||||||
|  |     kf @4 :Float32; | ||||||
|  |     steeringAngleDeadzoneDeg @5 :Float32; | ||||||
|  |     latAccelFactor @6 :Float32; | ||||||
|  |     latAccelOffset @7 :Float32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LongitudinalPIDTuning { | ||||||
|  |     kpBP @0 :List(Float32); | ||||||
|  |     kpV @1 :List(Float32); | ||||||
|  |     kiBP @2 :List(Float32); | ||||||
|  |     kiV @3 :List(Float32); | ||||||
|  |     kf @6 :Float32; | ||||||
|  |     deadzoneBPDEPRECATED @4 :List(Float32); | ||||||
|  |     deadzoneVDEPRECATED @5 :List(Float32); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LateralINDITuning { | ||||||
|  |     outerLoopGainBP @4 :List(Float32); | ||||||
|  |     outerLoopGainV @5 :List(Float32); | ||||||
|  |     innerLoopGainBP @6 :List(Float32); | ||||||
|  |     innerLoopGainV @7 :List(Float32); | ||||||
|  |     timeConstantBP @8 :List(Float32); | ||||||
|  |     timeConstantV @9 :List(Float32); | ||||||
|  |     actuatorEffectivenessBP @10 :List(Float32); | ||||||
|  |     actuatorEffectivenessV @11 :List(Float32); | ||||||
|  | 
 | ||||||
|  |     outerLoopGainDEPRECATED @0 :Float32; | ||||||
|  |     innerLoopGainDEPRECATED @1 :Float32; | ||||||
|  |     timeConstantDEPRECATED @2 :Float32; | ||||||
|  |     actuatorEffectivenessDEPRECATED @3 :Float32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct LateralLQRTuning { | ||||||
|  |     scale @0 :Float32; | ||||||
|  |     ki @1 :Float32; | ||||||
|  |     dcGain @2 :Float32; | ||||||
|  | 
 | ||||||
|  |     # State space system | ||||||
|  |     a @3 :List(Float32); | ||||||
|  |     b @4 :List(Float32); | ||||||
|  |     c @5 :List(Float32); | ||||||
|  | 
 | ||||||
|  |     k @6 :List(Float32);  # LQR gain | ||||||
|  |     l @7 :List(Float32);  # Kalman gain | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum SafetyModel { | ||||||
|  |     silent @0; | ||||||
|  |     hondaNidec @1; | ||||||
|  |     toyota @2; | ||||||
|  |     elm327 @3; | ||||||
|  |     gm @4; | ||||||
|  |     hondaBoschGiraffe @5; | ||||||
|  |     ford @6; | ||||||
|  |     cadillac @7; | ||||||
|  |     hyundai @8; | ||||||
|  |     chrysler @9; | ||||||
|  |     tesla @10; | ||||||
|  |     subaru @11; | ||||||
|  |     gmPassive @12; | ||||||
|  |     mazda @13; | ||||||
|  |     nissan @14; | ||||||
|  |     volkswagen @15; | ||||||
|  |     toyotaIpas @16; | ||||||
|  |     allOutput @17; | ||||||
|  |     gmAscm @18; | ||||||
|  |     noOutput @19;  # like silent but without silent CAN TXs | ||||||
|  |     hondaBosch @20; | ||||||
|  |     volkswagenPq @21; | ||||||
|  |     subaruPreglobal @22;  # pre-Global platform | ||||||
|  |     hyundaiLegacy @23; | ||||||
|  |     hyundaiCommunity @24; | ||||||
|  |     volkswagenMlb @25; | ||||||
|  |     hongqi @26; | ||||||
|  |     body @27; | ||||||
|  |     hyundaiCanfd @28; | ||||||
|  |     volkswagenMqbEvo @29; | ||||||
|  |     chryslerCusw @30; | ||||||
|  |     psa @31; | ||||||
|  |     fcaGiorgio @32; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum SteerControlType { | ||||||
|  |     torque @0; | ||||||
|  |     angle @1; | ||||||
|  | 
 | ||||||
|  |     curvatureDEPRECATED @2; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum TransmissionType { | ||||||
|  |     unknown @0; | ||||||
|  |     automatic @1;  # Traditional auto, including DSG | ||||||
|  |     manual @2;  # True "stick shift" only | ||||||
|  |     direct @3;  # Electric vehicle or other direct drive | ||||||
|  |     cvt @4; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   struct CarFw { | ||||||
|  |     ecu @0 :Ecu; | ||||||
|  |     fwVersion @1 :Data; | ||||||
|  |     address @2 :UInt32; | ||||||
|  |     subAddress @3 :UInt8; | ||||||
|  |     responseAddress @4 :UInt32; | ||||||
|  |     request @5 :List(Data); | ||||||
|  |     brand @6 :Text; | ||||||
|  |     bus @7 :UInt8; | ||||||
|  |     logging @8 :Bool; | ||||||
|  |     obdMultiplexing @9 :Bool; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum Ecu { | ||||||
|  |     eps @0; | ||||||
|  |     abs @1; | ||||||
|  |     fwdRadar @2; | ||||||
|  |     fwdCamera @3; | ||||||
|  |     engine @4; | ||||||
|  |     unknown @5; | ||||||
|  |     transmission @8; # Transmission Control Module | ||||||
|  |     hybrid @18; # hybrid control unit, e.g. Chrysler's HCP, Honda's IMA Control Unit, Toyota's hybrid control computer | ||||||
|  |     srs @9; # airbag | ||||||
|  |     gateway @10; # can gateway | ||||||
|  |     hud @11; # heads up display | ||||||
|  |     combinationMeter @12; # instrument cluster | ||||||
|  |     electricBrakeBooster @15; | ||||||
|  |     shiftByWire @16; | ||||||
|  |     adas @19; | ||||||
|  |     cornerRadar @21; | ||||||
|  |     hvac @20; | ||||||
|  |     parkingAdas @7;  # parking assist system ECU, e.g. Toyota's IPAS, Hyundai's RSPA, etc. | ||||||
|  |     epb @22;  # electronic parking brake | ||||||
|  |     telematics @23; | ||||||
|  |     body @24;  # body control module | ||||||
|  | 
 | ||||||
|  |     # Toyota only | ||||||
|  |     dsu @6; | ||||||
|  | 
 | ||||||
|  |     # Honda only | ||||||
|  |     vsa @13; # Vehicle Stability Assist | ||||||
|  |     programmedFuelInjection @14; | ||||||
|  | 
 | ||||||
|  |     debug @17; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum FingerprintSource { | ||||||
|  |     can @0; | ||||||
|  |     fw @1; | ||||||
|  |     fixed @2; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enum NetworkLocation { | ||||||
|  |     fwdCamera @0;  # Standard/default integration at LKAS camera | ||||||
|  |     gateway @1;    # Integration at vehicle's CAN gateway | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   enableGasInterceptorDEPRECATED @2 :Bool; | ||||||
|  |   enableCameraDEPRECATED @4 :Bool; | ||||||
|  |   enableApgsDEPRECATED @6 :Bool; | ||||||
|  |   steerRateCostDEPRECATED @33 :Float32; | ||||||
|  |   isPandaBlackDEPRECATED @39 :Bool; | ||||||
|  |   hasStockCameraDEPRECATED @57 :Bool; | ||||||
|  |   safetyParamDEPRECATED @10 :Int16; | ||||||
|  |   safetyModelDEPRECATED @9 :SafetyModel; | ||||||
|  |   safetyModelPassiveDEPRECATED @42 :SafetyModel = silent; | ||||||
|  |   minSpeedCanDEPRECATED @51 :Float32; | ||||||
|  |   communityFeatureDEPRECATED @46: Bool; | ||||||
|  |   startingAccelRateDEPRECATED @53 :Float32; | ||||||
|  |   steerMaxBPDEPRECATED @11 :List(Float32); | ||||||
|  |   steerMaxVDEPRECATED @12 :List(Float32); | ||||||
|  |   gasMaxBPDEPRECATED @13 :List(Float32); | ||||||
|  |   gasMaxVDEPRECATED @14 :List(Float32); | ||||||
|  |   brakeMaxBPDEPRECATED @15 :List(Float32); | ||||||
|  |   brakeMaxVDEPRECATED @16 :List(Float32); | ||||||
|  |   directAccelControlDEPRECATED @30 :Bool; | ||||||
|  |   maxSteeringAngleDegDEPRECATED @54 :Float32; | ||||||
|  |   longitudinalActuatorDelayLowerBoundDEPRECATED @61 :Float32; | ||||||
|  | } | ||||||
| @ -1 +1 @@ | |||||||
| Subproject commit ff2ac79e07c2d9021c2fd4fc886ca61c81cd2694 | Subproject commit a363ce1ff452e63f2e49938508d97aece4ba6a3e | ||||||
| @ -0,0 +1,74 @@ | |||||||
|  | import capnp | ||||||
|  | from typing import Any | ||||||
|  | 
 | ||||||
|  | from cereal import car | ||||||
|  | from opendbc.car import structs | ||||||
|  | 
 | ||||||
|  | _FIELDS = '__dataclass_fields__'  # copy of dataclasses._FIELDS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def is_dataclass(obj): | ||||||
|  |   """Similar to dataclasses.is_dataclass without instance type check checking""" | ||||||
|  |   return hasattr(obj, _FIELDS) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def _asdictref_inner(obj) -> dict[str, Any] | Any: | ||||||
|  |   if is_dataclass(obj): | ||||||
|  |     ret = {} | ||||||
|  |     for field in getattr(obj, _FIELDS):  # similar to dataclasses.fields() | ||||||
|  |       ret[field] = _asdictref_inner(getattr(obj, field)) | ||||||
|  |     return ret | ||||||
|  |   elif isinstance(obj, (tuple, list)): | ||||||
|  |     return type(obj)(_asdictref_inner(v) for v in obj) | ||||||
|  |   else: | ||||||
|  |     return obj | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def asdictref(obj) -> dict[str, Any]: | ||||||
|  |   """ | ||||||
|  |   Similar to dataclasses.asdict without recursive type checking and copy.deepcopy | ||||||
|  |   Note that the resulting dict will contain references to the original struct as a result | ||||||
|  |   """ | ||||||
|  |   if not is_dataclass(obj): | ||||||
|  |     raise TypeError("asdictref() should be called on dataclass instances") | ||||||
|  | 
 | ||||||
|  |   return _asdictref_inner(obj) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def convert_to_capnp(struct: structs.CarParams | structs.CarState | structs.CarControl.Actuators | structs.RadarData) -> capnp.lib.capnp._DynamicStructBuilder: | ||||||
|  |   struct_dict = asdictref(struct) | ||||||
|  | 
 | ||||||
|  |   if isinstance(struct, structs.CarParams): | ||||||
|  |     del struct_dict['lateralTuning'] | ||||||
|  |     struct_capnp = car.CarParams.new_message(**struct_dict) | ||||||
|  | 
 | ||||||
|  |     # this is the only union, special handling | ||||||
|  |     which = struct.lateralTuning.which() | ||||||
|  |     struct_capnp.lateralTuning.init(which) | ||||||
|  |     lateralTuning_dict = asdictref(getattr(struct.lateralTuning, which)) | ||||||
|  |     setattr(struct_capnp.lateralTuning, which, lateralTuning_dict) | ||||||
|  |   elif isinstance(struct, structs.CarState): | ||||||
|  |     struct_capnp = car.CarState.new_message(**struct_dict) | ||||||
|  |   elif isinstance(struct, structs.CarControl.Actuators): | ||||||
|  |     struct_capnp = car.CarControl.Actuators.new_message(**struct_dict) | ||||||
|  |   elif isinstance(struct, structs.RadarData): | ||||||
|  |     struct_capnp = car.RadarData.new_message(**struct_dict) | ||||||
|  |   else: | ||||||
|  |     raise ValueError(f"Unsupported struct type: {type(struct)}") | ||||||
|  | 
 | ||||||
|  |   return struct_capnp | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def convert_carControl(struct: capnp.lib.capnp._DynamicStructReader) -> structs.CarControl: | ||||||
|  |   # TODO: recursively handle any car struct as needed | ||||||
|  |   def remove_deprecated(s: dict) -> dict: | ||||||
|  |     return {k: v for k, v in s.items() if not k.endswith('DEPRECATED')} | ||||||
|  | 
 | ||||||
|  |   struct_dict = struct.to_dict() | ||||||
|  |   struct_dataclass = structs.CarControl(**remove_deprecated({k: v for k, v in struct_dict.items() if not isinstance(k, dict)})) | ||||||
|  | 
 | ||||||
|  |   struct_dataclass.actuators = structs.CarControl.Actuators(**remove_deprecated(struct_dict.get('actuators', {}))) | ||||||
|  |   struct_dataclass.cruiseControl = structs.CarControl.CruiseControl(**remove_deprecated(struct_dict.get('cruiseControl', {}))) | ||||||
|  |   struct_dataclass.hudControl = structs.CarControl.HUDControl(**remove_deprecated(struct_dict.get('hudControl', {}))) | ||||||
|  | 
 | ||||||
|  |   return struct_dataclass | ||||||
| @ -1 +1 @@ | |||||||
| cbe81fea9b820b8dd38667866aac72a8a0dae966 | 05570b52a90fb8bf092f7a2563d6019577e1aa5d | ||||||
					Loading…
					
					
				
		Reference in new issue