ardupilot开发

固件选择

ArduPilot是一个开源、无人驾驶的硬件和软件平台,广泛应用于多旋翼飞行器、固定翼飞机、陆地车辆和水面船只等。SpeedyBeeF405WING是一个特定型号的飞行控制器,它支持ArduPilot固件。

  • ardupilot: SpeedyBeeF405WING-antennatracker:==这是一个用于无线电天线跟踪的固件。==
  • ardupilot: SpeedyBeeF405WING-bootloader:==这是引导加载器,用于初始化硬件并加载主固件==。
  • ardupilot: SpeedyBeeF405WING-copter:==这是一个多旋翼飞行器的固件==。
  • ardupilot: SpeedyBeeF405WING-heli:==这是一个用于直升机的固件==。
  • ardupilot: SpeedyBeeF405WING-plane:==这是一个用于固定翼飞机的固件==。
  • ardupilot: SpeedyBeeF405WING-rover:==这是一个用于陆地车辆的固件==。
  • ardupilot: SpeedyBeeF405WING-sub:==这是一个用于水下潜艇或水面船只的固件==。

代码框架

Core libraries:

  • AP_AHRS - attitude estimation using DCM or EKF==(使用 DCM 或 EKF 进行态度估计)==
  • AP_Common - core includes required by all sketches and libraries==( 所有示例程序和库所需的核心包含文件)==
  • AP_Math - various math functions especially useful for vector manipulation==(各种数学函数,特别适用于向量操作)==
  • AC_PID - PID(Proportional-Integral-Derivative) controller library==(PID(比例-积分-微分)控制器库)==
  • AP_InertialNav - inertial navigation library for blending accelerometer inputs with gps and baro data==(混合加速度计输入与GPS和气压计数据的惯性导航库)==
  • AC_AttitudeControl - ArduCopter’s control library includes various functions of attitude, position control based on PID control.==(ArduCopter的控制库,包括基于PID控制的姿态和位置控制的各种函数)==
  • AC_WPNav - waypoint navigation library==(航点导航库)==
  • AP_Motors - multicopter and traditional helicopter motor mixing==(多旋翼和传统直升机电机混合控制)==
  • RC_Channel - a library to more convert pwm input/output from APM_RC into internal units such as angles==(将APM_RC的PWM输入/输出转换为角度等内部单位的库)==
  • AP_HAL, AP_HAL_ChibiOS, AP_HAL_Linux - libraries to implement the “Hardware abstraction layer” which presents an identical interface to the high level code so that it can more easily be ported to different boards.==(实现”硬件抽象层”的库,提供与高级代码相同的接口,以便更轻松地将其移植到不同的板子上)==

Sensor libraries:

  • AP_InertialSensor - reads gyro and accelerometer data, perform calibration and provides data in standard units (deg/s, m/s) to main code and other libraries(读取陀螺仪和加速度计数据,进行校准,并将数据以标准单位(deg/s、m/s)提供给主代码和其他库)
  • AP_RangeFinder - sonar and ir distance sensor interfaced library(超声波和红外距离传感器接口库)
  • AP_Baro - barometer interface library(气压计接口库)
  • AP_GPS - gps interface library(GPS接口库)
  • AP_Compass - 3-axis compass interface library(三轴磁罗盘接口库)
  • AP_OpticalFlow - optical flow sensor interface library(光流传感器接口库)

Other libraries:

  • AP_Mount, AP_Camera, AP_Relay - camera mount control library, camera shutter control libraries(摄像机云台控制库,用于控制摄像机云台的运动和姿态;摄像机快门控制库,用于控制摄像机的快门操作;继电器控制库,用于控制继电器的开关操作)
  • AP_Mission - stores/retrieves mission commands from eeprom(任务存储/检索库,用于将任务指令存储到EEPROM中并从EEPROM中检索任务指令)
  • AP_Buffer - a simple FIFO buffer for use with inertial navigation(简单的FIFO(先进先出)缓冲区库,用于与惯性导航系统配合使用)

The hal reference

The most commonly used hal functions are:

  • hal.console->printf() to print strings (打印字符串)
  • AP_HAL::millis() and AP_HAL::micros() to get the time since boot
  • hal.scheduler->delay() and hal.scheduler->delay_microseconds() to sleep for a short time
  • hal.gpio->pinMode(), hal.gpio->read() and hal.gpio->write() for accessing GPIO pins
  • I2C access via hal.i2c
  • SPI access via hal.spi

