姿态解算系列一:经验型卡尔曼数据融合

2023-05-16

目的:我们需要得到机器人运动的姿态信息,三个轴的角度以及角速度。

本文大纲:
1、传感器相关模型 
2、坐标变换   
3、经验型卡尔曼数据融合
4、姿态解算流程 
5、DMP 
6、数据融合效果 
本文出处:http://blog.csdn.net/haishaoli/article/details/52965457
本文内容:
姿态解算总框图(欧拉角方式):
一、数据模型、 噪声模型及曲线
1、 欧拉角定义
2、 数据模型:

其中表示的是测量的角度,b表示的是陀螺仪的飘移误差(为常值偏差)ωgyro表示的是陀螺仪的角速度输出值。ωg为陀螺仪测量噪声,φacce为加速度计经过处理后得到的角度值,ωa为加速度计测量噪声。


噪声模型近似为高斯分布,如下图:



A、加速度计噪声图


B、陀螺仪噪声图


二、 坐标变换(欧拉角方式):把陀螺仪角速度变换到加速度计的地理坐标系上
1、陀螺仪数据的使用:
A的逆:其中A矩阵为姿态矩阵。
下面内容来自《惯性导航》:主要是把三轴角速度从机体坐标系换算到地理坐标系上。
使用上述公式,在只使用陀螺仪的条件下,可以求得地理坐标系下的三轴角速度信息。
角速度进行积分,就能得到相应的角度信息。
2、加速度计数据的使用:
使用上述公式,在只使用加速度计的条件下,可以求得俯仰角和横滚角信息。
三、 卡尔曼数据融合
A、 融合效果:本文最后附图。
B、一行代码
a =  (1 - d%)  * b +  d% * c;
a 是 融合输出 ,b 是预测量,c 是观察量
这是关键的融合代码。
C、提问
上述代码的含义是什么?
加权平均?互补滤波?低通高通滤波器?
同样的式子,不同的使用过程,有不同的意义。
如果系数是一个固定的值,则有可能是加权平均或者高通低通滤波器。
我讲的是动态的系数。获取数据在变,方差(或协方差)在变,系数就在变。
D、理解:
1、什么情况使用 ?    高斯分布。
单模、零均和、高斯噪声 (高斯白噪声)。之前说明了传感器的噪声属于白噪声。
2、卡尔曼为什么是最佳估计 ?下面使用最小二乘来理解。
推导方式一:
q1 是预测量,q2是观察量,q是估计值,w是权值。下文来自《自主移动机器人导论》。
其中q1和q2的系数之和为1。
利用这种推导方式可说明卡尔曼是最佳估计,但是并不能推出方差的表达式,并且,权值W i还是我们自己取的。
推导方式二:
运用贝叶斯定理推导推出融合表达式和方差表达式
3、卡尔曼的核心。 方差,或者说权重。其实就是卡尔曼增益。
方差公式,跟电阻类似,结果比原来两者都小 因此就算是预测量的累积误差较大,也能提高系统的精度,误差通过迭代而减少。这说明了该方法的有效性。
4、 获得卡尔曼增益的方式对比:
 自动通过统计和计算数据方差 VS 人为经验估计方差  的对比  :
 1、自动需要高频数据,人为经验不用。
 2、自动具有通用性,人为特定性。
 3、自动计算量大,人为的计算量较少。
从5.35可推出:q = (d%) * q1 + (1-d%) * q2;
5、应用:我们的姿态融合,定位融合都是人为给出卡尔曼增益系数的,叫做 “经验型卡尔曼滤波”
     经验之谈:
A、参数一般是给的很小,原因跟传感器(数据)的误差模型相关;
        参数小的原因:分析卡尔曼增益的式子,预测量的方差较小,观测量的方差较大,不是同一个数量级,因此增益系数一般给的很小;见定位融合图,可看出方差情况。
        B、 “经验型卡尔曼滤波”的核心思想是变化卡尔曼增益系数;根据经验我们能知道哪些条件下传感器数据的方差大,哪些条件下方差小,从而改变增益系数。
C、融合线程的频率越高越好。频率高,一方面收敛快,另外一方面获得的预测量误差小。



四、 姿态解算流程
以下是以数据流的方式去理解。
1、传感器原始数据输入。
2、传感器标定,方法很多,比如六面法。把标定后的数据换算成标准单位。
3、确定坐标轴和数据符号,符号用右手定则。
4、 欧拉角变换或者四元数变换,变换是为了使陀螺仪角速度的坐标系与加速度计的坐标重合。
5、数据融合,减小方差,降低噪声。
6、输出融合后的姿态信息。
五、 DMP
这是MPU6X00芯片的自带功能。不开源。
性能还不错,甚至更好。计算有一部分是利用IMU自身的资源,不过依赖芯片产商。
六、数据融合实验效果:
A、  姿态融合效果:蓝色的线是融合输出。平滑并且响应快。
B、 定位融合效果:绿色的线是融合输出,蓝色的线是观测量,红色是预测量。


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

