Quick Start

python depth_map.py MAP00.csv
python interpolated_map.py MAP00.csv
python contour_map.py MAP00.csv
python csv_to_kml_colored.py MAP00.csv
python google_earth_overlay.py MAP00.csv

Oceanic Measurement & Environmental Geospatial Array

A compact underwater survey system that collects depth, position, and environmental data from a moving ROV and converts those measurements into bathymetric maps and georeferenced outputs. Measurements are filtered in real time using quality and spatial constraints, producing both a complete log and a reduced mapping dataset. A continuous surface is generated from the filtered points through spatial interpolation.

Overview

The system is built around an Arduino-based capture device and a Python-based processing workflow.

It is designed to:

Repository Structure

arduino/  rov_logger_mapping.ino

docs/  SYSTEM.md  SCRIPTS.md

scripts/  csv_to_kml.py  csv_to_kml_colored.py  depth_map.py  interpolated_map.py  contour_map.py  google_earth_overlay.py

example_data/  MAP00.CSV

System Architecture

Architecture Overview

LayerFunction
Capture (Arduino)GPS (position + UTC), sonar depth, temperature, IMU orientation, SD logging
Processing (Python)CSV parsing, filtering, interpolation (IDW), contour generation
OutputDepth maps, contour maps, KML files, Google Earth overlays

Hardware

Components

Wiring Summary

ComponentConnection
GPSRX1 (19), TX1 (18)
UltrasonicRX2 (17), TX2 (16)
SD CardCS pin 53
Temperature SensorPin 6
LCD / IMUSDA (20), SCL (21)

Data Pipeline

1. Data Capture

The Arduino logger writes two files:

Mapping points are recorded only when the system detects:

2. Processing

Run scripts on the mapping dataset:

python depth_map.py MAP00.CSV
python interpolated_map.py MAP00.CSV
python contour_map.py MAP00.CSV
python google_earth_overlay.py MAP00.CSV

3. Outputs

Key Features

UTC Time Logging

All timestamps are recorded in UTC to eliminate timezone ambiguity.

Depth Smoothing

A moving average filter reduces sonar noise and rejects transient spikes.

Sound Speed Correction

Depth is adjusted using a temperature-based estimate of sound speed.

Real-Time Data Filtering

Measurements are evaluated during acquisition to ensure mapping data meets defined quality thresholds.

Spatial Interpolation

Inverse Distance Weighting (IDW) converts discrete samples into continuous surfaces.

Data Format

Mapping File (mapXX.csv)

point,date_utc,time_utc,lat,lng,depth_cm,temp_c,satellites,hdop,speed_kmph,fix_age_ms,pitch_deg,roll_deg,imu_acc

Outputs at a Glance

Example Workflow

python depth_map.py example_data/MAP00.CSV
python interpolated_map.py example_data/MAP00.CSV
python contour_map.py example_data/MAP00.CSV
python csv_to_kml_colored.py example_data/MAP00.CSV
python google_earth_overlay.py example_data/MAP00.CSV

Example Output

Running the scripts produces:

Method

This project implements a self-contained bathymetric survey system using a mobile ROV platform.

As the device moves, it continuously samples depth, position, and environmental data. Each measurement is evaluated in real time against defined quality constraints, including GPS validity, HDOP, satellite count, fix age, platform orientation, and spatial separation.

The system produces two datasets:

The mapping dataset is generated by enforcing minimum spacing between points and rejecting measurements that do not meet stability or accuracy thresholds.

A continuous surface is constructed from the filtered dataset using spatial interpolation (Inverse Distance Weighting). The resulting map is a derived model, determined by sampling density, platform motion, and filtering criteria rather than direct sensor output.

This architecture separates acquisition, validation, and surface reconstruction into distinct stages, allowing control over data quality during both capture and processing.

Limitations

Future Improvements

Testing

A sample file is included:

example_data/MAP00.CSV

Run:

python depth_map.py example_data/MAP00.CSV

Documentation

System Documentation

Scripts Overview:


These scripts work with CSV files produced by the Arduino ROV mapping logger.

Supported CSV patterns:

Included scripts


1. csv_to_kml.py


Creates a simple point KML for Google Earth.

python csv_to_kml.py MAP00.CSV

2. csv_to_kml_colored.py


Creates a colored point KML where depth controls point color.

python csv_to_kml_colored.py MAP00.CSV

3. depth_map.py


Creates a scatter map PNG from the CSV.

python depth_map.py MAP00.CSV

4. interpolated_map.py


Creates a smoother interpolated bathymetric image using inverse distance weighting.

python interpolated_map.py MAP00.CSV

5. contour_map.py


Creates a filled contour bathymetric image with contour lines and sample-point overlay.

python contour_map.py MAP00.CSV

6. google_earth_overlay.py


Creates:

python google_earth_overlay.py MAP00.CSV

Common options


Many scripts support:

Examples:

python interpolated_map.py MAP00.CSV --grid-size 300 --power 2.0
python contour_map.py MAP00.CSV --grid-size 300 --levels 12
python google_earth_overlay.py MAP00.CSV --grid-size 300

Outputs


By default, files are written next to the input CSV using derived names:

Notes