查看: 1100|回复: 0

ArduPilot-1-ArduPilot还是PX4?

[复制链接]

41

主题

778

帖子

1556

积分

金牌飞友

Rank: 6Rank: 6

积分
1556
飞币
776
注册时间
2017-8-12
发表于 2022-12-7 14:40:23 | 显示全部楼层 |阅读模式
在前面的分享

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支持更多的飞控硬件

ArduPilot-1-ArduPilot还是PX4?w2.jpg

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号的一些统计数据:

PX4ArduPilot
commits(master分支)4153855588
forks12.1k13.5k
starred6k7.8k
contributors556661

从统计数据上看,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:

ArduPilot-1-ArduPilot还是PX4?w3.jpg

PX4:

初看两者的架构图可能对其理解不多。在后续的分享中我会新增ArduPilot这一主题,详细聊聊ArduPilot各个部分的系统架构,欢迎大家关注。

讲到这里还是没有回答我们选择ArduPilot还是PX4学习更为合适,可能如果大家对ArduPilot和PX4都有一定的了解,可能能选择更满足自己需求的项目,这里我先分享一下我自己的体会:

ArduPilot的开发时间更久,积累的代码和功能更多,使用体验上整体会略好一些,代码结构更加简单清晰,上手会容易一些,更适合航模或者飞控爱好者。

PX4起源于苏黎世联邦理工学院,发展比ArduPilot稍微晚一些,系统设计去耦合,且在对ROS与ROS2的支持上更充分一些,仿真系统也更完善一些,更适合高校研究开发。

以上是我个人的理解,可能有不准确的地方,欢迎私信我交流讨论。

往期分享:

AcmeGCS-21-原生ROS2支持

PX4-19-MicroDDS

PX4-18-混控动态分配

这里会不定期更新一些我整理的无人机相关知识,如果对您有帮助,欢迎关注转发分享。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表