pixhawk消息流与框架介绍(阿木)

2023-05-16

这里面我觉得很重要的一点就是指出了

如果我们想控制飞行器飞行到一个地方,那么我们就应该去发布position_setpoint_triplet主题,mavlink作为主题的发起者,它可以发布这个主题,那么我们也可以发布,我们的功能模块应该喝mavlink站在同一层上。

你是不能直接发布姿态控制消息的

 

可以结合这篇博文来看

https://blog.csdn.net/sinat_16643223/article/details/107874349

 

来源:阿木实验室

 

在介绍框架之前,首先要说明一点,px4的代码十分庞大,但是本章介绍的侧重点仅仅是功能模块代码,这些代码位于源代码跟路径:/src/modules/

 

在px4源码中对二次开发比较重要的代码模块有:

commander

ekf2

mavlink

mc_att_control

mc_pos_control

navigator

 

1.commander

commander模块主要处理一些px4的常用命令,如传感器效准、模式切换、加锁解锁、起飞降落、紧急断电等等的命令。

commander模块的输入topic是vehicle_command。模块会根据不同的命令id将命令分解成其他的topic并发布出去供其他模块响应。如果我们想使用commander模块带来的便利,我们可以在自己的程序代码中直接发布主题:vehicle_command

 

2.ekf2

ekf2模块主要处理飞控上的传感器数据融合,如gps、加速度计、指南针等等。

ekf2的输入参数都是又px4的硬件驱动模块提供的,我们在进行二次开发的过程中不需要关心具体的topic。

ekf2的输出topic有:

vehicle_attitude

vehicle_local_position

vehicle_global_position

 

vehicle_attitude:当前飞控的姿态

vehicle_local_position:当前飞控的本地位置,坐标系为ned,以飞控加点第一次得到的点为原点

vehicle_global_position:当前飞控的全球位置

 

如果我们在自己的代码中有需求,可以直接订阅这三个主题,ekf2保证这些数据的实时更新,我们不需要去关系具体硬件。

 

3.mavlink

mavlink模块主要处理mavlink通讯,mavlink的输入总是由飞控的数传串口,输出总是将mavlink封包分解后的各个topic。这也是我们分析飞控的重点模块,是在px4中处于最上层的模块之一。

 

4.mc_att_control

mc_att_control模块是处理姿态控制的模块,所有的上层模块的飞行决策最终都将化为topic vehicle_attitude_setpoint作为mc_att_control模块的输入参数。但是我们自己的代码中请不要直接发布此主题,因为px4中对此主题有完整的响应链,如果我们直接发布期望姿态,那么很可能引起混乱,一定要仔细分析,直到分析道最上层的决策topic。

mc_att_control模块的输出topic有:

actuator_controls_0

当然其他还有另外7个控制topic

actuator_controls_1

actuator_controls_2

actuator_controls_3

actuator_controls_4

actuator_controls_5

actuator_controls_6

actuator_controls_7

分别代表8个混控器control group,px4中混控器的作用主要是将期望姿态信息roll pitch yaw映射到实际的电机转速或者舵机角度,当然这又是另外一个话题了,这里我们只需要知道actuator_controls_0就是mc_att_control模块的最终输出,他的输出在通过混控器之后会实际的改变电机转速或者舵机角度。

 

5.mc_pos_control

mc_pos_control模块是处理位置控制的模块,位置模块的输出参数永远都是topic vehicle_attitude_setpoint。可以看出,位置控制模块是处于姿态控制模块的上层,他的输出作为了姿态控制模块的输入,到这里,我们就可以清楚,为什么我们不能直接控制发布姿态主题了,如果我们直接发布了姿态topic,那么就很有可能与位置控制发布的姿态topic冲突进而产生飞行器的不稳定。

位置控制模块的输入参数比较特殊,分别是:

manual_control_setpoint

position_setpoint_triplet

 

manual_control_setpoint是遥控器的当前输入值,比如你的油门打到了100%,那么topic中对应的参数可能就是100

position_setpoint_triplet是期望位置信息(本地坐标系ned),主题来自于其他很多地方,如:

mavlink模块(地面站的控制)

navigator模块(auto模式发起)

 

到这里我们就可以看出,如果我们想控制飞行器飞行到一个地方,那么我们就应该去发布position_setpoint_triplet主题,mavlink作为主题的发起者,它可以发布这个主题,那么我们也可以发布,我们的功能模块应该喝mavlink站在同一层上。

 

在看另外一个主题manual_control_setpoint是遥控器的输入,我们可以想象,遥控器已经是最上层的决策了,并且有一点很重要,遥控器是直接控制的飞行器的姿态,而并不是位置信息,所以,在你的程序中如果你想要控制飞行器的姿态,那么应该发布遥控器主题来命令飞行器,而不应该直接发布期望姿态主题。

 

6. navigator

navigator模块主要掌管飞行器的各种自动飞行模式,比如:

数传丢失的自动处理

跟随模式

进入禁飞区的自动处理

gps故障的自动处理

自动降落

