IMU参数辨识及标定

IMU参数辨识及标定

、标定参数分析

        标定的本质是参数辨识。首先明确哪些参数可辨识,其次弄清怎样辨识。

        参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。

  • IMU需要标定的参数主要是确定性误差随机误差,确定性误差主要标定biasscalemisalignment,随机误差主要标定noiserandom walkkalibr_allan 是用于求取随机误差的开源工具。

可以中英对照 

1.参数项

1) 零偏

        这个比较好理解,就是输出比输入多了一个常值误差。

        需要注意的是,通过Allan方差分析,得到了器件的量化噪声、角度随机游走、角速率随机游走、零偏不稳定性噪声、速率斜坡,仔细看,这些都是对零偏质量的分析,也可以直观的理解为零偏的波动和漂移程度,这里面并没有分析零偏本身的大小,而这个才是我们标定里要去估计的那个常值误差。

                加速度计的零偏在这里表示为

        陀螺仪的零偏在这里表示为

2) 标度因数误差

        也叫刻度因数误差。假设器件输出的是标准单位角速度(rad/s),那么输出和输入的比就是1。如果不是,就得需要标定,修正这个比例。

        加速度计的标度因数这里表示如下:

        陀螺仪的标度因数这里表示为:

  1. 修改配置文件

        进入之前编译好的imu_utils文件夹下xxxx.launch文件(自己添加的)查看相关设置:

3) 安装误差

        这里面b坐标系是正交的imu坐标系,g坐标系的三个轴是分别对应三个陀螺仪。由于加工工艺原因,陀螺仪的三个轴并不正交,和我们导航中使用的正交轴不重合。我们需要仔细想一想,这个安装误差怎么在陀螺输出中体现出来的,因为我们标定时只能采集到陀螺的输出,而无法直接去测量安装误差。理论上,在陀螺坐标轴和b系重合的情况下,我们沿b系某一个坐标轴旋转,那么其他两个轴是不会有角速度输出的,而有了安装误差以后,便有了输出,据此,我们就可以建立输出和误差之间的关系了。以图中一项误差为例,Sgxy表示的就是y轴的单位输入,在x陀螺上由安装误差造成的输出。由此,我们可以把所有的安装误差都成矩阵形式,即:

        加速度计的安装误差原理和它一样,直接给出公式。

        这样一共有12项安装误差参数。有的时候,可以简化为9项,具体什么情况下简化,以及怎样简化,我们会在本文的后面讲。

2)启动launch文件

source devel/setup.bash

roslaunch imu_utils xxxx.launch

2. 误差模型

        通过上面的参数分析,我们已经可以很容易地写出误差模型了。

        陀螺仪:

        其中W是陀螺输出,ω是各坐标轴真实输入。该公式的展开形式为

        同理,可以得到加速度计的展开形式为:

二、利用imu_utils 标定IMU参数

        imu_utils是用于求取IMU随机误差的开源工具。

1. 下载imu_utils和code_utils

imu_utils下载地址为:GitHub - gaowenliang/imu_utils: A ROS package tool to analyze the IMU performance.
code_utils下载地址为:GitHub - gaowenliang/code_utils: my code utils

注意:

1、全局安装ceres库,code_imu依赖ceres

2、不要同时把imu_utilscode_utils一起放到src下进行编译。由于imu_utils依赖code_utils,所以先把code_utils放在工作空间的src下面,进行编译。然后再将imu_utils放到src下面,再编译。

2. 安装依赖并编译

sudo apt-get install libdw-dev

 2.1 编译code_utils
2.2 安装Ceres

Ubuntu20.04安装Ceres1.14.0 - 知乎

2.3 构建工作空间编译code_utils

问题:

sumpixel_test.cpp文件

问题1修改#include "backward.hpp"为 #include“code_utils/backward.hpp”

问题2

解决:添加头文件:#include"opencv2/imgcodecs/legacy/constants_c.h"

问题3

解决:V_MINMAX 改为 NORM_MINMAX

mat_io_test.cpp文件

问题:

解决:

opencv4.x以上,有些宏,API名字改了,需要改为新的:

CV_LOAD_IMAGE_UNCHANGED 改为 cv::IMREAD_UNCHANGED

CV_LOAD_IMAGE_GRAYSCALE 改为 cv::IMREAD_GRAYSCALE

