10.3 Autonomous Vehicles

Autonomous underwater and surface vehicles are revolutionizing ocean observation. They can operate for months, access difficult areas, and provide targeted sampling that complements satellites and fixed moorings.

Vehicle Types

Gliders

Buoyancy-driven. No propeller. Months at sea. Sawtooth profiles 0-1000m. Slocum, Seaglider, Spray.

AUVs (Autonomous Underwater Vehicles)

Propeller-driven. Hours to days range. Detailed surveys. REMUS, Autosub, Bluefin.

USVs (Unmanned Surface Vehicles)

Surface operations. Wave or wind powered. Atmospheric boundary layer. Saildrone, Wave Glider.

ROVs (Remotely Operated Vehicles)

Human-controlled via tether. Deep-sea exploration. Manipulators. Jason, Alvin.

Glider Characteristics

~0.5 knot

Horizontal speed

3-6 months

Deployment duration

1000 m

Maximum depth

Gliders change buoyancy to dive/climb, using wings to convert vertical motion to horizontal. Energy efficient for long missions.

Applications

Hurricane Monitoring

Gliders sample ahead of storms. Ocean heat content for intensity prediction.

Boundary Current

Long-term monitoring. Gulf Stream, Kuroshio. Transport estimates.

Ecosystem Monitoring

Fisheries acoustics. Harmful algal blooms. Marine mammal detection.

Under-Ice Operations

Arctic/Antarctic access. Ice-tethered profilers. Ice shelf basal melt.

Python: Glider Path

#!/usr/bin/env python3
"""autonomous_vehicles.py - Glider path simulation"""
import numpy as np
import matplotlib.pyplot as plt

def glider_profile(t, dive_depth=1000, cycle_time=6):
    """
    Simulate glider sawtooth profile
    t: time (hours), cycle_time: hours per dive cycle
    """
    phase = (t % cycle_time) / cycle_time
    # Triangular wave for depth
    if phase < 0.5:
        depth = 2 * phase * dive_depth
    else:
        depth = 2 * (1 - phase) * dive_depth
    return depth

def glider_path(t, speed=0.5, heading=45):
    """
    Glider horizontal path
    speed: knots, heading: degrees
    """
    speed_ms = speed * 0.514  # knots to m/s
    heading_rad = np.radians(heading)
    x = speed_ms * np.sin(heading_rad) * t * 3600 / 1000  # km
    y = speed_ms * np.cos(heading_rad) * t * 3600 / 1000  # km
    return x, y

# Simulate 7-day mission
t = np.linspace(0, 7*24, 1000)  # hours
depth = np.array([glider_profile(ti) for ti in t])
x, y = glider_path(t)

fig = plt.figure(figsize=(12, 5))

# 3D path
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot(x, y, -depth, 'b-', lw=0.5)
ax1.set_xlabel('East (km)')
ax1.set_ylabel('North (km)')
ax1.set_zlabel('Depth (m)')
ax1.set_title('Glider 3D Path')

# Depth vs time
ax2 = fig.add_subplot(122)
ax2.plot(t, depth, 'b-', lw=1)
ax2.set_xlabel('Time (hours)')
ax2.set_ylabel('Depth (m)')
ax2.set_title('Glider Sawtooth Profile')
ax2.invert_yaxis()
ax2.grid(True, alpha=0.3)

plt.tight_layout()

# Mission statistics
distance = np.sqrt(x[-1]**2 + y[-1]**2)
num_profiles = int(t[-1] / 6)
print(f"7-day mission statistics:")
print(f"  Distance traveled: {distance:.0f} km")
print(f"  Number of profiles: {num_profiles}")