PIXHAWK进行二次开发

时间:2021-01-06 20:19:32


PIXHAWK进行二次开发

有改动的话,自己再研究研究吧(后面换cmake编译方式了,改动蛮大)。
既然要做开发,第一步就是搭好开发环境,根据我的经验,最好是在linux环境下编译,这样效率会很快,以前在windows下编译,经常40分钟以上,这样就太影响开发了;
第二步,大概了解下固件的架构,

<img src="http://www.itdaan.com/imgs/1/7/1/9/59/adb34e3de558247c1ea760c5d2d07bae.jpe" data-rawwidth="708" data-rawheight="533" class="origin_image zh-lightbox-thumb" width="708" data-original="https://pic4.zhimg.com/11ad316fe65f69c396552fa422a68b57_r.png">如果只涉及应用层的开发,那底层的nuttx系统就可以绕过去了,一般,最好先把uorb模块的机制整明白就好了,从uorb入手,了解每个话题的来源以及作用,整理数据流,清楚每个模块之间的关系即可,比如,要实现手动模式,哪些模块互相交互,auto模式,又有哪些模块起作用,PIXHAWK进行二次开发如果只涉及应用层的开发,那底层的nuttx系统就可以绕过去了,一般,最好先把uorb模块的机制整明白就好了,从uorb入手,了解每个话题的来源以及作用,整理数据流,清楚每个模块之间的关系即可,比如,要实现手动模式,哪些模块互相交互,auto模式,又有哪些模块起作用,

<img src="http://www.itdaan.com/imgs/7/3/3/2/66/2833261b17142732d0f2d3e4bc48e491.jpe" data-rawwidth="721" data-rawheight="248" class="origin_image zh-lightbox-thumb" width="721" data-original="https://pic3.zhimg.com/3e88f6bd847847e261a21c96fa72a256_r.png"> PIXHAWK进行二次开发<img src="http://www.itdaan.com/imgs/9/8/8/0/71/c8db9c05af33cc7711c300897ea3f05e.jpe" data-rawwidth="874" data-rawheight="352" class="origin_image zh-lightbox-thumb" width="874" data-original="https://pic1.zhimg.com/df287c10090be963ddf9ac454561e674_r.png"> PIXHAWK进行二次开发

如果涉及相应算法的开发,要学会定位到相应的算法模块,甚至具体到哪些代码,比如,你想试验你的姿态估计算法,那你就将姿态估计模块替换掉即可,不过相应的接口仍需要和px4环境一样,以姿态估计为例,最后要发布你的vehicle_attitude话题,不然无法与其他模块交互;

另外,不要试图在代码中找main函数,那是单片机思维,你只需看启动脚本即可,\ROMFS\px4fmu_common\init.d\rcs;

第三步,针对你的具体情况,定位相应的模块,进行精读研究,虽然模块基本是用C++写的,但是不会C++也没关系,毕竟又不是让你写,本人倒目前为止,也不会C++,配合注释,看明白就好了,比如,整理下mavlink的控制流程;

<img src="http://www.itdaan.com/imgs/4/8/8/2/76/57e39dc3d847017427255292cb20c8fe.jpe" data-rawwidth="584" data-rawheight="780" class="origin_image zh-lightbox-thumb" width="584" data-original="https://pic2.zhimg.com/50464e16d6e2e2ac974bb3955e4a6879_r.png"> PIXHAWK进行二次开发

px4原生固件模块列表:

系统命令程序

mavlink –通过串口发送和接收mavlink信息

sdlog2 –保存系统日志/飞行数据到SD卡

tests –测试系统中的测试程序

top –列出当前的进程和CPU负载

uORB – 微对象请求代理器-分发其他应用程序之间的信息

驱动

mkblctrl–blctrl电子模块驱动

esc_calib –ESC的校准工具

fmu –FMU引脚输入输出定义

gpio_led –GPIO LED驱动

gps –GPS接收器驱动

pwm –PWM的更新速率命令

sensors –传感器应用

px4iopx4io驱动

uavcanuavcan驱动

飞行控制的程序

飞行安全和导航

commander –主要飞行安全状态机

navigator –任务,失效保护和RTL导航仪

估计姿态和位置

attitude_estimator_ekf –基于EKF的姿态估计

ekf_att_pos_estimator –基于EKF的姿态和位置估计

position_estimator_inav–惯性导航的位置估计

multirotor姿态和位置控制器

mc_att_control–multirotor姿态控制器

mc_pos_control –multirotor位置控制器

fixedwing姿态和位置控制器

fw_att_control –固定翼飞机的姿态控制

fw_pos_control_l1 –固定翼位置控制器

垂直起降姿态控制器

vtol_att_control –垂直起降姿态控制器


最后提一句,多看看官网的说明,另外根据本人的经验来看,由于大框架,代码人家都写好了,通常你要加功能,所修改的也就几行代码而已,举例说明,比如px4固件只能在手动模式解锁,假如我要修改成定高模式解锁:

<img src="http://www.itdaan.com/imgs/6/4/8/1/56/4104d36e629a873e2b810966770a6208.jpe" data-rawwidth="1529" data-rawheight="853" class="origin_image zh-lightbox-thumb" width="1529" data-original="https://pic3.zhimg.com/1e322fe90f28945a2b0f08862126e67e_r.png"> PIXHAWK进行二次开发<img src="http://www.itdaan.com/imgs/7/8/1/6/14/72b0e4784fde32cc64d3683c76b6722a.jpe" data-rawwidth="1554" data-rawheight="857" class="origin_image zh-lightbox-thumb" width="1554" data-original="https://pic1.zhimg.com/942b756cce2393c73c283fd65f1fbcc8_r.png"> PIXHAWK进行二次开发

将MAIN_STATE_MANUAL替换成MAIN_STATE_ALTCTL即可。



进入一个新的智能硬件开源项目,里面的程序架构是非常关键的,说白了也就是知道文件目录的意义。主文件,控制算法,姿态算法,导航算法,传感器接口,函数定义文件,程序配置文件,特殊变量定义文件等等,这些文件都有标准的名称,很容易区分,而且这些开源程序现在也规矩多了,文件说明也写的很清楚,外国开源项目不像中国某些项目“犹抱琵琶半遮面”,不肯写说明,或者故意写很多垃圾代码。老外放在github上的都很清晰。
弄懂这些就要找准自己二次开发的方向,想多加功能?减少功能?改变算法?然后,注意了,关键:::::::从主函数入手!就算你只是改动一个小地方,也要把主函数搞清楚,然后进入相关函数,或者文件位置进行二次开发。