dji开发之获取订阅
当选择的平台是Linux时,应该如何获取无人机的传感器信息呢?
大疆OnBoard SDK提供了两种方式(广播和订阅),这里讲如何订阅无人机传感器数据:
初始化订阅后,通过TopicName topicList50Hz[] = {}
添加需要订阅的话题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| int responseTimeout = 1; ACK::ErrorCode subscribeStatus; subscribeStatus = vehicle->subscribe->verify(responseTimeout); if (ACK::getError(subscribeStatus) != ACK::SUCCESS) { ACK::getErrorCodeMessage(subscribeStatus, __func__); return false; } int pkgIndex = 2; int freq = 50; TopicName topicList50Hz[] = {TOPIC_QUATERNION, TOPIC_GIMBAL_ANGLES, TOPIC_GPS_FUSED, TOPIC_RC }; int numTopic = sizeof(topicList50Hz) / sizeof(topicList50Hz[0]); bool enableTimestamp = false;
bool pkgStatus = vehicle->subscribe->initPackageFromTopicList( pkgIndex, numTopic, topicList50Hz, enableTimestamp, freq); if (!(pkgStatus)) { return pkgStatus; } subscribeStatus = vehicle->subscribe->startPackage(pkgIndex, responseTimeout); if (ACK::getError(subscribeStatus) != ACK::SUCCESS) { ACK::getErrorCodeMessage(subscribeStatus, __func__); vehicle->subscribe->removePackage(pkgIndex, responseTimeout); return false;
|
这里以TOPIC_GIMBAL_ANGLES
话题为例。
当订阅了该话题后获取话题的数据:
1 2
| TypeMap<TOPIC_GIMBAL_ANGLES>::type subscriptionGimbal; subscriptionGimbal = vehicle->subscribe->getValue<TOPIC_GIMBAL_ANGLES>();
|
如何知道subscriptionGimbal
包含哪些数据呢?下面是大疆官方提供对各种订阅话题的说明,可以找到对应的模块:
DJI Onboard SDK: Telemetry Topics

于是便可正常获取传感器的具体数据了:
1 2 3
| std::cout<<"Gimbal pitch:" << subscriptionGimbal.x << std::endl; std::cout<<"Gimbal roll:" << subscriptionGimbal.y << std::endl; std::cout<<"Gimbal yaw:" << subscriptionGimbal.z << std::endl;
|