MissionPlanner架构梳理之(八)- MAVLink 命令

本文档介绍了 Mission Planner 中的 MAVLink 命令系统,包括如何构建、处理命令以及如何使用命令进行车辆控制和任务规划。

介绍

MAVLink 命令是任务规划器向自动驾驶系统发送的标准化指令,用于执行特定操作或配置飞行器行为。这些命令构成了任务规划和实时飞行器控制的基础。

Mission Planner 使用 MAVLink 命令来执行以下操作:

  • 创建基于航点的任务
  • 向车辆发送实时控制指令
  • 配置车辆参数和行为
  • 控制相机、万向节和伺服器等机载外围设备

有关任务规划的信息,请参阅航点管理。有关网格/勘测规划的信息,请参阅网格/勘测规划

指挥结构

任务规划器使用 MAVLink 协议中定义的两种主要消息类型来实现 MAVLink 命令:

COMMAND_LONG (ID 76)

用于大多数具有浮点参数的命令类型:

复制代码
uint16_t command           # Command ID
uint8_t target_system      # Target system ID
uint8_t target_component   # Target component ID
uint8_t confirmation       # 0: first transmission, >0: confirmation
float param1               # Parameter 1
float param2               # Parameter 2
float param3               # Parameter 3
float param4               # Parameter 4
float param5 (x)           # Parameter 5 (often latitude)
float param6 (y)           # Parameter 6 (often longitude)
float param7 (z)           # Parameter 7 (often altitude)

命令_INT (ID 75)

用于需要整数精度坐标的命令:

复制代码
uint8_t target_system      # Target system ID
uint8_t target_component   # Target component ID
uint8_t frame              # Coordinate frame
uint16_t command           # Command ID
uint8_t current            # 0: not current, 1: current
uint8_t autocontinue       # 0: not autocontinue, 1: autocontinue
float param1               # Parameter 1
float param2               # Parameter 2
float param3               # Parameter 3
float param4               # Parameter 4
int32_t x                  # X coordinate (often latitude * 1e7)
int32_t y                  # Y coordinate (often longitude * 1e7)
float z                    # Z coordinate (often altitude in meters)

命令类别和类型

任务规划器按车辆类型和功能类别组织命令:

车辆类型

  • AC2:ArduCopter(多旋翼)飞行器的命令
  • APM:ArduPilot Mega(固定翼)飞机的命令
  • APRover:地面车辆指令

命令类别

导航命令

控制车辆在空间中的移动:

  • WAYPOINT:导航至特定位置
  • TAKEOFF:起飞至指定高度
  • LAND:降落在特定位置
  • RETURN_TO_LAUNCH:返回发射点
  • LOITER_UNLIM:无限期地徘徊在某一点
  • LOITER_TURNS:徘徊指定圈数
  • LOITER_TIME:徘徊指定时间段
条件命令

设置继续操作之前必须满足的条件:

  • CONDITION_DELAY:等待指定时间
  • CONDITION_DISTANCE:等到一定距离内
  • CONDITION_YAW:等待,直到达到特定的偏航角度
执行命令

立即采取行动:

  • DO_SET_ROI:设置相机感兴趣区域
  • DO_CHANGE_SPEED:改变车速
  • DO_SET_SERVO:控制伺服输出
  • DO_DIGICAM_CONTROL:控制相机功能
  • DO_MOUNT_CONTROL:控制云台/支架
  • DO_SET_CAM_TRIGG_DIST:设置相机触发距离

命令层次

命令参数

每个命令都使用一组标准化的参数,但每个参数的含义取决于具体的命令类型。在 Mission Planner 中,这些参数的定义mavcmd.xml结构如下:

复制代码
<COMMAND_NAME>
  <P1>Parameter 1 Description</P1>
  <P2>Parameter 2 Description</P2>
  <P3>Parameter 3 Description</P3>
  <P4>Parameter 4 Description</P4>
  <X>X Parameter Description</X>
  <Y>Y Parameter Description</Y>
  <Z unitType="alt">Z Parameter Description</Z>
</COMMAND_NAME>

参数映射

命令定义示例

航点 (ArduCopter)

复制代码
<WAYPOINT>
  <P1>Delay</P1>
  <P2></P2>
  <P3></P3>
  <P4></P4>
  <X>Lat</X>
  <Y>Long</Y>
  <Z unitType="alt">Alt</Z>
</WAYPOINT>

设置伺服装置 (ArduCopter)

复制代码
<DO_SET_SERVO>
  <P1>Ser No</P1>
  <P2>PWM</P2>
  <P3></P3>
  <P4></P4>
  <X></X>
  <Y></Y>
  <Z></Z>
</DO_SET_SERVO>

条件_偏航 (ArduCopter)

复制代码
<CONDITION_YAW>
  <P1>Deg</P1>
  <P2>Speed deg/s</P2>
  <P3>Dir 1=CW</P3>
  <P4>0=Abs,1=Rel</P4>
  <X></X>
  <Y></Y>
  <Z></Z>
