px4学习笔记(一)学习之切入点 学习Px4无人机之切入点今天和爱好px4的小伙伴们一起聊聊一个有意思的话题就是学习px4的切入点在哪我想有很多刚刚入手px4的小伙伴们会和我一样会遇到过同样的问题大家回想一下学习px4刚开始面对一堆代码是不是不知从何下手我曾想过这样一个办法就是把src/modules/目录下的模块几乎全部删除清空modules目录只保留很少的最小依赖。然后一个模块一个模块的加上去并进行编译目的是想把px4的五脏六腑全部扒开看看。直到一直是碰南墙才收手这种做法的缺点是1、完全不适合入门小白一上来全是编译报错、依赖缺失完全看不到飞行业务逻辑纯编译层折腾。2、学习碎片化无法建立整机飞行流程的完整认知只会孤立的单个模块3、耗时极长大量时间浪费在修复编译链接问题而非飞控逻辑学习。大家有没有想过第二种方法就是从bootloader入手然后是NuttX 启动脚本、调度、内存、设备驱动框架CDev再到板级硬件驱动uORB 通信底层、参数系统存储、日志系统最后是上层 commander、navigator、控制器、飞控逻辑。这种做法毋庸置疑能完全吃透 PX4 底层运行机制看懂所有硬件初始化、任务调度根源但它有一个致命的缺点就是门槛极高底层代码量大且晦涩直接让很多小伙伴们从入门到放弃。还有第三种方法大家看可不可行就是从上层应用入手自顶向下先学 Commander、Navigator、姿态估计器和各种控制器。其优点显而易见1入门效率最高正向反馈极强改一行控制参数立刻看到变化快速建立学习成就感2贴合绝大多数人的开发需求90% 二次开发需求都集中在上层 —— 自定义飞行模式、自定义航迹、改装控制算法、拓展 MAVLink 指令不需要碰 Bootloader3逻辑分层清晰先搞懂 “飞机要做什么”再去看 “硬件怎么支撑”符合人类认知习惯快速掌握 PX4 核心业务架构模块分工、消息通信、状态机、任务调度逻辑。这种方法也有一个缺点就是长期只停留在上层会形成 “底层盲区”遇到固件启动异常问题无法独立排查后期需要补充底层知识。那么学习px4的小白应该从何处入手才能更有效由于PX4 飞控以NuttX RTOS作为底层操作系统整体分为NuttX 内核基础层、PX4 板级适配层、PX4 驱动框架层、PX4 系统调度层、PX4 底层通信与存储、PX4 基础内核服务六大块。所以我们学习px4应该遵循循序渐近的原则避免眼高手低出现学习上的盲区。同时注意以下避坑要点不要直接从姿态控制、控制器上层入手底层上层大量封装看不懂硬件交互不要跳过 NuttX 直接读 PX4 驱动所有 open/spi 读写底层全是 NuttX 接口看不懂 NuttX 就看不懂驱动底层只看代码不实操底层必须动手改驱动、新增外设、制造崩溃调试才能真正理解堆栈、中断、调度限制混淆进程 task 与 pthread 线程PX4 应用是独立 taskWorkQueue 基于 pthread二者资源隔离机制完全不同。 、由于自己水平有限有不全面或错误的地方敬请大家批评指正谢谢大家。