一、不同类别的载具分不同的文件夹

  • ArduCopter——多旋翼
  • ArduPlane——固定翼
  • APMrover2——无人车
  • ArduSub——潜水艇
  • AntennaTracker——跟踪天线

    二、不同载具有各自的顶层源文件

  • 各自的顶层文件

    • 对于多旋翼固件,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芯片驱动,飞控的参数、航线都是存储在这个芯片中的,但是注意这个驱动是最底层的芯片读写驱动,更高层的参数读写、航线读写不在这里
  • 相同的姿态解算算法
  • 相同的位置解算算法
  • 相同的PID控制算法(但是部分代码会根据载具类型进行区分)

    四、第三方子模块相同

  • Mavlink

  • UAVCAN
  • ChibiOS

    五、注意

    别再傻乎乎的找main函数了(别问我怎么知道,也别问我找了多久)
    在各载具的顶层源文件中都有一个loop函数或者fast_loop,这个就是他的main函数,直接改就完事。