为了提高应用程序在控制无人机执行飞行任务时的安全性,OSDK提供了数据广播和数据订阅功能,具有广播功能的应用程序能够实时向使用移动端APP(基于MSDK 开发)的用户、基于OSDK 开发的地面设备及其他设备发送无人机当前的飞行状态以及无人机上传感器产生的数据信息;具有消息订阅功能的应用程序,能够实时获取无人机上传感器产生的数据和无人机的飞行状态。
无人机上的各个部件以及第三方传感器根据无人机实际的飞行状况,会实时产生大量的数据信息并被无人机推送给其他模块,具有消息订阅功能的应用程序,能够记录用户所需订阅的数据。
使用OSDK 消息订阅功能可订阅的数据信息如 表1.无人机订阅项 所示。
表1.无人机订阅项
数据类型 | 订阅项(Topic) | 最大订阅频率(Hz) |
---|---|---|
无人机基础信息 | 姿态四元数 | 200 |
硬件同步 | 400 | |
返航点信息和设置状态 | 50 | |
遥控器信息 | 50 | |
无人机状态信息 | 无人机飞行状态 | 50 |
无人机飞行模式 | 50 | |
起落架状态 | 50 | |
电调 | 50 | |
电池 | 50 | |
解锁电机错误码 | 50 | |
飞行异常 | 50 | |
无人机速度信息 | 飞行速度 | 200 |
融合角速度 | 200 | |
原始角速度 | 400 | |
原始加速度 | 400 | |
大地坐标系下的加速度 | 200 | |
机体坐标系下的加速度 | 200 | |
传感器信息 | ||
气压计高度 | 200 | |
融合气压计高度 | 200 | |
返航点气压计高度 | 1 | |
融合相对高度 | 100 | |
指南针 | 100 | |
VO视觉位置 | 200 | |
避障信息 | 100 | 云台信息 |
云台状态 | 50 | |
云台角度 | 200 | |
云台控制模式 | 50 | 定位信息 |
GPS信号水平 | 50 | |
GPS原始信息 | 5 | |
GPS融合信息 | 50 | |
RTK连接状态 | 50 | |
RTK原始信息 | 5 |
无人机上的各个部件以及第三方传感器根据无人机实际的飞行状况,会实时产生大量的数据信息,OSDK 的广播功能,不仅能够接收到无人机主动推送给其他模块的数据,还能够接收第三方传感器的数据,并通过广播功能广播所接收到的数据,基于MSDK 开发的移动端APP、基于OSDK 开发的地面设备、可接收无人机广播信息的设备或云端应用平台等可记录无人机广播的数据信息。
具有OSDK 广播功能的应用程序可广播如下数据信息:
说明: 由于广播功能占用的带宽较大且OSDK 将不再开发广播功能,建议使用消息订阅功能。
ACK::ErrorCode subscribeStatus; |
初始化消息订阅功能后,开发者需指定订阅项、订阅频率、包编号、数据大小。
bool enableTimestamp = false; bool pkgStatus = vehicle->subscribe->initPackageFromTopicList( pkgIndex, topicSize, topicList, enableTimestamp, freq); if (!(pkgStatus)) { return pkgStatus; } |
subscribeStatus = vehicle->subscribe->startPackage(pkgIndex, timeout); if (ACK::getError(subscribeStatus) != ACK::SUCCESS) { ACK::getErrorCodeMessage(subscribeStatus, __func__); |
清除缓存区、停止订阅
ACK::ErrorCode ack = vehicle->subscribe->removePackage(pkgIndex, timeout); |
开发者可选择一组“主题”或“订阅”数据集,将它们添加到“订阅”包中,并配置相应的订阅频率。用户可以通过DJI Onboard API配置五个数据包。同时可为每个数据包设置单独的频率,OSDK 为开发者提供了300 字节的缓冲区,允许用户根据需要为每个软件包添加较多的订阅项。
图1. 消息订阅