PX4之飞行控制框架

news2025/7/12 23:58:01

PX4的飞行控制程序通过模块来实现,与飞控相关的模块主要有commander,navigator,pos_control,att_control这几个,分别可以在src/modules目录中找到。
commander - 指令/事件处理模块,处理指令、遥控器输入和各种事件,设定飞行器状态和控制模式
navigator - 导航模块,根据指定的任务输出导航轨迹
pos_control - 位置控制,根据指定的轨迹或者位置实施位置控制,输出飞行器目标姿态
att_control - 姿态控制,控制飞行器姿态,使飞行器达到预期的速度/加速度等

整体的控制框架大致如下:

其中,commander用于事件的处理,事件的类型可以包括遥控操作、用户指令、状态判断等。navigation, pos control, att control三个模块依次实现层级的飞行控制,从飞行轨迹到电机输出。每一层的输出是下一个环节的输入值,比如navigation的输入为设定的轨迹,输出为位置/速度的设定值,作为pos control的输入,pos control的输出为姿态的设定值,作为att control的输入,att control实现姿态控制,它的输出为电机的控制信号。commander处理信息和事件时会更改飞行器状态(vehicle status)和控制模式(control modes)的值,从而来确定控制系统的运行模式,比如手动控制、位置控制、定高控制、自动起飞等。

 1. commander
由commander.cpp实现,它的主要作用是对事件/消息做出响应,并根据事件/消息控制飞行器的状态和飞行模式,分析commander.cpp的源代码,它的输入输出如下图

其中椭圆形表示模块,在程序中对应具体的module实现,方形表示信息,通过orb_publish,orb_subscribe等函数发布和订阅。commander的主要输入包括遥控器输入(manual_control_setpoint)、飞行器命令(vehicle_command)和着陆判断(vehicle_land_detect)、电池状态(battery_status、system_power)等信息。输出主要有飞行器状态(vehicle_state)、飞行器控制模式(vehicle_control_mode)等信息。其中黄色部分为最主要输出信息。

 2 navigator
navigator主要用来实现导航功能,即根据用户指定的任务给出飞行器需要实现的轨迹。它的消息输入输出结构如下图

主要的输入为位置信息(vehicle_global_position,vehicle_local_position)、飞行器命令和任务指令(vehicle_command,mission),飞行器状态(vehicle_status)。输出为位置设定值(position_setpoint_triplet)和任务结果(mission_result)。

 3 pos_control
pos_control主要用来实现位置/速度控制,根据设定的位置/速度输出需要实现飞行器姿态。它的消息输入输出结构如下图

主要的输入信息为飞行器状态(vehicle_status),控制模式(vehicle_control_mode),位置设定值(position_setpoint_triplet)等,主要的输出为飞行器的姿态设定值(vehicle_attitude_setpoint),用于后续的姿态控制。

 4 att_control
att_control主要用来实现姿态控制,即控制飞行器达到指定的姿态,飞行器的速度、位置等状态都通过姿态控制来实现。它的消息输入输出结构如下图

它的主要输入信息为飞行器状态(vehicle_status),控制模式(vehicle_control_mode),姿态设定值(vehicle_attitude_setpoint),手动控制输入(manual_control_setpoint)等。它的输出主要为电机控制信号(actuators_control_0)。

 5 整体控制框架

整体控制框架如上图所示,里面主要包含commander,navigator,pos_control,att_control等模块,主要的逻辑如前面所述,navigator、pos_control、att_control形成串级的控制系统,每一层的输出为下一层的输入。commander作为主要的调度方,接收各种信息和事件,主要通过vehicle_status和control_mode这两个变量来控制三个控制模块的运作。从而使飞行器实现不同模式的控制。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新C++(9):谈谈,翻转那些事儿

"相信羁绊,相信微光,相信一切无常。"一、AVL树翻转那些事儿(1)什么是AVL树?在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。…

网上插画教学哪家质量好,汇总5大插画培训班

网上插画教学哪家质量好?给大家梳理了国内5家专业的插画师培训班,最新五大插画班排行榜,各有优势和特色! 一:国内知名插画培训机构排名 1、轻微课(五颗星) 主打课程有日系插画、游戏原画、古风插…

Tencent OS下逻辑卷(LVM)创建和扩容

测试环境是一个虚拟机,原配置1个虚拟盘。 创建4个虚拟盘,每盘2G并挂载在虚拟主机上,启动虚拟主机开始测试。 LVM英文是Logical Volume Manager,直接翻译为逻辑卷管理。 这种磁盘管理模式比较灵活,在磁盘空间不足的时…

深入浅出C++ ——容器适配器

文章目录一、容器适配器二、deque类简介1. deque的原理2. deque迭代器3. deque的优点和缺陷4. 为什么选择deque作为stack和queue的底层默认容器一、容器适配器 适配器的概念 适配器是STL六大核心组件之一,它是一种设计模式,该种模式是将一个类的接口转换…

大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s 📚️Reference: IoT 边缘计算系列文章 HashiCorp 解决方案 - Nomad Docker 简介 Nomad: 一个简单而灵活的调度器和编排器,…

网络工程课(二)

