Pixhawk之姿态解算篇(4)_补充篇

2023-05-16

一、开篇

        大家期待已久的第四篇来了,但是本篇可能比较水啊~~~见谅~~~

        首先,上一周没有什么收获,虽然看了不少的论文,但是却没有什么质的飞越~~~~

        看的论文都是关于姿态解算的,用的算法大部分也都是基于mahony算法的扩展,就当是深入理解一下姿态解算过程吧,稍微写写上周总结的一丁点的知识。

        昨天开了一整天的会议,最终决定姿态解算部分还是需要用EKF做,慢慢搞吧,但是我还是先把姿态控制部分解决了,感觉这个部分也相当重要。


三、实验平台

Software Version:PX4Firmware

Hardware Version:pixhawk

IDE:eclipse Juno (Windows)

四、基础知识

        研究多旋翼无人机前期主要需要了解其气动布局和复杂的动力学模型,然后就是姿态解算和控制器的设计。为了实现精确四旋翼飞行器的姿态估计,首先就是需要了解各传感器采集的数据和误差存在的原因,然后就是各种数学运算(都是基于一定的数学平台),比如DCM随时间的变化、四元数微分方程、四元数随时间的变化、重正交化等等。

        在理解构建四旋翼动力学模型时,需要了解它是属于四输入六输出的欠驱动系统,欠驱动主要就是输入只值靠四个电机的拉力实现控制角速度、角度、上升速度、下降速度、上升距离和下降距离。动力学模型还在研究中

        实现四旋翼飞行器的自主飞行主要就是靠姿态解算和姿态控制。姿态控制是四旋翼飞行器实现各项工作的核心,位置控制建立在完善的姿态控制的基础上。前面已经介绍过,仅仅依靠陀螺仪积分获取角度值是不可靠的,由于陀螺仪由于其本身的固有的drift,积分带来的误差随时间的积累越来越大;而加速度计又容易受到噪声和震动的干扰。因此在此基础上使用各种算法对两种数据进行融合,以获取较为理想的姿态数据。比较常见的融合算法有EKF(Extended Kalman Filter)、UKF(Unscented Kalman Filter)、梯度下降法、CKF(Cubature Kalman Filter)、PF(Particle Filter)和CF(Complementary Filter)。

        其中mahony姿态解算算法主要就是基于CF设计的数据融合滤波器,该算法需要重点掌握其原理思想其分为AHRS(陀螺仪、加速度计、磁力计)和IMU(陀螺仪、加速度计)两种。

        目前研究多集中在非线性控制领域,由于非线性控制对模型准确性有较强的依赖,在模型误差存在的条件下,PID控制更加实用,所以现有的基于mahony互补滤波器设计的算法中大多数都是基于PID反馈控制器的。

        接下来就是使用Simulink进行控制器建模仿真,也在研究中

五、正文

1、传感器的数值模型(mahony互补滤波器)

        首先还是贴图吧,word编辑的公式还是搞不进来。


2、互补滤波器的设计(基于四元数)

        依旧是图片~~~~



        终于不是图片了~~~

        这里讲的互补滤波就是在短时间内采用陀螺仪得到的角度做为最优值,定时对加速度采样来的加速度值进行取平均值来校正陀螺仪的得到的角度。短时间内用陀螺仪比较准确,以它为主;长时间用加速度计比较准确,这时候加大它的比重,这就是互补了,不过加速度计要滤掉高频信号,陀螺仪要滤掉低频信号,互补滤波器就是根据传感器特性不同,通过不同的滤波器(高通或低通,互补的),然后再相加得到整个频带的信号。例如,加速度计测加速度值,其动态响应较慢,在高频时信号不可用,所以可通过低通滤波器抑制高频干扰;陀螺仪响应快,积分后可测倾角,不过由于零点漂移等,在低频段信号不好,通过高通滤波器可抑制低频干扰。将两者结合,就将陀螺仪和加速度计的优点融合起来,得到在高频和低频都较好的信号,互补滤波需要选择切换的频率点,即高通和低通的频率。

