Software Overview

The software subdivision architects, implements, and maintains all programmable elements of the AUV. The subdivision strives to create a robust system with the flexibility and power to deal with challenging conditions and perform complex actions. To do this, the subdivision designs and improves algorithms to manage various aspects of the AUV’s operation, including mission planning, navigation, vision, and signal processing.


To manage complex software projects with many collaborators, we use GitHub, a website that specializes in hosting source-code repositories in the Git format. There are many advantages of distributed version-control systems like Git. First, each developer is given the ability to complete work asynchronously and without an Internet connection, leading to more flexibility and faster development. Second, the code is backed up on external servers and on each team member’s computer, and the underlying version control system, Git, allows the team to revert the source code to older states that are known to be functional. The combination of these two features encourages team members to experiment freely when adding new features. Lastly, GitHub’s Pull Request feature encourages discussion of software development, which is then archived. We hope that the records generated by Pull Requests will enable future club members to understand the reasoning behind implementations used in the code.

Marlin’s software stack runs on the Debian GNU / Linux operating system. It consists of a collection of separate processes that communicate over named pipes. This has the benefit of allowing easy testing of individual components, making each program smaller and easier to maintain, ensuring thread and memory safety (most programs aside from Interface can be single threaded), and preventing the entire system from breaking when a single component stops working. Most software is written in C/C++ and Python.

Software Diagram