网站建设项目延期验收申请报告,企业网站数据库表设计,便捷的网站建设软件,四川建设网有限责任公司是国企吗无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整
0 前言
之前文章添加了一个自定义的模块#xff0c;本篇文章在之前的自定义模块中#xff0c;添加两个自定义参数
使用QGC显示出来#xff0c;并通过QGC调整参数值#xff0c;代码实现参数更新
新增的参…无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整
0 前言
之前文章添加了一个自定义的模块本篇文章在之前的自定义模块中添加两个自定义参数
使用QGC显示出来并通过QGC调整参数值代码实现参数更新
新增的参数放在 jone_demo_params.c文件里面
之前定义的模块中一直在终端打印一个消息本节中设置一个bool型参数为1 打印一个消息为0 打印另一个消息
并且设置一个float型参数将该参数值打印出来
1 PX4 添加自定义参数方法
PX4定义参数 在具体模块的 **_params.c文件中进行
通过函数 PARAM_DEFINE**()例如
PARAM_DEFINE_INT32 定义整型参数PARAM_DEFINE_FLOAT 定义浮点型参数
目前只有这两种类型
PARAM_DEFINE**() 函数的上面有注释 [!NOTE] 注意注释是有格式要求的不能随意写为了在QGC中进行显示与参数的自动化处理 注释的格式如下
/** 第一行
*短注释 *长注释 *标签
PARAM_DEFINE**()
标签以为开头标签的内根据参数的类型来定具体有 unit 单位16 min 最小值16 max 最大值 value 各值代表的不同含义 boolean 布尔型参数decimal 指定参数值的小数位数increment 参数的调整步长。group 分组
PARAM_DEFINE**() 函数的 参数第一个为定义的参数名称第二个为默认值
参数名称 [!NOTE] 注意参数的名字不能超过16个字符 默认值
下面是原有PX4定义好的参数的例子
浮点型参数
/*** VTOL Takeoff relative loiter altitude.** Altitude relative to home at which vehicle will loiter after front transition.** unit m* min 20* max 300* decimal 1* increment 1* group VTOL Takeoff*/
PARAM_DEFINE_FLOAT(VTO_LOITER_ALT, 80);整型参数
/*** Maximum number of search attempts** Maximum number of times to search for the landing target if it is lost during the precision landing.** min 0* max 100* group Precision Land*/
PARAM_DEFINE_INT32(PLD_MAX_SRCH, 3);具体的参数自动处理代码在Tools/module_config 下面的几个python文件中例如 generate_params.py 中的核心代码 # get the type and extract all tagstags group {:}.format(param_group)if param[type] enum:param_type INT32for key in param[values]:tags \n * value {:} {:}.format(key, param[values][key])elif param[type] bitmask:param_type INT32for key in param[bit]:tags \n * bit {:} {:}.format(key, param[bit][key])max_val max(key for key in param[bit])tags \n * min 0tags \n * max {:}.format((1(max_val1)) - 1)elif param[type] boolean:param_type INT32tags \n * booleanelif param[type] int32:param_type INT32elif param[type] float:param_type FLOATelse:raise Exception(unknown param type {:}.format(param[type]))2 代码实践
2.1 定义参数
定义一个bool型变量来控制打印消息a还是b
分组为 demo
/*** print msg a or b** Control print msg a or b** boolean* group demo*/
PARAM_DEFINE_INT32(PRINT_MSG_A_EN, 1);定义一个float型变量在打印时打印该值
单位 随便定义为s
最小值为0.2 最大值为1.0
小数精度为2
增量步长为0.01
分组为demo
/*** print number** Print number value** unit s* min 0.2* max 1.0* decimal 2* increment 0.01* group demo*/
PARAM_DEFINE_FLOAT(PRINT_NUM_VALUE, 0.4f);2.2 使用参数
下面是如何使用上面定义的两个参数
在 JoneDemo.hpp 文件中的类声明中的私有变量区加入如下内容 DEFINE_PARAMETERS((ParamFloatpx4::params::PRINT_NUM_VALUE) _param_print_num_value,(ParamBoolpx4::params::PRINT_MSG_A_EN) _param_print_msg_a_enable,);DEFINE_PARAMETERS 就是固定使用之前参数文件定义的参数的函数方法按照这个格式写
px4::params::定义参数名称 后面跟 代码中对应的变量 [!NOTE] 注意参数对应的变量不能直接使用在使用该值的时候需要使用.get()函数更改值的时候使用.set()函数. 否则编译报错 在 JoneDemo.cpp 的Run()函数中加入 使用该两个变量的代码 if(_param_print_msg_a_enable.get()){printf(MSG a print value : %f \r\n,(double)_param_print_num_value.get());}else{printf(hello jone\r\n);}2.3 参数更新
参数更新
如果不进行下面的参数更新的操作那么在使用的时候QGC里改了参数代码里不会改
涉及到的函数parameters_update(bool force)
在里面加入内容 // check for parameter updatesif (_parameter_update_sub.updated() || force) {// clear updateparameter_update_s pupdate;_parameter_update_sub.copy(pupdate);// update parameters from storageModuleParams::updateParams();SuperBlock::updateParams();printMsgAEnable _param_print_msg_a_enable.get();printNumValue _param_print_num_value.get();}前面四行是固定的检测的参数更新时进行更新
最后两行则是新定义了两个变量对应更新到的参数这样更新后就被赋值了不用在后面执行是一直执行get()函数
_parameter_update_sub 变量需要在JoneDemo.hpp文件声明
uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s};在构造函数中加入强制执行参数更新一次这样上电变量就会获得参数
parameters_update(true);然后再后面的Run函数中之前本身就有parameters_update(false); 也就是检测到参数变化了才会更新一次
在JoneDemo.hpp文件中的私有区定义这两个变量就行 float printNumValue;bool printMsgAEnable;对应的JoneDemo.cpp 文件中的cpp函数则改为使用这两个变量 if(printMsgAEnable){printf(MSG a print value : %f \r\n,(double)printNumValue);}else{printf(hello jone\r\n);}3 测试
删除掉原来的build文件夹下的px4_sitl_default
然后再编译
make px4_sitl_default 再执行
make px4_sitl_default gazebo终端打印出了应该输出的内容 打开QGC打开参数列表先点击刷新
然后搜索定义的那两个变量名
第1个bool变量PRINT_MSG_A_EN 可以看到再选择值里面可以选择 Enabled和Disabled就是因为参数定义时声明了标签boolean
同样可以看到长注释Control print msg a or b
此时将 该变量改为Disabled
终端按照代码逻辑输出了hello jone
第二个看那个float型参数PRINT_NUM_VALUE
数字后面有个s,就是单位的标签
有最小值和最大值的标签小数点后面有两位就是decimal 2的标签
此时将 该变量改为0.26则终端对应打印的数据也进行改变 这样就完成了在PX4中添加自定义bool型、float型的参数与测试。 文章转载自: http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn http://www.morning.wgrl.cn.gov.cn.wgrl.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.jspnx.cn.gov.cn.jspnx.cn http://www.morning.xrqkm.cn.gov.cn.xrqkm.cn http://www.morning.fndfn.cn.gov.cn.fndfn.cn http://www.morning.byshd.cn.gov.cn.byshd.cn http://www.morning.bmbnc.cn.gov.cn.bmbnc.cn http://www.morning.fkgcd.cn.gov.cn.fkgcd.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.ktyww.cn.gov.cn.ktyww.cn http://www.morning.skpdg.cn.gov.cn.skpdg.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn http://www.morning.mrxqd.cn.gov.cn.mrxqd.cn http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn http://www.morning.rhwty.cn.gov.cn.rhwty.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.lhrcr.cn.gov.cn.lhrcr.cn http://www.morning.rqgjr.cn.gov.cn.rqgjr.cn http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.mgkb.cn.gov.cn.mgkb.cn http://www.morning.jwpcj.cn.gov.cn.jwpcj.cn http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.mhnr.cn.gov.cn.mhnr.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.smry.cn.gov.cn.smry.cn http://www.morning.cgntj.cn.gov.cn.cgntj.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.bnygf.cn.gov.cn.bnygf.cn http://www.morning.yrnrr.cn.gov.cn.yrnrr.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.qwqzk.cn.gov.cn.qwqzk.cn http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.nbiotank.com.gov.cn.nbiotank.com http://www.morning.kqpsj.cn.gov.cn.kqpsj.cn http://www.morning.hphfy.cn.gov.cn.hphfy.cn http://www.morning.lthpr.cn.gov.cn.lthpr.cn http://www.morning.xbbrh.cn.gov.cn.xbbrh.cn http://www.morning.rnht.cn.gov.cn.rnht.cn http://www.morning.mdgpp.cn.gov.cn.mdgpp.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.rkfh.cn.gov.cn.rkfh.cn http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.zsthg.cn.gov.cn.zsthg.cn http://www.morning.lanyee.com.cn.gov.cn.lanyee.com.cn http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.yxwnn.cn.gov.cn.yxwnn.cn http://www.morning.qykxj.cn.gov.cn.qykxj.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.nhrkl.cn.gov.cn.nhrkl.cn http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn