从零写VIO|第二节——作业:使用Allen方差工具标定IMU
这里写目录标题
- 作业内容
- 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的脚本文件.
修改 imu_utils/scripts/draw_allan.m中文件路径:
由于ubuntu上还没装matlab,因此我把这程序和txt文件放到windows下的matlab去运行,网址:
https://www.tutorialspoint.com/execute_matlab_online.php
或https://octave-online.net/
根据Allan方差图即可读出相应的误差。
可在如下路径中修改测试IMU仿真参数:
/home/ubuntu/imu-calibration/src/vio_data_simulation-ros_version/src/param.h
// noisedouble 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.txt
和imu_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
- 打开
vio_data_simulation-ros_version/src/param.h
可以设置参数 - 执行
source devel/setup.bash
rosrun vio_data_simulation gener_alldata.cpp
出现错误:
解决办法:
cd ‘gener_alldata.cpp所在的文件夹’chmod +x gener_alldata.cpp
运行后再执行rosrun。
从零写VIO|第二节——作业:使用Allen方差工具标定IMU相关推荐
- 从零开始手写VIO 第二章 IMU传感器
第二章 IMU传感器 课程代码: https://github.com/kahowang/Visual_Internal_Odometry/tree/main/%E7%AC%AC%E4%BA%8C%E ...
- 栅栏现象怎么用matlab写,Matlab 第二次作业
Matlab 第二次作业 班级:通信11001班 姓名:张安娜 学号:201006091 题目:用Matlab说明频谱"栅栏效应"的影响. 已知三角波信号如图所示,采样间隔T=0. ...
- 第二次作业:熟悉使用工具
GIT地址 https://github.com/Dedicate-labors/AchaoCalculator GIT用户名 Dedicate-labors 学号后五位 61425 博客地址 htt ...
- 《视觉SLAM进阶:从零开始手写VIO》第二讲作业-IMU仿真、MU imu_utils标定
<视觉SLAM进阶:从零开始手写VIO>第二讲作业-IMU仿真.MU imu_utils标定 作业题目: 1 仿真代码解析 仿真代码地址:https://github.com/HeYiji ...
- 从零开始手写VIO第三章作业(含关键点细节及思维过程)
文章目录 前言·与同主题博文的不同 1.代码修改 1.1阻尼因子 µ 随着迭代变化的曲线图 1.2完成曲线y = ax^2^ + bx + c的参数估计 1.3实现其他更优秀的阻尼因子策略 2.公式推 ...
- 从零开始的VIO——Allan方差工具
1. 前言 通过<从零开始手写VIO>第二章的学习,我逐渐发现课程本身的内容并不是很难理解,老师讲的比较到位,但对我最大的困难在于环境配置.如果给我一个完整的实验环境让我修改代码.补全函数 ...
- 深蓝学院-手写VIO作业-第二章
文章目录 一.基础作业,必做 环境配置说明 a. ROS环境搭建 b. Matlab安装 1.设置IMU 仿真代码中的不同的参数,生成Allen 方差标定曲线. a. 对于非ROS:生成运动imu数据 ...
- 深蓝学院《从零开始手写VIO》作业一
深蓝学院<从零开始手写VIO>作业一 深蓝学院<从零开始手写VIO>作业一 1. VIO文献阅读 1.1 视觉与IMU进行融合之后有何优势? 1.2 有哪些常见的视觉+IMU融 ...
- 深蓝学院《从零开始手写VIO》作业七
深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 将第二讲中的仿真数据(视觉特征,imu数据)接入V ...
最新文章
- 详解数组中的reduce方法
- Geoserver怎样设置地图不同路线显示不用颜色样式(同一个图层组设置多个图层不同样式)
- linux 进程死循环,Linux下如何处理一次用户态进程死循环问题
- java中类与类之间的关系
- Zuul:Pre和Post过滤器(下)
- Left 4 Dead升级补丁总汇(3663-3986)
- 数据库上机练习-1-建表
- origin拟合曲线方法
- 去掉百度地图api左下角百度logo标志或文字
- JDK1.6安装_BouncyCastle JCE扩展加密算法解决JDK1.6 sftp连接openssh8.6Algorithm negotiation fail问题
- xp显示连接上不了网络连接服务器地址,xp本地连接受限制|windows xp系统本地连接提示受限制或无连接怎么办...
- 调用Python的PyAutoGUI模块模拟登录QQ邮箱
- 如何向iphone手机网易云音乐添加本地音乐
- Linux网卡驱动分析
- 平凡程序员一年又一年的感悟(2019)
- 毕业设计周报(第六周)
- IaaS PaaS SaaS云服务三种应用模式
- 全闪存数据中心首次落地后,银行业数字化冲破“天花板”
- 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战
- 小诀窍:不妨尝试从交付质量上打败对手