一、不同类别的载具分不同的文件夹
- ArduCopter——多旋翼
- ArduPlane——固定翼
- APMrover2——无人车
- ArduSub——潜水艇
-
二、不同载具有各自的顶层源文件
各自的顶层文件
- 对于多旋翼固件,Copter-4.0.0之后的固件代码,顶层文件改为了“ArduCopter/Copter.cpp”,而之前的代码,顶层文件为“ArduCopter/ArduCopter.cpp”,二者只是名字变化了,内容变化不大(APM代码结构在不断优化,以后会越来越统一);
- 对于固定翼固件,顶层文件一直都是“ArduPlane/ArduPlane.cpp”;
- 对于无人车固件,Rover-4.0.0之后的固件代码,顶层文件改为了“APMrover2/Rover.cpp”,而之前的代码,顶层文件为“APMrover2/APMrover2.cpp”;
- 各自的模式
- 各自的独有参数
- 各自的通信逻辑
-
三、不同载具公用相同的底层文件
相同的驱动文件,比如:
- libraries/AP_Camera,相机控制
- libraries/AP_GPS,GPS驱动,负责解析各种型号的GPS发送过来的数据帧
- libraries/DataFlash,日志管理
- libraries/AP_RAMTRON,FRAM芯片驱动,飞控的参数、航线都是存储在这个芯片中的,但是注意这个驱动是最底层的芯片读写驱动,更高层的参数读写、航线读写不在这里
- 相同的姿态解算算法
- 相同的位置解算算法
-
四、第三方子模块相同
Mavlink
- UAVCAN
- ChibiOS
五、注意
别再傻乎乎的找main函数了(别问我怎么知道,也别问我找了多久)
在各载具的顶层源文件中都有一个loop函数或者fast_loop,这个就是他的main函数,直接改就完事。