PX4-Autopilot代码解析(12)-飞行模式管理器

PX4项目学习::(四)中间件::任务管理与调度 Work queue tasks: 该模块在共享工作队列上运行,与队列中的其他模块共享相同的堆栈和工作队列线程优先级。Tasks: 模块在自己的任务中运行,具有自己的堆栈和进程优先级。 阅读详情

飞行模式管理器是 PX4 的核心模块,负责协调飞行任务并生成用于位置控制的轨迹设定点。它作为指挥官模块和导航器模块的高级导航命令与低级位置控制器之间的主要接口。该类根据FlightModeManager飞行器状态选择和管理适当的飞行任务,然后发布trajectory_setpoint_s消息供位置控制模块使用。

架构概述

FlightModeManager系统架构

该类FlightModeManager通过基于工作队列的执行模型来协调飞行任务。主要执行发生在方法中,该方法由50 Hz 的更新Run()触发。vehicle_local_position

操作周期

飞行模式管理器以连续循环的方式运行:

  1. 监控车辆状态更新(位置、状态、控制模式)
  2. 根据当前飞行器状态确定应激活哪个飞行任务
  3. 如果需要,启动适当的飞行任务
  4. 处理任何车辆命令
  5. 调用活动任务来生成轨迹设定点
  6. 发布位置控制器生成的设定点

每次迭代都会在vehicle_local_position通过 接收更新时发生_vehicle_local_position_sub,根据 20ms 间隔设置限制为 50 Hz。

FlightModeManager::Run() 方法执行流程

飞行任务层级

飞行任务以分层继承结构进行组织,允许专门的行为,同时共享通用功能。

飞行任务选择

飞行模式管理器根据当前飞行器状态选择合适的飞行任务,主要由指挥官模块提供的导航状态决定。

任务选择逻辑如下:

start_flight_task() 任务选择逻辑

任务激活和停用

在飞行任务之间切换时,会发生以下序列:

  1. 当前任务(如果有)被停用并销毁
  2. 新任务已实例化
  3. 该activate()方法使用最后一个轨迹设定点进行调用
  4. 任务初始化通过以下方式验证updateInitialize()

如果任何步骤失败,系统将退回到故障安全任务或禁用所有任务。

任务切换实现

实际switchTask()方法通过保留先前的轨迹设定点并确保适当的清理来处理任务转换:

