在PX4下更换pixhawk的IMU

2023-05-16

写在前面

出于一些原因,这篇文章不给出具体的源码,因此博主试着将这篇写成了一篇科普性质的文章,如果你认真读的话,应该会有收获的。

为什么要更换pixhawk的传感器?大多数的玩家拿到 pixhawk 之后,是不会在意这个问题的,一个pixhawk六七百对玩票来说已经挺贵的了,自然不会想着再去花大价钱买IMU来换。

但如果你的飞行器本身价值很高的话,就很有必要更换一个传感器了。这不仅仅是精度的问题,更事关飞行器的生死存亡。GPS出了问题,飞机只是迷路而已,可能还能在天上撑几分钟,而一旦IMU出了问题,好像老司机被封闭了五感,那是当时就要翻车的。

正经点研发无人机,都是要在各种严酷的环境下做实验的,pixhawk的IMU在高温下还好,温度稍微一低,它的电子加热根本扛不住,温漂很剧烈,数据也飘得厉害。

有人说直接买别人集成好的飞控不好吗?那些飞控稳定也挺稳定的,可你根本没法修改里面的东西。有些功能,自己去搞加一句话就够了,买别人的飞控还得找人家客服给你改,想做点什么修改还得看人家的售后有没有时间,乐不乐意给你改,科研的迭代效率大大降低。

IMU替换的思路

说了这么多,再聊一聊IMU替换的思路,IMU的替换主要要做两件事:

  • 从新的IMU中读到数据。
  • 将读到的数据融入到原有的程序流中,而不影响其他进程的工作。

数据读取

数据的读取实际上是一个信息的传播过程,凡是通信过程,就绕不过通信的几个概念——信源、信道和接受者,信源将信息编码后通过信道将信息传给接受者,接受者再通过解码获得信息。在这个例子中,IMU是信源,串口是信道,而接受者是飞控,这个过程具体来讲就是IMU将姿态信息编码,再通过串口将信息传给飞控,我们在飞控中编写的程序再通过解码来获得姿态的数据。

听起来很复杂,但这实际上和几万年前原始人之间的交流其实并没有什么区别。

编码

不同的IMU编码的方式千差万别,就好像世上有法语,有英语也有中文,只不过是人为规定的而已。通信科学家们不把这些规定叫做语言,而把他们叫作协议,其实本质都是一样的。

解码

我们通过PX4源码自带的read函数来读取数据,读到数据后再写一个有限状态机,来对数据进行解码和校验,校验的方法千差万别,一般在IMU的说明书中都有写。

数据替换

现在我们已经收到了数据,但PX4的程序对我们来说是一个很复杂的系统,如何以最小的代价把这些IMU数据去替换到系统里呢?我不知道其他的开发者是怎么做的,但我觉得我所用的方法非常地「偷懒」,要解释我所用的放法,你首先要对PX4内部的程序运行机制有一定的理解。

PX4内部的数据传输机制UORB

PX4的内部有一套这样的信息传输系统,他叫做UORB,这套信息传输机制本质是一种异步通信。可以这样理解,PX4的整个程序就像一个公司,这个公司比较奇怪,每个人之间相互是不交流的,公司里的员工只干三件事:一、从公司的一些黑板上读取数据。二、对这些数据进行处理。三、将其中一些黑板上的数据擦掉,写上自己的数据。

这个公司的黑板,实际上就是UORB,每个黑板只能写特定格式的数据,并且一旦新数据写入了,旧数据也就被擦除了。

偷梁换柱

理解了这套信息传输机制,你有没有一点思路了呢?药丸是这样做的:第一步,阻止原本传输IMU信息的员工,但不阻止它传输其他的数据。第二步,雇佣一个新员工,让他去定时地把新IMU的信息写在黑板上。

这样我们就完成了一次信息的「偷梁换柱」,成功地将老IMU的数据换成了新IMU的数据,公司里的其他员工完全没有发现有什么不同。

如果你想换其他的传感器,其实也可以这样做,PX4这种高度解耦的程序设计为二次开发提供了极大的方便。但是一定要注意你有没有把一些不该拦截的数据拦截了,或者不该保留的数据保留了。

