APM飞控代码结构

本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下: https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284

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

  • 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_Baro,这里面包含了气压高度计的驱动
    • libraries/AP_GPS,GPS驱动,负责解析各种型号的GPS发送过来的数据帧
    • libraries/DataFlash,日志管理
    • libraries/AP_RAMTRON,FRAM芯片驱动,飞控的参数、航线都是存储在这个芯片中的,但是注意这个驱动是最底层的芯片读写驱动,更高层的参数读写、航线读写不在这里
    • libraries/AP_Notify,飞控状态指示器驱动,包含了RGB LED驱动、蜂鸣器驱动。其中RGBLed.cpp里面是控制RGB LED在不同状态下闪烁颜色的代码
    • libraries/AP_InertialSensor,这里面包含了所有IMU芯片的驱动(老版源代码里可能没有这个文件夹)。其中AP_InertialSensor_Invensense.cpp中包含了MPU6000、MPU9250、ICM20608、ICM20602、ICM20601、ICM20789、ICM20689的驱动;AP_InertialSensor_Invensensev2.cpp中包含了ICM20948、 ICM20648、ICM20649的驱动;AP_InertialSensor_Invensensev3.cpp中包含了ICM-40609、ICM-42688、ICM-42605、ICM-40605 – EOL、IIM-42652、ICM-42670的驱动
    • 2024年3月14日更新:此处会不断更新,方便大家研究程序时快速定位目标代码的位置
  • 相同的姿态解算算法
  • 相同的位置解算算法
  • 相同的PID控制算法(但是部分代码会根据载具类型进行区分)

四、第三方子模块相同

  • Mavlink
  • UAVCAN
  • ChibiOS

无人机调试,飞控硬件定制,固件修改,log日志分析,飞控驱动添加
请QQ联系:3500985284

微信公众号:“怒飞垂云”,扫描下图添加

京ICP备19049723号   |   京公网安备 11010502039327号