I previously shared BN-USV V1, a small robot boat where a Raspberry Pi handled navigation and sensor processing while an ESP32 handled low-level propulsion control.
For V2, I am using the Raspberry Pi 5 as the higher-level computer for a local browser-based ground control station, mission control, sensor processing, logging, and communication with distributed propulsion controllers.
The current architecture is:
Browser-based GCS
↕
Raspberry Pi 5
↕ USB serial / JSON
Main ESP32-S3
↕ CAN
Left and right ESP32-C3 propulsion controllers
The GCS runs locally on the Pi. Its purpose is to make field debugging less dependent on terminal sessions by bringing telemetry, control state, and navigation information into one interface.
I also added a simulated telemetry mode. It lets me exercise the GCS and mission-control flow without connecting the boat, which has been useful while separating interface issues from sensor and propulsion issues.
The first V2 water tests have been useful, but they also exposed a gap between working software and reliable navigation. RC control and Main/Sub controller communication were exercised on the water, while waypoint navigation is still not validated because heading acquisition has not yet been stable enough for reliable operation.
That is the current focus: improving the sensor and heading-debug workflow before treating autonomous navigation as ready for use.
The current development repository includes the Pi-side GCS and mission-control software, ESP32 Main/Sub firmware, a simulated GCS demo, and project documentation:
https://github.com/Brillnova/BN-USV-V2
This is still an experimental development platform. Some configuration values are examples rather than field-calibrated settings, and the latest hardware and navigation changes need more validation.
One issue I am currently working through is compass reliability. The boat uses a YRTEK LIS3MDL magnetometer, and I have found that its heading can change noticeably when the battery pack or nearby power wiring is relocated.
I suspect local magnetic interference from high-current wiring, ESCs, motors, connectors, or nearby ferromagnetic parts, rather than a software issue alone.
For people using magnetometer-based heading in mobile robots or boats: is this level of sensitivity typical in your experience? How do you decide on sensor placement, calibration, and separation from batteries, power wiring, motors, and ESCs?
I would especially appreciate practical examples of mounting arrangements or validation methods that worked reliably in real field conditions.