PX4数据流

让我们来看一眼PX4的数据流图,可以看到,每一个灰色的小方块就是一个搬运数据的员工,而每一个彩色的小方块则代表了一块黑板,他们之间的虚线连接表示员工会在某块黑板上写字,而他们之间的实线则表示员工从某个黑板上读取数据。

在这里插入图片描述

这张图这么乱,如何找到我们想找的黑板和员工呢?药丸帮你总结了一点小技巧:

1.从控制你飞行器的那个员工开始找,比如负责多旋翼控制的员工是mc_pos_control,先找到这个员工从哪些黑板上读取了数据,再根据各个黑板的名字和注释大致确定,哪个黑板是IMU的数据。最后再找哪个员工在这块黑板上写了字。

2.通过第一步,我们可以找到两个员工:ekf2和attitude_estimator_q,那么究竟是哪个员工在负责呢?这时我们就要实际看看到底是哪个员工在上班。我们实际运行飞控,在nsh中输入top来查看正在上班的员工的名单,发现ekf2在上班,attitude_estimator_q没在上班,那么结果很明显了,我们只要修改ekf2就可以了。

我的思路不一定对,但希望能给你启发,如果你有新想法,欢迎和我交流。

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

在PX4下更换pixhawk的IMU 的相关文章

  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之三十四:ControlAllocator模块

    PX4模块设计之三十四 xff1a ControlAllocator模块 1 ControlAllocator模块简介2 模块入口函数2 1 主入口control allocator main2 2 自定义子命令custom command
  • 自己组装Pixhawk F450无人机的一些细节

    首先参考文档为 xff1a 1 https mp weixin qq com s VXKU kIB v i0AX3zgtLig 2 https mp weixin qq com s Qzzl dQ6Tz2pXNp7Oj0lTg 3 http
  • 49、OAK测试官方的IMU模块和SpatialLocationCalculator节点

    基本思想 xff1a 不太懂IMU是干嘛的 xff0c 不像图像那么容易可视化 xff0c 参考官方demo的 xff0c 记录一下 xff0c 后续这篇需要补充 xff0c 参考的IMU的介绍 xff0c 原理不懂 xff0c 先占个坑
  • ros 下面同步相机和IMU 两个topic

    This file is used for collecting data fromm imu and camera at the same time One camera and one imu include lt ros ros h
  • 关于github px4 gps 驱动的开发的总结

    源码编译上边已经写过文章了 遇到的几个问题 1 解决虚拟机不能共享文件夹的问题 一开始虚拟机的更新 vmware tools 是灰色的 xff0c 不能点 xff0c 然后通过关掉虚拟机 xff0c 然后再开启的时候 xff0c 在没有启动
  • TI CC265x的IIC通讯读取IMU BMI08x数据

    SmartLink CC265x是TI公司出的无线MCU平台器件 最近玩了个小项目用TI的CC265x平板IIC接口通讯 xff0c 获取博世BMI08x陀螺仪 加速度计传感器的数据 本篇博客亦是对博客 树莓派IIC通讯获取BMI08x I
  • px4_simple_example和uorb机制

    px4 simple app PX4 Autopilot src exampes px4 simple app xff0c 这个程序是用c语言调用orb API和poll机制订阅和发布通讯数据 xff0c 但是这个例子并不是既有接收又有发送
  • Px4源码框架结构图

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

    origin https ezchina analog com message 34890 对于复杂且高动态惯性配置的MEMS IMU应用 xff0c 评估功能时需要考虑许多属性 在设计周期早期评估这些属性优于追逐开放性成果 xff0c 从
  • PX4飞控之自主返航(RTL)控制逻辑

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • 优化IMU数据避免突变的建议

    影响IMU数据变化的主要因素是应力 温度和电气干扰 xff1b xff11 温度的的骤升 xff0c 比如芯片的位置附件有相关器件几秒钟工作一次 xff0c 此时温度骤升 xff0c 可能会引起数据也发生突变 xff0c 周围有变化的热源和
  • IMU 测量模型和运动学模型

    一 概念 高斯白噪声 测量噪声是AD转换器件引起的外部噪声 xff0c 波动激烈的测量白噪声 随机游走 这里指零偏Bias 随机游走噪声 xff0c 是传感器内部机械 温度等各种物理因素产生的传感器内部误差的综合参数 xff0c 是变化缓慢
  • 一文了解IMU原理、误差模型、标定、惯性传感器选型以及IMU产品调研(含IMU、AHRS、VRU和INS区别)

    在此记录一下测试IMU过程中的其它文章 xff0c 便于以后查看 xff1a IMU的误差标定以及姿态解算ROS下通过USB端口读取摄像头数据 包括笔记本自带摄像头 激光 摄像头 IMU等传感器数据同步方法 message filters
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光
  • 四、无人机知识笔记(初级:基本运动原理)

    笔记来源于 沈阳无距科技 工业级无人机的中国名片 编程外星人 目录 一 多旋翼直升机 二 基本飞行姿态 三 多旋翼飞行原理 四 反扭力与偏航运动 五 螺旋桨 六 有刷电机和无刷电机 七 电调与PWM信号 八 动力电池 九 遥控器 十 机架设
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感
  • 武汉大学研究生组合导航课程合集【2022年春】

    第四公式中kk是权重 zk hx 为innovation新息 即真实的观测 估计的观测 前者包含观测误差 gps的电离层 多径 后者包含估计误差 kk近似1 则无限相信新观测 kk 0 相信估计
  • 浙江大学提出自感知IMU网络精准捕获3D变形

    运动捕捉目前有两种主流方法 视觉捕捉能捕获复杂的三维几何变形 但依赖于昂贵的光学设备并且存在视线遮挡问题 基于IMU的方法虽然简便 但难以捕获细微的3D变形 为了解决这个问题 浙江大学的研究者们提出了一种可配置的自感知IMU传感器网络 解决
  • 四元素与旋转矩阵

    如何描述三维空间中刚体的旋转 是个有趣的问题 具体地说 就是刚体上的任意一个点P x y z 围绕过原点的轴 i j k 旋转 求旋转后的点P x y z 旋转矩阵 旋转矩阵乘以点P的齐次坐标 得到旋转后的点P 因此旋转矩阵可以描述旋转 x

