相机与IMU联合标定

  • 1 imu_utils 标定IMU的内参
    • 1.1 安装环境
    • 1.2 录制IMU数据集
  • 2 kalibr 标定工具
    • 2.1 安装
    • 2.2 校准相机的内外参
    • 2.3 校准相机与IMU外参
  • 总结
  • 参考资料

1、 imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声

2、kalibr包标定相机的内外参数,相机与IMU之间的外参

这里我所使用的相机是ZED相机,IMU使用的是Xsens的IMU

1 imu_utils 标定IMU的内参

1.1 安装环境

这里使用的包是 imu_utils [1],使用这个包可以校准IMU的噪声密度和随机游走噪声

step1: 安装ceres库

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev
sudo apt-get install libgoogle-glog-dev libgtest-dev

下载编译 ceres-solver

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make
sudo make install

step2: 安装 code_utils
构建工作空间

mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
catkin_make

注意,这里需要修改 code_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14 并在添加 include_directories(include/code_utils)

sudo apt-get install libdw-dev
cd kalibr_workspace/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make

step3: 安装 imu_utils
注意,这里需要t同样修改 imu_utils 的 CMakeLists.txt 文件, CMAKE_CXX_FLAGS “-std=c++11” 改为 CMAKE_CXX_STANDARD 14

cd kalibr_workspace/src
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make

1.2 录制IMU数据集

step4: 静止情况下采集IMU的数据,并录制为ROS包,我采集的时间为2小时20分钟。

rosbag record /imu/data -O imu_xsens.bag

step5: 标定 配置xsens.launch文件为如下内容:(指定IMU的topic)

<launch><node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"><param name="imu_topic" type="string" value= "/imu/data"/><param name="imu_name" type="string" value= "xsens"/><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>

其中, max_time_min 表示从ros bag包中加载多长时间的数据
随后,启动 imu_utils 标定IMU

rosbag play -r 200 imu_xsens.bag
roslaunch imu_utils xsens.launch

可得到如下输出结果:

%YAML:1.0
---
type: IMU
name: xsens
Gyr:unit: " rad/s"avg-axis:gyr_n: 4.9700389767894345e-03gyr_w: 6.8522312307501954e-05x-axis:gyr_n: 4.9016990946736316e-03gyr_w: 7.4721244172569240e-05y-axis:gyr_n: 4.9561825133283884e-03gyr_w: 6.7372212440839068e-05z-axis:gyr_n: 5.0522353223662842e-03gyr_w: 6.3473480309097542e-05
Acc:unit: " m/s^2"avg-axis:acc_n: 5.4303615468688114e-03acc_w: 1.4459759280127568e-04x-axis:acc_n: 5.7602300667994426e-03acc_w: 1.5064216759502606e-04y-axis:acc_n: 5.6378382747581945e-03acc_w: 1.4458085233539733e-04z-axis:acc_n: 4.8930162990487953e-03acc_w: 1.3856975847340367e-04

2 kalibr 标定工具

2.1 安装

安装依赖项:

sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev
sudo apt-get install libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev

编译kalibr,这里要确保电脑联网,编译时间有点长.

cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
source ~/kalibr_workspace/devel/setup.bash

2.2 校准相机的内外参

step1: 改变ZED相机发布的频率

rosrun topic_tools throttle messages /camera/left/image_raw 4.0 /stereo/left/image_raw
rosrun topic_tools throttle messages /camera/right/image_raw 4.0 /stereo/right/image_raw

录制ROS bag 包

rosbag record /stereo/left/image_raw /stereo/right/image_raw -O zed_images.bag

step2: 标定

kalibr_calibrate_cameras --target april_6x6_24x24mm.yaml --bag images.bag --bag-from-to 5 30 \--models pinhole-radtan pinhole-radtan --topics /stereo/left/image_raw /stereo/right/image_raw

这里还有其他的工具包也可以用 ROS camera_calibration 包。标定成功以后会在目录下生成一个 yaml文件(用于后续校准相机和IMU外参) 和 一个pdf校准日志,如果校准的重投影误差在1个像素内就是比较好的结果了.

2.3 校准相机与IMU外参

step1: 把IMU和相机固定在一起录制ROS bag包, 录制的时候要注意按照官方的说法-充分激励IMU- 绕3个轴旋转和3个方向的平移,这里有个官方视频[3] 可以参考

rosbag record /imu/data_raw /stereo/left/image_raw /stereo/right/image_raw -O images_imu.bag

step2: 启动校准包开始校准

kalibr_calibrate_imu_camera --target april_6x6_55x55mm.yaml --bag ~/bagfiles/zed_xsens.bag --bag-from-to 5 50 --cam camchain_images_zed_3495.yaml  --imu xsens_imu.yaml --imu-models scale-misalignment --timeoffset-padding 0.1

其中 参数:
1) –target april_6x6_24x24mm.yaml 描述标定板的信息
2) –bag images_imu.bag 指定数据包
3) –bag-from-to 5 50 设定bag包开始时间和结束时间,避开拿起和放下IMU的时间段内的数据
4)–cam camchain_images_zed_3495.yaml 相机参数文件
5)–imu xsens_imu.yaml 设定IMU的信息
6)–imu-models scale-misalignment IMU的参数模型

camchain_images_zed_3495.yaml 文件内容如下:

