第三章 消息解析
分析过消息包的结构后,继续向消息包的内部探索,开始分析负载信息PAYLOAD。
在消息库中,每条消息都作为一个类存在(Java版本),类中的注释文本详细地注明了每个成员变量代表的含义。这些成员变量不仅包括STX、SEQ这些包的描述信息,还包括封装入PAYLOAD的各个参数。在消息类中,还包含了pack() 打包方法和 unpack() 解包方法,为地面站和飞行控制软件的开发、应用提供了接口。
负载信息PAYLOAD内,大部分数据以Byte类型存储,同时也存在float型、short型等类型。需要注意的是,在Java中byte类型有符号位,能够覆盖-128—127范围,而C中byte为无符号位,覆盖范围为0—255。这一类差异在MavLink提供的方法中已经得到了妥善处理,使用MavLink协议提供的方法封装信息时无需担心,但如果是自己写封包解包方法,需要注意解析后读取参数值的类型转换问题。
负载信息的长度和格式并不统一,这是由于不同类型的消息包所需要传递的参数不一致而形成的。通过自己编写的“伪飞控”向地面站发送消息并接收,可以从Mission Planner地面站获取一系列消息包。查询各消息包内PAYLOAD含义,翻译后得到如下文本。
msg_request_data_stream:该消息的作用在上一章里已讲,现在读取其负载信息。
…… |
消息ID |
两次该类型消息的 接收间隔(Short) |
目标 系统 |
目标 组件 |
请求数据流 ID |
开始/停止 标识 |
校验和 A B |
…… |
66 |
1000 |
1 |
1 |
11 |
1 |
255 104 |
req_message_rate:该类型消息请求间隔,用于控制飞控板向地面站发送指定类型消息的频率。
target_system,target_component:目标系统ID,笔者使用的Pixhawk飞控板这两项参数为1,1。
req_stream_id:请求数据流ID。非常重要的属性!该参数将直接影响飞控板返回数据流内信息包的类型,数据流ID为11时可以周期性收到VFR_HUD消息包和GLOBAL_POSITION_INT消息包,分别储存了平视显示器所需数据和GPS信息。
start_stop:数据流开始发送或停止发送标识。设为1则代表开始发送该数据流。
其他消息包内容由控制台打印,挑选部分展示。
MAVLINK_MSG_ID_ATTITUDE -time_boot_ms:16777195 roll:0.021675825 pitch:0.012977336 yaw:1.3565465rollspeed:-8.172542E-5 pitchspeed:-3.5201595E-4 yawspeed:3.577727E-4
Attitude状态报告,包括滚转角、偏航角、俯仰角(及其速度)等信息。
MAVLINK_MSG_ID_VFR_HUD -airspeed:0.0 groundspeed:0.0 alt:-0.07 climb:0.02 heading:77 throttle:0
共有 64 字节
平视显示器数据 Head Up Display
地面站接收到数据:
MAVLINK_MSG_ID_GLOBAL_POSITION_INT -time_boot_ms:16777215 lat:0 lon:0 alt:0 relative_alt:-70 vx:0 vy:0 vz:0hdg:7772
共有 36 字节
GPS定位信息
地面站接收到数据:
MAVLINK_MSG_ID_SYS_STATUS -onboard_control_sensors_present:16776207onboard_control_sensors_enabled:16751631onboard_control_sensors_health:16776207 load:130 voltage_battery:0current_battery:-1 drop_rate_comm:0 errors_comm:0 errors_count1:0errors_count2:0 errors_count3:0 errors_count4:0 battery_remaining:-1
常规系统状态信息
onboard_control_sensors_present:以位掩码表示控制器及传感器的存在状态,16776207(十进制)= 111111111111110000001111(二进制)
onboard_control_sensors_enabled:以位掩码表示控制器及传感器的启用状态,16751631(十进制)= 111111111001110000001111(二进制)
onboard_control_sensors_health:以位掩码表示控制器及传感器处于可用状态还是存在错误。转换为二进制同上。
以上掩码信息中,第一位表示gyro陀螺仪,第二位表示accelerometer加速度计,第六位表示GPS……详情见MAV_SYS_STATUS文件。
Load: Maximum usage in percent of the mainloop time,主循环内时间的最大使用比例,1000表示100%,该值应保持小于1000。