← All posts
RoboticsAcademicEmbedded SystemsC++
March 28, 2026 · 7 min read

Surface Autonomous Robot: Building a Water-Navigating Bot

Most robotics projects deal with ground or air. Our micro lab team built one for water — an autonomous surface robot that navigates above water. It was the most hardware-intense project I've ever worked on.

When our micro lab professor assigned us open-ended robotics projects, most teams went for line-following robots or drone prototypes. We chose water. Autonomous surface navigation presents unique challenges that ground robotics doesn't — water resistance, buoyancy management, and wave interference with sensors.

The Hardware Stack

  • Arduino Mega — Main controller
  • HC-SR04 Ultrasonic sensors — Obstacle detection
  • GPS Module (NEO-6M) — Position tracking
  • MPU-6050 IMU — Orientation and stabilization
  • Brushless motors with ESCs — Propulsion
  • 3D-printed hull — Waterproofed with epoxy coating

Sensor Fusion

The hardest technical challenge was fusing IMU and GPS data to get a reliable position estimate. Individual sensors are noisy — GPS drifts, IMU accumulates error over time. We implemented a complementary filter to blend both, weighting GPS for long-term position and IMU for short-term stability.

Navigation Algorithm

We implemented a simple but effective waypoint-following algorithm. Given a target GPS coordinate, the robot calculates the heading delta, adjusts motor PWM values to steer, and uses ultrasonic sensors to avoid obstacles in real time.

Lessons Learned

Hardware is humbling. Software bugs crash your program. Hardware bugs can sink your robot — literally. We waterproofed three times before trusting it in water. Also: always test on dry land first, always.