</CONDITION_YAW>

命令处理流程

以下序列图说明了 Mission Planner 中如何处理命令:

MAVLink 命令由 MAVLink 协议中定义的数字 ID 标识。这些 ID 在MAVLINK_MSG_ID中的枚举中列出Mavlink.cs。一些关键的命令相关消息 ID 包括:

消息 ID 姓名 描述
75 命令整数 具有整数精度坐标的命令
76 COMMAND_LONG 带有浮点参数的标准命令
77 命令确认 命令确认
80 任务请求部分列表 请求任务物品
三十九 任务物品 任务项目(航点等)
73 任务物品 具有整数精度的任务项目
四十四 任务数 需要遵循的任务项目数量
41 任务设置当前 设置当前任务项目
45 全部任务清除 明确的使命

常用命令集参数

以下是不同车辆类型的常用命令的参数定义示例:

ArduCopter 命令(AC2)

命令 P1 P2 P3 P4 Z
航点 延迟 - - - 纬度 长的 Alt
起飞 - - - - - - Alt
土地 - - - - 纬度 长的 Alt
改变速度 类型(0:水平,2:向上,3:向下) 速度 米/秒 - - - - -
设置ROI - - - - 纬度 长的 Alt
偏航条件 速度度/秒 方向 1=顺时针 0=绝对值,1=相对值 - - -

ArduPlane 命令(APM)

命令 P1 P2 P3 P4 Z
航点 - 加速半径 通过 dist - 纬度 长的 Alt
起飞 俯仰角 - - - - - Alt
改变速度 类型(0=as 1=gs) 速度(米/秒) 风门(%) - - - -

坐标系

包含位置信息的 MAVLink 命令使用坐标系来指定如何解释坐标。常见的坐标系包括:

  • MAV_FRAME_GLOBAL(0):相对于海平面的高度全球坐标
  • MAV_FRAME_LOCAL_NED(1):相对于原点位置的当地坐标,东北向下
  • MAV_FRAME_MISSION(2):任务框架,具体到命令
  • MAV_FRAME_GLOBAL_RELATIVE_ALT(3): 相对于原点的高度的全局坐标
  • MAV_FRAME_GLOBAL_TERRAIN_ALT(10):相对于地形的高度全球坐标

命令状态和确认

当 Mission Planner 发送命令时,飞行器会回复一条COMMAND_ACK消息,指示结果:

复制代码
uint16_t command           # Command ID being acknowledged
uint8_t result             # Result code (MAV_RESULT enum)
uint8_t progress           # Progress percentage (0-100)
int32_t result_param2      # Additional result information
uint8_t target_system      # System ID of target system
uint8_t target_component   # Component ID of target component

常见的结果代码包括:

  • MAV_RESULT_ACCEPTED(0):命令被接受并执行
  • MAV_RESULT_TEMPORARILY_REJECTED(1):命令暂时被拒绝
  • MAV_RESULT_DENIED(2):命令永久被拒绝
  • MAV_RESULT_UNSUPPORTED(3):命令不支持
  • MAV_RESULT_FAILED(4):命令失败

结论

MAVLink 命令构成了任务规划器和自动驾驶系统之间通信的基础。了解命令结构和参数对于有效的任务规划和飞行器控制至关重要。

Mission Planner 使用该mavcmd.xml文件为用户界面定义命令参数,而底层的 MAVLink 实现Mavlink.cs负责处理这些命令的编码、传输和处理。

有关 ArduPilot 支持的特定命令的详细信息,请参阅 ArduPilot 文档或mavcmd.xml直接检查文件。

相关推荐
ST.J9 小时前
系统架构思考20241204
java·笔记·系统架构
Coovally AI模型快速验证19 小时前
3D目标跟踪重磅突破!TrackAny3D实现「类别无关」统一建模,多项SOTA达成!
人工智能·yolo·机器学习·3d·目标跟踪·无人机·cocos2d
@高蕊20 小时前
光伏项目无人机踏勘--如何使用无人机自动航线规划APP
arcgis·无人机
掘金-我是哪吒1 天前
分布式微服务系统架构第169集:1万~10万QPS的查当前订单列表
分布式·微服务·云原生·架构·系统架构
龙亘川1 天前
智慧城市SaaS平台之智慧城管十大核心功能(三):指挥协调系统
系统架构·智慧城市saas平台
Coovally AI模型快速验证1 天前
无人机小目标检测新SOTA:MASF-YOLO重磅开源,多模块协同助力精度飞跃
人工智能·yolo·目标检测·机器学习·计算机视觉·无人机
龙亘川1 天前
智慧城市SaaS平台之智慧城管十大核心功能(四):智控调度系统及子系统架构内容
系统架构
云卓SKYDROID1 天前
无人机报警器8G信号技术解析
人工智能·无人机·航电系统·高科技·云卓科技
风清扬鍀师傅1 天前
如何提升技术架构设计能力?
架构·系统架构