MAVLink 常用消息解析与应用指南

一、系统状态与心跳类消息

1. HEARTBEAT(心跳消息)
  • 核心功能:标识系统存在与组件类型,接收端据此处理后续消息(如根据自动驾驶仪类型布局UI)
  • 关键字段
    • type:设备类型(如四旋翼、直升机、相机等)
    • autopilot:自动驾驶仪类型(非飞控设为MAV_AUTOPILOT_INVALID)
    • system_status:系统状态标志(如MAV_STATE_ACTIVE表示正常运行)
  • 应用场景:地面站启动时通过心跳判断连接设备类型,适配不同控制界面
2. SYSTEM_TIME(系统时间)
  • 时间同步:提供UNIX时间戳(time_unix_usec)和启动时间(time_boot_ms
  • 实用价值
    • 日志文件时间戳统一
    • 多设备协同任务时间对齐
    • 替代TIMESYNC实现轻量级时间同步

二、位置与导航类消息

1. GPS_RAW_INT(原始GPS数据)
  • 数据特性
    • 经纬度(lat/lon)以degE7格式存储(1e7倍精度,如39.9°N为399000000)
    • 海拔(alt)单位为mm,区分MSL(平均海平面)与椭球高度(alt_ellipsoid
    • HDOP/VDOP(eph/epv)反映定位精度(数值越小精度越高)
  • 典型问题
    • satellites_visible < 4时,fix_type为NO_FIX(0)
    • 高空作业时需关注eph > 100(精度低于1m)的情况
2. GLOBAL_POSITION_INT(滤波后全球位置)
  • 工程优化
    • 整型存储避免浮点精度丢失(如lat=399000000对应39.9°N)
    • relative_alt表示相对起飞点高度,用于定高模式
    • hdg为航向角(0-35999,对应0.0-359.99°)
  • 与GPS_RAW_INT区别
    特性 GLOBAL_POSITION_INT GPS_RAW_INT
    数据来源 融合GPS与惯性导航 原始GPS传感器数据
    精度 更高(滤波后) 原始值(可能含噪声)
    应用场景 导航控制 传感器状态监控

三、姿态与运动类消息

1. ATTITUDE(姿态数据)
  • 坐标系定义
    • 航空坐标系(NED):X前、Y右、Z下
    • 欧拉角(roll/pitch/yaw)范围:-π到+π
    • 角速度单位:rad/s(如rollspeed=1.0表示1弧度/秒)
  • 控制应用
    • 无人机稳定控制的核心输入
    • 航拍摄影时的云台姿态补偿
    • 运动规划中的姿态约束检查
2. LOCAL_POSITION_NED(本地NED坐标)
  • 坐标系统
    • 东北天(NED)右手系:X北、Y东、Z下(正值向下)
    • 速度分量(vx/vy/vz)单位:m/s
  • 典型用途
    • 室内定位(如光流+IMU融合)
    • 自主避障的相对位置计算
    • 定点悬停控制的反馈输入

四、任务与控制类消息

1. MISSION_CURRENT(当前任务项)
  • 任务管理
    • seq:当前执行的任务项序号
    • total:任务项总数(UINT16_MAX表示无任务)
    • mission_state:任务状态机(如MISSION_STATE_EXECUTING)
  • 地面站交互
    • 任务进度可视化
    • 异常时跳转到指定任务项(MAV_CMD_DO_SET_MISSION_CURRENT)
    • 任务重规划的状态同步
2. COMMAND_ACK(命令回执)
  • 指令闭环
    • command:执行的命令ID(如MAV_CMD_COMPONENT_ARM_DISARM)
    • result:执行结果(MAV_RESULT_ACCEPTED/FAILED等)
    • progress:进度百分比(仅当result为IN_PROGRESS时有效)
  • 错误排查
    • result=MAV_RESULT_DENIED时,检查result_param2的错误码
    • 连续指令发送需等待前一指令回执(避免指令队列溢出)

五、传感器与状态类消息

1. BATTERY_STATUS(电池状态)
  • 关键参数
    • 电压监测:voltages[0]为总电压(mV),voltages[1-10]为单体电压
    • 容量计算:current_consumed(mAh)与energy_consumed(hJ)
    • 健康状态:battery_remaining(剩余百分比)与fault_bitmask(故障码)
  • 安全策略
    • battery_remaining < 20%时触发低电量报警
    • 单体电压差超过100mV时标记电池不平衡(fault_bitmask设为MAV_BATTERY_FAULT_CELLS_UNBALANCED)
2. STATUSTEXT(状态文本)
  • 通信规范
    • severity: severity等级(如MAV_SEVERITY_WARNING/ERROR)
    • text:50字节状态文本(无终止符,需手动解析)
    • id/chunk_seq:长文本分块传输标识
  • 应用建议
    • 限制发送频率(如不超过10Hz)
    • 重要错误使用高severity等级(如MAV_SEVERITY_CRITICAL)
    • 地面站可按severity分级显示(红色=错误,黄色=警告)

六、开发实践建议

  1. 消息订阅策略

    • 高频消息(如ATTITUDE):10-50Hz(视控制周期而定)
    • 低频消息(如MISSION_CURRENT):1-2Hz
    • 按需请求消息(如HOME_POSITION):使用MAV_CMD_REQUEST_MESSAGE触发
  2. 数据解析优化

    • 对degE7格式数据:latitude_deg = latitude / 1e7
    • 对cdeg格式数据:heading_deg = heading / 100.0
    • 时间戳处理:time_boot_ms用于相对时间,time_unix_usec用于绝对时间
  3. 异常处理场景

    • fix_type < 3(非3D定位)时,禁用依赖GPS的功能
    • battery_remaining = -1时,使用电压估算剩余电量
    • satellites_visible = UINT8_MAX时,标记GPS状态未知
posted @ 2025-05-27 09:27  李燊  阅读(762)  评论(0)    收藏  举报