六、在深入一点

1、对mahony互补滤波算法和PX4Firmware源代码中的姿态解算算法的一点见解

        首先是最原始mahony滤波算法中的加速度计数据修正陀螺仪数据,源码如下。

1.	// measured by Accelerate sensor
2.	  ax = ax / norm;  
3.	  ay = ay / norm;  
4.	  az = az / norm;  
5.	
6.	// estimated direction of gravity  (v)   
7.	  vx = 2*(q1q3 - q0q2);  
8.	  vy = 2*(q0q1 + q2q3);  
9.	  vz = q0q0 - q1q1 - q2q2 + q3q3;  
10.	 
11.	// error is sum ofcross product between reference direction of fields and direction measured by Accelerate sensor   
12.	  ex = ay*vz - az*vy ;  
13.	  ey = az*vx - ax*vz ;  
14.	  ez = ax*vy - ay*vx ;  
15.	 

        对上述代码的理解:[ax,ay,az] 表示由机体上的加速度计实际测量到的加速度数据,根据数据融合修正原理,加速度计在低频的情况下效果比较好,陀螺仪在高频情况下效果好;在低频下,忽略机体的运动加速度,即加速度计测量到的数据就是近似的纯重力加速度向量。[vx,vy,vz]表示由陀螺仪积分以后的姿态矩阵中获取的重力加速度向量(如何得到的不再赘述)。并且这两个向量都是在机体坐标系中,两个重力加速度向量做外积得到的向量就是所谓的误差向量(12、13、14行代码),且叉积的大小和陀螺仪的积分误差成正比,用该误差向量修正下一次的陀螺仪数据即可达到用加速度计修正陀螺仪数据误差的效果。

        然后就是PX4Firmware源码中的加速度计数据修正陀螺仪数据,源码如下。

1.	// Accelerometer correction  
2.	// Project 'k' unit vector of earth frame to body frame  
3.	// Vector<3> k = _q.conjugate_inversed(Vector<3>(0.0f, 0.0f, 1.0f)); n系到 
4.	// b系
5.	// Optimized version with dropped zeros  
6.	    Vector<3> k(  
7.	        2.0f * (_q(1) * _q(3) - _q(0) * _q(2)),  
8.	        2.0f * (_q(2) * _q(3) + _q(0) * _q(1)),  
9.	        (_q(0) * _q(0) - _q(1) * _q(1) - _q(2) * _q(2) + _q(3) * _q(3))  
10.	    );  
11.	 corr += (k % (_accel - _pos_acc).normalized()) * _w_accel;
12.	 

        该算法中,Vector<3> k就是由陀螺仪积分以后的姿态矩阵中获取的重力加速度向量(等同于mahony算法中的[vx,vy,vz]);这部分都类似,主要的不同就是下面的加速度计测量数据的处理,首先通过加速度计获取总的加速度向量,然后同过GPS或者空速管获取运动加速度向量,然后通过这两个向量之差求取纯重力加速度,即:总的加速度 =运动加速度 + 重力加速度(此处考虑了低频情况下的运动加速度,修正效果更好)。_w_accel代表权重,即类似于Kp。

        上述代码中的“%”运算符定义为叉积运算:

1.	Vector<3> operator %(const Vector<3> &v) const {  
2.	        return Vector<3>(  
3.	                   data[1] * v.data[2] - data[2] * v.data[1],  
4.	                   data[2] * v.data[0] - data[0] * v.data[2],  
5.	                   data[0] * v.data[1] - data[1] * v.data[0]  
6.	               );  
7.	    }  
8.	};  
七、总结
        没看多少东西,可能是因为清明放假太嗨了吧,心还没有收回来。好吧,我承认,是我太水~~~

        今天建了一个群,希望大家可以多多讨论技术相关问题,为祖国的无人机行业多做贡献。

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

