ArduPilot由几部分组成:
Vehicle应用层:如多旋翼(ArduCopter)、固定翼(ArduPlane)、小车(Rover)等
库:如硬件抽象层(AP_HAL)、传感器驱动(AP_InertialSensor)、传感器融合(AP_NavEKF/2/3)、电机混控输出(AP_Motors)、日志库(AP_Logger)等
第三方模块:RTOS(ChibiOS)、CAN协议层(DroneCAN)、mavlink、DDS库(Micro-XRCE-DDS-Client)、构建工具(waf)等
通信协议:MAVLINK
远程控制:地面站、机载计算机
四大系统软硬件平台的实现:HAL_ChibiOS,HAL_Linux,HAL_Empty, HAL_SITL;将具体应用和底层系统硬件进行了解耦,具体应用只需操作HAL接口类提供的硬件抽象接口,而当应用部署到具体的系统硬件平台时,具体系统硬件平台将实现该抽象接口。
class HAL提供run的接口,用来启动应用,同时给系统平台提供封装了setup方法和loop方法的FunCallbacks接口类,系统平台实现run方法,并且在run方法中回调setup和loop。应用的入口由AP_HAL_Main中的AP_HAL_MAIN系列的宏函数提供。
提供旋翼机代码框架以做参考: