Skip to content

Learn how to create and manage complex USV missions.

The most commonly used mission type, where USV visits specified waypoints in sequence.

Use Cases:

  • Water quality sampling
  • Patrol monitoring
  • Data collection

Example:

mission:
type: "waypoint"
waypoints:
- lat: 31.2304
lon: 121.4737
altitude: 0
speed: 5

Cruise within a specified area in a defined pattern.

Survey Patterns:

  • Grid pattern
  • Spiral pattern
  • Snake pattern

Example:

mission:
type: "area_survey"
area:
type: "polygon"
coordinates:
- [31.2304, 121.4737]
- [31.2354, 121.4787]
- [31.2404, 121.4787]
- [31.2354, 121.4737]
pattern: "grid"
spacing: 50 # meters
angle: 0 # degrees

Follow a predefined continuous path.

Use Cases:

  • River inspection
  • Pipeline detection
  • Channel surveying

Example:

mission:
type: "path_following"
path:
type: "line" # line, curve, spline
points:
- [31.2304, 121.4737]
- [31.2324, 121.4757]
- [31.2344, 121.4777]
speed: 5
tolerance: 2 # meters

Automatically track moving targets.

Use Cases:

  • Vessel tracking
  • Floating object monitoring

Example:

mission:
type: "target_tracking"
target:
id: "target-001"
type: "vessel"
tracking:
distance: 50 # Maintain distance (meters)
update_rate: 1 # Hz
max_speed: 10 # knots

Use the Web interface for visual planning:

  1. Open console: http://localhost:8080/planner
  2. Select mission type
  3. Mark waypoints or areas on the map
  4. Set parameters
  5. Preview path
  6. Save mission

Use CLI tools to create missions:

Terminal window
# Create waypoint mission
jhusv mission create waypoint \
--name "water_survey" \
--waypoint 31.2304,121.4737 \
--waypoint 31.2354,121.4787 \
--speed 5
# Create area survey
jhusv mission create area \
--name "harbor_patrol" \
--area area.geojson \
--pattern grid \
--spacing 50

Use Python programming to create missions:

from jhusv import Mission, Waypoint
# Create mission
mission = Mission(name="water_quality_survey")
# Add waypoints
wp1 = Waypoint(lat=31.2304, lon=121.4737, speed=5)
wp1.add_action("sample", duration=60)
wp2 = Waypoint(lat=31.2354, lon=121.4787, speed=5)
wp2.add_action("photo")
mission.add_waypoints([wp1, wp2])
# Set mission parameters
mission.set_auto_return(True)
mission.set_max_time(3600)
# Save mission
mission.save("water_survey.yaml")

Execute different actions based on conditions:

waypoints:
- lat: 31.2304
lon: 121.4737
actions:
- type: "conditional"
condition: "water_temp > 25"
then:
- type: "sample"
duration: 120
else:
- type: "sample"
duration: 60

Repeat mission execution:

mission:
type: "waypoint"
loop:
enabled: true
count: 3 # Repeat count (0 = infinite)
interval: 600 # Loop interval (seconds)

Dynamically add waypoints during mission execution:

from jhusv import MissionController
controller = MissionController()
# Add waypoint during execution
new_waypoint = Waypoint(lat=31.2404, lon=121.4837)
controller.insert_waypoint(new_waypoint, index=2)

Optimize waypoint order to reduce distance:

Terminal window
jhusv mission optimize \
--input mission.yaml \
--algorithm tsp \
--output optimized.yaml

Estimate mission completion time:

Terminal window
jhusv mission estimate mission.yaml

Output:

Total Distance: 2.5 km
Average Speed: 5 knots
Estimated Time: 27 minutes
Battery Usage: 35%

Limit USV operating area:

geofence:
enabled: true
mode: "hard" # hard (strict), soft (warning)
polygon:
- [31.2304, 121.4737]
- [31.2354, 121.4787]
- [31.2404, 121.4837]
- [31.2354, 121.4887]
action: "return_home" # Action when outside fence

Automatic obstacle avoidance configuration:

obstacle_avoidance:
enabled: true
detection_range: 30 # meters
safety_distance: 15 # meters
sensors:
- type: "sonar"
enabled: true
- type: "camera"
enabled: true
strategy: "potential_field" # potential_field, rrt, apf

Must Do:

  • Check weather forecast
  • Confirm sufficient battery
  • Verify geofence settings
  • Test communication connection
  • Check sensor status
  1. Waypoint Spacing: Recommended > 50m
  2. Speed Setting: Adjust according to sea conditions (3-8 knots)
  3. Mission Time: Reserve 30% margin
  4. Data Sampling: Avoid excessive frequency (recommended ≤ 10Hz)
Terminal window
# 1. Validate mission file
jhusv mission validate mission.yaml
# 2. Preview mission path
jhusv mission preview mission.yaml
# 3. Simulate execution
jhusv mission simulate mission.yaml --duration 60
# 4. Execute
jhusv mission start mission.yaml