cam0:cam_overlaps: [1]camera_model: pinholedistortion_coeffs: [-0.1734857772863602, 0.026545178121976657, 0.0004291887376674085,-3.4873170616746686e-05]distortion_model: radtanintrinsics: [693.131838769146, 692.5498277671763, 616.3486206381017, 379.6677572220899]resolution: [1280, 720]rostopic: /stereo/left/image_raw
cam1:T_cn_cnm1:- [0.9999658061828064, 0.0005632950824424241, 0.0082504038578218, -0.11947602055948268]- [-0.0006621128372211408, 0.9999280240823567, 0.011979493367486592, 0.0004870068672051519]- [-0.008243062037729159, -0.011984546441186855, 0.9998942056912012, -0.0028910358303400464]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [0]camera_model: pinholedistortion_coeffs: [-0.17456713089475154, 0.027410444232267236, 0.0006360696559962682,-0.0002450168896166665]distortion_model: radtanintrinsics: [694.2107729740508, 693.480347118504, 617.3114354961933, 380.800130116761]resolution: [1280, 720]rostopic: /stereo/right/image_raw

xsens_imu.yaml 文件内容:

#Accelerometers
accelerometer_noise_density: 5.43036e-03   #Noise density (continuous-time)
accelerometer_random_walk:   1.44598e-04   #Bias random walk#Gyroscopes
gyroscope_noise_density:     4.9700e-03   #Noise density (continuous-time)
gyroscope_random_walk:       6.8522e-05   #Bias random walkrostopic:                    /imu/data      #the IMU ROS topic
update_rate:                 100.0      #Hz (for discretization of the values above)

标定完成以后同样会生成一个报表和在终端里面打印校准信息;

标定结果的重投影误差应该在零点几个像素
标定出来的位移和实际测量或估计的IMU 和相机中心位移比较一致

总结

  1. 相机和IMU标定流程比较简单
  2. 校准时候要注意限制相机的频率为4HZ,校准IMU时候采集数据的时间在2小时左右
  3. 利用kalibr标定的精度看起来还是OK的

参考资料

[1] https://github.com/gaowenliang/imu_utils
[2] https://blog.csdn.net/u011178262/article/details/83316968?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
[3] https://www.bilibili.com/video/av795841344/

相机与IMU联合标定相关推荐

  1. 双目相机与IMU联合标定

    前言 为了后面的视觉激光融合SLAM以及跑通VINS-Fusion,需要标定双目相机和IMU得内参以及它们得外参(变换矩阵). 准备工作 双目相机:ZED-m IMU:realsense-t265(仅 ...

  2. ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装

    一.引言 同样是项目需求,需要利用视觉惯性导航做一些开发,所以第一步先做些算法的测试–仿真与实物测验,通过仿真的测试结果,最终是决定使用ORB-SLAM3来完成任务,当然了,Vins-fusion作为 ...

  3. 标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)

    16个相机参数: Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multi ...

  4. 双目相机 -- IMU联合标定

    声明:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅!!! 目录 **声明**:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅! ...

  5. 萌新谈相机与IMU的标定(转载)

    我发现这里所给的标定板也是这个 https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit?resourcekey=0-0Cn7 ...

  6. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现

    [camera-radar]相机-毫米波雷达联合标定方案介绍+实现代 代码下载地址:下载地址 部分代码: #include "typedef.h" #include <ope ...

  7. 安卓手机 相机和IMU数据获取标定 在VINS-MONO运行自己的数据集(含打包方法) (非常详细一步一步来)

    Android手机上图像和IMU数据采集的方法 网上有相关的教程,但都讲的很模糊,而且不全,甚至还有人要收费.自己完整做了一遍发现还是有些麻烦,固记录下来供大家参考,希望能帮到大家. 采用开源库 Vi ...

  8. autoware1.14安装相机和激光雷达联合标定工具

    autoware1.14安装相机和激光雷达联合标定工具 参考博客 安装autoware1.14 autoware 1.10.0版本中的标定工具箱单独编译安装 1.安装nlopt 2.安装标定工具箱 3 ...

  9. rs_D455相机内外参标定+imu联合标定

    IMU标定 <launch><node pkg="imu_utils" type="imu_an" name="imu_an&quo ...

最新文章

  1. Linux笔记:使用Vim编辑器
  2. ssh项目部署到weblogic注意事项
  3. C 语言中赋值表达式的返回的逻辑值
  4. 【Win 10应用开发】SplitView控件
  5. 线程池ThreadPoolExcutor
  6. C语言eigen存为txt文件,如何为使用Eigen(C线性代数的模板库)的C项目编写一个makefile?...
  7. 实力封装:Unity打包AssetBundle(二)
  8. java怎样返回json_java怎么返回json
  9. android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...
  10. 音视频处理之FFmpeg封装格式20180510
  11. Zipkin-1.19.0学习系列2:Nodejs范例(Client Send,Client Receive))
  12. 去除加粗的css,css如何取消加粗
  13. 会话技术——Cookie
  14. matlab怎么画隐函数图像,matlab中如何画隐函数的图像
  15. 开运算—lhMorpOpen
  16. 闭关28天,奉上[Java一线大厂高岗面试题解析合集],备战金九银十
  17. 微信公众号身份证OCR识别和验真|人证比对
  18. 用例建模-绘制用例图
  19. Modulation of Lipid Metabolism by Celastrol (文献分享一组-赵倩倩)
  20. 一文带你识别移动端主流加固的方案

热门文章

  1. mybatis中大于,小于和特殊符号的写法
  2. LUA教程(游戏UI制作)二
  3. python解释器安装,pycharm安装
  4. cartographer安装和编译
  5. Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
  6. IP 地址设置(更新)(批处理)
  7. python做社会网络分析系统_科学网—python 社会网络分析工具之igraph - 郗强的博文...
  8. matlab伪随机码,Matlab生成M序列的伪随机码
  9. Js为什么解除不掉事件绑定?
  10. 福布斯系列之数据采集 | Python数据分析项目实战