From 25fd3b2610ab49b41500474b0e446a9d5d88f380 Mon Sep 17 00:00:00 2001 From: Vehicle Researcher Date: Fri, 6 Mar 2020 23:49:33 -0800 Subject: [PATCH] Squashed 'cereal/' changes from eba4349b9..128b3f9a3 128b3f9a3 add networkStrength to thermal (#36) 2e5cbfc83 Create and init message in one line with `new_message` in messaging (#35) 458910759 not everyone likes gpstime 17363e988 support for end of log sentinel (#34) f6e9345cb val valid is confusing bb2cc7572 fix duplicate ordinals 0c38fc9e1 Add blindspot cereal values (#26) bd9a877d8 pulse desire and e2e 20c7fd608 Add subaru pre-Global safety mode 522ff85d9 Merge pull request #31 from commaai/good_location_packet ab07f229d deprecate b03c2c52a already exists 166418c00 improvements 97373f9d2 or rigor in american 365abba2e rigour 25eaf9df5 add espDisabled to carState (#30) bb1312128 add honda ecus (#29) git-subtree-dir: cereal git-subtree-split: 128b3f9a352d206ee5d771e8292c9b408b69b9b3 --- README.md | 3 +- car.capnp | 17 +++++++++++ log.capnp | 71 ++++++++++++++++++++++++++++++++++++++++++- messaging/__init__.py | 12 +++++--- 4 files changed, 96 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ec0efc67621992..d03e294394a27a 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,7 @@ while 1: # in publisher pm = messaging.PubMaster(['sensorEvents']) -dat = messaging.new_message() -dat.init('sensorEvents', 1) +dat = messaging.new_message('sensorEvents', size=1) dat.sensorEvents[0] = {"gyro": {"v": [0.1, -0.1, 0.1]}} pm.send('sensorEvents', dat) ``` diff --git a/car.capnp b/car.capnp index 58ff3fb42e95cb..695f4a91bc47fd 100644 --- a/car.capnp +++ b/car.capnp @@ -127,6 +127,7 @@ struct CarState { steeringRateLimited @29 :Bool; # if the torque is limited by the rate limiter stockAeb @30 :Bool; stockFcw @31 :Bool; + espDisabled @32 :Bool; # cruise state cruiseState @10 :CruiseState; @@ -150,6 +151,10 @@ struct CarState { # which packets this state came from canMonoTimes @12: List(UInt64); + + # blindspot sensors + leftBlindspot @33 :Bool; # Is there something blocking the left lane change + rightBlindspot @34 :Bool; # Is there something blocking the right lane change struct WheelSpeeds { # optional wheel speeds @@ -441,6 +446,7 @@ struct CarParams { noOutput @19; # like silent but without silent CAN TXs hondaBoschHarness @20; volkswagenPq @21; + subaruLegacy @22; # pre-Global platform } enum SteerControlType { @@ -468,10 +474,21 @@ struct CarParams { fwdCamera @3; engine @4; unknown @5; + transmission @8; # Transmission Control Module + srs @9; # airbag + gateway @10; # can gateway + hud @11; # heads up display + combinationMeter @12; # instrument cluster # Toyota only dsu @6; apgs @7; + + # Honda only + vsa @13; # Vehicle Stability Assist + programmedFuelInjection @14; + electricBrakeBooster @15; + shiftByWire @16; } enum FingerprintSource { diff --git a/log.capnp b/log.capnp index 46971d81a309e9..fc9247c1437df5 100644 --- a/log.capnp +++ b/log.capnp @@ -281,6 +281,7 @@ struct ThermalData { usbOnline @12 :Bool; networkType @22 :NetworkType; offroadPowerUsage @23 :UInt32; # Power usage since going offroad in uWh + networkStrength @24 :NetworkStrength; fanSpeed @10 :UInt16; started @11 :Bool; @@ -308,6 +309,14 @@ struct ThermalData { cell4G @4; cell5G @5; } + + enum NetworkStrength { + unknown @0; + poor @1; + moderate @2; + good @3; + great @4; + } } struct HealthData { @@ -626,9 +635,11 @@ struct ModelData { brakeDisengageProb @2 :Float32; gasDisengageProb @3 :Float32; steerOverrideProb @4 :Float32; + desireState @5 :List(Float32); } struct LongitudinalData { + distances @2 :List(Float32); speeds @0 :List(Float32); accelerations @1 :List(Float32); } @@ -790,6 +801,52 @@ struct PathPlan { } } +struct LiveLocationKalman { + + # More info on reference frames: + # https://github.com/commaai/openpilot/tree/master/common/transformations + + positionECEF @0 : Measurement; + positionGeodetic @1 : Measurement; + velocityECEF @2 : Measurement; + velocityNED @3 : Measurement; + velocityDevice @4 : Measurement; + accelerationDevice @5: Measurement; + + + # These angles are all eulers and roll, pitch, yaw + # orientationECEF transforms to rot matrix: ecef_from_device + orientationECEF @6 : Measurement; + orientationNED @7 : Measurement; + angularVelocityDevice @8 : Measurement; + + # orientationNEDCalibrated transforms to rot matrix: NED_from_calibrated + orientationNEDCalibrated @9 : Measurement; + + # Calibrated frame is simply device frame + # aligned with the vehicle + velocityCalibrated @10 : Measurement; + accelerationCalibrated @11 : Measurement; + angularVelocityCalibrated @12 : Measurement; + + gpsWeek @13 :Int32; + gpsTimeOfWeek @14 :Float64; + status @15 :Status; + unixTimestampMillis @16 :Int64; + + enum Status { + uninitialized @0; + uncalibrated @1; + valid @2; + } + + struct Measurement { + value @0 : List(Float64); + std @1 : List(Float64); + valid @2 : Bool; + } +} + struct LiveLocationData { status @0 :UInt8; @@ -1877,6 +1934,16 @@ struct KalmanOdometry { rotStd @3 :List(Float32); # std rad/s in device frame } +struct Sentinel { + enum SentinelType { + endOfSegment @0; + endOfRoute @1; + startOfSegment @2; + startOfRoute @3; + } + type @0 :SentinelType; +} + struct Event { # in nanoseconds? logMonoTime @0 :UInt64; @@ -1933,7 +2000,7 @@ struct Event { gpsLocationExternal @48 :GpsLocationData; location @49 :LiveLocationData; uiNavigationEvent @50 :UiNavigationEvent; - liveLocationKalman @51 :LiveLocationData; + liveLocationKalmanDEPRECATED @51 :LiveLocationData; testJoystick @52 :Joystick; orbOdometry @53 :OrbOdometry; orbFeatures @54 :OrbFeatures; @@ -1953,5 +2020,7 @@ struct Event { carParams @69: Car.CarParams; frontFrame @70: FrameData; dMonitoringState @71: DMonitoringState; + liveLocationKalman @72 :LiveLocationKalman; + sentinel @73 :Sentinel; } } diff --git a/messaging/__init__.py b/messaging/__init__.py index e5a004740dfaaa..b53d6fb7ab6247 100644 --- a/messaging/__init__.py +++ b/messaging/__init__.py @@ -19,10 +19,15 @@ context = Context() -def new_message(): +def new_message(service=None, size=None): dat = log.Event.new_message() dat.logMonoTime = int(sec_since_boot() * 1e9) dat.valid = True + if service is not None: + if size is None: + dat.init(service) + else: + dat.init(service, size) return dat def pub_sock(endpoint): @@ -148,12 +153,11 @@ def __init__(self, services, ignore_alive=None, addr="127.0.0.1"): self.sock[s] = sub_sock(s, poller=self.poller, addr=addr, conflate=True) self.freq[s] = service_list[s].frequency - data = new_message() try: - data.init(s) + data = new_message(s) except capnp.lib.capnp.KjException: # lists - data.init(s, 0) + data = new_message(s, 0) self.data[s] = getattr(data, s) self.logMonoTime[s] = 0