从零写VIO|第二节——作业:使用Allen方差工具标定IMU

2023-05-16

这里写目录标题

  • 作业内容
      • 1 安装im_utils
          • 1.1. 安装依赖:
          • 1.2 编译
          • 1.3 可能出的错误
      • 2. 运行
          • ~~2.1 采集IMU数据~~
          • 2.2 生成imu.bag
          • 2.3 新建imu.launch文件
          • 2.4 播放数据
          • 2.5 ==启动节点==
      • 3. 绘制Allan方差图
      • 4. 编译vio_data_simulation-master
      • 5. 实验结果分析
  • 附:vio学习第二节代码运行教程

作业内容

在这里插入图片描述
在IMU采集数据时,会产生两种误差:确定性误差和随机性误差,为获得精确的数据,需要对上述两种误差进行标定。

1、确定性误差

确定性误差主要包括bias(偏置)、scale(尺度)、**misalignment(坐标轴互相不垂直)**等多种。常使用六面静置法标定加速度计和陀螺仪的确定性误差。

2、随机误差

随机误差主要包括:高斯白噪声、bias随机游走(bias的导数)。加速度计和陀螺仪随机误差的标定通常使用Allan方差法,Allan方差法是20世纪60年代由美国国家标准局的David Allan提出的基于时域的分析方法。

在这里插入图片描述
在这里插入图片描述

IMU标定Allan方差工具:
常用的Allan方差工具,主要有以下两种:
https://github.com/gaowenliang/imu_utils
https://github.com/rpng/kalibr_allan

  • 下面是imu_utils的主页,可以下载代码,也有使用步骤
    https://github.com/gaowenliang/imu_utils
    可以下载imu_utils主页最后面提供的数据集。

在这里插入图片描述
首先安装ROS——指路 https://blog.csdn.net/weixin_40224537/article/details/105520833
安装ceres-solver

1 安装im_utils

1.1. 安装依赖:
sudo apt-get install libdw-dev
1.2 编译

先编译code_utils,然后再编译imu_utils,不能同时编译

mkdir -p imu-calibration/src
cd imu-calibration/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make
cd imu-calibration/src
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make
1.3 可能出的错误

错误一 路径错误:

imu-calibration/src/code_utils/src/sumpixel_test.cpp:2:10: fatal error: backward.hpp: 没有那个文件或目录
 #include "backward.hpp"
          ^~~~~~~~~~~~~~
compilation terminated.

解决办法:
在CMakeLists.txt中加入包含路径:include_directories( "include/code_utils")
再次catkin_make,即可成功。

错误2:std::ofstream未定义

/home/***/imu-calibration/src/imu_utils/src/imu_an.cpp:69:19: error: aggregate ‘std::ofstream out_t’ has incomplete type and cannot be defined

解决办法:
打开文件imu_utils/src/imu_an.cpp,添加:

#include <fstream>

2. 运行

2.1 采集IMU数据

参考资料
让IMU静止不动两个小时,录制IMU的bag.~~

cd MYNT-EYE-D-SDK
source wrappers/ros/devel/setup.bash
roslaunch mynteye_wrapper_d display.launch
rosbag record /mynteye/imu/data_raw -O imu.bag

两个小时以后按Ctrl+C完成录制。

2.2 生成imu.bag

【提醒!!!】记得另外开一个终端运行roscore
将贺老师给的vio_data_simulation-ros_version放在~/imu-calibration/src

XXX/vio_data_simulation-ros_version/src/gener_alldata.cpp中修改文件的路径:

bag.open("./imu.bag", rosbag::bagmode::Write);

进行编译:

cd ~/imu-calibration
catkin_make

出现类似下图的错误:
在这里插入图片描述
解决办法:

// 在出错文件内imu.cpp包含万能的头文件:
#include<bits/stdc++.h>

出现下图即成功:
在这里插入图片描述环境变量

source  ./devel/setup.bash

这儿可能用source devel/setup.bash依然会报找不到功能报的错误,所以加上./
自此生成了一个节点,可以生成一个imu.bag的包
运行