Pixhawk之姿态解算篇(4)_补充篇 的相关文章

  • Pixhawk之姿态解算篇(4)_补充篇

    一 开篇 大家期待已久的第四篇来了 xff0c 但是本篇可能比较水啊 见谅 首先 xff0c 上一周没有什么收获 xff0c 虽然看了不少的论文 xff0c 但是却没有什么质的飞越 看的论文都是关于姿态解算的 xff0c 用的算法大部分也都
  • Pixhawk之姿态控制篇(2)_控制策略

    一 开篇 写在前面 xff1a 先占坑 现在关于该部分内部还在完善 xff0c 后续不上 三 实验平台 Software Version xff1a PX4Firmware Hardware Version xff1a pixhawk ID
  • Pixhawk之姿态解算篇(6)_Gradient Descent

    一 开篇 在多旋翼进行姿态估计的过程中 xff0c 最简单的就是直接使用gyro测量角速度进行积分求取欧拉角 xff08 RPY xff09 xff0c 但是由于gyro自身存在的bias和drift xff0c 导致直接测量过程随着时间的
  • 【Pixhawk】Ubuntu下编译原生固件PX4

    环境 xff1a 编译主机 xff1a Ubuntu 20 0 4 xff08 官方推荐18 0 4 xff09 源码版本 xff1a PX4 1 12 0 xff08 目前最新 xff0c 截至2021 7 22 xff09 建议 尽量以
  • pixhawk配置垂直起降无人机

    我使用的版本里面没有找到 43 型尾座式垂直起降无人机 就先用x型无人机了 查看代码 发现在init d目录下id号为13003 待续
  • Pixhawk无人机飞行模式详解 (PX4源码)

    我帮大家把飞行模式控制量与特点总结一下 xff0c 方便看代码 xff0c 如下所示 xff1a 辅助模式 Position Mode 位置模式 xff08 定点模式 xff09 横滚俯仰控制角度 xff0c 油门控制上下速度 xff0c
  • Mavros读取PixHawk硬件的IMU数据

    Ubuntu18 04 读取PixHawk硬件的IMU数据 实现方式 使用mavros话题读取到Pixhawk飞控的IMU数据 实现步骤 安装ros 检查是否安装cmake xff08 未安装根据提示安装 xff09 cmake span
  • PIXHAWK飞机侧翻原因

    转载自 xff1a http pix 1yuav com wen ti ji jin fei ji ce fan yuan yin html 飞机侧翻原因 飞机侧翻有以下几个原因 xff0c 请认真检查 1 电机顺序 xff0c 电机转向
  • 自己组装pixhawk的一些感受

    现在你叫我设置遥控器我会了 xff0c 我也清楚电调怎么接线的了 xff0c 也清楚怎么供电的了 xff0c 其实飞控的接线就四个电调的接线 xff0c 加上接收机的接线其他都是一些传感器的接线罢了 xff0c 我现在回过头看无名的无人机就
  • pixhawk ulg转csv

    ulg是目前最新版px4固件生成的log格式 xff0c 下载最新版的flightplot即可对内部数据进行预览分析 xff0c flightplot中支持部分函数和运算符操作 xff0c 但对带 数据的操作不支持 xff0c 如需要对某些
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • pixhawk make文件分析

    由于笔者没学过Linux等系统 xff0c 对make文件所知甚少 xff0c 本节分析可能有大量错误 xff0c 只提供参考 xff0c 随着技术积累 xff0c 以后会回过头改正错误的地方 xff0c 也非常欢迎提出指导意见 其中分析大
  • pixhawk px4 spi设备驱动

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

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • pixhawk源码下载与编译

    今天和同学在一起讨论发现自己还在看的pixhawk源码的版本好低啊 xff0c 就下个最新的吧 想起有些人还不会下载源码 xff0c 以及用什么工具查看 源码的下载我用的是git shell工具下的 xff0c px4的github网址是h
  • [pixhawk笔记]2-飞行模式

    本文翻译自px4官方开发文档 xff1a https dev px4 io en concept flight modes html xff0c 有不对之处 xff0c 敬请指正 pixhawk的飞行模式如下 xff1a MANUAL xf
  • Pixhawk指示灯和安全开关含义

    Pixhawk指示灯的含义 红灯和蓝灯闪 xff1a 初始化中 请稍等 黄灯双闪 xff1a 错误 系统拒绝解锁 蓝灯闪 xff1a 已加锁 xff0c GPS搜星中 自动导航 xff0c 悬停 xff0c 还有返回出发点模式需要GPS锁定
  • win7下 pixhawk (ardupilot) 的编译

    前几天都在搞pixhawk源码编译问题 xff0c 什么在window下用Console或者eclipse xff0c 还是在Ubuntu下 xff0c 都做了 xff0c 而且把 mk文件都看了 xff0c 结果还是有bug 总结一下三种
  • DroneKit教程(二):控制Pixhawk示例

    DroneKit教程 xff08 二 xff09 xff1a 控制Pixhawk示例 本篇提供了一个简单的示例 xff0c 配以详细的注释说明不同语句的功能 xff0c 希望能给各位一个总体的框架和印象 该示例文件改写自DroneKit的官
  • 自己组装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

