使用工具code_utils、imu_utils、kalibr对Realsense d435i 内参、外参标定。本文介绍上述工具的安装,及标定方法。
编译可能出错
code_utils-master/src/sumpixel_test.cpp:2:24: fatal error: backward.hpp:No such file or directory
修改:在code_utils下面找到sumpixel_test.cpp,修改#include "backward.hpp"为 #include “code_utils/backward.hpp”,再编译。
/home/ocean/calibration/src/code_utils/include/code_utils/backward.hpp:216:12: fatal error: elfutils/libdw.h: No such file or directory # include
解决:sudo apt-get install libdw-dev
注:在相同工作空间下,先编译code_utils;在clone下imu_utils编译
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
python-matplotlib ipython python-wxgtk3.0 python-tk python-igraph # Ubuntu 16.04
python-matplotlib ipython python-wxgtk4.0 python-tk python-igraph # Ubuntu 18.04
python3-matplotlib ipython3 python3-wxgtk4.0 python3-tk python3-igraph # Ubuntu 20.04
应用上述工具对d435i进行标定,是建立在已完成对d435i驱动安装、配置及校准的基础上,具体可参考另一篇博文Realsense d435i驱动安装、配置及校准
imu随机游走标定前,需编写.launch 文件,进入文件
#imu topic的名字
#标定的时长
运行完后会在calibration_ws/src/imu_utils/data/生成文件:Realsense_imu_param.yaml,内容如下:
注:标定过程中,保持静置;也可先录制imu数据再进行标定
https://github.com/ethz-asl/kalibr/wiki/downloads
可用A4纸打印出来,本文直接在电脑上打开Aprilgrid 6x6 0.8x0.8 m (A0 page) pdf 文件,这样有个好处是可以保证标定纸是绝对平整的。如下图所示:
cd /相机标定结果存储
eg:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.022 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
注:tagSize 原大小A0是0.088,A4显示缩小了4倍,也可实际测量得到。
使用throttle工具降低录制数据频率
录制完成后,在data文件下会生成d435i_infra_left.bag、d435i_infra_right.bag
注:录制过程中,调整相机角度,尽量在各个方向都采集到数据,但要拍到完整的标定板,否则利用bag数据标定是会报错Detection failed;
录包过程中,可运行rviz,实时观测画面,确保标定板始终在镜头内;
分别录制了左目相机、右目相机bag,在校准过程中发现两者内参并不一样,可能是录制数据差异造成的。
rosrun kalibr kalibr_calibrate_cameras --target src/Kalibr/data/checkerboard.yaml --bag src/Kalibr/data/d435i_infra_left.bag --models pinhole-radtan --topics /left --bag-from-10 100 --show-extractio
rosrun kalibr kalibr_calibrate_cameras --target src/Kalibr/data/checkerboard.yaml --bag src/Kalibr/data/d435i_infra_right.bag --models pinhole-radtan --topics /right --bag-from-10 100 --show-extractio
输出左目结果:d435i_infra_left-camchain.yaml,d435i_infra_left-report-cam.pdf,d435i_infra_left-result-cam.txt,右目结果:d435i_infra_right-camchain.yaml,d435i_infra_right-report-cam.pdf,d435i_infra_right-result-cam.txt
以左目为例显示结果如下图
由于文本主要是为了后续实战vins_fusion,而vins_fusion可以实时优化相机外参,故本文对于kailbr标定相机外参不做介绍,关于vins_fusion可参考另一篇博文。。。。
而使用kailbr标定相机外参与相机内参标定类似,只是需同时录制imu、camera bag包,再调用命令:
其中:
camchain.yaml
cam0:
camera_model: pinhole
intrinsics: [391.57645976863694, 392.2173924045597, 326.83301528066227, 235.30947818084246]
distortion_model: radtan
distortion_coeffs: [0.007532405272341989, -0.003198723534231893, -0.00015249992792258453, 0.001638891018727039]
T_cam_imu:#先验,后期优化
[0.99995, -0.00851610, 0.003972445, 0.043946]
[0.008539021, 0.9999467,-0.005786767, 0.01996812]
[-0.0039229529, 0.005820432, 0.999975, 0.01636738]
[0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: 0.002004
rostopic: /left
resolution: [640, 480]
intrinsics,distortion_coeffs内参、畸变系数为上述标定的数据,T_cam_imu为初始化参数。
imu.yaml
rostopic: /imu
update_rate: 200.0 #Hz
accelerometer_noise_density: 1.7512828345266122e-02 #continous
accelerometer_random_walk: 4.2528647943077756e-04
gyroscope_noise_density: 3.3502044635737617e-03 #continous
gyroscope_random_walk: 4.8760608618583259e-03
为随机游走标定的数据。
https://blog.csdn.net/u010196944/article/details/127238908
https://github.com/ethz-asl/kalibr/wiki/installation
https://zhuanlan.zhihu.com/p/309287821
https://blog.csdn.net/weixin_45702256/article/details/120553799