roscore
cd ~/imu-calibration/devel/lib/vio_data_simulation
rosrun vio_data_simulation vio_data_simulation_node

运行完之后在此文件夹下就生成了imu.bag的包(模拟imu的采集数据)
这个bag包就是模拟的IMU采集数据,于是我们使用这个数据,进行下面的实验——生成allen方差计算:

2.3 新建imu.launch文件

进入imu-calibration/src/imu_utils/launch 文件夹,新建imu.launch文件:

<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/imu"/>
        <param name="imu_name" type="string" value= "imutest"/>
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
        <param name="max_time_min" type="int" value= "120"/>
        <param name="max_cluster" type="int" value= "100"/>
    </node>
</launch>

根据自己的IMU,修改imu_topic 和imu_name

然后,运行(在~/imu-calibration/devel/lib/vio_data_simulation文件夹下)

2.4 播放数据
rosbag play -r 200 imu.bag

在这里插入图片描述

2.5 启动节点

(此终端与roscore终端共同并行运行)

roslaunch imu_utils imu.launch

在这里插入图片描述
在imu-calibration/src/imu_utils/data文件夹下,会生成16个txt文件:

在这里插入图片描述

3. 绘制Allan方差图

接下来,去画出来这些方差图,在scripts下有很多matlab的脚本文件.

  1. 修改 imu_utils/scripts/draw_allan.m中文件路径:

  2. 由于ubuntu上还没装matlab,因此我把这程序和txt文件放到windows下的matlab去运行,网址:https://www.tutorialspoint.com/execute_matlab_online.phphttps://octave-online.net/

在这里插入图片描述
在这里插入图片描述
根据Allan方差图即可读出相应的误差。

可在如下路径中修改测试IMU仿真参数:

/home/ubuntu/imu-calibration/src/vio_data_simulation-ros_version/src/param.h
// noise

double gyro_bias_sigma = 0.00001;  // 零偏稳定性,运行中缓慢变化

double acc_bias_sigma = 0.0001;     // 零偏稳定性,运行中缓慢变化

double gyro_noise_sigma = 0.025;    // rad/s  测量噪声

double acc_noise_sigma = 0.029;      // m/(s^2)  测量噪声

4. 编译vio_data_simulation-master

cd vio_data_simulation-master
mkdir build
cd build
cmake ..
make
cd ../bin
./data_gen

此时,在vio_data_simulation-master/bin目录下会生成一些txt文件,我们需要的是imu_pose.txtimu_int_pose.txt,然后用Python的matplotlib绘图。

cd ../python_tool
python draw_trajcory.py

【遇到error以及解决办法】——指路

说明
imu_pose.txt是由给定的轨迹方程和欧拉角,生成IMU的pose,imu_int_pose.txt是由给定的轨迹得到速度和加速度,再根据欧拉法和中值法得到IMU的pose,通过比较两个pose,可以得到欧拉法和中值法的效果。

(1)欧拉法效果

在这里插入图片描述
(2)中值法效果

5. 实验结果分析

参考资料

附:vio学习第二节代码运行教程

1. 安装根据官方教程安装ros
2. 打开终端执行
mkdir ros_workspace
cd ros_workspace
mkdir src

ros_workspace文件夹就是你的工作空间…(本博客中实际工作空间可以在imu-calibration/src)
3. 将文件夹vio_data_simulation-ros_version放入刚刚新建的~/ros_workspace/src文件夹里面
4. 编译

cd ~/ros_workspace
catkin_make
  1. 打开vio_data_simulation-ros_version/src/param.h可以设置参数
  2. 执行
source devel/setup.bash
rosrun vio_data_simulation gener_alldata.cpp

出现错误:
在这里插入图片描述
解决办法:

 cd ‘gener_alldata.cpp所在的文件夹’
 chmod +x gener_alldata.cpp

运行后再执行rosrun。

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

