CCR ROV Survey Methods
🌊 Overview
This repository provides an overview of the Seattle Aquarium’s Coastal Climate Resilience (CCR) team’s remotely operated vehicle (ROV) survey workflow — spanning hardware configuration, field operations, telemetry data extraction, and visualization. It includes two open-source desktop applications that streamline field operations and imagery processing, along with the code and data behind our survey-methods manuscript.
Our methods are designed for subtidal monitoring of nearshore habitats in the temperate waters of Puget Sound, where visibility and environmental conditions can be highly variable. Surveys are optimized to collect high-resolution, georeferenced imagery to support analyses of seafloor composition, kelp and algal cover, and associated benthic communities.
Our goal is to create an open-source reference that allows other research groups to understand, replicate, and adapt our methods for their own underwater survey applications.
📂 Repository contents
| Folder |
What it holds |
Manuscript items |
rov_flight_ops/ |
ROV Flight Operations desktop app for the survey day (see below) |
Supp. Section S4, Fig. S6 |
rov_imagery_processing/ |
ROV Imagery Processing desktop app for photos and video (see below) |
Supp. Section S4 |
mcap_to_csv/ |
Transect extractor: BlueOS .mcap recordings to per-transect 1 Hz CSVs and maps; runs on its own or inside ROV Flight Operations |
Supp. Section S4 |
code/ |
Stand-alone Python scripts that preceded the two apps (tlog_to_csv.py, transect_map.py, meter_mark.py, rename_jpg_gpr_EXIF.py, MAVLink_listen.py, optimize_path.py) and surftrak_performance.py |
Supp. Sections S3–S4 |
code/transect_tracks/ |
R code and transect CSVs for the ROV positioning-track figure |
Fig. 2 |
surftrak_analysis/ |
Output of code/surftrak_performance.py: surftrak altitude error per transect, survey day and year, and its histogram |
Table S1, Fig. S2 |
tlog_visualization/ |
R code, data and figures for surftrak altitude holding and ROV power use |
Figs. 3–4, S11, S13 |
lighting/ |
Lighting-control subsystem for the V4 lights: Raspberry Pi Pico code, wiring, parts list, a lighting simulation, and beam-angle notebooks (beam_visualizers/) |
Fig. S8, Table S3 |
lua_scripts/ |
ArduSub Lua scripts: surftrak2.lua, transect3.lua, message_interval.lua, ahrs-set-origin.lua |
Table S2 |
distance_calibration/ |
Distance sources checked against 100 m transect tapes: the passes, the script and per-pass results behind the meter-mark calibration factors |
Positioning results; Supp. Section S4 |
survey_log/ |
Flight log of every ROV survey transect (2022–2026) and a script that reproduces the survey totals |
Methods; Supp. Section S1 |
field_checklist/ |
One-page printable field log (LaTeX source and PDF) |
Fig. S1 |
sort_by_meter_mark/ |
Example output of optimize_path.py and meter-mark photo sorting for three transects |
— |
images/ |
Images used in this README |
— |
⚙️ Hardware
- BlueROV2 (Blue Robotics) — Heavy Configuration with 150 m tether
- Navigator Flight Controller (with Raspberry Pi 4, 8 GB Model B)
- Modifications: Custom “kelp guards” fabricated from HDPE plastic to minimize entanglement with kelp stipes during surveys
⚡ Power and Tether Management
💡 Lighting
📡 Additional Sensors
- Water Linked DVL A50 — Doppler Velocity Log for local positioning
- Firmware: v1.0.8 (updated 2025-07-24)
🎥 Cameras
Camera configuration (for downward-facing imagery):
| Setting |
Value |
| Mode |
Photo |
| Interval |
3s |
| Lens |
Wide |
| Output |
RAW (.GPR) |
| EV Comp |
0 |
| White Balance |
Native |
| ISO Min–Max |
100–200 |
| Sharpness |
Low |
| Color |
Flat |
| Shutter Speed |
1/300 s (!MEXPX=300 via GoPro Labs) |
Time synchronization: GoPro Precision Time
🗺️ Positioning and Navigation
💻 Command Console
- Custom Pelican case housing the surface control system
- Ruggedized laptop for mission control (Cockpit / BlueOS)
- 19-inch sunlight-readable monitor (MS190W1610NT)
- Ethernet switch for network connectivity between ROV, GPS, DVL, and camera control systems
🧠 Firmware and Software
BlueOS Configuration
🧰 Field and Imagery Software
Two open-source Windows desktop applications carry a survey day from pre-dive checks to analysis-ready imagery. Each installs from a double-click launcher into its own Python environment, and the two share only the day’s flight folder, where the transect times written by one drive the other.
Runs on the topside laptop for the whole survey day, with tabs in the order the day uses them: automatic recording of laptop and tether health whenever the ROV is armed; a live navigation map with survey plans, line-following guidance and a navigation-sensor readiness check; a byte-for-byte capture of everything the Water Linked DVL sends, beam by beam, with a check of whether it reaches the autopilot; transect times (and pauses) checked against the dive profile; verified download of BlueOS logs and imagery from the vehicle; an automated flight report that diagnoses disarms, tether dropouts and sensor faults; and per-transect telemetry CSVs and maps from the bundled transect extractor (mcap_to_csv/). See rov_flight_ops/README.md.
Turns a day’s raw imagery into sorted, developed and telemetry-annotated products using the same transect times: imports GoPro photos straight from the SD card into per-transect folders (optionally one photo per meter traveled); batch-develops GoPro RAW (.GPR) photos in Adobe Lightroom Classic (crop, chromatic-aberration removal, AI Denoise); and trims each transect’s video and composites it with the ROV’s telemetry and forward camera. See rov_imagery_processing/README.md.
📄 License and citation
Code in this repository is released under the MIT License. A few bundled files written by others (two Lua scripts, a modified ArduPilot applet, a University of Washington driver library, MicroPython firmware and the Montserrat fonts) keep their own licenses, listed at the end of LICENSE. The Seattle Aquarium name and logos are not covered by the MIT License.
To cite this repository, use the Cite this repository button on GitHub, which reads CITATION.cff.
🗺️ CCR repositories
The Seattle Aquarium’s Coastal Climate Resilience (CCR) work spans the repos below. 🔶 = help wanted · 📍 = you are here.

