Compare commits

...

4 Commits

Author SHA1 Message Date
mikkeli ce4eaa1aaf Note the LTE/GNSS hat is car-unit only
The hat sits in a custom enclosure on the car Orin and isn't swapped
to the development unit, so modem and gpsd testing happens on the car
unit and gnss development elsewhere runs on its mock input.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:59:08 +09:00
mikkeli c395d4e3b0 Architecture: note the stale boot clock and the metered povo SIM
The car unit has no RTC battery, so before NTP the clock sits near the
last shutdown time; that is the case the two-clock envelope exists for.
The LTE SIM is povo, not an IoT SIM, and its connection now carries
the metered flag the map-sync guard relies on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:58:51 +09:00
mikkeli f05fda71ee Phase 0: record host bring-up progress on the car unit
LTE is up over QMI on povo, metered and ranked below Ethernet/WiFi, with
failover tested. CAN interfaces now have stable udev names (can_pcan,
can_onboard) since canN order raced at boot, so references to can1/can0
go. GNSS stays open: gpsd runs but has no fix until an open-sky test,
which is now what blocks the moving map. Kernel-update rebuild steps
are documented for both out-of-tree modules; time sync is pinned to NICT.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:58:51 +09:00
mikkeli d8c40eb9ed Name the two Orin units by hostname
The hardware table listed mikkeli-orin-nano-2 as the main compute, but
that is the development unit; the car unit is mikkeli-orin-nano. Both
the README and the REPOS units table now say which is which.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:58:51 +09:00
4 changed files with 32 additions and 16 deletions
+5 -4
View File
@@ -32,10 +32,11 @@ Planned repositories and the reasoning behind the split are described in
| Part | Role | | Part | Role |
|---|---| |---|---|
| NVIDIA Jetson Orin Nano Super (`mikkeli-orin-nano-2`) | Main compute, JetPack r36.4 / Ubuntu 22.04 | | NVIDIA Jetson Orin Nano Super (`mikkeli-orin-nano`) | Car unit: main compute, JetPack r36.4 / Ubuntu 22.04 |
| PEAK PCAN-USB | Car CAN bus access (`can1`, 500 kbps) | | NVIDIA Jetson Orin Nano Super (`mikkeli-orin-nano-2`) | Development unit: builds, CI, bench (see [REPOS](docs/REPOS.md)) |
| Onboard MTTCan | Second CAN interface (`can0`) | | PEAK PCAN-USB | Car CAN bus access (`can_pcan`, 500 kbps) |
| Waveshare SIM7600G-H-M.2 | LTE Cat 4 + GNSS | | Onboard MTTCan | Second CAN interface (`can_onboard`) |
| Waveshare SIM7600G-H-M.2 | LTE Cat 4 (povo, fallback uplink below WiFi/Ethernet) + GNSS |
Details and rationale live in the environment repo's Details and rationale live in the environment repo's
[bill of materials](gitea:yukart/orin-nano-env-setup). [bill of materials](gitea:yukart/orin-nano-env-setup).
+7 -4
View File
@@ -16,7 +16,7 @@ rest down.
## Shape ## Shape
``` ```
CAN (can1) ──▶ can-bridge ──┐ CAN ──▶ can-bridge ──┐
OBD-II ──▶ obd-poller ─┤ OBD-II ──▶ obd-poller ─┤
GNSS ──▶ gnss ├──▶ message bus ──┬──▶ recorder (disk) GNSS ──▶ gnss ├──▶ message bus ──┬──▶ recorder (disk)
camera ──▶ vision* ─┘ ├──▶ hud (local video out) camera ──▶ vision* ─┘ ├──▶ hud (local video out)
@@ -84,6 +84,8 @@ Payloads: a self-describing JSON envelope for decoded signals; compact binary fo
Every envelope carries **two clocks**. `monotonic` is authoritative for ordering Every envelope carries **two clocks**. `monotonic` is authoritative for ordering
and intervals; `timestamp` is the absolute reference and may step, since the car and intervals; `timestamp` is the absolute reference and may step, since the car
boots without network and NTP corrects the clock once LTE connects mid-drive. boots without network and NTP corrects the clock once LTE connects mid-drive.
The car unit has no RTC battery, so until then the clock sits at roughly the
last shutdown time — offset by however long the car was parked.
Topic names, payload schemas and the signal registry live in Topic names, payload schemas and the signal registry live in
[contracts](gitea:yukart/contracts). [contracts](gitea:yukart/contracts).
@@ -259,10 +261,11 @@ They are never committed. `tool-mapmint` holds the scripts that fetch and build
them, plus a report of each build's provenance; `svc-nav` consumes the output. The them, plus a report of each build's provenance; `svc-nav` consumes the output. The
artifacts themselves live outside git and never touch the workstation-side repo. artifacts themselves live outside git and never touch the workstation-side repo.
They reach the car by `rsync` **over the LAN only, never over LTE** — the IoT SIM They reach the car by `rsync` **over the LAN only, never over LTE** — the metered
is not a sensible transport for a multi-gigabyte tile set. Gate the sync on a povo SIM is not a sensible transport for a multi-gigabyte tile set. Gate the sync on a
reachable LAN target rather than on an SSID, so the check validates the thing it reachable LAN target rather than on an SSID, so the check validates the thing it
actually needs, and treat NetworkManager's metered flag as a second guard. actually needs, and treat NetworkManager's metered flag as a second guard (set on the `povo`
connection).
Cadence is quarterly or on annoyance; road geometry does not move fast enough to Cadence is quarterly or on annoyance; road geometry does not move fast enough to
justify anything more. justify anything more.
+6 -2
View File
@@ -153,8 +153,12 @@ Two Orin Nanos, and they have different jobs:
| Unit | Role | | Unit | Role |
|---|---| |---|---|
| Development Orin | Build, CI runner, bench testing. Always powered, on the LAN | | Development Orin (`mikkeli-orin-nano-2`) | Build, CI runner, bench testing. Always powered, on the LAN |
| Car Orin | Deployment target only | | Car Orin (`mikkeli-orin-nano`) | Deployment target only |
The SIM7600 LTE/GNSS hat lives in the car unit only — its custom enclosure doesn't
move between units. Anything touching the modem or gpsd is tested on the car unit;
on the development unit, `gnss` runs against its own mock input (decision 19).
⚠ **The guarantee is version parity, not architecture.** An aarch64 binary built ⚠ **The guarantee is version parity, not architecture.** An aarch64 binary built
on a newer userland still fails to load on an older one. A JetPack or Ubuntu on a newer userland still fails to load on an older one. A JetPack or Ubuntu
+14 -6
View File
@@ -1,7 +1,7 @@
--- ---
type: plan type: plan
status: active status: active
updated: 2026-09-04 updated: 2026-10-08
--- ---
# Roadmap # Roadmap
@@ -12,11 +12,19 @@ something demonstrable in the car.
Getting the Jetson to see the hardware at all. Getting the Jetson to see the hardware at all.
- [x] PCAN-USB working as SocketCAN `can1` (out-of-tree `pcan.ko`, netdev build) - [x] PCAN-USB working as SocketCAN (out-of-tree `pcan.ko`, netdev build)
- [x] Stable CAN names by udev: `can_pcan`, `can_onboard` — `canN` order raced at boot
- [x] SIM7600G-H-M.2 specified and documented - [x] SIM7600G-H-M.2 specified and documented
- [ ] SIM7600 brought up: LTE data path and GNSS via gpsd - [x] SIM7600 LTE data path: QMI (self-built `qmi_wwan`), povo, metered, ranked
- [ ] Kernel-update procedure for the out-of-tree PCAN module — it does not below Ethernet/WiFi; failover tested, Tailscale stays reachable over LTE
survive kernel upgrades and will break silently - [ ] SIM7600 GNSS via gpsd — pipeline up (`/dev/sim7600-gps`), **no fix yet**;
needs an open-sky test
- [x] Kernel-update procedure for the out-of-tree modules (`pcan`, `qmi_wwan`) —
documented, sources kept in `~/infra`; still manual, and breaks silently
if forgotten
- [x] Network time pinned to NICT; timezone `Asia/Tokyo`
- [ ] Optional: RTC backup battery (CR2032) — without it the clock boots stale
until NTP or GPS corrects it
- [ ] Power and mounting in the car: clean shutdown on ignition off - [ ] Power and mounting in the car: clean shutdown on ignition off
Tracked in [orin-nano-env-setup](gitea:yukart/orin-nano-env-setup). Tracked in [orin-nano-env-setup](gitea:yukart/orin-nano-env-setup).
@@ -79,7 +87,7 @@ and `tool-mapmint` (artifact builds).
- [ ] Pull a Japan basemap extract from the Protomaps daily build with - [ ] Pull a Japan basemap extract from the Protomaps daily build with
`go-pmtiles`; static-serve it, with `localIdeographFontFamily` set for CJK `go-pmtiles`; static-serve it, with `localIdeographFontFamily` set for CJK
- [ ] MapLibre page rendering the basemap from a replayed GNSS trace - [ ] MapLibre page rendering the basemap from a replayed GNSS trace
- [ ] Moving map live in the car — **blocked on gpsd in Phase 0** - [ ] Moving map live in the car — **blocked on a GNSS fix in Phase 0**
- [ ] Meili map matching over recorded sessions, as Phase 2 ground truth - [ ] Meili map matching over recorded sessions, as Phase 2 ground truth
- [ ] Routing and turn-by-turn guidance onto `yukart/nav/guidance` - [ ] Routing and turn-by-turn guidance onto `yukart/nav/guidance`