随机推荐

  • D435i的IMU话题ROS包录制和查看

    1 bag数据录制 a 启动相机 xff0c 发布话题 roslaunch realsense2 camera rs imu calibration span class token punctuation span launch b 数据
  • 百问网物联网实战-FREERTOS

    一 移植步骤 先添加源码到MDK工程中还是先创建FreeRTOSConfig h xff0c 在FreeRTOSConfig h里面 xff0c 每一项的配置代表的什么 xff0c 值的范围是多少 xff0c 可以查看官网说明 config
  • 组合导航原理剖析(二):惯性导航方法与应用综述

    资料下载 PSINS 枯荣有常 知乎 半闲居士 知乎 书灌木 知乎 任乾 知乎 武汉大学多源智能导航实验室 传统导航采用单点导航的方式 xff0c 定位精度为几米 xff0c 显然不符合自动驾驶的需求 现有在自动驾驶中常用的三种导航方案 x
  • 英伟达 Jetson TX2介绍

    Jetson TX2介绍 Jetson nbsp TX2是NIVDIA瞄准人工智能在Jetson TK1和TX1推出后的升级 TX2的GPU和CPU都进行了升级 内存增加到了8GB 存储增加到了32GB 支持Wifi和蓝牙 编解码支持H 2
  • 基于SPWM的逆变器程序应用及自制电路

    自制逆变器的电路及程序应用 设计并制作 一个简易逆变器 xff0c 其结构如图所示 逆变器进行负载试验时 xff0c 需在其输出端接负载 通常情况下 xff0c 输出电能消耗在该负载上 2 基本要求 逆变器输出端仅连接电阻性负载 xff0c
  • configure,make,make install的作用以及configure参数解释说明

    文章源自 xff1a http feinibuke blog 51cto com 1724260 367376 http www chinaz com server 2007 0620 10489 shtml 一 configure mak
  • 关于大疆御2行业进阶版(M2EA)热红外照片温度信息提取问题

    xff08 1 xff09 大疆dji thermal sdk只支持导出RAW格式的数据信息而非TIFF xff0c RAW格式无法直接导入Pix4d Mapper等软件用于拼接 xff0c 需要自己转换转换成TIFF xff08 2 xf
  • 网络之应用层与HTTP协议

    一 应用层 1 含义 应用层负责程序间沟通 我们的网络编程主要是针对应用层 2 序列化与反序列化 序列化 xff1a 发送数据时按照某个规则将数据转换为字符串 反序列化 xff1a 接收数据时按照相同的规则将字符串转换为数据 二 HTTP协
  • vs code 下载安装,git 配置,插件安装

    window 10 系统下载安装 1 打开官网地址 xff1a Visual Studio Code Code Editing Redefined 2 进入下载入口 xff1a 3 下载 zip 文件 4 解压到非系统盘 xff0c 运行
  • cmake 常用变量和常用环境变量

    一 cmake 变量引用的方式 前面我们已经提到了 使用 进行变量的引用 在 IF 等语句中 是直接使用变量名而不通过 取值 二 cmake 自定义变量的方式 主要有隐式定义和显式定义两种 前面举了一个隐式定义的例子 就是 PROJECT
  • 变量名尽量不要使用__或者_打头

    以两个下划线或下划线和大写字母打头的名称被保留给实现 xff08 编译器及其使用的资源 xff09 使用 以一个下划线开头的名称被保留给实现 xff0c 用作全局标识符
  • Kendryte K210 在freertos上的uart的使用

    首先修改project cfg h文件 xff0c 将硬件定义好的i2c引脚定义好 xff0c 其中40和41表示IO40和IO41 xff0c 如下 xff1a const fpioa cfg t g fpioa cfg 61 versi
  • Kendryte K210 在freertos上的lcd屏幕的使用

    K210上的lcd的屏幕为8位的spi并行接口 使用的屏幕开发板的型号为JLT32009A 某宝应该是可以买到的 需要注意的是若在某宝买的这种屏幕 一般会有8位和16位的区别 商家会告诉你这是两个不一样的屏 但是通过我们查看屏幕的规格书会发
  • Gamma分布、Beta分布、Dirichlet分布

    函数 函数是阶乘在实数上的推广 xff0c 定义为 xff1a x 61 43 0 t x 1 e t d t 函数的性质 xff1a x 43 1 61 x x
  • 消息队列OSQCreate失败:Assertion "OSQCreate" failed at line 71 in ..\LWIP\arch\sys_arch.c错误解决方法

    在STM32F407的上移植正点原子例程中的ucosII和LWIP功能时 xff0c 发现其他任务中创建其他消息邮箱后 xff0c 出现了如下的错误 xff1a Assertion OSQCreate failed at line 67 i
  • 学习Linux 编程的几本好书

    这次涉及到了具体的平台 GNU Linux Linux下开发与明显不同于Windows平台的特点 xff0c 从开发工具到项目组织 xff0c 都有较大的差距 首先声明 xff0c 在做Linux平台开发之前 xff0c 首先要熟练使用Li
  • http parser库的使用方法

    include 34 http parser h 34 include lt stdio h gt include lt stdlib h gt include lt string h gt include lt assert h gt i
  • PIXhawk4飞控学习笔记(一)开发环境

    PIXhawk4飞控学习笔记 xff08 一 xff09 开发环境 PIX4简介开发环境准备PIX4控制板MDK Keil5STM32CUBEMAXQGroundControl地面站 总结 PIX4简介 PX4是Dronecode平台的一部
  • Git常用命令

    1 Git全局设置 当安装Git后首先要做的事情是设置用户名称和email地址 这是非常重要的 xff0c 因为每次Git提交都会使用该用户信息 在Git 命令行中执行下面命令 xff1a 设置用户信息 git config global
  • 在PX4下更换pixhawk的IMU

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