The 2022+ Kia Stinger has no radar DBC: the radar's object list is sent on
bus 1 as 10 slots x 3 frames (0x238..0x255, 8 bytes, 50 Hz). Decode it by
hand and publish the objects as radar tracks, gated to KIA_STINGER_2022.
- Stinger2022ObjectDecoder pairs the three frames of a slot (same cycle
counter and object id in all three, completed within 20 ms, the last
frame consumed so it cannot be reused) and decode_stinger_2022_triplet
extracts distance, lateral offset, absolute speed and type.
- Ego speed is the WHL_SPD11 4-wheel average on bus 0 times
wheelSpeedFactor; relative speed is the radar's absolute speed minus it.
- yRel = -lateral_raw (left positive in the car frame). Tracks not seen in
a cycle are dropped. canError is reported while the parser is invalid or
no wheel speed has been seen, and objects decoded in such a cycle are
discarded. The cycle is emitted on the last address, 0x255.
- interface.py: radarUnavailable is False only when all 30 addresses are
present in the bus 1 fingerprint with length 8.
Two measured corrections to the raw speed:
- A lead braking to a stop is reported at about -0.3 to -0.6 m/s for 1-3 s
before settling at 0, while the stock SCC11 lead stays near -0.1 (median
-0.13 over 13 stock-ACC stops, versus -0.45 from the object frames).
radard's KF turns the recovery into a positive aLeadK for a parked car,
which the MPC extrapolates as the lead pulling away. Negative speeds
above -0.7 m/s are reported as 0 for objects within 2 m of centre;
faster reversals, adjacent-lane and oncoming traffic stay as measured.
- Absolute speed minus the wheel-speed average reads ~0.14 m/s more closing
than the stock SCC11 lead (ACC_ObjRelSpd) whenever the car is moving, and
matches it at standstill: the radar's own ego speed runs below the wheel
speeds. The 0.14 m/s is subtracted from the ego speed, ramped in over the
first 1 m/s so standstill is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Clear prior recovery wait state only after the existing healthy unlatched baseline is accepted. Preserve native acknowledgment, fault, identity and expiry gates; cover actual Card and native permission transitions.
Preserve every node, grouping rule, shard count and timeout. Calibrate material module estimates from complete hosted outcomes with conservative scheduling margin.
Reuse the existing original proof deadline for qualified Mach-E safety19 only. Require fresh independent authority for successors and retain fault, cancel, identity and expiry checks.
Withdraw native-denied LONG immediately while retaining only an already proven LAT grant. Preserve fault checks, original proof deadlines and ordinary mismatch counter.
Classify only the recorded firmware-identified Elantra2021 CAN1 IRQ
bit as diagnostic. Preserve raw reports and native permission, request,
receive health, relay, heartbeat and freshness checks. Alpha-long and
all other configurations remain excluded.
Retain expanded caller/mixed-fault/configuration regression coverage.
Validated 257 focused Elantra and GM/Bolt tests; Ruff clean.
Revert the Bolt-specific admission change from 4b754298 while retaining
native authority, receive-state, relay, heartbeat and actuator checks.
Keep raw diagnostic reports and all other profile policies unchanged.
Add actual Card coverage and restore exact diagnostic policy regressions.
Rebuild all distributed Panda variants and bootstubs from 4cbffe53 with verified Arm GNU12.3.Rel1; preserve development signing convention. Native debug and release builds passed. Refresh canonical protected source/binary inventory receipt. Default-off Ford option is init-only; no vehicle or road execution claimed.
Build nested typed evidence rows directly while retaining every original field and validation. Complete serialized bytes match the prior writer on recorded d8 evidence and regression fixtures.
Fresh-head combined qualification: 459 tests passed. Cloud performance measurements do not claim device loop-rate recovery or a successful learning trial.
Merge bounded control/output FIFO heads using original publisher headers. Preserve original age, native, source, overflow and malformed-input checks; retain producer order after joins.
Validated with actual pinned cloud dependencies and fresh-head regression tests.