姿态解算系列一:经验型卡尔曼数据融合 的相关文章

  • Docker 使用教程

    Docker 使用教程 1 基本使用教程 使用docker docker 下载镜像 span class token function sudo span span class token function docker span pull
  • os.popen os.system subprocess shutil区别

    os popen os system subprocess shutil 区别 最近由于工作需求接触python xff0c 记录下遇到的问题 1 os popen os system 的区别 xff1a 总结 xff1a os popen
  • json与pickle相同和区别

    json与pickle相同和区别 1 json是可以在不同语言之间交换数据的 xff0c 而pickle只在python之间使用 2 json只能序列化最基本的数据类型 xff0c 而pickle可以序列化所有的数据类型 xff0c 包括类
  • 【id:58】【20分】C. 复数运算(友元函数)

    时间限制 1s 内存限制 128MB 题目描述 复数类的声明如下 xff1a class Complex private double real 实部 double imag 虚部 public Complex Complex double
  • Melodic + Realsense D435i 配置及错误问题解决

    Melodic 43 Realsense D435i 配置及错误问题解决 安装环境 xff1a RealSense SDK安装1 克隆SDK2 安装相关依赖3 安装权限脚本4 进行编译与安装5 测试安装是否成功6 错误汇总0x01 进行编译
  • Realsense-Ros安装配置介绍与问题解决

    Realsense Ros安装配置介绍与问题解决 Realsense Ros安装配置功能包克隆与编译编译错误与问题分析解决方案 结束语 本文主要讲述在如何进行Realsense Ros的安装与配置 xff0c 以及提出在安装配置过程中遇到相
  • 树莓派3 Ubuntu Meta16.04 操作系统烧录教程及系统换源

    树莓派3 Ubuntu Meta16 04 操作系统烧录教程及系统换源 1 写在开头 xff1a 2 操作系统烧录软件下载3 Ubuntu Meta 操作系统下载4 操作系统烧录4 1 SD 存储卡格式化4 2 操作系统写入4 3 换源更新
  • Ubuntu nautilus 快速打开文件浏览器

    Ubuntu nautilus 快速打开文件浏览器 1 问题描述2 nautilus 命令说明3 bashrc 下使用 alias 创建命令别名Reference 测试时间 xff1a 2022年6月20日 测试平台 xff1a Ubunt
  • 结构体嵌套结构体,及其的初始化

    作用 xff1a 结构体的的参数成员包含另一个结构体 利用 操作符来逐级访问结构体中的元素 1 先来个普通的结构体嵌套 xff0c xff08 不涉及数组 xff09 span class token macro property span
  • Spark Streaming + Spark SQL 实现配置化ETL流程

    Spark Streaming 非常适合ETL 但是其开发模块化程度不高 xff0c 所以这里提供了一套方案 xff0c 该方案提供了新的API用于开发Spark Streaming程序 xff0c 同时也实现了模块化 xff0c 配置化
  • 程序员永远的痛之字符编码的奥秘

    字符编码相信是每个程序员的噩梦 xff0c 只要是有中文的地方 xff0c 总是会遇到各种编码的问题 xff0c 并且这种问题还非常难缠 xff0c 尤其在linux上 xff0c 因为上面很多软件都是针对英语国家开发的 xff0c 是不会
  • 2013年终总结

    年终感悟 xff1a 2013年就这样过去了 xff0c 每个人都一样 xff0c 使用了自己一年生命药水 xff0c 要知道这种药品是花多少钱都买不来的 现在回头看看 xff0c 我用这一瓶药水都做了那些事情 在这一年里 xff0c 有过
  • C++11 之for 新解

    前言 C 43 43 11这次的更新带来了令很多C 43 43 程序员期待已久的for range循环 xff0c 每次看到javascript xff0c lua里的for range xff0c 心想要是C 43 43 能有多好 xff
  • c++11之初始化列表

    一 前言 C 43 43 的学习中 xff0c 我想每个人都被变量定义和申明折磨过 xff0c 比如我在大学笔试过的几家公司 xff0c 都考察了const和变量 xff0c 类型的不同排列组合 xff0c 让你区别有啥不同 反正在学习C
  • Unity Update 详解

    0x01 简介 Unity的脚本继承了Monobehaviour类 xff0c 在脚本中定义函数 xff1a void FixedUpdate span class hljs list span void span class hljs k
  • 2016总结

    欲言又止 xff1a 每年的年终总结是要在新年之前发表在博客上 xff0c 今年的年终总结拖到现在完成 xff0c 我也是服自己 这里要感谢我的高中好友 64 万学清同学 xff0c 在我去年微信发表的有关年终总结的朋友圈下 xff0c 催
  • 阅读代码和修改别人代码的一些技巧以及注意事项

    作为刚刚走上工作岗位的fish xff0c 都要熟悉前辈们留下来的代码 这段时间是fish最痛苦的时间同时也是最轻松的时间 痛苦是因为要看大量的代码 xff0c 同时要慢慢从学生到社会人士的转变 xff08 xff0c 再不能睡懒觉了 xf
  • 一个分号引发的血案

    最近在看 Data Structures and Algorithms 这本书 xff0c 书里对数据结构和算法进行了简单的描述 xff0c 并且用伪码进行了实现 伪码毕竟和代码还是有很大不同的 xff0c 书的说明里说有C 写的源码 xf
  • Iphone客户端程序员半年工作总结

    来公司四个半月了 xff0c 从对客户端游戏编程的小白慢慢的也能写一些东西了 xff0c 当然了这里最感谢的人就是九天了 xff0c 对于九天其它的好我就不说了 xff0c 就是感觉九天为了团队 xff0c 为了项目 xff0c 他在很用心
  • Unity Android Activity控制

    前言 开发游戏 xff0c 在国内发行 xff0c 接入各个渠道SDK是一件绕不开的事情 并且这件事非常复杂琐碎 xff0c 原因如下 xff1a a 发行平台多 xff0c Android平台有30 xff0c 40家主流发行平台 b 每

随机推荐