如何用开源飞控PIXHAWK进行二次开发？
以下所描述的都是针对px4原生固件，此外，由于固件更新过于频繁，本文描述的是15年7月的固件，主要是举例，有改动的话，自己再研究研究吧（后面换cmake编译方式了，改动蛮大）。 既然要做开发，第一步就是搭好开发环境，根据我的经验，最好是在linux环境下编译，这样效率会很快，以前在windows下编译，经常40分钟以上，这样就太影响开发了； 第二步，大概了解下固件的架构， 如果只涉及应用层的开发，那底层的nuttx系统就可以绕过去了，一般，最好先把uorb模块的机制整明白就好了，从uorb入手，了解每个话题的来源以及作用，整理数据流，清楚每个模块之间的关系即可，比如，要实现手动模式，哪些模块互相交互，auto模式，又有哪些模块起作用， 如果涉及相应算法的开发，要学会定位到相应的算法模块，甚至具体到哪些代码，比如，你想试验你的姿态估计算法，那你就将姿态估计模块替换掉即可，不过相应的接口仍需要和px4环境一样，以姿态估计为例，最后要发布你的vehicle_attitude话题，不然无法与其他模块交互； 另外，不要试图在代码中找main函数，那是单片机思维，你只需看启动脚本即可，\ROMFS\px4fmu_common\init.d\rcs； 第三步，针对你的具体情况，定位相应的模块，进行精读研究，虽然模块基本是用C++写的，但是不会C++也没关系，毕竟又不是让你写，本人倒目前为止，也不会C++，配合注释，看明白就好了，比如，整理下mavlink的控制流程； 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 –传感器应用 px4io –px4io驱动 uavcan –uavcan驱动 飞行控制的程序 飞行安全和导航 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固件只能在手动模式解锁，假如我要修改成定高模式解锁： 将MAIN_STATE_MANUAL替换成MAIN_STATE_ALTCTL即可。