Software Overview

The onboard computational capabilities and software architecture were designed to enable synchronous multimodal streaming of audio and behavioral sensors, encourage rapid prototyping for diverse research goals, ease usability during field deployments, and facilitate the curation of a large-scale dataset of both tag data and external devices such as drones or gliders. Challenges include limited computational resources of embedded devices, varied sampling rates across sensors, operation without human supervision, uncertain internet connectivity during deployments, no wireless connectivity underwater, possible intermittent power losses, and possible data corruption via water damage.

The software architecture aims to provide reliable synchronous sampling of multiple sensors, adapt behavior throughout a deployment, and be robust in harsh conditions. It is arranged in a modular framework as shown below.

The CETI tag software architecture

The central management system also features a state machine that adjusts the recording behavior based on inferred milestones throughout the deployment. The states and transition logic are visualized below.

The CETI tag state machine overview

Code and Usage Instructions

The GitHub contains source code and instructions for building and using the software. There are two main pieces. The first is building an SD card image that contains the operating system, configuration, and code that the Raspberry Pi will run. The second is the source code of the main app that runs during deployment to manage the sensors, data, and state machine.

Visit the GitHub for Code and Instructions

Note: Additional instructions and including locations in code to adjust key configuration settings will be added in the near future.

Code for Expansion Modules

The electronics and software are designed to facilitate adding new functionality by creating daughter boards and launching new threads within the main program. One current example of this is the recovery board, which is a daughter board that handles GPS and APRS communication.

Visit the Recovery Board GitHub for Code and Instructions