IMU和GPS数据融合估计位置与速度(MATLAB实现)

2023-05-16


一、问题与仿真


假设小车在一个方向上以 2cm/s2 的加速度运动了 100s,使用加速度计和GPS测量小车位置。GPS定位误差为高斯分布,方差为4m;加速度计的误差也为高斯分布,方差为0.01m/s2,并且由于加速度计放置不是完全水平的,有 0.03m/s2 的偏移。采用卡尔曼滤波,融合加速度计和GPS数据,估计小车的位置与速度。

如果只使用GPS数据估计,卡尔曼滤波器MATLAB实现(从一维到三维)一文给出了基本理论与测试效果。如果只使用加速度计数据,理论上系统是不可观的,也即不能稳定估计小车的速度,偏移误差将不断累积。

在小车运动中,已知加速度计数据和GPS定位数据,加速度计和GPS数据都有一定误差,如何融合数据,估算出小车的位置与速度?融合传感器数据真的能提高数据精确度吗?本文将作简单测试验证。


二、系统模型与卡尔曼滤波


2.1 系统模型

卡尔曼滤波系统定义


2.2 卡尔曼滤波公式

卡尔曼滤波公式
在此例子中,各变量取值如下

在这里插入图片描述
可见,在预测过程使用加速度计获取的数据,在滤波过程使用GPS数据。


三、仿真分析


位移结果如下,滤波后方差变为原来 1/10.

在这里插入图片描述
速度估计结果如下图。图中蓝色点为使用滤波后位移直接差分得到的结果,但是误差很大。其实,这样是不科学的,因为随着采样频率增加,单位时间内位移 dt 滤波的误差不会变化,但是 v=ds/dtdt 随采样频率减小,误差会越大。而采用卡尔曼滤波的结果,误差较小。

在这里插入图片描述


四、实测数据与仿真


4.1 仿真分析

将大疆无人机带出去,获取加速度度与GPS数据,以及飞控计算的速度与位置。将使用自己写的卡尔曼滤波器计算位置与速度,与大疆的结果对比。

结果如下

可见,只使用加速度积分计算速度与位置,会随着时间不断漂移。使用加速度与GPS数据融合,能够很好地避免数据漂移。

从图中还可见,DJI的GPS并没有很大的误差,几乎在20cm以内,很可能将原始GPS数据滤波。


4.2 补充细节

  1. 从之前的原理及程序还可以得知,估计位置与速度,并不需要测量速度加入卡尔曼滤波(当然有的话更好),加速度与GPS位移一起就能估算出速度与位移。

  2. 注意此处的加速度,已经转换到地球坐标系下。直接使用加速度计获取的数据是不行的,加速度计是在机体坐标系下。转换关系为
    a e = R a b a_e = R a_b ae=Rab
    a b a_b ab 为机体系下加速度,即加速度计测量结果; R R R为机体系到地球系的旋转矩阵; a e a_e ae 为地球系下的加速度。

  3. GPS获得经纬度,如果已知两点的经纬度分别为 ( α 1 , β 1 ) , ( α 2 , β 2 ) (\alpha_1, \beta_1), (\alpha_2, \beta_2) (α1,β1),(α2,β2),采用东北天坐标系,计算其 x y xy xy 之间的位移分别为
    d x = ( α 2 − α 1 ) ⋅ r ⋅ cos ⁡ β 2 d y = ( β 2 − β 1 ) ⋅ r \begin{aligned} &d_x = (\alpha_2 - \alpha_1) \cdot r \cdot \cos\beta_2 \\ &d_y = (\beta_2 - \beta_1) \cdot r \end{aligned} dx=(α2α1)rcosβ2dy=(β2β1)r
    其中, r = 6378137 r=6378137 r=6378137 为地球半径。

代码与姿态估计参考链接:

https://m.ke.qq.com/course/5343321?_bid=167&_wv=2147487745&term_id=105522580&taid=13615218132355161&from=share&tuin=5a4b8cb5#from=androidapp

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

IMU和GPS数据融合估计位置与速度(MATLAB实现) 的相关文章

  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 如何在Matlab中将世界坐标转换为像素索引

    我有 512x512x313 体积的 dicom 图像 并且我有一个以世界坐标表示的点 57 7475 63 4184 83 1515 我如何在 Matlab 中获得该世界坐标的相应像素坐标 我不想戳破你的幻想 但你所要求的是不可能的 我能
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 非模态 questdlg.m 提示

    我的代码绘制了一个图 然后提示用户是否想使用不同的参数绘制另一个图 问题是 当 questdlg m 打开时 用户无法查看绘图的详细信息 这是代码 while strcmp Cont Yes 1 Some code modifying da
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 使用 WGS84 椭球的距离

    考虑点 P1 60 N 20 E 0 和 P2 60 N 22 E 0 地球表面 当形状为 P1 和 P2 时 点 P1 和 P2 之间的最短距离是多少 地球是使用 WGS 84 椭球体建模的吗 不幸的是 文森蒂算法对于某些输入无法收敛 地
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000