从零写VIO|第二节——作业:使用Allen方差工具标定IMU 的相关文章

  • CUDA和cudnn的安装

    参考 https blog csdn net weixin 44170512 article details 103990592CUDA 和 TF的版本匹配 在最下面 https www tensorflow org install sou
  • 从零开始学习HBase - 一文详解HBase常用API

    HBase常用API总结 使用的HBase版本为 1 31 1 pom xml文件 span class token comment lt 配置 Hbase 的依赖 gt span span class token tag span cla
  • 基于SDN的访问控制模块实现

    一 背景 1 访问控制 访问控制技术 xff0c 指防止对任何资源进行未授权的访问 xff0c 从而使计算机系统在合法的范围内使用 意指用户身份及其所归属的某项定义组来限制用户对某些信息项的访问 xff0c 或限制对某些控制功能的使用的一种
  • Java -- 访问权限控制(public,protected,private)

    访问权限控制 xff08 public xff0c protected xff0c private xff09 Java中最大权限到最小权限依次为 xff1a public xff0c protected xff0c private 类库
  • 认识一下toB和toC

    这个话题似乎是老生常谈 xff0c 但其实每个人的理解都不尽相同 xff0c 甚至一个人在不同阶段也有很大不同 xff0c 就好像金庸武侠独孤求败的利剑 软剑 重剑 木剑 xff0c 阅历不同 xff0c 感悟不同 xff0c 境界就不同
  • 将Docker镜像安全扫描步骤添加到CI/CD管道

    使用GitlabCI和Trivy 介绍 如今 xff0c 镜像安全扫描变得越来越流行 这个想法是分析一个Docker镜像并基于CVE数据库寻找漏洞 这样 xff0c 我们可以在使用镜像之前知道其包含哪些漏洞 xff0c 因此我们只能在生产中
  • 卡尔曼滤波器之经典卡尔曼滤波

    参考文献 xff1a xff11 http www bzarg com p how a kalman filter works in pictures xff12 https blog csdn net u010720661 article
  • 卡尔曼滤波器之扩展卡尔曼滤波

    参考文献 xff1a xff11 https zhuanlan zhihu com p 63641680 目录 xff11 xff0e 非线性模型 xff12 xff0e 非线性模型到线性模型的近似 xff11 xff0e 非线性模型 卡尔
  • VINS fusion软件架构分析(3)--- 输入IMU和相机信息 inputIMU + inputImage

    文章目录 1 输入IMU和相机信息1 1 inputIMU1 1 1 fastPredictIMU1 1 1 1 Utility deltaQ 1 1 2 pubLatestOdometry知识点 pair 1 2 inputImage1
  • VINS fusion软件架构分析(2)---- 从参数文件读取参数

    1 参数配置文件 VINS是利用参数文件yaml统一管理重要的参数 xff0c 主要分为两个参数配置文件 xff0c 如下图 普通参数配置文件 xff0c 如euroc mono imu config yaml相机模型参数配置文件 xff0
  • VINS fusion软件架构分析(5)--- 坐标系转换

    对于VINS代码的解读 xff0c 其中一个重要的知识储备就是理解坐标系间的转换 xff0c 这对于后面代码阅读非常重要 xff0c 因此本章重点解释一下 VINS中有3个坐标系 xff1a 世界坐标系 worldIMU坐标系body相机坐
  • 《算法导论》习题5.3-1 ~ 5.3-7

    算法导论 习题 5 3 1 5 3 7 5 3 5 带星号我抄了一下题目 5 3 6 比较有意思我抄了一下题目 其他的题可以自己对照书 原书第三版 5 3 1 直接考虑第2次循环前 第1次循环后第1个位置的元素是原集合1 n中任意一个元素的
  • ROS:坐标系之间的关系 (map \ odom \ base_link)

    ROS 坐标系之间的关系 map odom base link 在使用ROS进行定位与导航操作时 xff0c 会伴随着各种坐标系 xff0c 并且每种坐标系都有明确的含义 xff0c ros中定义了常见的坐标系 xff0c 并且所有的坐标系
  • 上下拉电阻的作用

    这是在论坛上收集到的一些总结 xff1a 一 OC OD门 xff0c 这种门结构如果不做上拉的话 xff0c 是不能实现电平的高底跳变的 xff0c 不能实现跳变 xff0c 便不能表征数据 二 驱动能力 xff0c 我们看很多的CPU或
  • 实测MySQL 查询结果保留两位小数函数的区别汇总

    MySQL查询结果保留两位小数常用的几个函数的区别 xff0c 使用场景 1 随机函数format x d 2 格式化小数函数format x d 例如 xff1a select format 23456 789 2 或 select fo
  • STLINK怎么与STM32单片机连接

    STLink是ST官方开发的单片机仿真工具 xff0c 可以烧写程序 在线仿真 xff0c 使用非常方便 STLink具有两种接口 xff0c 分别为 1 SWD模式 2 SWIM单总线模式 SWD模式主要针对STM32系列的单片机 xff
  • Ubuntu 18.04系统下创建新用户

    以下介绍在Ubuntu 18 04系统下创建新用户 目录 修改用户权限及删除用户的正确方法 在Ubuntu系统上创建新用户使用 sudo useradd 用户名 命令 xff0c 但只能创建用户 xff0c 不能在 home 中创建用户目录
  • 大数据面试题(一)

    一 hdfs写文件的步骤 答案 xff1a 1 client向NameNode申请上传 xxx txt文件 2 NN向client响应可以上传文件 3 Client向NameNode申请DataNode 4 NN向Client返回DN1 D
  • packages.xml和packages.list全解析

    更多干货 xff0c 欢迎关注微信公众号 tmac lover 今天给大家介绍一下Android系统中保存app信息的两个配置文件 xff0c packages xml和packages list 系统中所有安装的app的基本信息在这里都能
  • linux中vim: command not found

    bash vim command not found 1 查看系统是否安装完整vim 2 安装vim 3 我的解决过程 解决问题步骤 xff1a 1 查看系统是否安装完整vim 执行一下命令 xff1a rpm qa grep vim 如果

