本文档介绍了 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 命令 ID
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
直接检查文件。