跳转到内容

学习如何创建和管理复杂的无人船任务。

最常用的任务类型,USV 按顺序访问指定的航点。

适用场景:

  • 水质采样
  • 巡逻监控
  • 数据采集

示例:

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

在指定区域内按规定模式巡航。

巡航模式:

  • 栅格模式 (Grid)
  • 螺旋模式 (Spiral)
  • 蛇形模式 (Snake)

示例:

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 # 米
angle: 0 # 度

沿预定义的连续路径行驶。

适用场景:

  • 河道巡查
  • 管线检测
  • 航道测量

示例:

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 # 米

自动跟踪移动目标。

适用场景:

  • 船只跟踪
  • 漂浮物监测

示例:

mission:
type: "target_tracking"
target:
id: "target-001"
type: "vessel"
tracking:
distance: 50 # 保持距离(米)
update_rate: 1 # Hz
max_speed: 10 # 节

使用 Web 界面进行可视化规划:

  1. 打开控制台:http://localhost:8080/planner
  2. 选择任务类型
  3. 在地图上标记航点或区域
  4. 设置参数
  5. 预览路径
  6. 保存任务

使用 CLI 工具创建任务:

Terminal window
# 创建航点任务
jhusv mission create waypoint \
--name "water_survey" \
--waypoint 31.2304,121.4737 \
--waypoint 31.2354,121.4787 \
--speed 5
# 创建区域巡航
jhusv mission create area \
--name "harbor_patrol" \
--area area.geojson \
--pattern grid \
--spacing 50

使用 Python 编程创建任务:

from jhusv import Mission, Waypoint
# 创建任务
mission = Mission(name="water_quality_survey")
# 添加航点
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])
# 设置任务参数
mission.set_auto_return(True)
mission.set_max_time(3600)
# 保存任务
mission.save("water_survey.yaml")

根据条件执行不同动作:

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

重复执行任务:

mission:
type: "waypoint"
loop:
enabled: true
count: 3 # 重复次数(0 = 无限)
interval: 600 # 循环间隔(秒)

在任务执行中动态添加航点:

from jhusv import MissionController
controller = MissionController()
# 执行任务中添加航点
new_waypoint = Waypoint(lat=31.2404, lon=121.4837)
controller.insert_waypoint(new_waypoint, index=2)

串联多个任务:

mission_chain:
- mission: "survey_area_1.yaml"
- mission: "survey_area_2.yaml"
- mission: "return_to_base.yaml"
options:
stop_on_error: true
auto_continue: true

优化航点顺序以减少距离:

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

估算任务完成时间:

Terminal window
jhusv mission estimate mission.yaml

输出:

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

根据电池电量规划任务:

mission:
battery_management:
enabled: true
reserve_percent: 25 # 保留电量百分比
return_threshold: 30 # 返航阈值
# 自动分段
auto_split: true
segment_distance: 2000 # 米

限制 USV 活动范围:

geofence:
enabled: true
mode: "hard" # hard(硬限制),soft(警告)
# 方式 1:多边形围栏
polygon:
- [31.2304, 121.4737]
- [31.2354, 121.4787]
- [31.2404, 121.4837]
- [31.2354, 121.4887]
# 方式 2:圆形围栏
# circle:
# center: [31.2354, 121.4787]
# radius: 1000 # 米
action: "return_home" # 超出围栏后的动作

自动避障配置:

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

定义紧急情况的处理:

emergency:
# 低电量
low_battery:
threshold: 20 # %
action: "return_home"
# 失去连接
lost_connection:
timeout: 60 # 秒
action: "hold_position"
# 如果长时间失联
extended_timeout: 300
extended_action: "return_home"
# 恶劣天气
bad_weather:
wind_threshold: 12 # m/s
wave_threshold: 1.5 # 米
action: "seek_shelter"

多艘 USV 协同作业:

formation_mission:
usvs:
- id: "USV-001"
role: "leader"
- id: "USV-002"
role: "follower"
offset: [20, 0] # 相对位置(米)
- id: "USV-003"
role: "follower"
offset: [-20, 0]
formation:
type: "line" # line, triangle, diamond
spacing: 50
mission:
type: "area_survey"
area: "area.geojson"

保存常用任务为模板:

Terminal window
jhusv template create \
--from mission.yaml \
--name "water_quality_template"

从模板创建新任务:

Terminal window
jhusv mission new \
--template "water_quality_template" \
--param area="area2.geojson" \
--output new_mission.yaml

内置模板:

  • water_quality_survey - 水质监测
  • harbor_patrol - 港口巡逻
  • coastline_mapping - 海岸线测绘
  • emergency_search - 应急搜索

必做事项:

  • 检查天气预报
  • 确认电池电量充足
  • 验证地理围栏设置
  • 测试通信连接
  • 检查传感器状态
  1. 航点间距: 建议 > 50m
  2. 速度设置: 根据海况调整(3-8节)
  3. 任务时间: 预留 30% 余量
  4. 数据采样: 避免过高频率(建议 ≤ 10Hz)
Terminal window
# 1. 验证任务文件
jhusv mission validate mission.yaml
# 2. 预览任务路径
jhusv mission preview mission.yaml
# 3. 模拟执行
jhusv mission simulate mission.yaml --duration 60
# 4. 实际执行
jhusv mission start mission.yaml
mission:
name: "lake_water_quality"
type: "area_survey"
area:
type: "polygon"
coordinates: [[...]]
pattern: "grid"
spacing: 100
sensors:
water_quality:
enabled: true
sample_rate: 0.5
parameters: ["ph", "do", "temp"]
duration: 7200
mission:
name: "harbor_patrol"
type: "waypoint"
loop:
enabled: true
count: 0
waypoints: [[...]]
sensors:
camera:
enabled: true
recording: true
radar:
enabled: true
alert_on_target: true
mission:
name: "emergency_search"
type: "spiral"
center: [31.2354, 121.4787]
max_radius: 1000
spacing: 20
sensors:
camera:
enabled: true
ai_detection: true
targets: ["person", "debris"]
priority: "high"