1. 在之一中使用kalibr标定mynt相机和内置imu的外参数,使用的是720p,30fps的双目图像和200hz的imu数据,标定结果误差比较大,这一次我们改用480p,60hz的双目图像和200hz的imu数据进行标定,需要在mynt_sdk中的mynteye.launch中进行如下修改.
默认获取图像的2560x720,30fps,可以在<arg name="stream_mode" default="$(arg stream_2560x720)" />处修改图像分辨率,如果分辨率改为stream_1280x480那么就可以将<arg name="framerate" default="30" />中的帧率改为60,如果分辨率是720p,那么此处最大是30.
MYNT D1000-IR-120双目相机和IMU外参标定
一、使用工具:安装了ROS的Ubuntu16.04系统,D1000-IR-120系列的小觅相机一部,april_6x6_80x80的标定板一块。
二、前期准备工作:
- 从mynt官网上下载对应标定相机的Linux Installation 版本的SDK,并按照安装说明安装到电脑上(http://www.myntai.com/mynteye/depth)。
- 根据需求在mynt-sdk/MYNT-EYE-D-SDK/wrappers/ros/src/mynteye_wrapper_d/launch/mynteye.launch文件中设置相机获取图像的参数,主要设置参数项如下:1)将
<arg name="ir_intensity" default="4" />中的"4"改成0
- 默认获取的图像是未经过双目畸变校正后的图像,如果需要畸变校正后的图像则将 <arg name="color_mode" default="$(arg color_raw)" />中的color_raw改成color_rectified.根据实验结果,无论是否进行过rectified处理,只要标定过程中使用的相机配置文件中的相机内参数,以及相机畸变系数写正确了,对实验结果的精度影响不大。
- 默认获取图像的2560x720,30fps,可以在<arg name="stream_mode" default="$(arg stream_2560x720)" />处修改图像分辨率,如果分辨率改为stream_1280x480那么就可以将<arg name="framerate" default="30" />中的帧率改为60,如果分辨率是720p,那么此处最大是30.根据标定结果推荐使用60fps的640x480的图像来标定。
- 开始标定
- 首先使用在上面terminal 2中打开的Rviz窗口中勾选需要的topics,只有勾选上的topics,才可以被subscribe,我们需要勾选上的项包括,Left Image以及其下的image_mono,Right Image以及其下的image_mono(因为灰度图完全可以完成标定所以使用灰度图就可以了),还有imu也要勾选上。
然后使用指令:rosbag record bagname.bag topics将我们需要的话题数据直接写入到bag文件,这里的话我们使用的指令为:rosbag record mynt_480p_rectified.bag /mynteye/left/image_mono /mynteye/right/image_mono /mynteye/imu/data_raw .
- 使用rosbag record imu0.bag /mynteye/imu/data_raw录制相机静置两个小时的imu数据,使用imu_utils工具标定imu的高斯白噪声和随机游走参数。
- 在使用kalibr工具开始标定之前,首先生成标定所需要的三个配置文件camchain.yaml, imuchain.yaml, april.yaml.
- 使用kalibr工具中的kalibr_calibration_imu_camera脚本标定相机和imu的外参数,使用指令:kalibr_calibration_imu_camera --bag record mynt_480p_rectified.bag --cam camchain.yaml --imu imuchain.yaml --traget april.yaml --bag-from-to 5 50.(可以使用--bag-from-to参数截取数据集中5s到50s的数据用来标定)。
- 标定结果与相机提供的数据对比
- 总结
通过标定的结果与官方提供的参数对比,标定的相机和imu的旋转变换的精度较高,但是平移量的两者差距比较大,得亏相机和IMU之间的平移向量对VIO系统的影响不会很大,而旋转变换则是很关键的。以30fps帧率获取的2560x720的图像,尽管在运动比较平稳的情况下,也会存在拖影的情况,但是改用60fps帧率获取的1280x720的图像,拖影现象不大明显,标定效果更好。
六、注意事项
- Camchain.yaml文件中左目图像到右目图像平移变换数据要以米为单位,不能以毫米或者厘米。
- Camchain.yaml文件中的相机模型要选“pinhole”,相机畸变模型要选择”radtan”不能选”equidistant”,否则标定误差将很大。
- 使用原始图像还是经过rectified处理后的图像,只要在camchain.yaml文件中的相机参数设置正确,一般不会对标定结果造成影响。
使用60fps的1280x480的图像标定结果比30fps的2560x480的图像精度高。
使用用来标定mynt相机的数据集跑一下vins系统.
1. 首先生成mynt相机的launch文件和config文件,其中有一个问题是,mynt是鱼眼相机,如果我将config文件中的fisheye选1,那么程序会自动加载一个mask图像,但是运行是提示opencv出错,所以换成使用经过畸变矫正后的图像,然后将fisheye选为0.这样就正确了,程序中提供了两个mask图像,一个是512x512的,另一个是752x480的,是不是需要提供自己数据集对应的一个mask图像呢.
去年的时候使用自己的开发板获取普通双目相机和一片9250的imu数据,运行vins运行结果很差,飘的不行,这次试一下mynt相机采集的数据,虽然偶尔也会飘,但是总的来说比之前的体验是好了很多.