Up until this semester, I was the software, electrical, and integration lead for Olin Aquatic Robotic Systems, a club attempting to build an autonomous sailboat. It was a massively over-scoped project (which has since been significantly down-scoped), but we learned a lot, so it wasn’t a complete loss.
As the software and electrical lead, I was responsible for mapping out those systems at a high level and assigning tasks to people. The architecture of the system was supposed to end up like so:
The boat ran ROS on a Raspberry Pi (though we had purchased an NVIDIA Jetson TX2 for the next boat), and ROS nodes were written in Python.
One of my contributions to the project was a web app for monitoring the boat. A ROS node subscribed to various topics, forwarded that data to a Node.js server using WebSockets, and then a React web client received that data and displayed it. It plotted the boat’s location on a map, showed its heading, and allowed the user to change various control parameters. It was never used out in the field (due to a lack of field testing), but it did work.