CV_LOAD_IMAGE_COLOR 改为 cv::IMREAD_COLOR

CV_LOAD_IMAGE_ANYDEPTH 改为 cv::IMREAD_ANYDEPTH

3 imu_utils编译

文件结构:

        将 ROS 包imu_utils放入code_utils的工作区src下面进行编译使用catkin_make;进行构建

        CMakeLists.txt文件下

        代码修改如下:

修改set(CMAKE_CXX_FLAGS "-std=c++11")为set(CMAKE_CXX_FLAGS "-std=c++14")

4 播放bag文件,进行离线标定IMU(使用imu_utils计算allan方差)

4.1 播放rosbag

rosbag play -r 200 imu.bag               // 200 倍速播放rosbag

4.2 运行标定文件

source ./devel/setup.bash

roslaunch imu_utils gh5a5s1.launch

注意:等rosbag播放两秒左右在启动launch文件,因为在IMU前几分钟录制的数据误差比较大。

4.3 标定结果

        数据包播放结束之后,在/imu_utils/data/这个文件夹下会出现一系列的参数文件,如上图所示。

        打开xxxx_imu_param.yaml这个文件,会看到计算出来的噪声和随机游走的系数值,如下所示:

        虽然我们得到了标定结果,但这个标定结果并不是我们最终的结果。现在得到的结果的单位是rad/s和m/s^2,噪声是个能量概念或者说功率概念,我们还要把标定得到的参数归一化到每单位sqrt(hz)尺度下,即/aqrt(Hz)。

        加速度allan方差图

        加速度每个轴的allan方差

        陀螺的allan方差

        陀螺每个轴的allan方差

有时候播放完数据,程序没有任何反映。试试300rete 播放。

三、 利用kalibr_allan标定IMU随机误差

        该方法需要安装Matlab,才能编译kalibr_allan。

1. 下载kalibr_allan并编译

        问题:

        在/kalibr_allan-master/bagconvert/cmake目录下找到FindMatlab.cmake文件,更改matlab的地址。

find_program(MATLAB_EXE_PATH matlab

    PATHS /usr/local/MATLAB/R2018a/bin)

        把 /usr/local/MATLAB/R2018a/bin更换成自己matlab的地址

        修改之后,删除build和dev文件夹,再次catkin_make

2. 生成mat文件

        rosrun bagconvert bagconvert bag名字 topic名字

3. matlab计算IMU误差

        利用/kalibr_allan/matlab/SCRIPT_allan_matparallel.m生成误差文件。

生成误差的.m文件:

注意:修改路径,最好改为绝对路径

/kalibr_allan/matlab/SCRIPT_allan_matparallel.m

4. 绘制allan方差曲线

4.1 运行/kalibr_allan/matlab/SCRIPT_process_results.m文件

修改路径mat_path的路径修改为步骤3中得到的.mat文件

4.2 标定结果

accelerometer_noise_density = 0.00102011

accelerometer_random_walk   = 0.00003924

gyroscope_noise_density     = 0.00001248

gyroscope_random_walk       = NaN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map,key为数值,value为其坐标 3、遍历二维数组元素,再在map中找该元素对应的value值(二维数组形式),倘若value.size为1,那直接返回-1&…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

PostgreSql 01 安装,创建用户,创建数据库,创建关系

01.安装postgresql postgreSql 是在linux上 去官网找按照的方式 选择好postgreSql 的版本,已经Linux的发行版本 拿到命令,直接扔到Linux中运行即可 # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

前言 灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块&#xff0c;在展示方面十分的美观&#xff1a; 这方面原理可以简化为&#xff0c;在Markdown中&#xff0c;你可以使用HTML标签来添加图像&#xff0c;就像这样&#xff1a; <tr><…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

亚信安慧AntDB:激荡数据浪潮,塑造智能新纪元

亚信安慧AntDB一直秉承着“技术生态”的理念&#xff0c;不断进行技术创新和功能增强&#xff0c;以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统&#xff0c;AntDB在技术上始终保持敏锐的洞察力&#xff0c;不断汲取国内外先进技术的精华&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

【讲解下Gitea】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

使用plasmo开发浏览器插件在网页指定位置添加自定义UI

