一、imu的校准
校准准备
1.将相机和电脑通过USB3.0连接
2.下载标定工具库:librealsense/tools/rs-imu-calibration at master · IntelRealSense/librealsense · GitHub
3.下载python工具: sudo pip3 install pyrealsense2(大概率已经安装过)
开始校准
具体步骤见官方文档:librealsense/tools/rs-imu-calibration at master · IntelRealSense/librealsense · GitHub
或者参考优质博客:D435i相机固件升级-imu校准-单目和imu及双目和imu外参标定-VINSfusion运行双目+imu(完整版)_d435i标定-优快云博客
ps:遇到的问题:
-
Status.wait_to_stable: 2.8 (secs)出现但是每次都不加载[...]
解决:我在使用ubuntu18.04时出现这种情况,并未曾找到解决方法;但通过与客服沟通使用22.04成功解决。虽然官方建议使用ubuntu18.04 / 16.04
- python rs-imu-calibration.py 不能运行
问题描述:
找不到命令“python”,您的意思是:
command 'python3' from deb python3
command 'python' from deb python-is-python3
问题解决:
因为ubuntu20.04默认的python版本时python 3.x,所以应该使用命令 python3 rs-imu-calibration.py
这是官方建议使用18.04的原因,代码时按照python 2.x编写,因此引出下一个问题
- 成功矫正,最后保存时卡住
问题描述:
输入Y后卡住:
rs-imu-calibration.py:703: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.
outfile.write(imu_calib_table.astype('f').tostring())
Would you like to write the results to the camera? (Y/N)Y
问题解决:
python2.x和python3.x部分差别问题
将rs-imu-calibration.py文件复制,并更名为rs-imu-calibration-py3.py
在703行,用该行代码替换:outfile.write(imu_calib_table.astype('f').tobytes())
二、相机启动参数调整
在自己的工作空间下:catkin_RealSense_ws/src/realsense-ros/realsense2_camera/launch/的rs_camera.launch文件
或者先进入工作空间打开
cd realsense_ws
gedit src/realsense-ros/realsense2_camera/launch/rs_camera.launch
把rs_camera.launch中的unite_imu_method和enable_sync改为如下所示:分别用于发布IMU信息和相机与IMU进行时间同步
<arg name="unite_imu_method" default="copy"/>
<arg name="enable_sync" default="true"/>
之后录制的相机
<arg name="infra_width" default="640"/>
<arg name="infra_height" default="480"/>
<arg name="color_width" default="640"/>
<arg name="color_height" default="480"/>
三、imu标定
参考一
D435i相机固件升级-imu校准-单目和imu及双目和imu外参标定-VINSfusion运行双目+imu(完整版)_d435i标定-优快云博客
那个博客从 2.配置港科大IMU标定程序的环境开始
参考二
D435i标定摄像头和IMU笔记三(IMU标定篇)_d435i标定摄像头和imu笔记三(imu标定篇)-优快云博客
ps:
- 参考博客时一定注意看自己是否能看懂目录,这两个目录都有两次相机和imu的标定,他们并不是顺承关系,而是并列关系。个人理解:录制只录制/color(只有一个image话题)的展示的是单目+imu的联合标定 录制//infra_left /infra_right的展示的时双目+imu 不是顺承关系!!!
- 两个博客中对于录制时是否可以移动相机存在争议,个人建议不要移动录制2h
ps: imu数据如何取
我的标定数据如下
%YAML:1.0
---
type: IMU
name: d435i_imu_calibration
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 7.2004032685336191e-03 # 有用
gyr_w: 3.7255102712542191e-04 # 有用
x-axis:
gyr_n: 3.5715854552042544e-03
gyr_w: 1.3742887805508438e-04
y-axis:
gyr_n: 2.7323144545256263e-03
gyr_w: 2.7310167319703311e-05
z-axis:
gyr_n: 1.5297309895870975e-02
gyr_w: 9.5291403600147808e-04
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 2.3513961209785134e-02 # 有用
acc_w: 8.0968416717708996e-04 # 有用
x-axis:
acc_n: 2.4924652367128108e-02
acc_w: 8.5925263835753525e-04
y-axis:
acc_n: 2.3496502658774822e-02
acc_w: 9.4846708895731280e-04
z-axis:
acc_n: 2.2120728603452468e-02
acc_w: 6.2133277421642171e-04
上面标注"有用"的,后面在联合标定的时候需要用到
rostopic: /imu
update_rate: 200.0 # Hz
accelerometer_noise_density: 2.3513961209785134e-02
accelerometer_random_walk: 8.0968416717708996e-04
gyroscope_noise_density: 7.2004032685336191e-03
gyroscope_random_walk: 3.7255102712542191e-04
四、相机标定
D435i标定摄像头和IMU笔记二(RGB摄像头标定篇)_realsense d435i 标定 rgb imu-优快云博客
ps:注意事项:
- 生成checkboard.yaml,步骤具体如下(翻录自上面博客):
- 创建一个文件夹,用来保存摄像头校正数据。
mkdir -p ~/calib_data/camera_calib cd ~/calib_data/camera_calib
2.建立标定yaml文件:
gedit checkerboard.yamltarget_type: 'checkerboard' #gridtype
targetCols: 5 #number of internal chessboard corners
targetRows: 8 #number of internal chessboard corners
rowSpacingMeters: 0.045 #size of one chessboard square [m]
colSpacingMeters: 0.045 #size of one chessboard square [m]
复制进去
3.生成checkboard.yaml文件
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.03 --tspace 0.3如果不能运行,可能是在前面的过程中没有成功把库kalibr的source加载到.bashrc里面
可以尝试在需要执行命令的终端:source ~/kalibr_workspace/devel/setup.bash
注意路径;每次新开一个终端都需要重新source
生成的纸张如下:
修订chechboard.yaml
因为大概论无法按照原尺寸打印出来,所以需要修订checkboard.yaml文件中的
tagSize: 0.024
tagSpacing: 0.292
然后测量黑块的边长a,和两个黑块的间距b
则
tagSize: a
tagSpacing: b/a
a转化为m,“:”后要有一个“space”
比如我修订的最终文件:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.024 #size of apriltag, edge to edge [m]
tagSpacing: 0.292 #ratio of space between tags to tagSize
#example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]
五、联合标定
D435i相机固件升级-imu校准-单目和imu及双目和imu外参标定-VINSfusion运行双目+imu(完整版)_d435i标定-优快云博客
从该博客的六 --- 2.双目相机和IMU之间的标定看起
六、参数带入
D435i相机固件升级-imu校准-单目和imu及双目和imu外参标定-VINSfusion运行双目+imu(完整版)_d435i标定-优快云博客
从第七看起
七、正式使用
如果仍然偏差很大,需要检查结构过是否关闭
如果没有关闭,在realsense_ws文件中修改对应launch文件(就是启动相机的launch文件)
不是vins的文件
<arg name="emitter_enable" default="false"/>
<!-- rosparam set /camera/stereo_module/emitter_enabled false -->
<rosparam>
/camera/stereo_module/emitter_enabled: 0
</rosparam>
<rosparam if="$(arg emitter_enable)">
/camera/stereo_module/emitter_enabled: 1
</rosparam>
八、说明
本篇博客仅仅是对上述两篇博客的解读,非常感谢上述博客作者的付出!!!
内容主要来自下面三份博客:
D435i标定摄像头和IMU笔记二(RGB摄像头标定篇)_realsense d435i 标定 rgb imu-优快云博客
D435i相机固件升级-imu校准-单目和imu及双目和imu外参标定-VINSfusion运行双目+imu(完整版)_d435i标定-优快云博客
使用Kalibr进行Camera-IMU联合标定 | 所念皆星河
非常感谢!!!
2万+






