为了获得相机的内参,以及D435i各传感器坐标的外参,利用intel自带的Dynamic Calibrator进行标定。
Kalibr标定d435i内参、与IMU外参
1.标定内参
录制数据集:
rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color
利用throttle工具降低录制的RGB图像频率,降至4HZ,新发布的topic名字是/color
录制时需要准备标定板,这里建议TB直接买人家做好的,省去自己打印的不好。Kalibr支持tag和chessboard,博主这里借用了同学的棋盘格标定板,按照Kalibr的提示修改yaml文件,这里采用的标定板实际是9*12的,但是注意配置文件中是内角点:
target_type: 'checkerboard' #gridtype
targetCols: 8 #number of internal chessboard corners
targetRows: 11 #number of internal chessboard corners
rowSpacingMeters: 0.025 #size of one chessboard square [m]
colSpacingMeters: 0.025 #size of one chessboard square [m]
录制好数据集就可以开始进行标定了:
kalibr_calibrate_cameras --target ~/dev/kalibr_ws/src/kalibr/data/checkerboard.yaml --bag ~/dev/kalibr_ws/src/kalibr/data/kalibr_color.bag --models pinhole-equi --topics /color
这是官网的例子,修改为自己的具体对应的文件就行,我这里是直接输入的绝对路径。
*问题:
这里运行时卡在提取角点上
然后在github的issue里到了答案:
在上述命令后加入--show-extraction
这样就能够运行了,参考链接
2.标定与IMU的外参
同样录制数据集,降低图像数据到20HZ,IMU数据至200HZ。
这里需要不同的配置文件,camchain.yaml和imu.yaml
camchain.yaml:
cam0:
camera_model: pinhole
intrinsics: [632.9640658678117, 638.2668942402212, 339.9807921782614, 243.68020465500277]
distortion_model: equidistant
distortion_coeffs: [0.366041713382057, 1.1433178097591097, -3.008125411486294, -3.1186836086733227]
T_cam_imu:
- [0.01779318, 0.99967549,-0.01822936, 0.07008565]
- [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
- [0.00893160, 0.01807260, 0.99979678, 0.00399246]
- [0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: -8.121e-05
rostopic: /color
resolution: [640, 480]
imu.yaml:
rostopic: /imu
update_rate: 200.0 #Hz
accelerometer_noise_density: 0.01 #continous
accelerometer_random_walk: 0.0002
gyroscope_noise_density: 0.005 #continous
gyroscope_random_walk: 4.0e-06
这里我用得到的相机内参替换了官方模板程序里面的数值,但是T_cam_imu和time_shift_imu并未修改,这里博主也不是很清楚。
然后运行:
kalibr_calibrate_imu_camera --target ~/dev/kalibr_ws/src/kalibr/data/checkerboard.yaml --cam ~/dev/kalibr_ws/src/kalibr/data/camchain.yaml --imu ~/dev/kalibr_ws/src/kalibr/data/imu.yaml --bag ~/dev/kalibr_ws/src/kalibr/data/color_imu.bag --bag-from-to 5 45 --show-extraction
这样就能够运行了。上述命令的5 45指的是采用的数据集的范围。
D435i的IMU的标定(用RealSense官方的)
参考文献:官网链接
首先到github上安装librealsense,本人直接下载了压缩包,然后解压缩后,在librealsense文件夹中新建了一个build文件夹,然后进入build文件夹,打开命令行,运行:
cmake ..
然后如果网络情况不好的话,会报错:
报的错是librealsense/third-party/libtm/resources/CMakeLists.txt中的第98行报错,可以将92行到94行注释掉。
然后:
make
sudo make install
然后按照pdf的教程安装各种python的东西,最后在tools/rs-imu-calibration中运行
python rs-imu-calibration.py
按照PDF的提示,一步步操作,最后输入footer按enter就能看到最后标定的结果,选择是否将结果写入到相机的eeprom中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)