留待模式

自动任务

遥控器丢失自动处理

自动返航

自动起飞

所以navigator的输入参数有非常多的主题,其中最重要的是传感器主题,用于判断当前是否需要紧急机制,第二重要的是来自自动任务的数据,此数据被px4以romfs文件系统保存在一个文件中,记录这从地面站发送的航点任务。

 

但是不管任务有多么复杂,所有的输入参数,最终都会转化为position_setpoint_triplet为位置控制模块提供输入参数。

 

注意:navigator发布position_setpoint_triplet时是处于px4的auto模式的,此模式是px4自己的模式我们无权干涉它的正常执行,我们发布position_setpoint_triplet主题时,一定要让px4处于offboard模式,这种模式才是给用户使用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pixhawk消息流与框架介绍(阿木) 的相关文章

  • PIXHAWK飞行模式

    PIXHAWK飞行模式 从mission planner中设置pixhawk的飞行模式时 xff0c 一共给出了多种飞行模式 xff0c 分别为 xff1a MANUAL STABILIZED ACRO RATTITUDE ALTCTL P
  • pixhawk学习

    原文转载至https blog csdn net u013181595 article details 80976610 1硬件架构分析 Pixhawk是一款基于ARM芯片的32位开源飞控 xff0c 由ETH的computer visio
  • pixhawk飞控板添加额外pwm输出通道控制开伞或舵机转动实现功能

    学习大佬的文章 xff0c 贴图来用 https blog csdn net dai93 article details 89852241 这是输出流的大致示意 如果在飞控需要控制单独的舵机 xff0c 可以自定义一个pwm通道输出 xff
  • PX4/Pixhawk---uORB深入理解和应用(最新版)

    1 简介 ps 第1章简介是参考 uORB深入理解和应用 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff
  • pixhawk无人机避障

    本人最近用树莓派结合PX4做无人机避障 xff0c 使用激光雷达 xff0c 有没有一起的小伙伴 xff0c 我们一起交流 xff01 私信我 xff0c
  • Mavros读取PixHawk硬件的IMU数据

    Ubuntu18 04 读取PixHawk硬件的IMU数据 实现方式 使用mavros话题读取到Pixhawk飞控的IMU数据 实现步骤 安装ros 检查是否安装cmake xff08 未安装根据提示安装 xff09 cmake span
  • 搜一下会发现CSDN上有不少树莓派连接Pixhawk的,或者ROS连接Pixhawk的

    搜一下会发现CSDN上有不少树莓派连接Pixhawk的 xff0c 或者ROS连接Pixhawk的 xff0c 来进行相对应的实验 看来大家基本都是用Pixhawk 有很多人已经做成了 xff0c 做出来了 xff0c 所以甚至感觉没必要去
  • 在PX4下更换pixhawk的IMU

    写在前面 出于一些原因 xff0c 这篇文章不给出具体的源码 xff0c 因此博主试着将这篇写成了一篇科普性质的文章 xff0c 如果你认真读的话 xff0c 应该会有收获的 为什么要更换pixhawk的传感器 xff1f 大多数的玩家拿到
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • pixhawk飞控中添加uORB主题

    本说明针对 Firmware v1 2 0 参考 xff1a https pixhawk org start id 61 zh dev shared object communication 1 添加流程说明 在Firmware msg下新
  • Pixhawk_bootloader简介

    Pixhawk Bootloader引导过程简介 自己结合网络上的资源总结的内容 有不对的地方请及时指出 有侵权的请指出 QQ 4862879 Pixhawk硬件使用STM32的芯片 Cortex M3的内核有三种启动方式 xff0c 其分
  • Pixhawk代码分析-源码框架

    源码框架 pixhawk代码框架 xff1a pixhawk代码框架基础分析 xff1a 阅读下面内容时请结合源码阅读 xff0c 便于理解 The basic structure of ArduPilot is broken up int
  • pixhawk 整体架构的认识

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • 【Pixhawk】注册一个字符型驱动设备

    最近学习Pixhawk的SPI xff0c 本以为PX4是STM32单片机而已 xff0c 写个SPI驱动应该很简单 但是当我看到mpu9250的那些cpp文件 xff0c 我一下就蒙了 由于PX4用的NUTTX系统 xff0c 类似Lin
  • 飞行控制器Pixhawk简介

    作者 xff1a 华清远见讲师 Pixhawk是一款由PX4开源项目设计并由3DR公司制造生产的高级自动驾驶仪系统 其前身是APM xff0c 由于APM的处理器已经接近满负荷 xff0c 没有办法满足更复杂的运算处理 xff0c 所以硬件
  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • pixhawk 整体架构的认识

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • Pixhawk WIFI模块Station模式配置

    Pixhawk WIFI模块配置 最近在鼓捣Pixhawk的飞控 xff0c 用来控制双桨的无人船 xff0c 固件刷的最新的ArduRover4 0 0 xff0c 经过扒论坛 xff0c 现场调试 xff0c 终于能让一艘船按照航点前行

随机推荐