INDEMIND双目视觉设备
本文主要介绍基于双目视觉惯性硬件系统的VIO算法框架,相关开源代码详见:stereo_VIO_INDEMIND,如果您对本工作感兴趣,请star支持,感谢您!
传感器标定
传感器标定目的有三种:1)恢复多传感器内参数,如相机内参、IMU内参等,2)恢复多传感器外参数,如双相机间外参,相机-IMU外参等,3)估计多传感器的时间偏移。
本文利用kalibr工具对多传感器设备关系进行标定,包括单相机内参标定,多相机外参及相机-IMU外参标定,按照INDEMIND官方SDK,获得的多传感器相关参数为:
# 相机数据
left param:
_width: 640, height: 400 # 宽长
_TSC: { -0.999995 -0.000652737 0.00295292 0.06
0.000654378 -1 0.000554745 0
0.00295256 0.000556675 0.999995 -0.00164
0 0 0 1 }
# T_IMU_Cam0
_K: { 244.287 0 308.441
0 244.62 199.633
0 0 1 } # intrinsic
_D: { 0.594821 0.123986 -0.455553 0.181615 } # distortion
Right param:
_width: 640, height: 400 # 宽长
_TSC: { -0.999997 0.00234312 0.000186957 -0.0604778
-0.00234305 -0.999997 0.000380322 0.00250199
0.000187848 0.000379883 1 0.00281119
0 0 0 1 } # T_IMU_Cam0
_K: { 242.69 0 336.723
0 242.349 225.392
0 0 1 } # intrinsic
_D: { 0.595394 0.0872163 -0.4143 0.16214 } # distortion
根据设备清单,镜头使用的是ov9281黑白镜头,是一款常用的鱼眼镜头,因INDEMIND的WIKI不是很详细,因此使用kalibr对其进行标定,标定方式及数据采集方法详见kalibr文档。
本文使用的设备标定后参数为:
# 相机数据
left param:
T_imu_cam:
- [-0.999995, -0.000652737, 0.00295292, 0.06]
- [0.000654378, -1, 0.000554745, 0.0]
- [0.00295256, 0.000556675, 0.999995, -0.00164]
- [0.0, 0.0, 0.0, 1.0]
cam_overlaps: [1]
camera_model: pinhole
distortion_coeffs: [0.591977998178624,0.14106124481503816,-0.4986133137201548,0.20706763140275243]
distortion_model: equidistant
intrinsics: [244.36631004296968,244.28009927867149,308.8499311488548,200.26112385657243]
resolution: [640, 400]
Right param:
T_imu_cam:
- [-0.999997, 0.00234312, 0.000186957, -0.0604778]
- [-0.00234305, -0.999997, 0.000380322, 0.00250199]
- [0.000187848, 0.000379883, 1, 0.00281119]
- [0.0, 0.0, 0.0, 1.0]
cam_overlaps: [0]
camera_model: pinhole
distortion_coeffs: [0.5938919252119748,0.0790455615425266,-0.3923617088097683,0.14792756445351297]
distortion_model: equidistant
intrinsics: [244.2150271865189,244.17213365980164,336.5967046847744,225.81013821994916]
resolution: [640, 400]
imu0:
T_i_b:
- [1.0, 0.0, 0.0, 0.0]
- [0.0, 1.0, 0.0, 0.0]
- [0.0, 0.0, 1.0, 0.0]
- [0.0, 0.0, 0.0, 1.0]
accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" )
accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion )
gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" )
gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
time_offset: 0.0288
相机相关参数实际上相差不大,但IMU与相机之间的同步相差0.0288s,即差了近30ms,这个误差是导致部分使用该设备进行双目VIO实验在初始化阶段就失败的主要原因,这里需要补偿上此误差:
之后,这个设备的初始标定任务就完成了。
设备raw数据抓取
因一般的VIO算法是利用ROS系统,所以这里对SDK代码进行编译后,利用sudo权限启动ros wrapper。
sudo su
cd IMSEEE-SDK/ros
catkin_make -j8
source devel/setup.bash
roslaunch imsee_ros_wrapper display.launch
出现上图所示的结果就代表介入设备成功,之后可利用rosbag record等操作进行录包。
总结
本文主要介绍INDEMIND设备信息和设备标定流程,相关代码可参考开源代码stereo_VIO_INDEMIND,下一节将基于此设备适配OpenVINS开源双目VIO框架,并对其进行理论学习。