随机推荐

  • msOS学习之路(1)

    msOS学习之路 xff08 1 xff09 1 msOS的初步认识 刚刚拿到msOS开发板的时候 xff0c 看了一下开发板 xff0c 感觉非常高端 xff0c 再看一下芯片 xff0c 用的是stm32 当时我就觉得我得先学习stm3
  • msOS学习之路(2)

    基于msOS自动回火机的实现 1 简介 1 1 背景 基于msOS自动回火机的实现的实例是学习msOS比较好的入门实例 xff0c 它包括msOS界面的设计 数据库的使用 系统节拍的使用 按键的使用 系统节拍使用等 xff0c 通过这个例子
  • msOS学习之路(4)

    设备层简单理解 1 设备层相关定义 设备层的相关定义是在device h文件中定义的 xff0c 包括按键 模拟量输入 数字量输入 输出枚举或者类型定义等 xff0c 对于一些结构体的理解 xff0c 例如 xff1a ADC结构体 xff
  • 【STM32】STM32CubeIDE HAL库Ring-buffer例程

    板子G474RE STM32HAL库Ring buffer使用 注意 xff1a HAL库中 xff0c 中断每执行一次 xff0c 就关闭 xff0c 所以需要重新开启中断 第一次开启在main函数中 HAL UART Receive I
  • 【ROS】多机协同ROS安装使用

    目录 通信框架ROS 安装ROS 测试ROS 控制协同 协同感知 通信框架ROS ROS是一种分布式软件框架 xff0c 节点之间通过松耦合的方式进行组合 xff0c 在很多应用场景下 xff0c 节点可以运行在不同的计算平台上 xff0c
  • 【无人机】PX4,ROS,Ubuntu20仿真运行

    参考 xff1a https docs px4 io master en ros mavros installation html https docs px4 io master en dev setup dev env linux ub
  • 【无人机】PX4,源码简要分析

    看看源码目的很单纯 xff0c 就是想有没有控制方面的代码可以移植到其它地方 无人机 PX4 xff0c ubuntu18仿真运行 从官网可能下载代码不全 xff0c 这是编译完成的源码 xff0c 有点大 xff01 xff01 xff0
  • 内核层读写应用层文件,使用filp_open函数。

    转载 xff1a http soft chinabyte com os 421 11398421 shtml 有时候需要在Linux kernel 大多是在需要调试的驱动程序 中读写文件数据 在kernel中操作文件没有标准库可用 xff0
  • 怎样去理解异常SVC和PendSV

    目录 什么是SVC和PendSV 什么是SVC和PendSV SVC xff08 系统服务调用 xff09 和 PendSV xff08 可悬挂系统调用 xff09 它们多用于在操作系统之上的软件开发中 SVC 用于产生系统函数的调用请求
  • vscode开发ROS基本配置订阅PX4中imu数据

    目录 安装vscode Linux版本 安装vscode插件 配置头文件路径 订阅PX4中imu数据 参考 xff1a ROS基本操作 ROS中订阅节点消息测试 ROS下如何订阅任意话题 步步清风皆是你的博客 CSDN博客 安装vscode
  • 执行 install_geographiclib_datasets.sh 错误!

    执行 install geographiclib datasets sh 错误 xff01 原因被墙 xff01 解决 xff1f Ubuntu 18 04 在 usr share 下目录新建 GeographicLib 目录 先将 geo
  • ubuntu查看文件依赖、安装libopencv

    ubuntu查看文件依赖 安装libopencv 1 ubuntu中 xff0c 当需要查看某个文件运行时 xff0c 需要那些依赖库时 xff0c 可以在终端输入指令 ldd name name为文件名字 2 出现libopencv相关依
  • VNC远程连接不上ubuntu服务器,显示time out

    原因 xff1a 可能是出现了wired unmanaged并且启动不了屏幕共享 xff08 screen sharing xff09 xff0c 即开关打不到on上面 解决方案1 xff1a https askubuntu com que
  • OpenCV(三):一步步实现图像定位(Python版)

    一 预期目标 如下图 xff0c 要识别图中的国旗 xff0c 然后框选出来 xff0c 并且返回国旗的中心位置 xff0c 效果如下 彩色图像大小 400 264 目标中心位置 225 218 二 准备工作 1 将下面的图像另存为在本地
  • PX4教程翻译(1)序+前言

    序 最近打算实现树莓派控制 Pixhawk 无人机 xff0c 做了近一个星期 xff0c 还是没有成功 由于没有系统的中文教程 xff0c 零散地看了许多博客 正如万山圈子里 xff0c 一山放过一山拦 各种Bugs层出不穷 于是决心静心
  • raise ResourceNotFound(name, ros_paths=self._ros_paths) ResourceNotFound: gazebo_ros

    电脑为Ubuntu16 04 xff0c 安装来ROS xff08 kinetic版本 xff09 和 gazebo xff08 9版本 xff09 xff0c 在做PX4固件仿真 xff0c 想实现外部控制Pixhawk xff0c 但是
  • ROS综合应用(一)树莓派外部控制 Pixhawk(一站到底)

    序言 上一次 说到学习 ROS xff0c 主要是因为在做多无人机协同控制项目 听说可以使用 ROS 来实现树莓派控制 Pixhawk 无人机 xff0c 这样可以不用修改飞控源码 xff0c 而且可以用树莓派做图像处理 于是开始了一场浩浩
  • 卡尔曼滤波器MATLAB实现(从一维到三维)

    一 场景设置与效果图 假设一架无人机携带了一个气压计和GPS xff0c 定位精度都为1m xff0c 数据采样频率都为5Hz xff0c 100s时间螺旋上升40m xff0c 螺旋半径为20m 在无人机飞行过程中 xff0c 1m的精度
  • linux Linux 3.x的设备树(Device Tree) dts 介绍

    在http blog csdn net 21cnbao article details 8457546 进行整理修改 xff0c 感谢此博主 1 1 1 简介 Linus Torvalds在 2011 年 3 月 17 日的 ARM Lin
  • IMU和GPS数据融合估计位置与速度(MATLAB实现)

    一 问题与仿真 假设小车在一个方向上以 2cm s2 的加速度运动了 100s xff0c 使用加速度计和GPS测量小车位置 GPS定位误差为高斯分布 xff0c 方差为4m xff1b 加速度计的误差也为高斯分布 xff0c 方差为0 0