ensp配置vlan 一、配置计算机ip地址和子网掩码 二、配置交换机LSW1 system-view [Huawei]sysname SW1 [SW1]vlan batch 10 20 [SW1]interface Ethernet0/0/1 [SW1-Ethernet0/0/1]port link-type access 将接口设为access接口 [SW1-Ethernet0/0/1]port default vlan 10 [SW1-E…

【MyBatis】源码学习 04 - 从 MapperMethod 简单分析一条 SQL 的映射操作流程

文章目录前言参考目录学习笔记1、测试代码说明2、binding 包的主要功能3、获取 Mapper 接口实例过程4、SQL 语句执行流程4.1、方法调用器4.2、MapperMethod 绑定方法4.2.1、SqlCommand4.2.2、MethodSignature4.3、MapperMethod#execute前言 本文内容对应的是书本第 13 章的内容…

【亲测2022年】网络工程师被问最多的面试笔试题

嗨罗~大家好久不见,主要是薄荷呢主业还是比较繁忙的啦,之前发了一个面试题大家都很喜欢,非常感谢各位大佬对薄荷的喜爱,嘻嘻然后呢~薄荷调研了身边的朋友和同事,发现我们之前去面试,写的面试题有很多共同的…

C++ Effictive 第6章 继承与面向对象设计 笔记

继承意味着"is-a"。如果B继承自A,那么B is-a A。 子类声明与父类函数同名的函数时,父类函数会被遮掩。 使用using Base::func(args...);父类所有func的重载函数都在子类中被声明。此举下,如果子类函数与父类函数参数也一…

不要对chatgpt过度反思 第一部分

最近一段时间,chatgpt很热,随意翻一些文章或视频,一些非常整齐一致的怪论,时不时都会冒出来。 为什么这种革命性创新又出现美国? 为什么我国互联网只会电商,没有创新? 为什么我们做不出来&…

列表推导式_Python教程

内容摘要 Python中存在一种特殊的表达式,名为推导式,它的作用是将一种数据结构作为输入,再经过过滤计算等处理,最后输出另一种数据结构。根据数据结构的不同会被分为列表推导式、 文章正文 Python中存在一种特殊的表达式&#x…

股票、指数、快照、逐笔... 不同行情数据源的实时关联分析应用

在进行数据分析时经常需要对多个不同的数据源进行关联操作,因此在各类数据库的 SQL 语言中均包含了丰富的 join 语句,以支持批计算中的多种关联操作。 DolphinDB 不仅通过 join 语法支持了对于全量历史数据的关联处理,而且在要求低延时的实时…

Qt信号与槽使用方法总结

前言 在图形界面编程中QT是为首选,组件之间如何实现通信是核心的技术内容。Qt 使用了信号与槽的机制,非常的高效、简单、易学,方便开发者的使用。本文详细的介绍了Qt 当中信号与槽的概念,并演示了各种信号与槽的连接方式。 什么…

你知道 GO 中的 协程可以无止境的开吗?

GO语言天生高并发的语言&#xff0c;那么是不是使用 go 开辟协程越多越好的&#xff0c;那么在 go 里面&#xff0c;协程是不是可以开无限多个呢&#xff1f; 那么我们就一起来看看尝试写写 demo 吧 尝试开辟尽可能多的 协程 写一个 demo &#xff0c;循环开 1 << 31 …

自由变化,功能增强,适配优化—V6.0.2版本发布

本次更新&#xff1a;经过两个月的细节打磨&#xff0c; V6.0.2版本发布&#xff0c;自由变化&#xff0c;功能增强&#xff0c;适配优化&#xff1b;新版本增加了超级弹窗&#xff0c;可以多窗口并存&#xff1b;增加了编号组件&#xff0c;可以调用编号组件库&#xff0c;自动…

Artiifact分析HSV数据

Artiifact分析HSV数据1 下载Artiifact分析工具2 安装软件后打开软件3 分析1 Extract IBIS from ECG data2 Detect and process artifact in IBI data3 Analse HRVARTiiFACT&#xff0c;这是一种用于处理心电图和 IBI 数据的软件工具。图形用户界面中提供了自动和手动伪影检测和…

JavaEE|TCP/IP协议栈之TCP协议端格式详解

文章目录一、对TCP协议的感性认识简介特点二、TCP的报文结构概览16位端口号和16位目的端口号32位序号和32位确认序号4位首部长度保留位&#xff08;6位&#xff09;6个标志位16位窗口大小16位校验和16位紧急指针40位头部选项&#xff08;option&#xff09;参考一、对TCP协议的…

【新品发布】三颗国产新“芯”硬核亮相——1颗电机驱动IC+2颗电源管理IC

拓尔“芯”常态&#xff0c;性能为王创新进取永不止步&#xff01;自2023年新品发布会1月场发布5款重磅新品后&#xff0c;伴着春律&#xff0c;2月场它来了&#xff01; 2023年2月20日晚&#xff0c;拓尔微线上发布电机驱动芯片TMI8723及两颗电源管理芯片TMI7205B、TMI5122D8…

初识SSTI

SSTI概念SSTI就是服务器端模板注入&#xff08;Server-Side Template Injection&#xff09;&#xff0c;实际上也是一种注入漏洞&#xff1b;可以类比于SQL注入&#xff0c;实际上这两者的基本思想是一致的&#xff1b;SSTI也是获取了一个输入&#xff0c;然后在后端的渲染处理…

AVS3中ECCSAO

AVS3引入了CCSAO&#xff0c;通过不同通道间的预测来去除通道间的冗余以提升编码效率。然而CCSAO在处理时未考虑边界像素的分类问题&#xff0c;所以在处理纹理复杂的内容时效率还是不高。CCSAOAVS3中引入了CCSAO&#xff0c;它是帧级的环路滤波工具&#xff0c;如Fig.1所示&am…