Steering angle (0C0, signed 0.1°), main beam, front fogs; layouts can be signed; dipped beam doubted
/ crosscheck (push) Successful in 2s
Rust consumers (L4T) / Clippy, test, build, glibc for every service that compiles contracts in (push) Successful in 22s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
2026-10-15 21:21:48 +09:00
parent 0af2c956e4
commit 642be2a5e1
2 changed files with 66 additions and 2 deletions
+18
View File
@@ -48,6 +48,24 @@ about 24° off level, turned so its X axis points forward. Calibrated, the marke
Lateral stays at about 0 in all four: forward is straight ahead. GNSS reports about once a second,
which smooths short peaks.
## Session 000009: lights at night, corners
`z27ag-20261015-203117-lights-corners-drive`: step 9 at night, then a 35-minute errand drive
(no OBD-II: the obd-poller was off after the freeze). References: GNSS and the calibrated IMU.
| Signal | Where | Evidence | Registered as |
|---|---|---|---|
| Main beam | `423.2.7` | set exactly through the marked stretch; also fired once with the other lights off: flash-to-pass | `main_beam` |
| Front fog lamps | `423.2.4` | set exactly through the marked stretch (lights on) | `front_fogs` |
| **Steering wheel angle** | `0C0` bytes 0–1, little-endian, **signed**, **0.1° per count**, positive left | correlation **+0.995** with how sharply the car turns (IMU yaw rate ÷ speed), 1021 s of driving. Lock to lock −479…+471°; with a 2.5 m wheelbase that is a 16.3:1 steering ratio, typical. Straight driving reads −2.7° (camber or alignment) | `steering_angle_deg` (the layout format gained `signed`) |
| Dipped beam? | `423.3.1` | clean in daylight on the 13th; at night it flickers on for 0.1–0.2 s at each switch movement. The cluster has **no dipped-beam lamp** (only side lights, main beam and fogs, no rear fogs), and `423` matches the cluster's lamps, so this bit is probably something else that moves with the lights (illumination, dimming). A walk through Off → Auto → Dim → Main settles it | `dipped_beam` kept, description says so |
**IMU, lateral axis:** lateral g against speed × yaw rate gives a slope of **−0.998** (correlation
−0.91; the sign is right: yaw counts a left turn positive, lateral g counts right positive). With the
stops above, both horizontal axes of the calibration are confirmed.
`149` bytes 1–2 is not a yaw-rate sensor (correlation 0.02 with the IMU's yaw rate).
## Not found
- **Intake air temperature:** no byte of `449` tracks OBD-II `0F` (29–51 °C here).
+48 -2
View File
@@ -1,5 +1,5 @@
{
"$comment": "Single source for signal identity. Topic name and envelope unit are both derived from these entries and are never authored separately. source=obd2 is standardised (OBD-II mode 01 over the K-line, through the ELM327): calibration references, every name prefixed obd_ (project-yukart decision 30); source=host is the Orin itself (orin-status), not the car. source=gnss is the receiver (svc-core gnss), on yukart/gnss/<signal>. source=imu is the WT61 IMU, already turned into the car's frame (mounting and gravity handled by its publisher), on yukart/imu/<signal>. source=z27ag is reverse-engineered from the car's own broadcast frames, and its 'can' block is the only place its layout is written down: id (11-bit, hex string), byte (first data byte, 0-7), length in bits (1, 8 or 16), bit (length 1 only: 0 = LSB of that byte), order (length 16: big = byte first is most significant, little = the reverse), scale and offset (value = raw * scale + offset; booleans are raw != 0). 'evidence' names the contracts report that found it.",
"$comment": "Single source for signal identity. Topic name and envelope unit are both derived from these entries and are never authored separately. source=obd2 is standardised (OBD-II mode 01 over the K-line, through the ELM327): calibration references, every name prefixed obd_ (project-yukart decision 30); source=host is the Orin itself (orin-status), not the car. source=gnss is the receiver (svc-core gnss), on yukart/gnss/<signal>. source=imu is the WT61 IMU, already turned into the car's frame (mounting and gravity handled by its publisher), on yukart/imu/<signal>. source=z27ag is reverse-engineered from the car's own broadcast frames, and its 'can' block is the only place its layout is written down: id (11-bit, hex string), byte (first data byte, 0-7), length in bits (1, 8 or 16), bit (length 1 only: 0 = LSB of that byte), order (length 16: big = byte first is most significant, little = the reverse), signed (lengths 8 and 16: two's complement; default unsigned), scale and offset (value = raw * scale + offset; booleans are raw != 0). 'evidence' names the contracts report that found it.",
"signals": {
"obd_vehicle_speed_kph": {
"unit": "kph",
@@ -168,6 +168,26 @@
"evidence": "Z27AG-DECODE-1"
}
},
"steering_angle_deg": {
"unit": "degree",
"type": "number",
"source": "z27ag",
"description": "Steering wheel angle: positive to the left. About -2.7° driving straight; lock to lock about ±475° (ratio about 16:1)",
"range": [
-600,
600
],
"can": {
"id": "0x0C0",
"byte": 0,
"length": 16,
"order": "little",
"signed": true,
"scale": 0.1,
"offset": 0,
"evidence": "Z27AG-DECODE-2"
}
},
"brake_pedal": {
"unit": "",
"type": "boolean",
@@ -237,7 +257,7 @@
"unit": "",
"type": "boolean",
"source": "z27ag",
"description": "Dipped headlights on",
"description": "Probably not dipped beam: clean in daylight (2026-10-13) but flickering at each switch movement at night (2026-10-15), and the Z27AG's cluster has no dipped-beam lamp (side lights, main beam and fogs only), so frame 423, the cluster's status, has little reason to carry it. Kept under this name until a light-switch walk shows what it is",
"can": {
"id": "0x423",
"byte": 3,
@@ -246,6 +266,32 @@
"evidence": "Z27AG-DECODE-1"
}
},
"main_beam": {
"unit": "",
"type": "boolean",
"source": "z27ag",
"description": "Main beam lamp on, flash-to-pass included",
"can": {
"id": "0x423",
"byte": 2,
"bit": 7,
"length": 1,
"evidence": "Z27AG-DECODE-2"
}
},
"front_fogs": {
"unit": "",
"type": "boolean",
"source": "z27ag",
"description": "Front fog lamps on (they need side lights or dipped beam)",
"can": {
"id": "0x423",
"byte": 2,
"bit": 4,
"length": 1,
"evidence": "Z27AG-DECODE-2"
}
},
"door_open": {
"unit": "",
"type": "boolean",