FlightTaskError FlightModeManager::switchTask(FlightTaskIndex new_task_index)
{
    // switch to the running task, nothing to do
    if (new_task_index == _current_task.index) {
        return FlightTaskError::NoError;
    }

    // Save current setpoints for the next FlightTask
    trajectory_setpoint_s last_setpoint = FlightTask::empty_trajectory_setpoint;

    if (isAnyTaskActive()) {
        last_setpoint = _curr
PX4代码分析-(四) FlightModeManager代码分析 Flight_mode模块从字面意思是飞行模式,但是我觉得可以理解为制导模块。该模块和navigator模块构成了PX4的导航和制导功能。由代码结构可以看出,flight_mode_manager模块是由一个FlightModeManager主函数及多个不同的tasks组成的。跟navigator模块不一样的是,navigator中的多个任务模式之间是独立,功能不复用。而flight_mode中的task之间很多都是重复的,通过继承的方式实现功能的复用。 阅读详情

相关推荐

PX4-Autopilot代码解析(13)-车辆控制

本文档介绍了PX4飞行控制系统中不同机型的控制架构与实现方法。系统采用级联控制回路将轨迹设定值转换为执行器指令,包含多旋翼、固定翼和垂直起降三种机型控制模块。多旋翼采用PID级联控制(100Hz),固定翼使用TECS能量管理系统,垂直起降则结合两者优势。控制核心库包括位置控制、TECS算法、航点轨迹平滑和起飞管理等功能模块,通过uORB主题与飞行管理系统集成,支持位置、速度、加速度和姿态等多种设定点输入模式。

rainercool的专栏 1707

PX4-Autopilot代码解析(9)- 飞行控制系统

PX4飞行控制系统(FCS)采用分层架构设计,由指挥官(Commander)、导航器(Navigator)和飞行模式管理器三大核心组件构成。指挥官负责状态管理、布防/撤防和模式转换;导航器处理高级导航功能如任务执行和RTL返航;飞行模式管理器则根据当前状态选择合适的飞行任务生成轨迹设定点。系统通过定义明确的导航状态和数据结构实现组件间通信,支持多种飞行模式的转换与指令处理,为飞行器提供从高级任务规划到低级控制的无缝衔接。

rainercool的专栏 1188

PX4架构详细介绍

详细的Pixhawk4源码架构介绍,里面以截图的形式,包含有根目录下二次开发的文件说明!

400G光模块测试全攻略:从PCS层到CMIS合规的避坑指南

本文为网络设备测试工程师和光通信研发人员提供了一份详尽的400G光模块测试实战指南。文章深入剖析了从PCS层信号完整性、FEC容限到CMIS管理接口合规性测试的全流程,并分享了ANLT协议分析、SerDes眼图调试以及系统级流量压力测试中的核心技巧与常见避坑点,旨在帮助读者构建一套高效、精准的测试体系,确保高速光模块的可靠性与性能。

weixin_29300931的博客 209

Eplan P8自动线号生成全攻略:从电位定义点到连接编号的完整流程

本文详细解析了Eplan P8自动线号生成的全流程,从电位定义点的创建配置到连接编号的标准化管理,帮助电气设计人员提升图纸规范性和工作效率。重点介绍了自动编号方案的定义与调整技巧,以及企业级标准化实施建议,是掌握Eplan P8自动线号功能的实用指南。

weixin_29254029的博客 508

五大经典遥感数据集对比:LoveDA、Potsdam、Toronto、Vaihingen、Massachusetts Roads选哪个?

本文深度对比了LoveDA、Potsdam、Vaihingen、Toronto和Massachusetts Roads五大经典遥感数据集。针对城市监测、道路提取、土地分类等不同任务,从分辨率、标注质量、数据规模及场景多样性等核心维度进行分析,为研究者根据项目目标、硬件条件与应用场景选择最合适的遥感数据集提供决策指南。

weixin_29057065的博客 236

2d游戏地图编辑器_[U3D]基于MarchingCubes实现的War3Editor 地表/悬崖编辑器

花了几天时间研究清楚Marching cubes后,发现这个方法是一个非常适用于地图编辑,网格编辑,procedural 生成的工具。最大的优点有着较好的边缘,表面处理。然后我用U3D写了一个悬崖/地表的编辑器。其中使用到了Marching Cubes的2.5D,2D两种降维的方法。talk is cheap,让我看效果!DemoEditor展示https://www.zhihu.com/vide...

weixin_42504649的博客 1178

使用Matlab进行IEEE 33节点潮流计算的NR法实现详解及应用实例

IEEE 33节点系统是一个标准的配电系统模型,广泛用于学术研究和工程应用。该系统由33个节点和37条线路组成,结构复杂,具有代表性。其潮流计算结果可用于验证各种潮流计算方法的准确性和效率。NR法是一种基于迭代求解的潮流计算方法,通过不断迭代求解非线性方程组,直到达到预定的收敛条件。NR法具有收敛速度快、计算精度高的优点,适用于大规模复杂电力系统的潮流计算。

m0_57781768的博客 2070

下采样优化实战:用ADown显著提升YOLOv11的多尺度特征保持能力

ADown 以“可编程梯度信息+多分支特征融合”打破了传统下采样的性能壁垒,为 YOLOv11 带来了多尺度特征的精准传递能力。从原理到代码集成,本教程已为你铺就了一条“小目标检测精度跃升”的实战路径。现在就动手尝试吧——当你看到模型对极小目标也能精准识别,且特征图细节完整时,你会明白这份技术探索的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在下采样领域的边界。

FJN110的博客 420

室内温度控制仿真(Simulink+PLC)

本篇博客将会带领大家解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法

RXXW_Dor的博客 3458

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: PX4-Autopilot代码解析(11)-导航模块
下一篇: PX4-Autopilot代码解析(13)-车辆控制
timmy-uav
博客等级 码龄26年 526粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

timmy-uav

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

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

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

打赏作者

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

抵扣说明:

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

余额充值