利用kalibr标定IMU和相机:  https://github.com/ethz-asl/kalibr/wiki/Camera-IMU-calibration#2-collect-images

在开始需要明确几点的是:需要先安装kalibr,该工具主要是标定相机和IMU, 在标定的过程中需要用到IMU和相机的内参文件,这里的内参文件可以用ROS 帮忙获得,或者如果已经有这个文件可以直接用。

接下要做的即安装realsense的ros接口主要是为了方便读取topic来录制rosbag, 因为kalibr在标定的时候需要用rosbag中的数据进行标定;

这里的相机采用realsense D435i 因此在安装标定前要确保相关库已经安装

-----IMU内参标定-----

1. 确保realsense的SDK已经安装:

2. 安装realsense的ros warpper

https://github.com/IntelRealSense/realsense-ros 这是前两步的参考链接,包含安装realsense的SDK和roswarpper

我之前已经安装过ros kinect在Ubuntu16.04的平台上,因此这里直接从catkin的工作空间开始

3. 标定IMU

3.1 安装ceres: https://blog.csdn.net/jz1570551401/article/details/78207208

1. 预安装,其中libgoogle-glog-dev 可能需要再单独安装
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev
libgoogle-glog-dev libgtest-dev
2. 下载ceres:https://github.com/ceres-solver/ceres-solver
3. 解压文件后进入ceres-master:mkdir buildcd buildcmake ..  //如果这一步骤报错,可以检查一下是具体那个库没有安装成功,再sudo apt-get 对应的库就好make  //大概等几分钟sudo make install 安装完成后/usr/local/include/ceres 和 /usr/local/lib/ 中

3.2 下载code_utils: https://github.com/gaowenliang/code_utils

解压至catkin下的src文件,然后在code_utils下面找到sumpixel_test.cpp,修改#include "backward.hpp"为 #include “code_utils/backward.hpp”,然后运行catkin_make

错误提示:code_utils/backward.hpp:216:30: fatal error: elfutils/libdw.h: No such file or directory
compilation terminated.

运行: apt-get install libdw-dev 安装对应的库即可,一般安装这个就可以,如果这样还不可以试试:sudo apt-get install elfutils

3.3 下载imu_utils: https://github.com/gaowenliang/imu_utils

再次catkin_make

3.4 接下来就可以就可以标定IMU了:

<launch><node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"><param name="imu_topic" type="string" value= "/camera/imu"/>  #imu topic的名字<param name="imu_name" type="string" value= "d435i"/><param name="data_save_path" type="string" value= "$(find imu_utils)/data/d435i"/><param name="max_time_min" type="int" value= "30"/> #标定的时长<param name="max_cluster" type="int" value= "100"/></node>
</launch>

将该launch文件保存成imu.launch至src和install下的launch中, 然后在两个终端中同时运行

~/catkin_ws_rs$ roslaunch realsense2_camera rs_camera.launch
~/catkin_ws_rs/install/share/realsense2_camera/launch$ roslaunch imu.launch

运行imu.launch文件的终端中会出现

process[imu_an-1]: started with pid [8274]
[ INFO] [1571305008.871258796]: Loaded imu_topic: /camera/imu
[ INFO] [1571305008.872137757]: Loaded imu_name: d435i
[ INFO] [1571305008.872762617]: Loaded data_save_path: /home/shinan/catkin_ws_rs/src/imu_utils/data/d435i
[ INFO] [1571305008.873749085]: Loaded max_time_min: 30
[ INFO] [1571305008.874493932]: Loaded max_cluster: 100
gyr x  num of Cluster 100
gyr y  num of Cluster 100
gyr z  num of Cluster 100
acc x  num of Cluster 100
acc y  num of Cluster 100
acc z  num of Cluster 100
wait for imu data.

接下来等待30分钟即可,标定完成后imu的参数将会被保存在data_save_path的路径中;

也可以录制bag保存imu数据后进行标定;https://blog.csdn.net/fang794735225/article/details/92804030

