ArduPilot-1-ArduPilot还是PX4?
在前面的分享PX4-1-开源飞控项目
中,我们简单分享了一些比较知名的开源飞控项目,对ArduPilot也做了简单的介绍。
ArduPilot与PX4是目前最为成熟完善的开源飞控项目,两个项目的系统架构差异比较大,很多同学也会问我应该学习哪一个比较好。
在PX4系列分享中,我们已经更新了19篇文章(可以在公众号主页点击OPENUAV/PX4获取列表),对PX4的
系统架构
消息机制(uORB)
任务调度
设备驱动
日志系统
仿真系统
混控
ROS/ROS2接口
等方面都做了简单的介绍,大家对PX4应该有一些系统性的认识。
我们没有对ArduPilot做系统性的介绍,这里我们先简单介绍一下ArduPilot开源项目的基本信息。
ArduPilot也叫ArduPilotMega(APM),最早是基于Arduino运行在ATMEGA2560这一款8位AVR单片机上,目前的ArduPilot的代码架构也非常类似于Arduino的架构。
很多同学对这个板子应该都还有印象,最早接触它还是在大学时期,一晃已经过去将近10年。
ArduPilot项目起源于2007年,在2011年发布APM2时其系统架构已经有了目前的系统架构的雏形。
后面比较有重大意义的时间节点有:
2012年PX4项目发布,并发布了第一代PX4FMU,ArduPilot设计AP_HAL支持更多的飞控硬件
2013年ArduPilot将PX4项目作为中间件,实现对Pixhawk硬件的支持。
从这开始ArduPilot与PX4项目就有着紧密的关系,这时候ArduPilot的代码结构是这样的:
├── ArduCopter
├── ArduPlane
├── libraries
│ ├── AC_AttitudeControl
│ ├── AC_PID
│ ├── ...
│ ├── AP_HAL
│ ├── AP_HAL_Empty
│ ├── AP_HAL_Linux
│ ├── AP_HAL_PX4
│ ├── AP_HAL_SITL
├── modules
│ ├── PX4Firmware
│ ├── PX4NuttX
│ └── uavcan
2014年 DroneCode开源飞控基金会成立,PX4与ArduPilot都是其中的开源项目。
2016年ArduPilot与DroneCode因为理念的不同分道扬镳,ArduPilot脱离DroneCode基金会,这件事情当时引起了广泛讨论,ArduPilot与DroneCode的是非关系这里就不再讨论。
2018年ArduPilot引入ChibiOS作为ArduPilot的RTOS,移除了PX4Firmware、PX4NuttX,至此ArduPilot与PX4项目脱离关系。
到这里ArduPilot与PX4回到独立开发的阶段,最近几年都发展迅速,迭代非常快。
现在大家对ArduPilot项目的发展应该有一定的认识,我们对ArduPilot与PX4做一些简单的对比,下表是github上截至2022年11月19号的一些统计数据:
PX4ArduPilotcommits(master分支)4153855588forks12.1k13.5kstarred6k7.8kcontributors556661
从统计数据上看,ArduPilot在代码提交数量、项目forks、starred以及代码贡献者数量上都要多于PX4。
当然这些数据不能说明ArduPilot就优于PX4,ArduPilot项目发起比PX4更早,积累了更多的代码和功能。
在源码框架上的一些不同:
使用的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也能非常快的入门。
以下两图是ArduPilot与PX4的代码框架图
ArduPilot:
PX4:
初看两者的架构图可能对其理解不多。在后续的分享中我会新增ArduPilot这一主题,详细聊聊ArduPilot各个部分的系统架构,欢迎大家关注。
讲到这里还是没有回答我们选择ArduPilot还是PX4学习更为合适,可能如果大家对ArduPilot和PX4都有一定的了解,可能能选择更满足自己需求的项目,这里我先分享一下我自己的体会:
ArduPilot的开发时间更久,积累的代码和功能更多,使用体验上整体会略好一些,代码结构更加简单清晰,上手会容易一些,更适合航模或者飞控爱好者。
PX4起源于苏黎世联邦理工学院,发展比ArduPilot稍微晚一些,系统设计去耦合,且在对ROS与ROS2的支持上更充分一些,仿真系统也更完善一些,更适合高校研究开发。
以上是我个人的理解,可能有不准确的地方,欢迎私信我交流讨论。
往期分享:
AcmeGCS-21-原生ROS2支持
PX4-19-MicroDDS
PX4-18-混控动态分配
这里会不定期更新一些我整理的无人机相关知识,如果对您有帮助,欢迎关注转发分享。
页:
[1]