随机推荐

  • 【FreeRTOS】任务的创建

    启动流程 LiteOS 和 ucos 第一种和第二种都可以使用 xff0c 由用户选择 xff0c RT Thread 和 FreeRTOS 则默认 创建各个任务 xff0c 然后等待启动调度器创建一个起始任务 xff0c 任务都在这个起始
  • 【FreeRTOS】信号量和互斥量

    二值信号量 同步 xff0c 创建时为空 xff0c 任务1获取 xff08 空 xff09 进入阻塞 xff1b 任务2释放信号量 xff0c 于是任务1获取信号量得以进入就绪状态 资源被获取了 xff0c 信号量值就是 0 xff0c
  • 计算机网络笔记:TCP三次握手和四次挥手过程

    TCP是面向连接的协议 xff0c 连接的建立和释放是每一次面向连接的通信中必不可少的过程 TCP连接的管理就是使连接的建立和释放都能正常地进行 三次握手 TCP连接的建立 三次握手建立TCP连接 若主机A中运行了一个客户进程 xff0c
  • echarts与highcharts学习及区别

    1 echarts用法更广泛 xff0c highcharts更适合特定的某些需求 1 1 echarts和highcharts初始引用 xff0c import as echarts from echarts html要有一个容器 xff
  • 啥是驱动?

    Q amp A 什么是驱动 xff1f 驱动本质上是一个软件程序 xff0c 是内核与硬件之间通信的桥梁 xff0c 为应用程序屏蔽了硬件细节 内核可以通过驱动程序去初始化 释放设备 xff0c 内核可以通过驱动程序与设备做双向的数据交互
  • 基于STM32F1系列的OV7725摄像头初步使用(用于摄像头循迹)

    最近做项目需要用到OV7725 xff0c 于是花了些时间研究 由于OV7725对于工作频率的要求较高 xff0c 因此使用带FIFO的摄像头模块 代码参考自正点原子官方 OV7725资源 引脚说明 以下时关于十八个引脚的说明 xff08
  • CAS SSO单点登录实例

    1 因为是本地模拟sso环境 xff0c 而sso的环境测试需要域名 xff0c 所以需要虚拟几个域名出来 xff0c 步骤如下 xff1a 2 进入目录C Windows System32 drivers etc 3 修改hosts文件
  • Ubuntu屏幕录像软件推荐-Kazam

    由于工作的关系 xff0c 需要经常录制一些软件的操作步骤当做教程 xff0c 现在由于使用了Ubuntu单系统平台 xff0c 以前录制的教程均不能正常运行了 xff0c 需要切换到VM xp里面使用 xff0c 造成很大的不变 xff0
  • 图像畸变矫正——透视变换

    图像畸变矫正 透视变换 由于相机制造精度以及组装工艺的偏差引入的畸变 xff0c 或者由于照片拍摄时的角度 旋转 缩放等问题 xff0c 可能会导致原始图像的失真 xff0c 如果要修复这些失真 xff0c 我们可以通过透视变换 xff0c
  • 微信JSAPI支付,微信浏览器内支付,解决微信H5支付只能在微信外浏览器支付的问题

    一 设置支付目录 请确保实际支付时的请求目录与后台配置的目录一致 xff08 现在已经支持配置根目录 xff0c 配置后有一定的生效时间 xff0c 一般5分钟内生效 xff09 xff0c 否则将无法成功唤起微信支付 在微信商户平台 xf
  • 解决python3 与 ROS中使用python2冲突的问题(亲测有效)

    文章转载于 https zhuanlan zhihu com p 27011617 方法一 xff1a conda install setuptools pip install U rosdep rosinstall generator w
  • Radmin FAQ

    故障排除提示 xff0c 技术指南 xff0c 文章方法 xff0c 反馈表等 通过主机选项连接 1 此选项使您可以在没有与要管理的计算机的直接 TCP IP 连接时通过主机进行连接 xff0c 但中间主机与目标计算机 xff08 网关等
  • 关于相机内参与外参的浅读

    学习人脸3D重建的第一天 xff0c 在首次接触3D相关的内容 xff0c 必须要搞清楚相机的成像原理 xff0c 如何将真实三维空间中的三维点与显示器 屏幕和图像等二维成像的平面映射 xff0c 以及了解该过程的推导方式和相关坐标系的换算
  • 嵌入式以及嵌入式行业的基本信息

    从技术实现上讲 xff0c 嵌入式的产品分为两大类 xff1a 一类简单的 xff0c 没有操作系统支持的 一类复杂的 xff0c 有操作系统的 就目前发展方向看 xff0c 后一种是趋势 前一种从程序实现上可分为3层 xff1a 硬件层
  • Linux i2c_driver probe被调用的流程分析(linux4.1.15)

    linux4 1 15 i2c driver probe被调用流程 span class token operator span span class token operator span span class token comment
  • linux uart 驱动中 open、read、write调用层次

    span class token comment Linux kernel release 2 6 xx span span class token comment linux uart 驱动中接收和发送函数的调用层次 xff0c 记录如下
  • Centos8 制作qcow2及使用

    制作及使用方法如下 xff1a 1 下载ios wget https archive kernel org centos vault 8 2 2004 isos x86 64 CentOS 8 2 2004 x86 64 dvd1 iso
  • 免费的期刊论文文献检索网站(收集整理)

    文献免费下载神器 xff0c 这里放5个可以直接下载SCI等论文网站 以下网站去地址栏直接搜 xff01 1 Sci Hub可谓是无人不知无人不晓 xff0c 其自开发以来 xff0c 便以星火燎原之势席卷学术界 xff0c 因为它可以免费
  • k8s 中 pod 之间的通信

    1 pod 内部通信 xff1a 通过 localhost 通信 2 同节点不同 pod 之间通信 xff1a 通过 linux 虚拟以太网设备或者是用两个虚拟接口组成的以太网接口对不同的网络命名空间连接起来通信 3 不同节点的不同 pod
  • 从零写VIO|第二节——作业:使用Allen方差工具标定IMU

    这里写目录标题 作业内容1 安装im utils1 1 安装依赖 xff1a 1 2 编译1 3 可能出的错误 2 运行 2 1 采集IMU数据 2 2 生成imu bag2 3 新建imu launch文件2 4 播放数据2 5 61 6