5.10.1 基本功能简介
健康管理系统,顾名思义,是监控飞机以及相关传感器、以及挂载负载设备的状态功能。DJI 遥控器上可以通过官方遥控器Pilot APP进行查看,PSDK端的HMS系统就给机载设备端的开发提供了监控通道。通过对飞机及传感器状态的监控,针对性的调整负载设备功能,可以使得负载设备更加安全和有效。
虽然名称是健康管理系统,但对应开发者来说此部分也较为简单,只是从飞机端被动接收状态信息。所以了解该功能前主要是了解飞机会给PSDK推送哪些健康信息。PSDK 3.x版本中提供了更完善的飞机状态提示信息,因为提供的HMS信息较多,在此不再一一列举。具体请参考代码文件:
dji_hms_info_table.h
5.10.2 主要代码文件
sample代码
./hms/
└── test_hms.h
PSDK lib头文件
dji_hms.h
dji_hms_info_table.h
5.10.3 sample代码实现
功能入口函数
T_DjiReturnCode DjiTest_HmsRunSample(void);
初始化
sample中初始化包含两部分,一个是HMS模块本身初始化(注意return部分),另初始化订阅模块。HMS中之所以需要订阅模块,是因为后续获取状态解析中涉及飞机是在空中还是地面。订阅部分请参考5.6。
static T_DjiReturnCode DjiTest_HmsInit(void)
{
T_DjiReturnCode returnCode;
returnCode = DjiFcSubscription_Init();
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("Hms sample init data subscription module failed, error code:0x%08llX", returnCode);
return returnCode;
}
/*! subscribe fc data */
returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT,
DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ,
NULL);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
USER_LOG_ERROR("HMS sample subscribe topic flight status error, error code:0x%08llX", returnCode);
return returnCode;
}
return DjiHms_Init();
}
注册HMS回调函数
/**
* @brief Register callback to get hms info.
* @note: Data is pushed with a frequency of 1Hz.
* @param callback: see reference of DjiHmsInfoCallback.
* @return Execution result.
*/
T_DjiReturnCode DjiHms_RegHmsInfoCallback(DjiHmsInfoCallback callback);
API简介:
-
将外部回调函数注册到PSDK lib中,注册的回调将以1HZ频率被触发。
参数说明:
-
callback,回调函数实现部分。定义:
typedef struct {
uint32_t errorCode;
uint8_t componentIndex;
uint8_t errorLevel;
} T_DjiHmsInfo;
typedef struct {
T_DjiHmsInfo *hmsInfo;
uint32_t hmsInfoNum;
} T_DjiHmsInfoTable;
typedef T_DjiReturnCode (*DjiHmsInfoCallback)(T_DjiHmsInfoTable hmsInfoTable);回调函数中将以T_DjiHmsInfoTable结构抛出数据。
HMS代码实现较为简单,总结来说只需将接收回调注册到PSDK lib中,将会以1HZ频率触发上抛从飞机中接收到的数据。因此,回调函数通常是解析函数,按照飞机上抛的字段解析可以方便用户查看(字串显示),也可以方便飞机端轻量化推送(整型数字定义)。
HMS释义
sample中通过下面函数实现上抛信息的匹配,基本原理是上抛的数据是飞控与PSDK端定义的整型数字,如果直接抛整型定义数值,开发者需要查表。此部分的实现就将查表这个动作用软件自己去实现,只需将我们方便阅读的字串信息呈现出来。
static bool DjiTest_MarchErrCodeInfoTable(T_DjiHmsInfoTable hmsInfoTable)
信息表定义代码文件,dji_hms_info_table.h
结构:
typedef struct {
uint32_t alarmId; /*! error code*/
const char *groundAlarmInfo; /*! alarm information when the flight is on the ground*/
const char *flyAlarmInfo; /*! alarm information when the flight is in the air*/
} T_DjiHmsErrCodeInfo;
-
errorCode与alarmId对应
-
飞行器在空中与地面上同一个ID,呈现的字串可能存在差异,可通过订阅遥测数据:DJI_FC_SUBSCRIPTION_FLIGHT_STATUS_IN_AIR区分。在地面:groundAlarmInfo,空中:flyAlarmInfo
-
errorLevel是对应推送过来的异常等级,等级定义
#define MIN_HMS_ERROR_LEVEL 0
#define MID_HMS_ERROR_LEVEL 3
#define MAX_HMS_ERROR_LEVEL 6
5.10.4 开发注意事项
-
M300上HMS通过USB通道传输,需要确保双A USB连接且通信正常。
-
评论
0 条评论
请登录写评论。