🌊 Coastal_Climate_Resilience · start here
Program overview, objectives, talks, media coverage, and year-end reports.
|
| 📚 Core field methods and data analysis |

🤖 CCR_ROV_survey_methods
ROV hardware, field workflow, and telemetry processing, including custom desktop apps.
📍 You are here
|

📊 CCR_benthic_analyses
ML percent-cover classification and object detection, plus community analyses of the resulting data.
|
| 🖼️ Image processing |

Unedited frame
📷 CCR_image_processing
The photo-editing bottleneck, with unedited and hand-edited image sets for training and testing.
|

Same frame, ML-enhanced
✨ underwater-auto-image-encoder
ML pipeline and desktop app that turns raw GoPro photos into survey-ready images.
|
| 🙋 Get involved |
|
|
🛠️ CCR_development
Open Issues and 1-page project descriptions for robotics, telemetry, software, AI/ML, and computer vision work. All research and development is open and is tracked via Git Issues.
🔶 Help wanted: pick up an open Issue.
|
| 🧪 Standalone projects |

⚡ ROV_underwater_wireless_charging
Prototype underwater wireless charging dock for a BlueROV2 at Pier 59, with the UW Applied Physics Lab, Blue Robotics, and WiBotic.
|

🌿 understory_kelp_indicator
Puget Sound Understory Kelp Vital Sign indicator, co-developed with Reef Check from diver and ROV surveys.
|
📦 Archived projects
CCR_kelp_feature_detection: tested photogrammetry feature detectors on kelp forest imagery. No longer under active development; its 25-image test set and reviewed percent-cover annotations remain available.
评论