move car.capnp to opendbc (#33722)
* move car.capnp to opendbc * bump * do card * fix some more tests * rm helpers * format fp * more * whoops * bump * bump to masterpull/33724/head
parent
af774d894e
commit
8149f7cb11
14 changed files with 41 additions and 845 deletions
@ -1,722 +0,0 @@ |
||||
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; |
||||
} |
@ -0,0 +1 @@ |
||||
../opendbc_repo/opendbc/car/car.capnp |
@ -1 +1 @@ |
||||
Subproject commit a363ce1ff452e63f2e49938508d97aece4ba6a3e |
||||
Subproject commit ff2ac79e07c2d9021c2fd4fc886ca61c81cd2694 |
@ -1,74 +0,0 @@ |
||||
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 @@ |
||||
05570b52a90fb8bf092f7a2563d6019577e1aa5d |
||||
cbe81fea9b820b8dd38667866aac72a8a0dae966 |
Loading…
Reference in new issue