尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A Raspberry Pi CM4 dashcam + wasteland-style satellite navigator on a 2001 black-and-white CRT (composite straight from the SoC)
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A 2001 black‑and‑white reversing monitor, a Raspberry Pi Compute Module 4 and a wasteland navigator.
fallout.nav turns a Raspberry Pi CM4 into an in‑car computer for an old van:
fsync every second: a power cut loses ≤ 2 s of video.VDAC_COMP), NTSC 480i/60 Hz with output
margins and mirroring tuned for the RV‑50. The button on the GPS module switches the video output off so it
does not bleed into the monitor's other camera input.https://<server>/fnadmin/; live video there is a low‑bitrate
H.264 stream that is only encoded while someone watches.Project page with a live demo: https://ptrs.ltd/apps/fallout.nav/
| Part | Notes |
|---|---|
| Raspberry Pi CM4 (eMMC, Wi‑Fi, 4 GB) on Waveshare CM4‑NANO‑B | Raspberry Pi OS (Debian 13 trixie) |
| OV5647 camera | CSI0, dtoverlay=ov5647,cam0 |
| Holybro M8N GPS + IST8310 compass (10‑pin JST‑GH) | UART5 /dev/gps0 + I2C‑1 |
| WAECO Mobitronic RV‑50 monitor | composite input, B/W CRT |
| GH pin | Signal | → | 40‑pin | Pi signal |
|---|---|---|---|---|
| 1 | VCC 5V | → | 2 | 5V |
| 2 | RX (GPS input) | → | 32 | GPIO12 TXD5 |
| 3 | TX (GPS output) | → | 33 | GPIO13 RXD5 |
| 4 | SCL | → | 5 | GPIO3 SCL |
| 5 | SDA | → | 3 | GPIO2 SDA |
| 6 | SAFETY_SWITCH | → | 16 | GPIO23 — short press: video output on/off, long press: protect recording |
| 7 | SAFETY_SWITCH_LED | → | 18 | GPIO24 — blinks while recording |
| 8 | VDD_3V3 | → | 1 | 3.3V |
| 10 | GND | → | 6 | GND |
The GPS uses the PL011 UART5 (dtoverlay=uart5) so that the primary UART0 stays with the on‑board Bluetooth,
which plays the internet radio on a Bluetooth speaker.
CM4 connector J2, pin 111 VDAC_COMP (inner/odd row, 6th from the pin‑101 end; its neighbours are
109 PCIe_nRST and 113 GND — "ground immediately on the far side" is the reliable check) → video pin of the
monitor input, GND → its ground. See docs/device-report.md.
fnav/core FastAPI backend: auth, settings, 10 Hz WebSocket telemetry, nav logic, Esri tile cache, recordings, system
fnav/camera Picamera2 pipeline, crash-safe MPEG-TS recorder, RTSP to MediaMTX (WebRTC), MJPEG for the screen
fnav/sensors gpsd client, UBX configuration, IST8310 driver, calibration + GPS auto-calibration, heading fusion, GPIO
web/display the car screen (Canvas renderer for Esri tiles + Pip-Boy HUD), also runs as an in-browser demo (?demo=1)
web/admin the web UI
pi/ install.sh, deploy.sh, systemd units, boot config, MediaMTX, sudoers/polkit
server/ fnav-relay (position log, login while the device is offline; stdlib Python) and the nginx snippet
tools/ remote.sh (server + tunnel setup), publish_site.sh, UBX/I2C helpers
site/ the project page
Services on the device: fnav-core (port 80; 127.0.0.1:8090 for the tunnel), fnav-camera, mediamtx,
fnav-display (cage + Chromium kiosk), fnav-radio (mpv), bluetooth + bluealsa, fnav-tunnel, gpsd, chrony.
Weather on the car screen (now + the next two days while the radio is off, wind streaks around the vehicle):
Open-Meteo for the GPS position, every 30 min or after 25 km, cached for offline use
(fnav/core/weather.py). Weather data by Open-Meteo.com, CC BY 4.0.
Speed limit sign next to the speedometer: offline OpenStreetMap roads. tools/speedlimits.sh builds the database on
the server from the Geofabrik extract (Poland by default; implicit limits such as PL:urban and defaults by road
class) and copies it to /var/lib/fnav/speedlimits.sqlite; fnav/core/speedlimit.py matches the GPS position and
course to the road once a second. Rerun the script now and then for fresh data. Data © OpenStreetMap contributors, ODbL.
pi/deploy.sh --stage # from a PC (Git Bash / Linux): upload the repo to the device
ssh <device> 'cd ~/fallout.nav && sudo ./pi/install.sh && sudo reboot'
pi/deploy.sh # later updates
browser ─ https://<server>/fnadmin/ ─ nginx ─┬─ static copy of web/ (opens even when the device is off)
├─ /api/tracking/ → fnav-relay (the log lives on the server)
└─ /api, /ws → 127.0.0.1:18080 ─ ssh -R ─ device fnav-core :8090
device: fnav-core ─ a point a minute → SQLite outbox ─ ssh -L 127.0.0.1:18095 → fnav-relay
Requests through the tunnel arrive at a separate listener with no localhost trust; the password is the same as on
the device (the server checks the same session cookie). One-time setup from a PC, after pi/deploy.sh:
cp tools/remote.env.example tools/.remote.env # server login, site name, nginx site file
tools/remote.sh setup # relay, nginx, tunnel user/key, device config, web copy
tools/remote.sh web # after UI changes
Details: docs/contracts/remote.md.
pip install -e .[dev]
python -m fnav.core --mock --port 8000 # http://127.0.0.1:8000/admin/ (password: fnav-dev)
python -m fnav.camera --fake # synthetic camera + recorder
python -m pytest # Python tests (core, camera, sensors, server)
node --test tests/display/*.test.mjs # display tests
The project was designed and written in about a day by Claude acting as lead/integrator with seven parallel
sub‑agents (backend, map renderer, HUD design, web UI, camera/recorder, sensors, system), coordinated through
written contracts in docs/contracts/. Plan and decisions: PLAN.md; hardware bring‑up notes:
docs/device-report.md.
Map imagery © Esri and its data providers (Esri, Maxar, Earthstar Geographics and the GIS user community).
MIT — see LICENSE. Third‑party parts keep their own licenses: fonts in web/display/ui/fonts/
(SIL OFL 1.1, see LICENSES.md there) and web/admin/vendor/mpegts.js (Apache‑2.0).