随机推荐

  • 算法c++好处及STL优点

  • airsim 安装指导(无人机、无人车视觉导航仿真平台)

    说明 xff1a airsim是基于UE4开发的仿真平台 xff0c 听到UE4这个名字不是做游戏的同学 xff0c 可能会觉得陌生 xff0c 但是其实我们经常玩的一些游戏就是基于UE4开发的 xff0c 比如最近比较火的吃鸡游戏 借助于
  • FreeRTOS Heap_1、Heap_2、Heap_3、Heap_4、Heap_5的区别

    FreeRTOS提供了五种内存管理的方式 xff0c 下文将对以下五种内存分配进行说明 xff1a 1 Heap 1 Heap 1 堆大小通过FreeRTOSConfig h中的configTOTAL HEAP SIZE定义设置 xff0c
  • UE4数字人驱动(一)—坐标系转换

    好记性不如烂笔头 xff0c 之前通过研究VRPN实现了自定义的设备添加 xff0c 现在需要在UE4里利用采集的人体运动数据进行数字人驱动 整个功能实现包括 xff1a UE4端VRPN数据接收 数据坐标系转化 动捕骨骼与数字人骨骼匹配与
  • vscode下cmake工程环境配置以及调试配置(c++)

    1 准备工作 1 1MinGW的下载 MinGW将其托管到sourceforge上了 xff0c 也可以前往sourceforge下载 xff1a https sourceforge net projects mingw w64 files
  • 真香!腾讯竟然又偷偷开源了一套Android原生UI框架!

    今天在浏览技术新闻的时候 xff0c 发现腾讯就在今天开源了一套 Android 原生的 UI 框架 你们有没有发现 xff0c 腾讯特别喜欢干这种事 xff0c 哪一种事呢 xff1f 喜欢开源 UI 框架 xff0c 小程序也是这样的
  • STM32 Keil5报错-Target uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available-安装编译器解决

    现象 Keil MDK 5 3 6 编译代码报错 xff1a Target uses ARM Compiler Default Compiler Version 5 which is not available Rebuild starte
  • prometheus编译安装

    prometheus是搜集应用程序所使用的CPU 内存 以及磁盘使用大小的神器 xff0c 它可以根据用户所配置的性能阀值给出相应的处理 xff0c 比如 邮件告警等 xff0c 在这里就不啰嗦了 xff0c 由于本人也是刚刚学习 所以能说
  • 不同硬件传感器数据之间的时间同步问题

    主要分为硬同步和软同步 硬同步就是用一个硬件触发器 xff0c 直接通过物理信号 xff0c 触发相机和LIDAR记录一个data frame 软同步提供一个相同的时间源 xff08 一般都是主控电脑utc时间 xff09 给相机和LIDA
  • 多传感器融合定位开源工程与论文

    目录 1 LIC Fusion xff1a 基于激光雷达 惯性导航和相机结合的里程计 2 使用点线特征配合激光雷达辅助的单目视觉里程计 3 间歇的GPS辅助VIO xff1a 在线初始化和标定 4 强大的高精度视觉惯性激光SLAM系统 5
  • [BLE]CC2640之定时器(Clock)事件

    一 定时器 xff08 Clock xff09 所谓定时器本质上递减计数器 xff0c 当计数器减到零时可以触发某种动作的执行 这种动作可以通过回调函数来实现 xff0c 当定时器计时完成后 xff0c 自定义的回调函数会立即被调用 回调函
  • [BLE]低功耗蓝牙介绍

    一 BLE的协议栈框架 BLE协议栈包括两个部分 xff0c 主机 Host 和控制器 Controller 二者通过HCI Host Controller Interface 标准接口相互通信 常用的单芯片单模BLE芯片有TI的CC254
  • [BLE]低功耗蓝牙之GAP、GATT

    一 开篇 本篇主要介绍一下关于BLE开发过程中必须了解的两个协议 xff1a GAP xff08 通用访问协议 xff09 GATT xff08 通用属性协议 xff09 两个协议都隶属于Host层 xff0c 直接关系到应用层开发 xff
  • [memory]虚拟地址空间分布

    一 开篇 踏入嵌入式软件行业也接近2年了 xff0c 从研一开学起懵懵懂懂的开始学习C语言 xff0c 由于本科时对这方面了解的少之又少 xff0c 所以学起来比较困难 xff0c 但是有一群无私奉献的小伙伴 xff0c 慢慢的 xff0c
  • Pixhawk之UAV控制理论、ardupilot源码框架介绍

    一 开篇 您有无人机么 xff1f 没有 那赶紧去某宝买一套 昨天 开会开到接近下午一点钟 xff0c 收获相当大 xff0c 原本不太清楚的ardupilot框架现在也大致熟悉了 xff0c 接下来主要就是结合源码了解其控制过程了 xff
  • RT-Thread学习笔记(11):互斥量

    目录 互斥量的优先级继承机制互斥量和二值信号量的区别 互斥量的运作机制互斥量控制块 互斥量的优先级继承机制 在RT Thread操作系统中为了降低优先级翻转问题利用了优先级继承算法 优先级继承算法是指 xff0c 暂时提高某个占有某种资源的
  • [BLE]CC2640之ADC功能实现和供电电压的采集

    一 开篇 Write programs that do one thing and do it well 发现很多人关于使用CC2640 CC2650的过程中比较难以应对的问题就是实现ADC xff0c 为了方便大家 xff0c 所以有了本
  • [Index]博文索引

    为了方便查看需要的博文 xff0c 在此给出所有博文的索引链接地址 UAV Software Version xff1a ArduCopter xff08 Ver 3 3 xff09 Hardware Version xff1a pixha
  • Pixhawk之姿态解算篇(1)_入门篇(DCM Nomalize)

    一 开篇 慢慢的 慢慢的 慢慢的就快要到飞控的主要部分了 xff0c 飞控飞控就是所谓的飞行控制呗 xff0c 一个是姿态解算一个是姿态控制 xff0c 解算是解算 xff0c 控制是控制 xff0c 各自负责各自的任务 xff0c 我也不
  • Pixhawk之姿态解算篇(4)_补充篇

    一 开篇 大家期待已久的第四篇来了 xff0c 但是本篇可能比较水啊 见谅 首先 xff0c 上一周没有什么收获 xff0c 虽然看了不少的论文 xff0c 但是却没有什么质的飞越 看的论文都是关于姿态解算的 xff0c 用的算法大部分也都