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

相关推荐
大势智慧27 分钟前
大势智慧支撑武汉市第二十四届职业技能大赛无人机测绘操控员(三维数字化)赛项圆满举办
无人机·比赛·职业技能大赛·武汉·空间赋能·圆满举办
被放养的研究生4 小时前
第一章 信息系统架构
系统架构·金融监管计算机类
装不满的克莱因瓶1 天前
支付订单成功异步MQ权益发放设计和开发
java·架构·系统架构·rabbitmq·硬件架构
AC10074091 天前
【德信康】无人机射频功放多频段切换模块
无人机
我喜欢就喜欢1 天前
无人机正射色差:镶嵌线 shp + 羽化接缝实操思路
无人机·遥感
数字新视界2 天前
数字孪生技术赋能智能化转型与创新实践
嵌入式硬件·物联网·系统架构·机房管理·动力与环境监控系统
微三云 - 廖会灵 (私域系统开发)2 天前
企业级 SaaS 系统架构设计:单体、微服务还是模块化单体?技术选型实战
微服务·架构·系统架构
Liaiyang662 天前
六家大模型体检卡:六个 ∅_safe(安全兜底态)的藏身之处(或显影处),就是下一次翻车的地方
系统架构·agent·rlhf·ai安全·容错设计·大模型评测·ai幻觉
shuair2 天前
Spring Cloud 微服务脚手架:Simple Cloud 系统架构设计
spring cloud·微服务·系统架构
小O的算法实验室2 天前
IEEE IOTJ,基于点云网络辅助粒子群算法+三维无人机基站部署
无人机