ArduPilot代码解析之十 —Copter飞行模式和状态机

目的和范围

本文档描述了ArduCopter的飞行模式架构和状态机实现。它涵盖了飞行模式在控制回路中的定义、注册、切换和执行方式。这包括基Mode类、各个模式的实现、模式切换逻辑以及复杂模式(例如自动和引导模式)中的子模式状态机。


飞行模式架构

ArduCopter 采用分层飞行模式系统,每种模式都继承自一个公共Mode基类,并实现各自特定的行为。该系统支持约 30 种不同的飞行模式,每种模式都根据飞行员输入、GPS、传感器和任务指令以不同的方式控制飞行器。

模式类层次结构


模式枚举和注册

模式数

所有飞行模式均由枚举中定义的唯一编号标识Mode::Number

众数用于:

  • 参数存储(FLTMODE1通过FLTMODE6
  • MAVLink 通信(自定义模式字段)
  • 模式切换命令
  • 日志记录和遥测

模式注册和查找

每种模式都在类中实例化为一个单例对象Copter

模式实例 类型 目的
mode_stabilize ModeStabilize 手动稳定飞行
mode_acro ModeAcro 杂技速率控制
mode_althold ModeAltHold 高度保持
mode_auto ModeAuto 自主任务
mode_guided ModeGuided GCS/脚本控制
mode_loiter ModeLoiter GPS定位保持
mode_rtl ModeRTL 返回启动页面
... ... ...

mode_from_mode_num()函数将模式编号映射到模式对象:


模式切换状态机

模式切换逻辑已实现,Copter::set_mode()并且在允许模式更改之前包含多个验证检查。

模式转换流程

模式更改验证检查

模式切换期间(布防时)将执行以下检查:

查看 健康)状况 受影响的模式
节气门位置 油门必须低 手动油门模式
GPS定位 需要有效职位 requires_GPS() == true
海拔估算 所需有效海拔高度 非手动油门模式
转子运转 转子必须运转 仅限直升机
围栏恢复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timmy-uav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值