From bc740bd0b38decf62c447ca0ee81460ffde0251a Mon Sep 17 00:00:00 2001 From: Comma Device Date: Wed, 16 Sep 2026 18:52:38 +0800 Subject: [PATCH] honda: read the Bosch-A radar on verified platforms (RX-only) Ported from StarPilot (mawei/StarPilot): the sunnypilot Honda radar interface deliberately returns no points for Bosch cars, so radard never sees the stock radar. This brings in the hand-written 16-slot Bosch-A decoder: - radar_interface.py: full Bosch-A object bank decode (0x280-0x2FF main frames plus the 0x290-0x297 companion frames), range/rate/angle conversion and sweep triggering. Receive only - it never sends CAN, so factory AEB/CMBS/FCW stay live and no safety change or rebuild is required. - dbc/honda_bosch_a_radar.dbc: the bit geometry the decoder parses. - values.py: HONDA_CIVIC_BOSCH and HONDA_CRV_5G (the verified platforms) point Bus.radar at the new DBC; HONDA_BOSCH_A / HONDA_BOSCH_A_RADAR_VERIFIED sets describe which platforms may use it. - interface.py: radarUnavailable is cleared for verified platforms unless a kill switch is present. The switch is a sentinel file (/data/params/d/HondaBoschARadarOff) instead of a params_keys.h entry, so no libparams rebuild is needed. With radar points flowing, the existing sunnypilot longitudinal control can use them; nothing in carcontroller or safety was touched. --- opendbc_repo/opendbc/car/honda/interface.py | 13 +- .../opendbc/car/honda/radar_interface.py | 605 +++++++++- opendbc_repo/opendbc/car/honda/values.py | 6 +- .../opendbc/dbc/honda_bosch_a_radar.dbc | 1014 +++++++++++++++++ 4 files changed, 1624 insertions(+), 14 deletions(-) create mode 100644 opendbc_repo/opendbc/dbc/honda_bosch_a_radar.dbc diff --git a/opendbc_repo/opendbc/car/honda/interface.py b/opendbc_repo/opendbc/car/honda/interface.py index 5bf16f40a..280d2c6f1 100755 --- a/opendbc_repo/opendbc/car/honda/interface.py +++ b/opendbc_repo/opendbc/car/honda/interface.py @@ -1,10 +1,12 @@ #!/usr/bin/env python3 +import os import numpy as np from opendbc.car import get_safety_config, structs, uds from opendbc.car.common.conversions import Conversions as CV from opendbc.car.disable_ecu import disable_ecu from opendbc.car.honda.hondacan import CanBus -from opendbc.car.honda.values import CarControllerParams, HondaFlags, CAR, HondaSafetyFlags, HONDA_BOSCH, HONDA_BOSCH_CANFD, HONDA_BOSCH_RADARLESS +from opendbc.car.honda.values import (CarControllerParams, HondaFlags, CAR, HondaSafetyFlags, HONDA_BOSCH, HONDA_BOSCH_A, + HONDA_BOSCH_A_RADAR_VERIFIED, HONDA_BOSCH_CANFD, HONDA_BOSCH_RADARLESS) from opendbc.car.honda.carcontroller import CarController from opendbc.car.honda.carstate import CarState from opendbc.car.honda.radar_interface import RadarInterface @@ -47,7 +49,14 @@ class CarInterface(CarInterfaceBase): cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput)) ret.safetyConfigs = cfgs - ret.radarUnavailable = True + # Honda Bosch-A radar (RX-only 16-slot object bank, see radar_interface.py). The + # verified platforms get it by default; a sentinel file acts as a kill switch so no + # params_keys.h rebuild is needed. Reading radar never takes CAN authority, so the + # factory AEB/CMBS/FCW stay live while stock longitudinal is in control. + bosch_a_radar_enabled = not docs and not os.path.exists("/data/params/d/HondaBoschARadarOff") + ret.radarUnavailable = not (candidate in HONDA_BOSCH_A and + candidate in HONDA_BOSCH_A_RADAR_VERIFIED and + bosch_a_radar_enabled) # Disable the radar and let openpilot control longitudinal # WARNING: THIS DISABLES AEB! # If Bosch radarless, this blocks ACC messages from the camera diff --git a/opendbc_repo/opendbc/car/honda/radar_interface.py b/opendbc_repo/opendbc/car/honda/radar_interface.py index 92be277b4..bf28d7247 100755 --- a/opendbc_repo/opendbc/car/honda/radar_interface.py +++ b/opendbc_repo/opendbc/car/honda/radar_interface.py @@ -1,8 +1,13 @@ #!/usr/bin/env python3 +import math +from collections import deque +from dataclasses import dataclass, field + from opendbc.can import CANParser from opendbc.car import Bus, structs -from opendbc.car.interfaces import RadarInterfaceBase +from opendbc.car.honda.hondacan import CanBus from opendbc.car.honda.values import DBC +from opendbc.car.interfaces import RadarInterfaceBase def _create_nidec_can_parser(car_fingerprint): @@ -11,38 +16,615 @@ def _create_nidec_can_parser(car_fingerprint): return CANParser(DBC[car_fingerprint][Bus.radar], messages, 1) +# ============================================================================ +# Honda Bosch-A 16-slot object bank +# ============================================================================ +# 16 CAN-visible object slots. Each slot has 4 main frames (f0..f3, one CAN ID each -- NOT sub-frames +# muxed onto a shared ID) plus one synchronized auxiliary 5th frame. This supersedes any prior model of +# 0x280/0x284/0x288/0x28C as pieces of one object, or of 0x2C8/0x2C9 as a separate "coarse" list: it is +# ONE 16-slot bank with one auxiliary frame per slot. See honda_bosch_a_radar.dbc for the bit geometry. +BOSCH_A_DBC_NAME = 'honda_bosch_a_radar' +BOSCH_A_NUM_SLOTS = 16 + + +def _bosch_a_main_base(slot: int) -> int: + return 0x280 + 4 * slot if slot < 4 else 0x2D0 + 4 * (slot - 4) + + +def _bosch_a_aux_id(slot: int) -> int: + return 0x2C8 + slot if slot < 8 else 0x290 + (slot - 8) + + +BOSCH_A_MAIN_IDS = [[_bosch_a_main_base(s) + i for i in range(4)] for s in range(BOSCH_A_NUM_SLOTS)] +BOSCH_A_AUX_IDS = [_bosch_a_aux_id(s) for s in range(BOSCH_A_NUM_SLOTS)] +BOSCH_A_ALL_IDS = [addr for ids in BOSCH_A_MAIN_IDS for addr in ids] + BOSCH_A_AUX_IDS + +# Publish RadarPoints when the last MAIN object frame arrives. Passive captures prove that slot 15's +# companion frame, 0x297, follows 0x2FF and is the final observed object-family frame in a full sweep: +# +# ... 0x2FC, 0x2FD, 0x2FE, 0x2FF, 0x297 +# +# Keep 0x2FF as the RadarPoint trigger while the companion data remains optional/debug-only. Making +# 0x297 the sole trigger would allow one dropped auxiliary frame to suppress an otherwise-valid point +# update, contrary to the parser's "aux never gates validity" contract. +BOSCH_A_TRIGGER_MSG = BOSCH_A_MAIN_IDS[BOSCH_A_NUM_SLOTS - 1][3] +BOSCH_A_SWEEP_END_MSG = BOSCH_A_AUX_IDS[BOSCH_A_NUM_SLOTS - 1] # 0x297 + +# Observed coherent Bosch-A sweep cadence is ~14.5-16 Hz in the available captures. +BOSCH_A_FREQ_HZ = 15 + +# Range: f0 raw_range (12-bit, B2:B3 high nibble) -> meters. Firmware q16 = 8*raw_range; physical +# calibration keeps slope/offset as named, replay-refinable constants (do not add a second radar/camera +# longitudinal offset on top of this). +BOSCH_A_RANGE_SCALE_M = 0.05712 +BOSCH_A_RANGE_OFFSET_M = -3.0 + +# Azimuth: f0 raw_angle (11-bit, B4:B5 high 3 bits), offset-binary about 1024. +# +# The f3 angular-edge pair independently closes the exact center-angle scale: +# azimuth_rad = (raw_angle - 1024) / 2048 +# +# This supersedes the older empirical 0.032 deg/count fit. +BOSCH_A_AZIMUTH_SCALE_RAD = 1.0 / 2048.0 +BOSCH_A_AZIMUTH_CENTER = 1024 + +# Invalid sentinels (section 3/4/5/6 of the spec). +BOSCH_A_STATUS_INVALID = 0xF +BOSCH_A_RANGE_RAW_INVALID = 0xFFF +BOSCH_A_ANGLE_RAW_INVALID = 0x7FF +BOSCH_A_LIFE_INVALID = 0xFFF +BOSCH_A_TRACK_ID_MIN = 1 +BOSCH_A_TRACK_ID_MAX = 0x3F +# AUX logical 0x00CA has an explicit 0x3FF invalid sentinel. Firmware proves the normalization below; +# captures strongly support interpreting the active value as previous/current range ratio. +BOSCH_A_RANGE_RATIO_INVALID = 0x3FF +BOSCH_A_LOGICAL_00CA_INVALID = BOSCH_A_RANGE_RATIO_INVALID # compatibility/debug alias +BOSCH_A_RANGE_RATIO_SCALE = 0.001 +BOSCH_A_RANGE_RATIO_OFFSET = 0.5 + +# The synchronized AUX frame contains an 11-bit offset-binary velocity-like field and a 10-bit +# companion quality/uncertainty field. The byte locations are now decoded in the DBC. The exact +# Bosch descriptor name is still being verified, so keep the conversion constants isolated here. +# Capture validation shows active values in [0, 1728], with 0x7FE used as the inactive sentinel. +BOSCH_A_DIRECT_VREL_INVALID = 0x7FE +BOSCH_A_DIRECT_VREL_MIN_RAW = 0 +BOSCH_A_DIRECT_VREL_MAX_RAW = 1728 +BOSCH_A_DIRECT_VREL_CENTER_RAW = 864 +BOSCH_A_DIRECT_VREL_SCALE_MPS = 1.0 / 64.0 +# Empirical raw-quality policy. U11 error against an independent range-derivative reference rises +# with u10 in a graded way, not a cliff: replay evidence bins it roughly as 0-255 clean, 256-511 only +# mildly degraded, 512-767 clearly degraded, 768+ worst. 511 is set at that mild/clear boundary so +# U11 is still trusted directly through the mildly-degraded band; only u10 above this triggers the +# high-u10 coast path below. This is deliberately not presented as a Bosch physical unit or +# descriptor constant; it keeps saturated/high-uncertainty AUX values from becoming authoritative +# velocity measurements. +BOSCH_A_DIRECT_VREL_MAX_UNCERTAINTY_RAW = 511 + +# Measurement-authority policy. These are replay-derived safety/tuning gates, not recovered Bosch +# constants. Range innovation is measured from the previous accepted observation so a reset cannot +# become the baseline for following sweeps. +BOSCH_A_RANGE_SIGMA_DEGRADED_RAW = 4 +BOSCH_A_RANGE_INNOVATION_MAX_M = 2.0 +BOSCH_A_RANGE_INNOVATION_HARD_MAX_M = 5.0 +BOSCH_A_FALLBACK_RANGE_RATE_MAX_MPS = 50.0 +BOSCH_A_USE_TAN_LATERAL_PROJECTION = True + +# Accepted-range history is retained for continuity and the adjacent two-point fallback. Rejected +# range resets never enter it, and it is not used for a multi-sample OLS velocity fit. +BOSCH_A_VREL_MAX_SAMPLES = 8 + +# Staleness gate -- TUNING constant, reused plumbing pattern (not a firmware fact). At the observed +# ~15 Hz cadence, 0.20 s is approximately three missed sweeps. +BOSCH_A_STALE_S = 0.20 + + +@dataclass +class _BoschASlotState: + last_seen_nanos: int | None = None + + # Firmware logical-ID companion data -- telemetry/debug only for now, never a RadarPoint validity + # gate. 0x00C9 has a firmware transform but no proven physical meaning; 0x00CA has an explicit + # invalid sentinel and its physical meaning remains unresolved. + logical_00c9_raw: float = float('nan') + logical_00ca_raw: float = float('nan') + direct_vrel_raw: int | None = None + direct_vrel_uncertainty_raw: int | None = None + + def reset(self): + self.last_seen_nanos = None + self.logical_00c9_raw = float('nan') + self.logical_00ca_raw = float('nan') + self.direct_vrel_raw = None + self.direct_vrel_uncertainty_raw = None + + +@dataclass +class _BoschATrackState: + """Persistent state for one Bosch CAN object identity, independent of wire slot.""" + track_id: int + prev_frame_idx: int | None = None + prev_life: int | None = None + last_seen_nanos: int | None = None + wire_slot: int | None = None + samples: deque = field(default_factory=lambda: deque(maxlen=BOSCH_A_VREL_MAX_SAMPLES)) + last_trusted_vrel: float | None = None + last_trusted_vrel_nanos: int | None = None + + +def _bosch_a_direct_vrel(raw_value: int | float | None, + uncertainty_raw: int | float | None = None) -> float | None: + """Decode the capture-validated AUX relative-velocity candidate. + + None means that AUX was absent/invalid and the caller should use the existing fallback policy. The [0, 1728] + active domain is deliberately enforced here because values above the observed +13.5 m/s rail have + not appeared on active objects; 0x7FE is the observed inactive sentinel. + """ + if raw_value is None: + return None + raw = int(raw_value) + if raw == BOSCH_A_DIRECT_VREL_INVALID: + return None + if not BOSCH_A_DIRECT_VREL_MIN_RAW <= raw <= BOSCH_A_DIRECT_VREL_MAX_RAW: + return None + # u10 is retained as a raw quality indicator because its physical units remain unresolved. The + # conservative threshold is evidence-backed tuning, not a recovered firmware validity rule. + if uncertainty_raw is not None and int(uncertainty_raw) > BOSCH_A_DIRECT_VREL_MAX_UNCERTAINTY_RAW: + return None + return (raw - BOSCH_A_DIRECT_VREL_CENTER_RAW) * BOSCH_A_DIRECT_VREL_SCALE_MPS + + +def _bosch_a_range_ratio(raw_value: int | float | None) -> float | None: + if raw_value is None: + return None + raw = int(raw_value) + if raw == BOSCH_A_RANGE_RATIO_INVALID or not 0 <= raw < BOSCH_A_RANGE_RATIO_INVALID: + return None + return BOSCH_A_RANGE_RATIO_OFFSET + BOSCH_A_RANGE_RATIO_SCALE * raw + + +def _bosch_a_range_ratio_vrel(raw_value: int | float | None, d_rel: float, dt: float) -> float | None: + """Return the range rate implied by the empirical previous/current range ratio.""" + ratio = _bosch_a_range_ratio(raw_value) + if ratio is None or dt <= 0.0 or not math.isfinite(d_rel): + return None + return d_rel * (1.0 - ratio) / dt + + +def _bosch_a_measurement_degraded(range_sigma_raw: int, existence_raw: int, + direct_vrel_uncertainty_raw: int | None) -> bool: + range_quality_bad = range_sigma_raw >= BOSCH_A_RANGE_SIGMA_DEGRADED_RAW or existence_raw in (0, 0x7F) + velocity_quality_bad = (direct_vrel_uncertainty_raw is not None and + direct_vrel_uncertainty_raw > BOSCH_A_DIRECT_VREL_MAX_UNCERTAINTY_RAW) + return range_quality_bad or velocity_quality_bad + + +def _create_bosch_a_can_parser(CP): + messages = [(addr, BOSCH_A_FREQ_HZ) for addr in BOSCH_A_ALL_IDS] + # Bus.radar selects the Bosch-A DBC; the object/fusion feed itself is + # physically on the camera-side ACC-CAN. + return CANParser(DBC[CP.carFingerprint][Bus.radar], messages, CanBus(CP).camera) + + class RadarInterface(RadarInterfaceBase): - def __init__(self, CP, CP_SP): - super().__init__(CP, CP_SP) - self.radar_fault = False - self.radar_wrong_config = False + def __init__(self, CP): + super().__init__(CP) self.radar_off_can = CP.radarUnavailable + self.bosch_a_radar = (not self.radar_off_can and Bus.radar in DBC[CP.carFingerprint] and + DBC[CP.carFingerprint][Bus.radar] == BOSCH_A_DBC_NAME) - # Nidec if self.radar_off_can: self.rcp = None + self.trigger_msg = 0x445 + elif self.bosch_a_radar: + self.rcp = _create_bosch_a_can_parser(CP) + self.trigger_msg = BOSCH_A_TRIGGER_MSG + self._slots = [_BoschASlotState() for _ in range(BOSCH_A_NUM_SLOTS)] + self._tracks: dict[int, _BoschATrackState] = {} + self._slot_track_ids: list[int | None] = [None] * BOSCH_A_NUM_SLOTS + self._last_trigger_nanos = -1 else: + # Nidec self.rcp = _create_nidec_can_parser(CP.carFingerprint) - self.trigger_msg = 0x445 + self.trigger_msg = 0x445 + self.track_id = 0 + self.radar_fault = False + self.radar_wrong_config = False + self.updated_messages = set() def update(self, can_strings): - # in Bosch radar and we are only steering for now, so sleep 0.05s to keep - # radard at 20Hz and return no points - if self.radar_off_can: + if self.radar_off_can or self.rcp is None: return super().update(None) vls = self.rcp.update(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: + if self.bosch_a_radar and self._last_trigger_nanos >= 0: + now = self.rcp._last_update_nanos + if (now - self._last_trigger_nanos) * 1e-9 > BOSCH_A_STALE_S: + return self._bosch_a_stale_radardata() return None rr = self._update(self.updated_messages) self.updated_messages.clear() return rr + def _bosch_a_stale_radardata(self): + # Whole-bus silence: clear every live point/history and emit an EMPTY RadarData (not None) so + # radard drops any lead within a cycle instead of freezing a phantom. The next observation starts + # a fresh incarnation for its CAN identity. + self.pts.clear() + self._tracks.clear() + self._slot_track_ids = [None] * BOSCH_A_NUM_SLOTS + for slot_state in self._slots: + slot_state.reset() + self._last_trigger_nanos = -1 + stale = structs.RadarData() + if not self.rcp.can_valid: + stale.errors.canError = True + stale.errors.radarUnavailableTemporary = True + return stale + + def _bosch_a_retire_track(self, track_id: int): + self._tracks.pop(track_id, None) + self.pts.pop(track_id, None) + for slot, slot_track_id in enumerate(self._slot_track_ids): + if slot_track_id == track_id: + self._slot_track_ids[slot] = None + + def _bosch_a_retire_stale_tracks(self, now: int): + for track_id, track in list(self._tracks.items()): + if track.last_seen_nanos is not None and (now - track.last_seen_nanos) * 1e-9 > BOSCH_A_STALE_S: + self._bosch_a_retire_track(track_id) + def _update(self, updated_messages): + if self.bosch_a_radar: + return self._update_bosch_a(updated_messages) + return self._update_nidec(updated_messages) + + def _update_bosch_a(self, updated_messages): + ret = structs.RadarData() + if not self.rcp.can_valid: + ret.errors.canError = True + + now = self.rcp._last_update_nanos + self._last_trigger_nanos = now + self._bosch_a_retire_stale_tracks(now) + + observations = [] + + for slot in range(BOSCH_A_NUM_SLOTS): + f0, f1, f2, f3 = BOSCH_A_MAIN_IDS[slot] + aux = BOSCH_A_AUX_IDS[slot] + st = self._slots[slot] + + if not (f0 in updated_messages and f1 in updated_messages and + f2 in updated_messages and f3 in updated_messages): + # Incomplete main-frame set: a missing CAN frame must not be treated as a lifecycle mismatch or + # death/replacement. Logical tracks are retired independently by their global staleness gate. + continue + + v0 = self.rcp.vl[f0] + v1 = self.rcp.vl[f1] + v2 = self.rcp.vl[f2] + v3 = self.rcp.vl[f3] + + idx0 = int(v0['FRAME_IDX']) + if not (idx0 == int(v1['FRAME_IDX']) == int(v2['FRAME_IDX']) == int(v3['FRAME_IDX'])): + # The four main frames don't share a common cycle index -- not a coherent observation this + # window. Only combine main-frame data from a coherent common frame index (section 2). + continue + + status = int(v0['STATUS']) + range_raw = int(v0['RANGE_RAW']) + angle_raw = int(v0['AZIMUTH_RAW']) + range_sigma_raw = int(v0['RANGE_SIGMA_RAW']) + existence_raw = int(v1['OBJECT_EXISTENCE_PROBABILITY_RAW']) + life = int(v2['LIFECYCLE_RAW']) + track_id = int(v3['TRACK_ID']) + track_id_valid = BOSCH_A_TRACK_ID_MIN <= track_id <= BOSCH_A_TRACK_ID_MAX + st.last_seen_nanos = now + direct_vrel_raw = None + direct_vrel_uncertainty_raw = None + range_ratio_raw = None + + # Attach synchronized companion data only when its cycle matches. Missing AUX never invalidates + # an otherwise coherent F0-F3 object; it only removes independent motion/quality evidence. + if aux in updated_messages: + av = self.rcp.vl[aux] + if int(av['FRAME_IDX']) == idx0: + direct_vrel_raw = int(av['REL_VELOCITY_RAW']) + direct_vrel_uncertainty_raw = int(av['REL_VELOCITY_UNCERTAINTY_RAW']) + range_ratio_raw = int(av['RANGE_RATIO_RAW']) + logical_00c9_raw = av['FW_LID_00C9_RAW'] + logical_00ca_raw = av['FW_LID_00CA_RAW'] + st.logical_00c9_raw = logical_00c9_raw + st.logical_00ca_raw = ( + logical_00ca_raw if logical_00ca_raw != BOSCH_A_LOGICAL_00CA_INVALID else float('nan') + ) + st.direct_vrel_raw = direct_vrel_raw + st.direct_vrel_uncertainty_raw = direct_vrel_uncertainty_raw + + object_valid = (status != BOSCH_A_STATUS_INVALID and range_raw != BOSCH_A_RANGE_RAW_INVALID and + angle_raw != BOSCH_A_ANGLE_RAW_INVALID and life != BOSCH_A_LIFE_INVALID) + + observations.append({ + 'slot': slot, + 'frame_idx': idx0, + 'life': life, + 'track_id': track_id, + 'track_id_valid': track_id_valid, + 'object_valid': object_valid, + 'range_sigma_raw': range_sigma_raw, + 'existence_raw': existence_raw, + 'direct_vrel_raw': direct_vrel_raw, + 'direct_vrel_uncertainty_raw': direct_vrel_uncertainty_raw, + 'range_ratio_raw': range_ratio_raw, + }) + + # First collapse duplicate wire observations of one CAN identity. The dictionary is also the + # output uniqueness boundary: one valid Bosch identity can never create two RadarPoints. + valid_by_id = {} + for observation in observations: + if not (observation['object_valid'] and observation['track_id_valid']): + # An invalid observation ends publication for the object currently occupying this wire slot, + # but it does not immediately destroy the persistent state. The object may be multiplexed to + # another slot or may return before the per-identity stale deadline; a later lifecycle break + # or staleness expiry will clear its derivative history. + ids_to_hide = {self._slot_track_ids[observation['slot']]} + if observation['track_id_valid']: + ids_to_hide.add(observation['track_id']) + for invalid_id in ids_to_hide - {None}: + self.pts.pop(invalid_id, None) + continue + track_id = observation['track_id'] + current = valid_by_id.get(track_id) + if current is None: + valid_by_id[track_id] = observation + continue + + # Prefer the wire slot currently associated with the persistent state. If neither candidate is + # preferred, retain the lower slot for deterministic handling of a malformed duplicate frame. + track = self._tracks.get(track_id) + current_score = (0 if track is not None and track.wire_slot == current['slot'] else 1, current['slot']) + candidate_score = (0 if track is not None and track.wire_slot == observation['slot'] else 1, + observation['slot']) + if candidate_score < current_score: + valid_by_id[track_id] = observation + + valid_ids = set(valid_by_id) + for track_id, observation in sorted(valid_by_id.items(), key=lambda item: item[1]['slot']): + slot = observation['slot'] + idx0 = observation['frame_idx'] + life = observation['life'] + + # A wire-slot replacement ends publication for the old occupant, but not its persistent + # identity/history. If the old ID is still valid in another slot this sweep, keep its point; + # otherwise hide it until that ID returns or reaches its own stale deadline. + old_id = self._slot_track_ids[slot] + if old_id is not None and old_id != track_id and old_id not in valid_ids: + self.pts.pop(old_id, None) + + track = self._tracks.get(track_id) + if track is None: + track = _BoschATrackState(track_id=track_id) + self._tracks[track_id] = track + + same_incarnation = False + if track.prev_frame_idx is not None and track.prev_life is not None: + frame_delta = (idx0 - track.prev_frame_idx) & 0xF + life_delta = (life - track.prev_life) & 0xFFF + same_incarnation = life_delta == 2 * frame_delta + + if not same_incarnation: + # The CAN identity remains the externally-visible key, but a lifecycle discontinuity starts a + # new incarnation and must not inherit the previous object's range-rate history. + track.samples.clear() + track.last_trusted_vrel = None + track.last_trusted_vrel_nanos = None + self.pts.pop(track_id, None) + + v0 = self.rcp.vl[BOSCH_A_MAIN_IDS[slot][0]] + range_raw = int(v0['RANGE_RAW']) + angle_raw = int(v0['AZIMUTH_RAW']) + dRel = BOSCH_A_RANGE_SCALE_M * range_raw + BOSCH_A_RANGE_OFFSET_M + azimuth_rad = BOSCH_A_AZIMUTH_SCALE_RAD * (angle_raw - BOSCH_A_AZIMUTH_CENTER) + # The firmware's internal geometry path uses tan(angle) for a forward-axis distance. The + # Bosch object range is consumed as that forward-axis quantity here, so use the same projection + # rather than treating it as radial/slant range. Keep the switch explicit while the final + # output bridge remains under static review. + # + # Sign: AZIMUTH_RAW > center (positive azimuth_rad) is a LEFT-of-center detection in car frame's + # y axis (left is positive), matching the Nidec RadarPoint.yRel contract. Confirmed against real + # captures 2026-08-22: a stationary cluster of queued vehicles visible on the left in the road + # camera was rendering on the right in both the Qt and raylib radar-track overlays with the + # previously-flipped sign. + lateral_projection = math.tan if BOSCH_A_USE_TAN_LATERAL_PROJECTION else math.sin + yRel = dRel * lateral_projection(azimuth_rad) + + now_s = now * 1e-9 + direct_vrel_raw = observation['direct_vrel_raw'] + direct_vrel_uncertainty_raw = observation['direct_vrel_uncertainty_raw'] + direct_vrel = _bosch_a_direct_vrel(direct_vrel_raw, direct_vrel_uncertainty_raw) + live_direct_vrel = _bosch_a_direct_vrel(direct_vrel_raw) + range_ratio_raw = observation['range_ratio_raw'] + + # A live U11 rejected solely by the conservative U10 qualification threshold is neither an + # unavailable velocity nor permission to synthesize a one-sweep range derivative. It is also + # NOT permission to skip range-innovation checking below: u10 correlates with range_sigma in + # replay data, so a high-u10 sweep is exactly the condition where a bad/discontinuous range + # (slot migration, reset) is most likely, not less likely. Range acceptance is therefore + # decided on the same terms as every other sweep first; only once the range clears that gate + # does a high-u10 U11 fall back to coasting instead of publishing a synthesized derivative. + high_u10_live_vrel = (direct_vrel is None and live_direct_vrel is not None and + direct_vrel_uncertainty_raw is not None and + direct_vrel_uncertainty_raw > BOSCH_A_DIRECT_VREL_MAX_UNCERTAINTY_RAW) + + # Validate against the previous accepted range. Qualified U11 and the range-ratio field are + # independent corroboration paths; high-U10 U11 is deliberately excluded from this decision. + previous_sample = track.samples[-1] if track.samples else None + fallback_vrel = 0.0 + ratio_vrel = None + range_rejected = False + degraded = _bosch_a_measurement_degraded( + observation['range_sigma_raw'], observation['existence_raw'], direct_vrel_uncertainty_raw, + ) + if previous_sample is not None: + previous_time, previous_range = previous_sample + dt = now_s - previous_time + if dt <= 0.0: + range_rejected = True + else: + fallback_vrel = (dRel - previous_range) / dt + ratio = _bosch_a_range_ratio(range_ratio_raw) + ratio_vrel = _bosch_a_range_ratio_vrel(range_ratio_raw, dRel, dt) + + residuals_m = [] + if direct_vrel is not None: + residuals_m.append(abs(dRel - (previous_range + direct_vrel * dt))) + if ratio is not None: + residuals_m.append(abs(previous_range - dRel * ratio)) + + if residuals_m: + innovation_m = min(residuals_m) + range_rejected = ( + innovation_m > BOSCH_A_RANGE_INNOVATION_HARD_MAX_M or + (degraded and innovation_m > BOSCH_A_RANGE_INNOVATION_MAX_M) + ) + else: + range_rejected = abs(fallback_vrel) > BOSCH_A_FALLBACK_RANGE_RATE_MAX_MPS + + if range_rejected: + # Keep the last accepted point briefly as an unmeasured coast. The rejected geometry is not + # published and never becomes the baseline for a later derivative. + accepted_fresh = previous_sample is not None and now_s - previous_sample[0] <= BOSCH_A_STALE_S + point = self.pts.get(track_id) + if accepted_fresh and point is not None: + point.measured = False + else: + self.pts.pop(track_id, None) + track.prev_frame_idx = idx0 + track.prev_life = life + track.last_seen_nanos = now + track.wire_slot = slot + for old_slot, old_id in enumerate(self._slot_track_ids): + if old_slot != slot and old_id == track_id: + self._slot_track_ids[old_slot] = None + self._slot_track_ids[slot] = track_id + continue + + if high_u10_live_vrel: + # The range cleared innovation checking above, so geometry here is trustworthy; only vRel is + # in question. Preserve current geometry but coast only a recent authoritative motion + # estimate without a KF update, rather than publishing a one-sweep-derivative synthesis. + trusted_fresh = (track.last_trusted_vrel is not None and track.last_trusted_vrel_nanos is not None and + (now - track.last_trusted_vrel_nanos) * 1e-9 <= BOSCH_A_STALE_S) + if trusted_fresh: + point = self.pts.get(track_id) + if point is not None: + point.dRel = dRel + point.yRel = yRel + point.vRel = track.last_trusted_vrel + point.measured = False + else: + track.last_trusted_vrel = None + track.last_trusted_vrel_nanos = None + self.pts.pop(track_id, None) + + # Do not let a coast-only range observation become a future derivative baseline. + track.prev_frame_idx = idx0 + track.prev_life = life + track.last_seen_nanos = now + track.wire_slot = slot + for old_slot, old_id in enumerate(self._slot_track_ids): + if old_slot != slot and old_id == track_id: + self._slot_track_ids[old_slot] = None + self._slot_track_ids[slot] = track_id + continue + + # Native U11 is unavailable here (sentinel/out-of-range -- the high-u10-but-live case above + # already returned before this point) and the range-ratio field is unusable or degraded too. + # The remaining option is the raw one-sweep (dRel-previous_range)/dt derivative, which is + # structurally the same hazard the high-u10 case guards against: a synthesized rate becoming an + # authoritative measurement. Coast a recent trusted velocity instead, on the same terms as above, + # rather than publish it. + # A true birth observation (no previous accepted range yet) can never mature into a published + # point this cycle regardless of vRel source -- `matured` below requires a second sample -- so + # only intercept once a fallback derivative would actually have something to poison. + u11_and_ratio_unavailable = (direct_vrel is None and (ratio_vrel is None or degraded) and + previous_sample is not None) + if u11_and_ratio_unavailable: + trusted_fresh = (track.last_trusted_vrel is not None and track.last_trusted_vrel_nanos is not None and + (now - track.last_trusted_vrel_nanos) * 1e-9 <= BOSCH_A_STALE_S) + if trusted_fresh: + point = self.pts.get(track_id) + if point is not None: + point.dRel = dRel + point.yRel = yRel + point.vRel = track.last_trusted_vrel + point.measured = False + else: + track.last_trusted_vrel = None + track.last_trusted_vrel_nanos = None + self.pts.pop(track_id, None) + + # Do not let a coast-only range observation become a future derivative baseline. + track.prev_frame_idx = idx0 + track.prev_life = life + track.last_seen_nanos = now + track.wire_slot = slot + for old_slot, old_id in enumerate(self._slot_track_ids): + if old_slot != slot and old_id == track_id: + self._slot_track_ids[old_slot] = None + self._slot_track_ids[slot] = track_id + continue + + track.samples.append((now_s, dRel)) + sample_count = len(track.samples) + + # Prefer qualified native U11; otherwise the range-ratio field. The raw one-sweep derivative is + # never published as a measurement -- see the coast/drop branch above, which intercepts before + # this point whenever neither native U11 nor the ratio field is usable. + if direct_vrel is not None: + vRel = direct_vrel + else: + vRel = ratio_vrel + trustworthy_vrel = True + + # A birth observation has no range-rate yet. Keep it as history, but do not publish a RadarPoint + # until a second coherent observation of the same CAN identity supplies a finite derivative. + matured = sample_count >= 2 and math.isfinite(vRel) + if trustworthy_vrel: + track.last_trusted_vrel = vRel + track.last_trusted_vrel_nanos = now + if matured and track_id not in self.pts: + self.pts[track_id] = structs.RadarData.RadarPoint() + self.pts[track_id].trackId = track_id + self.pts[track_id].aRel = float('nan') + self.pts[track_id].yvRel = float('nan') + + if matured: + self.pts[track_id].dRel = dRel + self.pts[track_id].yRel = yRel + self.pts[track_id].vRel = vRel + self.pts[track_id].measured = True + else: + self.pts.pop(track_id, None) + + track.prev_frame_idx = idx0 + track.prev_life = life + track.last_seen_nanos = now + track.wire_slot = slot + for old_slot, old_id in enumerate(self._slot_track_ids): + if old_slot != slot and old_id == track_id: + self._slot_track_ids[old_slot] = None + self._slot_track_ids[slot] = track_id + + ret.points = [self.pts[track_id] for track_id in sorted(self.pts)] + return ret + + def _update_nidec(self, updated_messages): ret = structs.RadarData() for ii in sorted(updated_messages): @@ -59,6 +641,9 @@ class RadarInterface(RadarInterfaceBase): self.pts[ii].dRel = cpt['LONG_DIST'] # from front of car self.pts[ii].yRel = -cpt['LAT_DIST'] # in car frame's y axis, left is positive self.pts[ii].vRel = cpt['REL_SPEED'] + self.pts[ii].aRel = float('nan') + self.pts[ii].yvRel = float('nan') + self.pts[ii].measured = True else: if ii in self.pts: del self.pts[ii] diff --git a/opendbc_repo/opendbc/car/honda/values.py b/opendbc_repo/opendbc/car/honda/values.py index 780914f02..78d10c37b 100644 --- a/opendbc_repo/opendbc/car/honda/values.py +++ b/opendbc_repo/opendbc/car/honda/values.py @@ -195,7 +195,7 @@ class CAR(Platforms): HondaCarDocs("Honda Civic Hatchback 2019-21", "All", min_steer_speed=12. * CV.MPH_TO_MS), ], CarSpecs(mass=1326, wheelbase=2.7, steerRatio=15.38, centerToFrontRatio=0.4), # steerRatio: 10.93 is end-to-end spec - {Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated'}, + {Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated', Bus.radar: 'honda_bosch_a_radar'}, ) HONDA_CIVIC_BOSCH_DIESEL = HondaBoschPlatformConfig( [], # don't show in docs @@ -219,7 +219,7 @@ class CAR(Platforms): [HondaCarDocs("Honda CR-V 2017-22", min_steer_speed=15. * CV.MPH_TO_MS)], # steerRatio: 12.3 is spec end-to-end CarSpecs(mass=3410 * CV.LB_TO_KG, wheelbase=2.66, steerRatio=16.0, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), - {Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated', Bus.body: 'honda_crv_ex_2017_body_generated'}, + {Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated', Bus.body: 'honda_crv_ex_2017_body_generated', Bus.radar: 'honda_bosch_a_radar'}, flags=HondaFlags.BOSCH_ALT_BRAKE, ) HONDA_CRV_6G = HondaBoschCANFDPlatformConfig( @@ -409,6 +409,8 @@ HONDA_BOSCH = frozenset(c for c in CAR if c.config.flags & HondaFlags.BOSCH) HONDA_BOSCH_ALT_RADAR = frozenset(c for c in CAR if c.config.flags & HondaFlags.BOSCH_ALT_RADAR) HONDA_BOSCH_RADARLESS = frozenset(c for c in CAR if c.config.flags & HondaFlags.BOSCH_RADARLESS) HONDA_BOSCH_CANFD = frozenset(c for c in CAR if c.config.flags & HondaFlags.BOSCH_CANFD) +HONDA_BOSCH_A = HONDA_BOSCH - HONDA_BOSCH_RADARLESS - HONDA_BOSCH_CANFD - HONDA_BOSCH_ALT_RADAR +HONDA_BOSCH_A_RADAR_VERIFIED = frozenset({CAR.HONDA_CIVIC_BOSCH, CAR.HONDA_CRV_5G}) STEER_THRESHOLD = { diff --git a/opendbc_repo/opendbc/dbc/honda_bosch_a_radar.dbc b/opendbc_repo/opendbc/dbc/honda_bosch_a_radar.dbc new file mode 100644 index 000000000..5e9da540d --- /dev/null +++ b/opendbc_repo/opendbc/dbc/honda_bosch_a_radar.dbc @@ -0,0 +1,1014 @@ +VERSION "honda_bosch_a_radar -- 16-slot Bosch-A object bank (16 CAN-visible object slots, each a 4-frame main burst f0..f3 + one synchronized companion frame). Hand-written (NOT generated by the opendbc generator pipeline). RANGE/AZIMUTH scaled companions are documentation-only; RadarInterface recomputes the physical values from RAW signals. Firmware descriptor-backed raw aliases are retained for traceability; semantic aliases are added only where firmware/capture evidence is strong. f3 contains angular bounds, matched edge uncertainty, and TRACK_ID; AUX contains direct relative velocity/uncertainty, the second edge uncertainty, and a capture-validated range-ratio candidate. FRAME_IDX / LIFECYCLE_RAW are intentionally not named COUNTER." + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: RADAR XXX + + +BO_ 640 BOSCH_A_S00_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_25_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_26_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_28_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_29_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 641 BOSCH_A_S00_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_2B_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_18_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_2C_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_19_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_2D_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 642 BOSCH_A_S00_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_2F_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_1A_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_30_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_1B_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_1C_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 643 BOSCH_A_S00_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 712 BOSCH_A_S00_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 644 BOSCH_A_S01_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_34_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_35_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_37_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_38_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 645 BOSCH_A_S01_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_3A_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_23_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_3B_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_24_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_3C_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 646 BOSCH_A_S01_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_3E_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_25_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_3F_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_26_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_27_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 647 BOSCH_A_S01_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 713 BOSCH_A_S01_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 648 BOSCH_A_S02_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_43_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_44_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_46_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_47_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 649 BOSCH_A_S02_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_49_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_2E_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_4A_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_2F_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_4B_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 650 BOSCH_A_S02_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_4D_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_30_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_4E_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_31_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_32_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 651 BOSCH_A_S02_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 714 BOSCH_A_S02_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 652 BOSCH_A_S03_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_52_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_53_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_55_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_56_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 653 BOSCH_A_S03_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_58_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_39_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_59_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_3A_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_5A_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 654 BOSCH_A_S03_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_5C_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_3B_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_5D_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_3C_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_3D_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 655 BOSCH_A_S03_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 715 BOSCH_A_S03_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 720 BOSCH_A_S04_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_61_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_62_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_64_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_65_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 721 BOSCH_A_S04_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_67_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_44_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_68_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_45_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_69_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 722 BOSCH_A_S04_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_6B_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_46_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_6C_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_47_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_48_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 723 BOSCH_A_S04_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 716 BOSCH_A_S04_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 724 BOSCH_A_S05_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_70_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_71_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_73_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_74_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 725 BOSCH_A_S05_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_76_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_4F_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_77_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_50_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_78_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 726 BOSCH_A_S05_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_7A_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_51_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_7B_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_52_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_53_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 727 BOSCH_A_S05_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 717 BOSCH_A_S05_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 728 BOSCH_A_S06_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_7F_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_80_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_82_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_83_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 729 BOSCH_A_S06_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_85_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_5A_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_86_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_5B_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_87_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 730 BOSCH_A_S06_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_89_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_5C_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_8A_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_5D_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_5E_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 731 BOSCH_A_S06_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 718 BOSCH_A_S06_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 732 BOSCH_A_S07_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_8E_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_8F_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_91_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_92_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 733 BOSCH_A_S07_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_94_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_65_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_95_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_66_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_96_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 734 BOSCH_A_S07_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_98_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_67_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_99_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_68_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_69_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 735 BOSCH_A_S07_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 719 BOSCH_A_S07_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 736 BOSCH_A_S08_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_9D_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_9E_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_A0_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_A1_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 737 BOSCH_A_S08_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_A3_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_70_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_A4_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_71_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_A5_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 738 BOSCH_A_S08_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_A7_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_72_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_A8_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_73_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_74_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 739 BOSCH_A_S08_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 656 BOSCH_A_S08_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 740 BOSCH_A_S09_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_AC_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_AD_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_AF_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_B0_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 741 BOSCH_A_S09_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_B2_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_7B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_B3_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_7C_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_B4_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 742 BOSCH_A_S09_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_B6_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_7D_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_B7_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_7E_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_7F_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 743 BOSCH_A_S09_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 657 BOSCH_A_S09_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 744 BOSCH_A_S10_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_BB_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_BC_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_BE_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_BF_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 745 BOSCH_A_S10_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_C1_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_86_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_C2_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_87_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_C3_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 746 BOSCH_A_S10_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_C5_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_88_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_C6_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_89_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_8A_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 747 BOSCH_A_S10_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 658 BOSCH_A_S10_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 748 BOSCH_A_S11_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_CA_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_CB_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_CD_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_CE_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 749 BOSCH_A_S11_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_D0_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_91_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_D1_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_92_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_D2_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 750 BOSCH_A_S11_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_D4_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_93_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_D5_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_94_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_95_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 751 BOSCH_A_S11_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 659 BOSCH_A_S11_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 752 BOSCH_A_S12_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_D9_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_DA_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_DC_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_DD_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 753 BOSCH_A_S12_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_DF_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_9C_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_E0_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_9D_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_E1_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 754 BOSCH_A_S12_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_E3_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_9E_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_E4_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_9F_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_A0_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 755 BOSCH_A_S12_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 660 BOSCH_A_S12_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 756 BOSCH_A_S13_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_E8_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_E9_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_EB_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_EC_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 757 BOSCH_A_S13_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_EE_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_A7_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_EF_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_A8_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_F0_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 758 BOSCH_A_S13_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_F2_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_A9_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_F3_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_AA_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_AB_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 759 BOSCH_A_S13_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 661 BOSCH_A_S13_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 760 BOSCH_A_S14_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_F7_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_F8_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_FA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_FB_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 761 BOSCH_A_S14_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_FD_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_B2_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_FE_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_B3_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_FF_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 762 BOSCH_A_S14_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_01_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_B4_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_02_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_B5_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_B6_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 763 BOSCH_A_S14_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 662 BOSCH_A_S14_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + +BO_ 764 BOSCH_A_S15_F0: 8 RADAR + SG_ STATUS : 15|4@0+ (1,0) [0|15] "" XXX + SG_ FRAME_IDX : 27|4@0+ (1,0) [0|15] "" XXX + SG_ RANGE_RAW : 23|12@0+ (1,0) [0|4095] "" XXX + SG_ RANGE : 23|12@0+ (0.05712,-3.0) [-3.0|231.7965] "m" XXX + SG_ AZIMUTH_RAW : 39|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_RAD : 39|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_DEG : 39|11@0+ (0.0279764548403722,-28.6478897565412) [-28.6478897565412|28.6199133017008] "deg" XXX + SG_ FW_LID_06_RAW : 44|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_07_RAW : 11|2@0+ (1,0) [0|3] "" XXX + SG_ FW_LID_09_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ RANGE_SIGMA_RAW : 7|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_0A_RAW : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 765 BOSCH_A_S15_F1: 8 RADAR + SG_ FRAME_IDX : 28|4@0+ (1,0) [0|15] "" XXX + SG_ FW_LID_0C_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ OBJECT_EXISTENCE_PROBABILITY_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_BD_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ ANGULAR_WIDTH_DEG : 23|11@0+ (0.03125,0) [0|63.96875] "deg" XXX + SG_ FW_LID_0D_RAW : 15|8@0+ (1,0) [0|255] "" XXX + SG_ FW_LID_BE_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_0E_RAW : 7|6@0+ (1,0) [0|63] "" XXX + +BO_ 766 BOSCH_A_S15_F2: 8 RADAR + SG_ FRAME_IDX : 11|4@0+ (1,0) [0|15] "" XXX + SG_ LIFECYCLE_RAW : 7|12@0+ (1,0) [0|4095] "" XXX + SG_ FW_LID_10_RAW : 29|1@0+ (1,0) [0|1] "" XXX + SG_ FW_LID_BF_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ NORMALIZED_CLOSING : 23|10@0+ (0.015625,-8.0) [-8.0|7.984375] "" XXX + SG_ FW_LID_11_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ NORMALIZED_CLOSING_SIGMA_RAW : 46|7@0+ (1,0) [0|127] "" XXX + SG_ FW_LID_C0_RAW : 39|9@0+ (1,0) [0|511] "" XXX + SG_ FW_LID_C1_RAW : 55|9@0+ (1,0) [0|511] "" XXX + +BO_ 767 BOSCH_A_S15_F3: 8 RADAR + SG_ AZIMUTH_EDGE_A_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_A_RAD : 7|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ AZIMUTH_EDGE_B_RAW : 23|11@0+ (1,0) [0|2047] "" XXX + SG_ AZIMUTH_EDGE_B_RAD : 23|11@0+ (0.00048828125,-0.5) [-0.5|0.49951171875] "rad" XXX + SG_ AZIMUTH_EDGE_SIGMA_A_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ TRACK_ID : 55|8@0+ (1,0) [0|255] "" XXX + +BO_ 663 BOSCH_A_S15_AUX: 8 RADAR + SG_ FRAME_IDX : 12|4@0+ (1,0) [0|15] "" XXX + SG_ REL_VELOCITY_RAW : 7|11@0+ (1,0) [0|2047] "" XXX + SG_ REL_VELOCITY_UNCERTAINTY_RAW : 23|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00C9_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ AZIMUTH_EDGE_SIGMA_B_RAW : 39|10@0+ (1,0) [0|1023] "" XXX + SG_ FW_LID_00CA_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO_RAW : 55|10@0+ (1,0) [0|1023] "" XXX + SG_ RANGE_RATIO : 55|10@0+ (0.001,0.5) [0.5|1.523] "" XXX + + +CM_ BO_ 640 "Slot 0 frame 0 (range/status/azimuth/frame-index). 0x280."; +CM_ BO_ 641 "Slot 0 frame 1 (frame-index only, core contract). 0x281."; +CM_ BO_ 642 "Slot 0 frame 2 (lifecycle/frame-index). 0x282."; +CM_ BO_ 643 "Slot 0 frame 3 (frame-index only, core contract). 0x283."; +CM_ BO_ 712 "Slot 0 auxiliary frame (enrichment only, never gates validity). 0x2C8."; +CM_ BO_ 644 "Slot 1 frame 0 (range/status/azimuth/frame-index). 0x284."; +CM_ BO_ 645 "Slot 1 frame 1 (frame-index only, core contract). 0x285."; +CM_ BO_ 646 "Slot 1 frame 2 (lifecycle/frame-index). 0x286."; +CM_ BO_ 647 "Slot 1 frame 3 (frame-index only, core contract). 0x287."; +CM_ BO_ 713 "Slot 1 auxiliary frame (enrichment only, never gates validity). 0x2C9."; +CM_ BO_ 648 "Slot 2 frame 0 (range/status/azimuth/frame-index). 0x288."; +CM_ BO_ 649 "Slot 2 frame 1 (frame-index only, core contract). 0x289."; +CM_ BO_ 650 "Slot 2 frame 2 (lifecycle/frame-index). 0x28A."; +CM_ BO_ 651 "Slot 2 frame 3 (frame-index only, core contract). 0x28B."; +CM_ BO_ 714 "Slot 2 auxiliary frame (enrichment only, never gates validity). 0x2CA."; +CM_ BO_ 652 "Slot 3 frame 0 (range/status/azimuth/frame-index). 0x28C."; +CM_ BO_ 653 "Slot 3 frame 1 (frame-index only, core contract). 0x28D."; +CM_ BO_ 654 "Slot 3 frame 2 (lifecycle/frame-index). 0x28E."; +CM_ BO_ 655 "Slot 3 frame 3 (frame-index only, core contract). 0x28F."; +CM_ BO_ 715 "Slot 3 auxiliary frame (enrichment only, never gates validity). 0x2CB."; +CM_ BO_ 720 "Slot 4 frame 0 (range/status/azimuth/frame-index). 0x2D0."; +CM_ BO_ 721 "Slot 4 frame 1 (frame-index only, core contract). 0x2D1."; +CM_ BO_ 722 "Slot 4 frame 2 (lifecycle/frame-index). 0x2D2."; +CM_ BO_ 723 "Slot 4 frame 3 (frame-index only, core contract). 0x2D3."; +CM_ BO_ 716 "Slot 4 auxiliary frame (enrichment only, never gates validity). 0x2CC."; +CM_ BO_ 724 "Slot 5 frame 0 (range/status/azimuth/frame-index). 0x2D4."; +CM_ BO_ 725 "Slot 5 frame 1 (frame-index only, core contract). 0x2D5."; +CM_ BO_ 726 "Slot 5 frame 2 (lifecycle/frame-index). 0x2D6."; +CM_ BO_ 727 "Slot 5 frame 3 (frame-index only, core contract). 0x2D7."; +CM_ BO_ 717 "Slot 5 auxiliary frame (enrichment only, never gates validity). 0x2CD."; +CM_ BO_ 728 "Slot 6 frame 0 (range/status/azimuth/frame-index). 0x2D8."; +CM_ BO_ 729 "Slot 6 frame 1 (frame-index only, core contract). 0x2D9."; +CM_ BO_ 730 "Slot 6 frame 2 (lifecycle/frame-index). 0x2DA."; +CM_ BO_ 731 "Slot 6 frame 3 (frame-index only, core contract). 0x2DB."; +CM_ BO_ 718 "Slot 6 auxiliary frame (enrichment only, never gates validity). 0x2CE."; +CM_ BO_ 732 "Slot 7 frame 0 (range/status/azimuth/frame-index). 0x2DC."; +CM_ BO_ 733 "Slot 7 frame 1 (frame-index only, core contract). 0x2DD."; +CM_ BO_ 734 "Slot 7 frame 2 (lifecycle/frame-index). 0x2DE."; +CM_ BO_ 735 "Slot 7 frame 3 (frame-index only, core contract). 0x2DF."; +CM_ BO_ 719 "Slot 7 auxiliary frame (enrichment only, never gates validity). 0x2CF."; +CM_ BO_ 736 "Slot 8 frame 0 (range/status/azimuth/frame-index). 0x2E0."; +CM_ BO_ 737 "Slot 8 frame 1 (frame-index only, core contract). 0x2E1."; +CM_ BO_ 738 "Slot 8 frame 2 (lifecycle/frame-index). 0x2E2."; +CM_ BO_ 739 "Slot 8 frame 3 (frame-index only, core contract). 0x2E3."; +CM_ BO_ 656 "Slot 8 auxiliary frame (enrichment only, never gates validity). 0x290."; +CM_ BO_ 740 "Slot 9 frame 0 (range/status/azimuth/frame-index). 0x2E4."; +CM_ BO_ 741 "Slot 9 frame 1 (frame-index only, core contract). 0x2E5."; +CM_ BO_ 742 "Slot 9 frame 2 (lifecycle/frame-index). 0x2E6."; +CM_ BO_ 743 "Slot 9 frame 3 (frame-index only, core contract). 0x2E7."; +CM_ BO_ 657 "Slot 9 auxiliary frame (enrichment only, never gates validity). 0x291."; +CM_ BO_ 744 "Slot 10 frame 0 (range/status/azimuth/frame-index). 0x2E8."; +CM_ BO_ 745 "Slot 10 frame 1 (frame-index only, core contract). 0x2E9."; +CM_ BO_ 746 "Slot 10 frame 2 (lifecycle/frame-index). 0x2EA."; +CM_ BO_ 747 "Slot 10 frame 3 (frame-index only, core contract). 0x2EB."; +CM_ BO_ 658 "Slot 10 auxiliary frame (enrichment only, never gates validity). 0x292."; +CM_ BO_ 748 "Slot 11 frame 0 (range/status/azimuth/frame-index). 0x2EC."; +CM_ BO_ 749 "Slot 11 frame 1 (frame-index only, core contract). 0x2ED."; +CM_ BO_ 750 "Slot 11 frame 2 (lifecycle/frame-index). 0x2EE."; +CM_ BO_ 751 "Slot 11 frame 3 (frame-index only, core contract). 0x2EF."; +CM_ BO_ 659 "Slot 11 auxiliary frame (enrichment only, never gates validity). 0x293."; +CM_ BO_ 752 "Slot 12 frame 0 (range/status/azimuth/frame-index). 0x2F0."; +CM_ BO_ 753 "Slot 12 frame 1 (frame-index only, core contract). 0x2F1."; +CM_ BO_ 754 "Slot 12 frame 2 (lifecycle/frame-index). 0x2F2."; +CM_ BO_ 755 "Slot 12 frame 3 (frame-index only, core contract). 0x2F3."; +CM_ BO_ 660 "Slot 12 auxiliary frame (enrichment only, never gates validity). 0x294."; +CM_ BO_ 756 "Slot 13 frame 0 (range/status/azimuth/frame-index). 0x2F4."; +CM_ BO_ 757 "Slot 13 frame 1 (frame-index only, core contract). 0x2F5."; +CM_ BO_ 758 "Slot 13 frame 2 (lifecycle/frame-index). 0x2F6."; +CM_ BO_ 759 "Slot 13 frame 3 (frame-index only, core contract). 0x2F7."; +CM_ BO_ 661 "Slot 13 auxiliary frame (enrichment only, never gates validity). 0x295."; +CM_ BO_ 760 "Slot 14 frame 0 (range/status/azimuth/frame-index). 0x2F8."; +CM_ BO_ 761 "Slot 14 frame 1 (frame-index only, core contract). 0x2F9."; +CM_ BO_ 762 "Slot 14 frame 2 (lifecycle/frame-index). 0x2FA."; +CM_ BO_ 763 "Slot 14 frame 3 (frame-index only, core contract). 0x2FB."; +CM_ BO_ 662 "Slot 14 auxiliary frame (enrichment only, never gates validity). 0x296."; +CM_ BO_ 764 "Slot 15 frame 0 (range/status/azimuth/frame-index). 0x2FC."; +CM_ BO_ 765 "Slot 15 frame 1 (frame-index only, core contract). 0x2FD."; +CM_ BO_ 766 "Slot 15 frame 2 (lifecycle/frame-index). 0x2FE."; +CM_ BO_ 767 "Slot 15 frame 3 (frame-index only, core contract). 0x2FF."; +CM_ BO_ 663 "Slot 15 auxiliary frame (enrichment only, never gates validity). 0x297.";