将IMU的标定结果保存到文件imu.yaml中:

#Accelerometers
accelerometer_noise_density: 2.4753056458491202e-02   #Noise density (continuous-time)
accelerometer_random_walk:   5.1092097834339175e-04   #Bias random walk#Gyroscopes
gyroscope_noise_density:     4.0642638745600332e-03   #Noise density (continuous-time)
gyroscope_random_walk:       2.6537322064011450e-05   #Bias random walkrostopic:                    /imu0      #the IMU ROS topic
update_rate:                 200.0      #Hz (for discretization of the values above)

相机标定:

https://blog.csdn.net/heyijia0327/article/details/43538695

标定realsense的RGB相机,如果使用的是其他相机可以用opencv采集图像后进行单目标定,这里不多写,主要是标定Realsense的彩色相机:

设定好相机的相关参数后(主要是size 和fps):目前设置图像大小为640*480 帧率为30

roslaunch realsense2_camera rs_camera.launch

启动realsense相机后,可以用rostopic list 查看对应的打开的topics

可以用ros自带的标定方法进行相机标定:

~/catkin_ws_rs$ rosrun camera_calibration cameracalibrator.py  --size 8x6 --square 0.035 image:=/camera/color/image_raw

最开始的CALBRATE按钮为灰色,当采集的图像符合条件够就变成绿色,然后可以点击CALIBRATE进行标定,标定结果显示如下:

  ('D = ', [0.20848791559812113, -0.36507062055202405, 0.012079145675854016, -0.006358054188595459, 0.0])
('K = ', [653.7064773464425, 0.0, 314.4404941629716, 0.0, 654.2058371422769, 261.91335661459755, 0.0, 0.0, 1.0])
('R = ', [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0])
('P = ', [677.4393920898438, 0.0, 311.13625111082183, 0.0, 0.0, 676.0581665039062, 266.3551872155367, 0.0, 0.0, 0.0, 1.0, 0.0])

将标定的结果保存到.yaml文件中 如下所示:

cam0:  #640*480camera_model: pinholeintrinsics: [653.7064773464425, 654.2058371422769,314.4404941629716, 261.91335661459755]distortion_model: radtandistortion_coeffs: [0.20848791559812113, -0.36507062055202405, 0.012079145675854016, -0.006358054188595459]rostopic: /camera/color/image_rawresolution: [640, 480]

准备标定板文件aprilgrid.yaml:

相机+IMU标定:

https://github.com/ethz-asl/kalibr/wiki/Camera-IMU-calibration#2-collect-images

1. 启动realsense相机和imu,所以也要先设置好rs_camera.launch文件中的相关参数;

其中rs_camera.launch中一定要设置如下两个参数:

<arg name="enable_sync"               default="true"/>,
<arg name="unite_imu_method"          default="copy"/>

第一参数保证相机数据和IMU数据的同步, 第二个参数保证输出同步的IMU数据;

2. 为相机和IMU录制数据包,

可以先运行 rosrun image_view image_view image:=/camera/color/image_raw 查看图像, 保证在录制数据包的时候标定板不会超出画面

录制的时候尽量保证图像清晰,不要剧烈移动,采集数据的起始和结束阶段注意别晃动太大,如从桌子上拿起或者放下。如果有这样的动作,在标定阶段应该跳过bag数据集的首尾的数据. 同时尽可能地激活IMU的各个角度,各个方向,可以先依次绕各个轴运动,运动完后来个在空中画8字之类的操作,当然也要注意别运动太剧烈,图像都模糊了。:

rosbag record /camera/color/image_raw  /camera/imu -O rgb_imu.bag​

3.  进行标定:参数分别是包名称(不用加.bag),相机参数文件,imu参数文件, 标定板文件

~/Project/kalibr_workspace$ kalibr_calibrate_imu_camera --bag ~/Project/kalibr_workspace/rgb_imu.bag​ --cam ~/Project/kalibr_workspace/camchain.yaml --imu ~/Project/kalibr_workspace/imu.yaml --target ~/Project/kalibr_workspace/aprilgrid.yaml 

