|
分享完工具系列,我们开始PX4飞控技术的分享,写分享相对于自己写笔记要难很多,在整理自己笔记的过程中也重新思考很多问题。
飞控技术的分享系列更多分享的是思路和框架。对于PX4这种大型开源项目,源码的学习和思路框架的学习同样重要,专于源码容易迷失在代码之中,找不到方向。
当然个人的水平和编辑能力有限,如果有理解不一样的地方,欢迎私信我讨论,我会在后续的分享中更正。
我们后面主要分享的是PX4这一个开源飞控,当然目前世界上有很多的优秀开源飞控项目,在开始PX4的分享之前,我们先聊一下一些著名的开源飞控项目。他们都有哪些,有什么特点等等。
- Cleanflight/betaflight/Baseflight/MultiWii
- crazyflie
- paparazzi
- fprime
- ardupilot
- PX4
以上是我接触过的主要开源飞控,目前还比较活跃的开源项目,如果大家有了解其它优秀的开源飞控项目,欢迎私信我,我补充进去。
Cleanflight/betaflight/Baseflight/MultiWii
这是一个系列的开源项目,历史非常悠久。
这个系列的飞控在穿越机等小四轴上使用非常广泛。
- c编写,stm32官方库,代码非常简洁
- 功能也比较有限,姿态融合算法没有使用ekf,使用的是MahonyAHRS算法
它比较适合飞控入门,学习一些基础知识。
crazyflie
crazyflie也是一款微型四轴飞行器开源项目
- 同样使用c编写,stm32官方库,
- 使用了ekf融合算法,代码比较简洁
想要研究基本的ekf算法的可以看看这个代码,入门比较简单
paparazzi
Paparazzi 项目起始于2003年,由法国民航大学发起的一套软硬件开源无人机项目,它提供了一整套完整的无人机软硬件解决方案。
- 使用c编写,libopencm3开源库
- 代码规模较大,支持固定翼、多旋翼、小车等
- 有完善的传感器融合算法和飞行模式控制应用
fprime
fprime是经过飞行验证的多平台开源飞行软件框架(一个组件驱动的框架),可以快速开发和部署太空飞行及其他嵌入式软件应用程序,美国首个火星飞行器即使用该软件框架。
实际上它不属于开源飞控,是一个软件框架,可以应用于无人平台中,也在美国太空设备中得到应用,证明它的可靠性。它本身没有飞行控制相关的代码算法,当然作为一个非常好的软件框架,大家可以往里面填充自己的算法和设备,实现一个飞控软件。
ardupilot(APM)/PX4
把这两个项目放在一起描述,因为它们是目前最为成熟完善的开源飞控项目,非常强大,且充满活力,相信大家都有一定了解了。
它们的共同点:
- 不同于其它大部分开源飞控使用c开发,他们都主要使用c++开发,代码的封装比较复杂,理解上有一定的难度
- 支持非常丰富的无人设备:多旋翼、固定翼、VTOL、小车、水下航行器、飞艇等等
- 支持的硬件非常丰富,基本支持目前主流的开源飞控硬件
- 都拥有非常丰富的软件包,传感器驱动、导航算法软件包、控制软件栈、仿真环境等等
- 使用了一些相同的中间件软件:Mavlink、uavcan
它们本身有非常密切的关系,但是由于开源协议的不同(APM使用GPL-3,PX4使用BSD-3协议),两个项目目前处于独立开发状态。它们在源码框架上的一些不同:
- 使用的RTOS不同:APM目前使用ChibiOS,而PX4使用Nuttx,当然他们都支持linux系统
- 消息机制不同:PX4使用uORB的微消息代理机制进行任务间的数据传递和消息同步等,任务间耦合校低;APM的模块封装在libraries中的各个类模块中,在应用层(ArduCopter、ArduPlane、Rover等)通过实例化具体的类来完成具体的功能,比如传感器、EKF、位置控制、motor等模块,模块间的数据传递通过类的输入输出接口完成。
- 任务框架不同:PX4的每个任务均运行在独立的task和工作队列中;APM的应用层自己实现了一个调度器(AP_Scheduler)
- 代码框架的复杂程度上PX4会比APM复杂一些,模块的封装程度更高,在task、uorb、传感器的驱动封装上更为复杂一些,当然如果仅仅使用的话只要参考demo也能非常快的入门。
当然它们有很多的不同点,我个人认为PX4偏向于学院风格,而APM是应用风格,我更喜欢PX4的代码框架,后面的分享也会围绕PX4展开。
下一期分享将简单分析px4的代码架构。
这个博客转载自我个人的微信公众号,这里会不定期更新一些我整理的无人机相关知识和个人设计,欢迎添加关注。 |
|