信息管理
概述
具有消息订阅功能的负载设备,能够订阅无人机的飞行状态数据信息,方便用户实现广泛的应用。
基础概念
消息订阅
无人机上的各个部件根据无人机实际的飞行状况,会实时产生大量的数据信息并被无人机推送给其他模块,用户使用具有消息订阅功能的负载设备,能够指定所需订阅的数据信息。
订阅流程
订阅数据项后,负载设备即可获得订阅的信息。
订阅项
使用 PSDK 消息订阅功能可订阅的数据信息如下表所示:
注意:
- 如果需要在代码工程中搜索订阅项,请替换下的
*_
为UAV_SUBSCRIPTION_TOPIC_
,譬如*_QUATERNION
拓展为UAV_SUBSCRIPTION_TOPIC_QUATERNION
。
数据订阅 TOPIC | EVO Max 系列 |
---|---|
姿态四元数 *_QUATERNION | 最大100Hz |
相对地面加速度 *_ACCELERATION_GROUND | 最大 5Hz |
相对机体加速度 *_ACCELERATION_BODY | 最大 5Hz |
原始加速度 *_ACCELERATION_RAW | 最大 100Hz |
速度 *_VELOCITY | 最大 100Hz |
融合角速度 *_ANGULAR_RATE_FUSIONED | 最大 100Hz |
原始角速度 *_ANGULAR_RATE_RAW | 最大 100Hz |
融合高度 *_ALTITUDE_FUSED | 最大 20Hz |
气压计高度 *_ALTITUDE_BAROMETER | 最大 5Hz |
Home 点高度 *_ALTITUDE_OF_HOMEPOINT | 最大 10Hz |
融合相对地面高度 *_HEIGHT_FUSION | 最大 1Hz |
相对地面高度 *_HEIGHT_RELATIVE | 最大 20Hz |
融合位置坐标 *_POSITION_FUSED | 最大 20Hz |
GPS 日期(年月日) *_GPS_DATE | 最大 10Hz |
GPS 时间(时分秒) *_GPS_TIME | 最大 10Hz |
GPS 位置 *_GPS_POSITION | 最大 10Hz |
GPS 速度 *_GPS_VELOCITY | 最大 10Hz |
GPS 信息 *_GPS_DETAILS | 最大 10Hz |
GPS 信号强度 *_GPS_SIGNAL_LEVEL | 最大 10Hz |
RTK 位置 *_RTK_POSITION | 最大 10Hz |
RTK 速度 *_RTK_VELOCITY | 最大 5Hz |
RTK 航向角 *_RTK_YAW | 最大 5Hz |
RTK 位置信息 *_RTK_POSITION_INFO | 最大 10Hz |
RTK 航向信息 *_RTK_YAW_INFO | 最大 5Hz |
指南针信息 *_COMPASS | 最大 5Hz |
遥控摇杆信息 *_RC | 最大 50Hz |
云台角度 *_GIMBAL_ANGLES | 最大 100Hz |
云台状态 *_GIMBAL_STATUS | 最大 100Hz |
飞行状态 *_STATUS_FLIGHT | 最大 2Hz |
飞行模式状态 *_STATUS_DISPLAYMODE | 最大 2Hz |
电机启动错误码 *_STATUS_MOTOR_START_ERROR | 最大 5Hz |
电池信息 *_BATTERY_INFO | 最大 1Hz |
硬件时钟同步 *_HARD_SYNC | 最大 100Hz |
GPS 控制等级 *_GPS_CONTROL_LEVEL | 最大 10Hz |
带标记遥控遥感信息 *_RC_WITH_FLAG_DATA | 最大 50Hz |
电调数据 *_ESC_DATA | 最大 5Hz |
云台控制模式 *_GIMBAL_CONTROL_MODE | 控制触发 |
笛卡尔坐标位置 *_POSITION_VO | 最大 100Hz |
避障数据 *_AVOID_DATA | 最大 20Hz |
返航点设置状态 *_HOME_POINT_SET_STATUS | 最大 1Hz |
返航点信息 *_HOME_POINT_INFO | 最大 1Hz |
1 号电池信息 *_BATTERY_SINGLE_INDEX1 | 最大 1Hz |
2 号电池信息 *_BATTERY_SINGLE_INDEX2 | 最大 1Hz |
带时间戳的飞行姿态信息 *_IMU_ATTI_NAVI_WITH_TIMESTAMP | 最大 20Hz |
使用消息订阅功能
PSDK 支持通过注册回调方式订阅无人机对外推送的数据信息。
消息订阅功能模块初始化
使用 PSDK 开发的负载设备如需订阅无人机上的状态信息,需要先调用 UAV_Subscription_Init()
初始化消息订阅模块。
uavStat = UAV_Subscription_Init();
if (uavStat != UAV_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("init data subscription module error.");
return UAV_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
}
uavStat = UAV_Subscribe_Topic(UAV_SUBSCRIPTION_TOPIC_QUATERNION, UAV_DATA_SUBSCRIPTION_TOPIC_1_HZ,
UAV_FcSubscription_ReceiveQuaternionCallback);
if (uavStat != UAV_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
UAV_LOG_ERROR("Subscribe topic quaternion info error.");
return UAV_ERROR_SYSTEM_MODULE_CODE_UNKNOWN;
} else {
UAV_LOG_INFO("Subscribe topic quaternion info success.");
}
通过构造回调函数获取无人机上的信息
- 构造回调函数
通过构造回调函数接收无人机推送的信息。注意:
- 为避免出现内存踩踏事件,须将数据地址的类型强制转换为订阅项数据结构中的指针类型。
static T_UAVReturnCode UAV_FcSubscription_ReceiveQuaternionCallback(const uint8_t *data, uint16_t dataSize)
{
T_UAVSubscriptionQuaternion *quaternion = (T_UAVSubscriptionQuaternion *) data;
double pitch, yaw, roll;
USER_UTIL_UNUSED(dataSize);
pitch = (double) asinf(-2 * quaternion->q1 * quaternion->q3 + 2 * quaternion->q0 * quaternion->q2) * 57.3;
roll = (double) atan2f(2 * quaternion->q2 * quaternion->q3 + 2 * quaternion->q0 * quaternion->q1, -2 * quaternion->q1 * quaternion->q1 - 2 * quaternion->q2 * quaternion->q2 + 1) * 57.3;
yaw = (double) atan2f(2 * quaternion->q1 * quaternion->q2 + 2 * quaternion->q0 * quaternion->q3, -2 * quaternion->q2 * quaternion->q2 - 2 * quaternion->q3 * quaternion->q3 + 1) * 57.3;
if (s_userFcSubscriptionDataShow == true) {
USER_LOG_INFO("receive quaternion data.");
USER_LOG_INFO("quaternion: %f %f %f %f.\r\n", quaternion->q0, quaternion->q1, quaternion->q2, quaternion->q3);
USER_LOG_INFO("euler angles: pitch = %.2f roll = %.2f yaw = %.2f.", pitch, yaw, roll);
UAV_Test_WidgetLogAppend("pitch = %.2f roll = %.2f yaw = %.2f.", pitch, yaw, roll);
}
return UAV_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}