使用plasmo开发浏览器插件的时候&#xff0c;有时候需要在指定网站的指定页面添加自定义的UI内容&#xff0c;如果通过content.js内容脚本去通过js创建的话&#xff0c;可就太麻烦了&#xff0c;要写不少的js代码。不过plasmo已经帮我们实现了这个功能&#xff0c;就是Content …

【CAD建模号】学习笔记(一)

一、概述 CAD建模号是一款用于在智能手机及平板电脑等移动设备上进行三维建模的app&#xff0c;最初发布于2019年。 二、基本操作 手指直接点按&#xff0c;拖动来粗略创建和操作对象&#xff1b;双指缩放视图&#xff0c;双指移动视图。手指长按屏幕&#xff0c;出现红色小…

css-盒子阴影

1.box-shadow: 10px 20px 10px 10px blue; 参数对应顺序&#xff1a;上下&#xff0c;左右 &#xff0c;模糊程度&#xff0c;颜色 &#xff0c;阴影大小 2.box-shadow: 10px 20px 10px 20px blue,-10px -20px 10px 50px red; 负号就是相反方向 支持多个阴影 在后面加逗号 3…

汽车充电桩主板购买渠道汇总

随着充电桩设施的迅速普及&#xff0c;充电桩作为其中关键组件之一&#xff0c;市场需求不断增长。在互联网科技飞速发展的背景下&#xff0c;充电桩主板的采购渠道更加多元化&#xff0c;下面我们来探讨消费者、充电桩运营商和生产商可以从何处购买充电桩主板。 直接联系制造商…

10-代码随想35搜索插入位置

35.搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5…

AWS迁移教程,Redis迁移到Elasticache

当企业不断出海拓展业务&#xff0c;面临的挑战之一就是如何高效迁移应用程序及数据库至云端。为解决这一问题&#xff0c;AWS云专门提供多种简单且高效的迁移方式&#xff0c;进行帮助企业实现应用程序的平稳迁移&#xff0c;从而降低迁移过程中的风险和成本。下面九河云将为大…

小程序地理位置接口wx.getLocation申请审核解决方法(详细说明及避坑)

本人申请了三次才最终通过&#xff0c;简单说一下坑 前几天想实现定位功能改了一天代码手机上也不行。 晚上登上小程序管理界面才发现那个功能要申请。。。那就申请呗 1. 申请路径 小程序页面-开发-开发管理-接口设置-地理位置 之后就提交申请&#xff0c;两次都不过就不理解了…

67、yolov8目标检测和旋转目标检测算法batchsize=1/6部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwd=q2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model = YOLO("yolov8s.yaml") # buil…

云智慧:拥抱AI算法驱动的智能运维服务创新引擎

随着信息化、数字化、智能化的加码&#xff0c;企业对人工智能、大数据等技术应用呈现出明显兴趣&#xff0c;海笔研究对国内中型规模企业调研表明&#xff0c;在2020年&#xff0c;54.1%的企业选择购买人工智能类应用&#xff0c;41.9%的企业选择购买大数据及BI类应用&#xf…

标准库不带操作系统移植FreeModbus到STM32

添加FreeModbus代码 首先准备一个空白的标准库项目。 下载FreeModbus源码。 将源码中的modbus文件夹复制到项目路径下&#xff0c;并把demo->BARE->port文件夹的内容也添加进来。 新建一个文件port.c备用。然后打开项目&#xff0c;将上述文件添加至项目&#xff0c;…

php phar反序列化POC编写笔记

具体结构不细究&#xff0c;主要方便写poc代码&#xff0c;比如有如下文件内容&#xff1a; 文件内容如下&#xff1a; file base64.b64decode("PD9waHAgX19IQUxUX0NPTVBJTEVSKCk7ID8DQp9AQAAAQAAABEAAAABAAAAAABHAQAATzo0MDoiSWxsdW1pbmF0ZVxCcm9hZGNhc3RpbmdcUGVuZG…

Kepler无代码:让应用开发0门槛,普通人秒变“大神”!

在数字化时代&#xff0c;软件开发应用已成为我们生活和工作中不可或缺的一部分。 然而&#xff0c;对于大多数人来说&#xff0c;编写代码、开发应用似乎是一个遥不可及的技能。幸运的是&#xff0c;随着无代码平台的兴起&#xff0c;普通人也能轻松成为应用开发者&#xff0…