2.9 KiB
Current state
Last updated 2026-10-04. HANDOFF.md is the brief; this file tracks where the work stands.
Hardware on hand
Raspberry Pi 4, BrainCraft HAT, Arducam UC-346 camera. Not yet: servos, USB-C splitter, printed enclosure, speakers. Work until those arrive is limited to what the Pi, HAT and camera can do.
Package 0a (platform proof on Ubuntu 24.04)
- Step 1 done.
host/check-pi-platform.shpasses: Ubuntu's6.8.0-1065-raspikernel ships every driver and overlay needed (WM8960 audio, OV5647, Unicam, PWM, SPI, dwc2 gadget with NCM/ECM/ACM). The script needed a fix for uncompresseddata.tar(applied tohost/and the duplicate intools/; uncommitted). - Step 2 in progress: flashing the SD card. Image chosen:
ubuntu-24.04.5-preinstalled-server-arm64+raspi.img.xz, SHA256b23371a5c8d02f612c26e7c18cacb81c5a48f968c7c66a2645391320aa94351e(from cdimage.ubuntu.com/releases/24.04/release/SHA256SUMS). It was downloaded to the session scratchpad under/tmp, which a reboot likely cleared; re-download and re-verify. - The Pi is not running yet. No card has been written. Dev host is NixOS (has
xz,dd,udisksctl; norpi-imager). - Open questions for the owner before flashing: Wi-Fi credentials or Ethernet for first boot;
hostname (proposed
hermes-robot); username; SSH key (default~/.ssh/id_ed25519.pub). Plan: write the image after the owner confirms the device fromlsblk, then edit cloud-init on thesystem-bootpartition (user, key, hostname, SSH, network). - Remaining 0a steps after boot: ROS 2 Jazzy, audio (
wm8960-soundcardoverlay + mixer), camera (cam -l,camera_ros), display test pattern. PWM test waits for the servos. Ask before rebooting the Pi.
Repository
Git repo initialised on main with one commit ("Initial commit"). .gitignore covers
.remember/, caches, .venv/, *.orig, *.rej. The earlier zip and patch files were deleted.
tools/check-pi-platform.sh duplicates host/check-pi-platform.sh and can probably go.
Security review notes (parked until the USB link is up)
An automated review of the initial commit flagged three items. All stem from the code predating the USB-gadget design (HANDOFF.md package 0b); none is exposed until the Pi runs.
pi/robot_mcp_server.py: plain HTTP,ROBOT_MCP_BINDdefaults to0.0.0.0. Plan: default to10.55.0.2, start afterusb0.pi/pipewire/50-network-server.conf: TCP 4713 on all interfaces, unrestricted. Plan: keep, comment that the firewall is the protection.pi/nftables-robot.nft: still the Pi Zero version (single host IP, any interface). Package 0b rewrites it to accept only on the USB interface from10.55.0.1.pi/install.shpermissions looked fine (/etc/robot-mcp.envisroot:$USER, 640).
The owner wants to confirm the real IPs on the link before changing any of this. If the USB link doesn't work, revisit: TLS or a Tailscale-only bind for MCP and audio.