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直接检查文件。

相关推荐
berling002 小时前
【论文阅读 | TGRS 2025 | DHANet:用于多模态无人机目标检测的双流分层交互网络】
论文阅读·目标检测·无人机
做运维的阿瑞2 小时前
Python零基础入门:30分钟掌握核心语法与实战应用
开发语言·后端·python·算法·系统架构
pop_opo_3 小时前
使用 Python + Pygame 键盘控制无人机(AirSim)
python·无人机·pygame
文火冰糖的硅基工坊6 小时前
[硬件电路-324]:芯片根据功能、信号类型、应用场景、制造工艺、集成度及设计理念等多个维度进行分类
单片机·嵌入式硬件·系统架构·信号处理
云虎软件朱总7 小时前
配送跑腿系统:构建高并发、低延迟的同城配送系统架构解析
java·系统架构·uni-app
qqxhb7 小时前
系统架构设计师备考第33天——软件架构基础
系统架构·软件架构·构件·视图建模·分析设计实现·部署演化
张道天7 小时前
软考系统架构设计师知识点-数学与经济管理
系统架构
云卓SKYDROID10 小时前
无人机航电系统散热技术要点
人工智能·无人机·材质·高科技·云卓科技
小矮强10 小时前
飞马无人机正射/倾斜影像数据预处理
经验分享·笔记·无人机
云望无线图传模块10 小时前
云望无人机图传系统解析:开启高效航拍新时代
无人机·无人机模块·无人机图传·无人机图传系统