出现错误提示:

importing libraries
Traceback (most recent call last):File "/home/shinan/Project/kalibr_workspace/devel/bin/kalibr_calibrate_imu_camera", line 15, in <module>exec(compile(fh.read(), python_script, 'exec'), context)File "/home/shinan/Project/kalibr_workspace/src/kalibr-master/aslam_offline_calibration/kalibr/python/kalibr_calibrate_imu_camera", line 5, in <module>from kalibr_imu_camera_calibration import *File "/home/shinan/Project/kalibr_workspace/src/kalibr-master/aslam_offline_calibration/kalibr/python/kalibr_imu_camera_calibration/__init__.py", line 4, in <module>import IccSensors as sensFile "/home/shinan/Project/kalibr_workspace/src/kalibr-master/aslam_offline_calibration/kalibr/python/kalibr_imu_camera_calibration/IccSensors.py", line 16, in <module>import scipy.optimize
ImportError: No module named scipy.optimize

安装python相关库:

sudo apt-get install python-scipy

标定结果如下:

After Optimization (Results)
==================
Normalized Residuals
----------------------------
Reprojection error (cam0):     mean 0.552748299525, median 0.473100512902, std: 0.3640429471
Gyroscope error (imu0):        mean 0.215478847361, median 0.161409013393, std: 0.19024901177
Accelerometer error (imu0):    mean 0.165613674102, median 0.132037510374, std: 0.129116309678Residuals
----------------------------
Reprojection error (cam0) [px]:     mean 0.552748299525, median 0.473100512902, std: 0.3640429471
Gyroscope error (imu0) [rad/s]:     mean 0.0123851576362, median 0.00927736573336, std: 0.0109350130176
Accelerometer error (imu0) [m/s^2]: mean 0.0579749018736, median 0.0462211936851, std: 0.04519859501Transformation T_cam0_imu0 (imu0 to cam0, T_ci):
[[ 0.9999488  -0.00279248  0.00972605  0.03555196][ 0.00297818  0.99981255 -0.01913078 -0.00461578][-0.0096708   0.01915877  0.99976968  0.00838297][ 0.          0.          0.          1.        ]]cam0 to imu0 time: [s] (t_imu = t_cam + shift)
-0.0280180128084IMU0:
----------------------------Model: calibratedUpdate rate: 200.0Accelerometer:Noise density: 0.0247530564585 Noise density (discrete): 0.350061081538 Random walk: 0.000510920978343Gyroscope:Noise density: 0.00406426387456Noise density (discrete): 0.0574773709247 Random walk: 2.6537322064e-05T_i_b[[ 1.  0.  0.  0.][ 0.  1.  0.  0.][ 0.  0.  1.  0.][ 0.  0.  0.  1.]]time offset with respect to IMU0: 0.0 [s]Saving camera chain calibration to file: camchain-imucam-homeshinanProjectkalibr_workspacecam_imu640_480_retrgb_imu​.bag.yamlSaving imu calibration to file: imu-homeshinanProjectkalibr_workspacecam_imu640_480_retrgb_imu​.bag.yamlDetailed results written to file: results-imucam-homeshinanProjectkalibr_workspacecam_imu640_480_retrgb_imu​.bag.txt
Generating result report...

Timeshift表示的就是IMU相对于camera的延时;

如有疑问,欢迎交流: wx: baobaohaha_ 欢迎对SLAM有兴趣的小伙伴一起交流学习~~

参考博客:https://blog.csdn.net/mxdsdo09/article/details/83514310