传感器通信

I2C

  • one master, many slaves possible(一个主人,多个从属可能)
  • a relatively simple protocol which is good for communicating over short-distances (i.e. less than 1m).(一种相对简单的协议,适用于短距离(即小于1m)的通信)
  • bus runs at 100kHz or 400kHz but the data rate is relatively low compared to other protocols.(总线以100kHz或400kHz运行,但与其他协议相比,数据速率相对较低)
  • only 4 pins are required (VCC, GND, SDA, SCL)(仅需 4 个引脚(VCC、GND、SDA、SCL))

SPI

  • one master, one slave(一个主人,一个从属)
  • 20Mhz+ speed meaning it is very fast especially compared to I2C(20Mhz+ 速度意味着它非常快,尤其是与 I2C 相比)
  • only works over short distances (10cm)(仅适用于短距离(10厘米))
  • requires at least 5 pins (VCC, GND, SCLK, Master-Out-Slave-In, Master-In-Slave-Out) + 1 slave select pin per slave(至少需要 5 个引脚(VCC、GND、SCLK、MOSI、MISO)+ 每个从站 1 个从选择引脚)

Serial / UART

  • one master, one slave(一个主人,一个从属)
  • character based protocol good for communicating over longer distances compared to I2C and SPI (i.e. 1m)(与 I2C 和 SPI(即 1m)相比,基于字符的协议适合在更长的距离上进行通信)
  • relatively fast at 57Kbps ~ 1.5Mbps(相对较快,57Kbps ~ 1.5Mbps)
  • at least 4 pins required (VCC, GND, TX, RX), plus 2 optional pins (Clear-To-Send, Clear-To-Receive(至少需要 4 个引脚(VCC、GND、TX、RX),外加 2 个可选引脚(清除发送、清除接收))

CAN bus with UAVCAN

  • multimaster bus, any node can initiate transmission of data when they need to(多主站总线,任何节点都可以在需要时启动数据传输)
  • packet based protocol for very long distances(基于数据包的超长距离协议)
  • high speed, typically 1 Mb (however only 50% of the bus bitrate can really be used without major collisions)(高速,通常为 1 Mb(但是只有 50% 的总线比特率可以真正使用而不会发生重大碰撞))
  • at least 3 pins required (GND, CAN HI, CAN LO). Optionally VCC can be used to power nodes(至少需要 3 个引脚(GND、CH、CL)。可选 VCC 可用于为节点供电)
  • point-to-point topology. Star or stubs topolgy is not advised(点对点拓扑。不建议使用星形或存根拓扑)
  • termination is required at each end of the bus(总线两端都需要端接)

ArduPilot 线程

任务的调度

  • idle task - called when there is nothing else to run(空闲任务 - 在没有其他要运行的任务时调用)
  • init - used to start up the system(init - 用于启动系统)
  • px4io - handle the communication with the PX4IO co-processor(PX4IO - 处理与 PX4IO 协处理器的通信)
  • hpwork - handle thread based PX4 drivers (mainly I2C drivers)(hpwork - 处理基于线程的 PX4 驱动程序(主要是 I2C 驱动程序))
  • lpwork - handle thread based low priority work (eg. IO)(处理基于线程的低优先级工作(例如。IO))
  • fmuservo - handle talking to the auxiliary PWM outputs on the FMU(处理与 FMU 上的辅助 PWM 输出的通信)
  • uavcan - handle the uavcan CANBUS protocol(处理 uavcan CANBUS 协议)

AP_Scheduler系统

AP_Scheduler库用于划分 时间在主车线程内,同时提供一些简单的 控制每个操作使用多少时间的机制(称为 AP_Scheduler中的“任务”)

它是一个表驱动的调度程序,每种类型都有一个 AP_Scheduler::任务表

static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = {
{ ins_update, 1, 1000 },
{ one_hz_print, 50, 1000 },
{ five_second_call, 250, 1800 },
};
每个函数名称后的第一个数字是调用频率,在 由 ins.init() 调用控制的单位。对于此示例,草图 ins.init() 使用 RATE_50HZ,因此每个调度步骤为 20 毫秒。这意味着 ins_update() 调用每 20ms 进行一次,one_hz_print() 函数 每 50 次调用一次(即每秒一次),并且 five_second_call() 每 250 次调用一次(即每 5 秒/次)。

RC Input and Output

AP_HAL RCInput object

首先要理解的是可作为 hal.rcin 使用的 AP_HAL RCInput 对象。它提供了对当前在板上接收到的通道值的低级访问。返回的值是以微秒为单位的 PWM 值。

前往 libraries/AP_HAL/examples/RCInput/RCInput.cpp 示例文件,尝试在您的开发板上运行该示例。试着移动遥控器上的摇杆,并检查输出中的值是否正确变化。

AP_HAL RCOutput object

AP_HAL RCOutput 对象(可作为 hal.rcout 使用)提供了对所有输出通道的低级控制。其实现方式非常依赖于具体的开发板,可能涉及芯片上的定时器编程、I2C 外设或通过协处理器(如 PX4IO 微控制器)进行输出。

前往 libraries/AP_HAL/examples/RCOutput/RCOutput.cpp 示例文件。您会看到该示例只是设置了所有通道,在几秒钟的时间内将舵机从最小值到最大值摆动。连接一些舵机到您的开发板上,然后进行测试,确保它对您而言可以正常工作。

ArduPilot File Systems

ArduPilot使用多个文件系统来使用外部SD卡或自动驾驶仪闪存存储和检索数据

外部SD卡:

APM:基目录

LOGS:飞行日志存储在此处(请参阅Mission Planner中的下载和分析数据日志)

TERRAIN:地形数据存储在此处(请参阅地形跟随)

STRNG_BAK:每次启动时,参数数据都会备份到此处 scripts:LUA脚本存储在此处(请参阅Lua脚本)

代码架构

1.afs_copter.cpp/afs_copter.h高级失效保护
2.AP_Arming.cpp/AP_Arming.h解锁
3.AP_Rally.cpp/AP_Rally.h集结地
4.AP State.cpp状态转化
5.APM Config_mavlink hil.h/APM_Config.h配置信息
6.ArduCopter.cpp顶层逻辑文件
7.Attitude.cpp姿态控制
8.autoyaw.cpp自动航线规划
9.avoidance adsb.cpp/avoidance adsb.h避障
10.baro_ground_effect.cpp气压高度计地效
11.capabilities.cpp初始化一些配置
12.commands.cpp位置信息更新需求
13.compassmot.cpp消除磁罗盘对电机的影响
14.config.h配置信息 (勿修改)
15Copter.cpp/Copter.h顶层定义
16.crash_check.cpp坠毁监测
17.defines.h定义
18.ekf check.cpp扩展卡尔曼滤波器检测
19.esc calibration.cpp电调控制
20.events.cpp事件
21.failsafe.cpp失控保护
22.fence.cpp地理围栏
23.GCS Copter.h地面站与多旋翼通讯有关
24.GCS_Mavlink.cpp/GCS_Mavlink.h地面站通讯协议
25.heli.cpp旋翼的变量和函数
26.inertia.cpp获取惯性信息
27.land_detector.cpp降落检测
28.landing_gear.cpp起落架
29.leds.cppLED灯控制
30.Log.cpp日志
31.make.inc放置头文件
32.mode_acro_heil.cpp比率控制模式 (手动)
33.mode_acro.cpp比率控制模式 (完全手动角速率/手动油门)
34.mode_althold.cpp定高模式
35.mode_auto.cpp自动模式 (任务规划)
36.mode_autoune.cpp自动模式 (自动调整俯仰和滚转)
37.mode_avoid_adsb.cpp避障模式
38.mode_brake.cpp制动模式 (没有驾驶员输入)
39.mode_circle.cpp绕圈模式
40.mode_drift.cpp漂移模式
41.mode_flip.cpp翻转模式
42.mode_flowhold.cpp跟随模式 (光流位置/不带测距仪)
43.mode_follow.cpp 跟随模式 (车辆或地面站)
44.mode_guided_nogps.cpp引导模式 (无GPS)
45.mode_guided.cpp引导模式
46.mode_land.cpp着陆模式
47.mode_loiter.cpp悬停模式
48.mode_poshold.cpp位置保持模式 (类似loiter/何控制偏航角度)
49.mode_rtl.cpp返航模式 (发射点)
50.mode_smart_rtl.cpp返航模式 (家)
51.mode_sport.cpp运动模式
52.mode_stablize_heil.cpp自稳模式
53.mode_stablize.cpp自稳模式
54.mode_throw.cpp抛飞模式 (无输入)
55. mode. ( . \mathrm{pp} / \mathrm{mode} ). h模式的基类和头文件
56.motor_test.cpp电机测试
57.motor.cpp电机控制
58.navigation.cpp导航参数计算
59.Parmeters.cpp/Parmeters.h参数表
60.position_vector.cpp向量位置坐标
61.precision_landing.cpp精准着陆
62.radio.cpp无线电
63.sensors.cpp传感器控制
64.setup.cpp 初始化设置
65.swiches.cpp模式转换
66.system.cpp系统
67.takeoff.cpp起飞
68.terrain.cpp地形
69.toy_mode.cpp/toy_mode.h玩具模式 (简单与用户交互)
70.tuning.cppi调节参数
71.UserCode.cpp用户自定义代码
72.UserVariables.h用户自定义变量
73.version.cpp/version.h版本号

manual modes(手动模式)

autonomous modes(自稳模式)

Copter Attitude Control

姿态控制

The diagram below shows the code path followed from pilot input down to pwm output.

Motors Library

AC_AttitudeControl_Multi::rate_controller_run()方法中:

  • 该方法从姿态估计系统中获取最新的陀螺仪读数。
  • 根据当前陀螺仪读数与目标角速度之间的差异,计算出滚转(roll)、俯仰(pitch)和偏航(yaw)指令。
  • 然后,使用_motors.set_roll()_motors.set_pitch()_motors.set_yaw()方法将这些滚转、俯仰和偏航指令传递给电机库。

AP_Motors_Class.h文件中:

  • 定义了set_roll()set_pitch()set_yaw()set_throttle()方法,用于设置滚转、俯仰、偏航和油门的输入值。
  • 滚转、俯仰和偏航输入的范围是-1到+1,而油门输入的范围是0到+1。
  • 电机库负责将这些高级输入转换为单独的电机和舵机输出。
  • 限制标志存储在AP_Motors_Class::limit变量中,用于防止姿态控制器和油门控制器中的“积分项”积累过多。这些标志指示是否已达到滚转、俯仰、偏航和油门的限制。

APM固件二次开发

ardupliot代码框架

AntennaTracker、ArduCopter、ArduPlane、ArduSub:这些文件包含特定于飞行器类型的代码。

例如,ArduCopter负责处理多旋翼飞行器的代码,ArduPlane负责固定翼飞行器的代码,ArduSub负责潜水器的代码,而AntennaTracker则负责地面站天线追踪系统的代码。

  • AC_AttitudeControl: 用于飞行器姿态控制的库。
  • AC_Autorotation: 用于处理直升机自旋降落(Autorotation)的库。
  • AC_AutoTune: 用于自动优化飞行器控制增益的自动调谐库。
  • AC_Avoidance: 用于避免与障碍物碰撞的避障库。
  • AC_CustomControl: 用于自定义控制的库。
  • AC_Fence: 地理围栏(Geofence)库,用于设置飞行区域的边界。
  • AC_InputManager: 输入管理库,处理和管理来自遥控器的输入信号。
  • AC_PID: PID控制库,实现了比例-积分-微分(PID)控制算法。
  • AC_PrecLand: 精确降落库,用于精确控制飞行器的降落。
  • AC_Sprayer: 喷雾器库,用于控制飞行器上的喷雾装置。
  • AC_WPNav: 路径导航库,用于管理飞行器的路径导航。
  • AP_AccelCal: 加速度计校准库,用于校准飞行器的加速度计。
  • AP_ADC: 模拟-数字转换器(ADC)库,用于处理飞行器上的模拟信号。
  • AP_ADSB: Automatic Dependent Surveillance-Broadcast(ADSB)库,用于处理飞行器的ADSB信号。
  • AP_AdvancedFailsafe: 高级故障保护库,用于处理飞行器的故障保护逻辑。
  • AP_AHRS: 姿态和航向参考系统(AHRS)库,利用各种传感器的数据计算飞行器的姿态和方位。
  • AP_Airspeed: 空速库,用于处理和管理飞行器的空速数据。
  • AP_AIS: Automatic Identification System(AIS)库,用于处理船舶的自动识别系统信号。
  • AP_Arming: 武装库,用于管理飞行器的启动和停止。
  • AP_Avoidance: 避障库,用于避免与障碍物碰撞。
  • AP_Baro: 气压计库,用于处理和管理飞行器的气压数据。
  • AP_BattMonitor: 电池监控库,用于监控飞行器的电池状态。
  • AP_Beacon: 信标库,用于处理和管理飞行器的信标数据。
  • AP_BLHeli: BLHeli电调库,用于控制支持BLHeli协议的电调。
  • AP_BoardConfig: 用于处理和管理飞行控制板配置的库。
  • AP_Button: 用于处理和管理飞行器上的按钮输入的库。
  • AP_Camera: 用于处理和管理飞行器上的相机的库。
  • AP_CANManager: Controller Area Network(CAN)管理器库,用于处理和管理CAN接口。
  • AP_CheckFirmware: 用于检查固件更新的库。
  • AP_Common: 提供通用功能和定义的库。
  • AP_Compass: 用于处理和管理飞行器上的磁罗盘数据的库。
  • AP_CSVReader: 用于读取CSV文件的库。
  • AP_CustomRotations: 用于管理自定义旋转的库。
  • AP_DAL: Data Abstraction Layer(DAL)库,提供数据抽象层服务。
  • AP_DDS: 提供Data Distribution Service(DDS)的库,它是一种实时数据分发服务。
  • AP_Declination: 用于计算地磁倾斜角的库。
  • AP_Devo_Telem: 用于处理和管理Devention协议遥测数据的库。
  • AP_DroneCAN: 提供DroneCAN功能的库,DroneCAN是一种无人机CAN协议。
  • AP_EFI: Electronic Fuel Injection(EFI)库,用于控制和管理电子燃油喷射系统。
  • AP_ESC_Telem: 提供电子速度控制器(ESC)遥测的库。
  • AP_ExternalAHRS: 用于处理外部AHRS设备的库。
  • AP_FETtecOneWire: 提供对FETtec OneWire ESC的支持的库。
  • AP_Filesystem: 提供文件系统操作的库。
  • AP_FlashStorage: 提供Flash存储操作的库。
  • AP_Follow: 提供”跟随我”功能的库。
  • AP_Frsky_Telem: 提供对FrSky遥测协议的支持的库。
  • AP_InternalError: 用于处理和报告内部错误的库。
  • AP_IOMCU: 输入/输出微控制器单元的库,用于处理各种I/O任务。
  • AP_IRLock: 用于处理红外锁定系统(通常用于精确着陆)的库。
  • AP_JSButton: 用于处理和管理飞行器上的按钮输入的库。
  • AP_KDECAN: 提供对KDE Direct UAS CAN总线ESC的支持的库。
  • AP_L1_Control: 提供L1航迹跟踪控制的库。
  • AP_Landing: 用于处理和管理飞行器的着陆过程的库。
  • AP_LandingGear: 用于控制和管理飞行器上的起落架的库。
  • AP_LeakDetector: 用于检测潜水航行器的漏水情况的库。
  • AP_Logger: 提供日志记录功能的库。
  • AP_LTM_Telem: 提供LTM遥测协议的支持的库。
  • AP_Math: 提供各种数学函数和算法的库。
  • AP_Menu: 提供菜单管理功能的库。
  • AP_Mission: 提供飞行任务管理功能的库。
  • AP_Module: 用于支持可加载模块的库。
  • AP_Motors: 提供电机控制功能的库。
  • AP_Mount: 提供对飞行器上装置(如照相机云台)的控制的库。
  • AP_MSP: 提供MultiWii Serial Protocol (MSP)的支持的库。
  • AP_NavEKF: 提供扩展卡尔曼滤波器(EKF)的库,用于态势估计。
  • AP_NavEKF2: 提供第二版扩展卡尔曼滤波器的库。
  • AP_NavEKF3: 提供第三版扩展卡尔曼滤波器的库。
  • AP_Navigation: 提供导航功能的库。
  • AP_NMEA_Output: 提供NMEA输出功能的库,通常用于与其他设备(如GPS或图形显示器)通信。
  • AP_Notify: 提供状态通知功能的库,例如LED灯或蜂鸣器。
  • AP_OLC: 提供在线竞争(Online Contest, OLC)飞行规划功能的库,常用于滑翔飞行。
  • AP_ONVIF: 提供ONVIF协议的支持的库,ONVIF是一种网络视频接口标准。
  • AP_OpenDronelD: 提供开放无人机识别系统的支持的库。
  • AP_OpticalFlow: 提供光流传感器的支持的库,光流传感器常用于无人机的定位和导航。
  • AP_OSD: 提供了On-Screen Display(屏幕显示)功能,用于将飞行数据显示在视频传输中。
  • AP_Parachute: 用于控制和操作无人机上的降落伞系统。
  • AP_Param: 提供了参数管理和配置功能,用于管理飞行控制器中的各种参数。
  • AP_PiccoloCAN: 用于与PiccoloCAN协议兼容的设备进行通信。
  • AP_Proximity: 提供了飞行器周围环境感知和障碍物检测的功能。
  • AP_Radio: 用于与无人机上的无线电通信设备进行通信和控制。
  • AP_Rally: 提供了航点集合和任务路径功能,用于无人机的航点导航。
  • AP_RAMTRON: 用于与RAMTRON系列设备进行通信和数据存储。
  • AP_RangeFinder: 用于与测距仪传感器进行通信和测量距离。
  • AP_RCMapper: 提供了遥控器通道映射和配置的功能。
  • AP_RCProtocol: 提供了与不同遥控器协议兼容的功能,用于接收和解码遥控器信号。
  • AP_RCTelemetry: 用于与遥控器进行双向的遥测数据交换。
  • AP_Relay: 提供了继电器控制和操作的功能。
  • AP_RobotisServo: 用于与Robotis系列舵机进行通信和控制。
  • AP_ROMFS: 提供了只读文件系统的功能,用于存储固件和其他只读数据。
  • AP_RPM: 用于测量和监控发动机的转速。
  • AP_RSSI: 用于测量和监控遥控信号强度。
  • AP_RTC: 提供了实时时钟的功能,用于精确的时间记录和时间相关的操作。
  • AP_SBusOut: 用于通过S.Bus协议向外部设备发送信号。
  • AP_Scheduler: 提供了任务调度和时间管理的功能。
  • AP_Scripting: 提供了脚本编程和执行的功能,用于自定义行为和逻辑。
  • AP_SerialLED: 用于控制和操作串口LED设备。
  • AP_SerialManager: 用于管理和控制串口通信。
  • AP_ServoRelayEvents: 提供了舵机和继电器事件触发的功能。
  • AP_SmartRTL: 提供了智能返航和自动返航功能。
  • AP_Soaring: 提供了滑翔和热气球飞行的功能。
  • AP_Stats: 提供了飞行数据统计和分析的功能。
  • AP_TECS: 提供了自动高度和速度控制的功能。
  • AP_TempCalibration: 用于温度校准和补偿。
  • AP_TemperatureSensor: 提供了温度传感器的功能和接口。
  • AP_Terrain: 提供了地形数据的获取和处理功能。
  • AP_Torqeedo: 用于与Torqeedo电动船驱动系统进行通信和控制。
  • AP_Tuning: 提供了飞行控制器参数调优和优化的功能。
  • AP_Vehicle: 提供了飞行器的基本控制和状态管理功能。
  • AP_VideoTX: 用于与视频传输设备进行通信和控制。
  • AP_VisualOdom: 提供了视觉里程计的功能,用于无人机的定位和导航。
  • AP_Volz_Protocol: 用于与Volz协议兼容的设备进行通信。
  • AP_WheelEncoder: 用于读取和处理轮式编码器的数据,用于无人车的定位和测速。
  • AP_Winch: 提供了绞盘控制和操作的功能。
  • AP_WindVane: 用于读取和处理风向传感器的数据。
  • APM_Control: APM代表ArduPilot Mega,提供了飞行控制器的基本控制功能。
  • AR_Motors: AR代表ArduRover,用于无人车电机控制和操作的功能。
  • AR_WPNav: AR代表ArduRover,WPNav代表航点导航,提供了无人车的航点导航功能。
  • doc: 包含文档、说明和帮助文件。
  • Filter: 提供了各种滤波算法,用于传感器数据的滤波和平滑。
  • GCS_MAVLink: GCS代表地面控制站,MAVLink是一种无人机通信协议,用于与地面控制站之间的通信和数据交换功能。
  • PID: 提供了PID控制器的实现,用于控制飞行器的稳定性和导航。
  • RC_Channel: 用于接收和处理遥控器通道数据。
  • SITL: SITL代表Software-In-The-Loop,提供了软件在环仿真的功能,用于在计算机上模拟飞行控制器的行为和环境。
  • SRV_Channel: 用于接收和处理伺服通道数据。

ArduPlane主函数

任务列表

SCHED_TASK(read_radio, 50, 100, 6) //任务名,执行频率HZ,任务执行最大时间us,任务优先级(0-255,越低优先级越高)