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