这里写目录标题

  • 作业内容
    • 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
// 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.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。

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

  1. 从零开始手写VIO 第二章 IMU传感器

    第二章 IMU传感器 课程代码: https://github.com/kahowang/Visual_Internal_Odometry/tree/main/%E7%AC%AC%E4%BA%8C%E ...

  2. 栅栏现象怎么用matlab写,Matlab 第二次作业

    Matlab 第二次作业 班级:通信11001班 姓名:张安娜 学号:201006091 题目:用Matlab说明频谱"栅栏效应"的影响. 已知三角波信号如图所示,采样间隔T=0. ...

  3. 第二次作业:熟悉使用工具

    GIT地址 https://github.com/Dedicate-labors/AchaoCalculator GIT用户名 Dedicate-labors 学号后五位 61425 博客地址 htt ...

  4. 《视觉SLAM进阶:从零开始手写VIO》第二讲作业-IMU仿真、MU imu_utils标定

    <视觉SLAM进阶:从零开始手写VIO>第二讲作业-IMU仿真.MU imu_utils标定 作业题目: 1 仿真代码解析 仿真代码地址:https://github.com/HeYiji ...

  5. 从零开始手写VIO第三章作业(含关键点细节及思维过程)

    文章目录 前言·与同主题博文的不同 1.代码修改 1.1阻尼因子 µ 随着迭代变化的曲线图 1.2完成曲线y = ax^2^ + bx + c的参数估计 1.3实现其他更优秀的阻尼因子策略 2.公式推 ...

  6. 从零开始的VIO——Allan方差工具

    1. 前言 通过<从零开始手写VIO>第二章的学习,我逐渐发现课程本身的内容并不是很难理解,老师讲的比较到位,但对我最大的困难在于环境配置.如果给我一个完整的实验环境让我修改代码.补全函数 ...

  7. 深蓝学院-手写VIO作业-第二章

    文章目录 一.基础作业,必做 环境配置说明 a. ROS环境搭建 b. Matlab安装 1.设置IMU 仿真代码中的不同的参数,生成Allen 方差标定曲线. a. 对于非ROS:生成运动imu数据 ...

  8. 深蓝学院《从零开始手写VIO》作业一

    深蓝学院<从零开始手写VIO>作业一 深蓝学院<从零开始手写VIO>作业一 1. VIO文献阅读 1.1 视觉与IMU进行融合之后有何优势? 1.2 有哪些常见的视觉+IMU融 ...

  9. 深蓝学院《从零开始手写VIO》作业七

    深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 将第二讲中的仿真数据(视觉特征,imu数据)接入V ...

最新文章

  1. 详解数组中的reduce方法
  2. Geoserver怎样设置地图不同路线显示不用颜色样式(同一个图层组设置多个图层不同样式)
  3. linux 进程死循环,Linux下如何处理一次用户态进程死循环问题
  4. java中类与类之间的关系
  5. Zuul:Pre和Post过滤器(下)
  6. Left 4 Dead升级补丁总汇(3663-3986)
  7. 数据库上机练习-1-建表
  8. origin拟合曲线方法
  9. 去掉百度地图api左下角百度logo标志或文字
  10. JDK1.6安装_BouncyCastle JCE扩展加密算法解决JDK1.6 sftp连接openssh8.6Algorithm negotiation fail问题
  11. xp显示连接上不了网络连接服务器地址,xp本地连接受限制|windows xp系统本地连接提示受限制或无连接怎么办...
  12. 调用Python的PyAutoGUI模块模拟登录QQ邮箱
  13. 如何向iphone手机网易云音乐添加本地音乐
  14. Linux网卡驱动分析
  15. 平凡程序员一年又一年的感悟(2019)
  16. 毕业设计周报(第六周)
  17. IaaS PaaS SaaS云服务三种应用模式
  18. 全闪存数据中心首次落地后,银行业数字化冲破“天花板”
  19. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战
  20. 小诀窍:不妨尝试从交付质量上打败对手

热门文章

  1. vivado IP核知识点学习
  2. ElasticsearchBboss MySQL 同步数据到Elasticsearch
  3. OAM 与 KubeVela:下一代云原生应用交付和管理实践
  4. 树形DP(放置街灯,uva 10859)
  5. 28岁自学Python转行靠谱吗?入行晚吗?
  6. 面向对象之猫抓老鼠小游戏
  7. 河海大学 专业课838 数据结构最强攻略
  8. 每周一品 · 无线充电设备中的磁性材料
  9. 小程序制作宋词欣赏海报
  10. 刷了 1000 多道算法题,一点小小的心得!