使用Kalibr进行IMU+相机的标定相关推荐

  1. Kalibr进行IMU+相机的标定

    环境:Ubuntu18.04 Kalibr代码连接:https://github.com/ethz-asl/kalibr 1.安装依赖 ROS sudo apt-get install python- ...

  2. ZED2相机标定--双目、IMU、联合标定

    为了获取VINS 配置文件中的相关参数,也为了双目相机及IMU传感器实际输出数据更准确,对ZED2的相机进行标定,包括相机标定.IMU标定及联合标定. 一 安装标定工具 1.使用kalibr工具标定Z ...

  3. imu相机标定_camera-imu内外参标定

    在vio系统中,camera-imu间内外参精确与否对整个定位精度起着重要的作用.所以良好的标定结果是定位系统的前提工作. 目前标定算法主要分为离线和在线标定,离线标定以kalibr为代表,能够标定c ...

  4. 小觅相机 相机以及IMU外参标定

    最近在使用IMU和双目相机进行相关VIO算法的测试,首先要对IMU和相机的外参进行标定,本文主要是对标定过程做一个全面的记录,方便总结和讨论.测试中采用的是小觅双目模组标准版S1030-IR-120/ ...

  5. zed2i相机中imu内参的标定及外参标定

    zed2i中imu内参的标定 参考: https://blog.csdn.net/weixin_42681311/article/details/126109617 https://blog.csdn ...

  6. imu相机标定_相机+imu标定

    官方上是跑在ros indigo上的,但是实测用kinetic也没问题,主要就是装依赖的时候改下名字(下面命令行里有写注释) 1 工具箱 Kalibr 安装 安装依赖 sudo apt-get ins ...

  7. imu相机标定_解放双手——相机与IMU外参的在线标定

    本文作者 沈玥伶,公众号:计算机视觉life,编辑部成员 一.相机与IMU的融合 在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图.这是因为这两个 ...

  8. D435i相机的标定及VINS-Fusion config文件修改

    引言 当我们想使用D435i相机去跑VINS-Fusion时,如果不把标定过的相机信息写入config文件中就运行,这样运动轨迹会抖动十分严重,里程计很容易漂.接下来将介绍如何标定D435i相机,并设 ...

  9. zed2i相机内参标定

    参考: https://blog.csdn.net/yanpeng_love/article/details/107166922 https://blog.csdn.net/weixin_419549 ...

最新文章

  1. 64位LINUX下hadoop2.2.0重新编译及安装步骤
  2. 情人节脱单必备,程序员如何花式表白
  3. 雅虎将于4月底关闭自助式广告测试
  4. gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')
  5. ASP.Net学习笔记014--ViewState初探3
  6. 楼市反弹难以持续 年末房价稳中趋降
  7. elasticsearch同义词配置elasticsearch-analysis-dynamic-synonym
  8. relocation R_X86_64_PC32 against symbol lua_newstate can not be used when making a shared object
  9. SaaS、PaaS、IaaS典型的云计算解决方案架构
  10. SWing组件说明及使用
  11. python数据分析岗位做什么_Python数据分析--数据分析岗位最新招聘情况
  12. 电商项目需求分析---七月实习总结
  13. 倍福--授权等级的区别
  14. 中科大计算机学院吴雨霏,刘敏 女 博导 计算技术研究所
  15. PCL点云库必备知识点4——pointcloud2消息格式的转换
  16. golang使用iris框架全局异常捕获
  17. 手推提升算法之AdaBoost
  18. SQL查询最近几年、几月、几天的数据
  19. 跨境市场下一个蓝海:区块链+跨境支付?
  20. 身份认证 Session认证机制 Cookie原理

热门文章

  1. hihoCoder 1513: 小Hi的烦恼(五维偏序+bitset)
  2. bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
  3. 如何使用 python glob model
  4. [机器学习] 概念解析:从经验风险、结构风险到代价函数、损失函数、目标函数
  5. python机器学习库sklearn——DBSCAN密度聚类
  6. python神经网络案例——FC全连接神经网络实现mnist手写体识别
  7. python应用系列教程——python操作office办公软件word
  8. 十六进制的形式在屏幕中间显示二进制byte类型数据
  9. 微信小程序(mpvue)—解决视频播放bug的一种方式
  10. 深入理解并行编程pdf