小觅相机运行VINS-Fusion(二)——Camera-IMU参数标定

        目的:本文旨在使用Kalibr实现小觅双目相机和IMU的联合标定

Kalibr 是一个工具箱(a toolbox)。
The camera-imu calibration tool (其中的一个工具)estimates the spatial and temporal parameters of a camera system with respect to an intrinsically calibrated IMU.
The calibration parameters (待标定参数被估计出来) are estimated in a full batch optimization using splines to model the pose of the system.

因此,Kalibr正是我们所需要的!
获得Kalibr工具箱有两种方式:1.从源码编译;2.CDE包。
1.源码编译:它依赖于ROS indigo和一个catkin工作空间。这种方式的标定有两个优势:比CDE包更快、提供所有(tools)工具。
2.CDE包:所有依赖都被打包在了包里,无需任何其他依赖。但Camera focusCalibration validator工具无法使用(因为依赖ROS)。
先选择2!。

一、kalibr的Camera-IMU calibration

下 载网址见参考[1]

1.如何使用它?

1)预备项
IMU的内参(intrinsic parameters)如:标度因数、轴非正交角、非线性度等需要提前标定好,并将这些参数应用于原始数据。
此外需要创建一个IMU的配置YAML文件,其中包含加速度计和陀螺仪的以下统计属性:

  • 噪声强度(noise density)
  • 偏值随机游走(bias random walk)

2)预备项2
创建一个ROS包,包里记录原始的图像流。
具体方法或通过直接录制(recording)来自于ROS传感器的流,或使用图像文件列表上的bagcreater脚本和包含IMU测量值的CSV文件(后一种是指本地保存有许多张图片,用他们创建一个bag文件)。
标定目标(the calibration target,即打印的A4纸图案)是固定的,camera-imu系统在该图案之前移动来激发所有IMU轴。同样重要的是,确保该图案的良好的均匀的照明(good and even illumination)以及保证相机快门时间低来避免过度的运动模糊。
已经验证过,相机以20Hz,IMU以100Hz频率采集数据,可以得到很好的结果。

今天晚上的目标:
1:使用提供的数据跑一下程序(以完成证明CDE包没有问题)
2!录制一个bag!!
首先,运行起来小觅相机的驱动,使其将Camera和IMU的数据以topic的形式发布出来。具体使用如下命令:

roslaunch mynt_eye_ros_wrapper display.launch

然后,降低采样频率到4Hz,参考文献[2]。具体使用如下命令:

rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right

【注】:该指令并非小觅相机库中的函数,而是ROS中的。就效果来看,有点类似于订阅了/mynteye/left/image_raw,然后将采样频率降到4Hz,并降低采样频率后的图像数据发布新的名为/left的topic。

最后,使用rosbag录制感兴趣的三个话题!

rosbag record -O stereo_imu_calibra.bag /left /right /mynteye/imu/data_raw

【注】:录制好的bag可以使用rqt进行可视化查看。具体操作如下:
roscore,然后运行rqt,菜单栏Plugins->Logging->Bag,右键View->image即可。

进行纯相机标定的命令如下:

./kalibr_calibrate_cameras --target dynamic/april_6x6.yaml --bag dynamic/stereo_imu_calibra.bag --models pinhole-radtan pinhole-radtan --topic /left /right

记录了2小时的IMU数据,接下来使用Allan方差进行分析。

3)开始标定
使用如下命令执行(以后续例程中的命令为例):
./kalibr_calibrate_imu_camera --target dynamic/april_6x6.yaml --bag dynamic/dynamic.bag --cam camchain-homechangshendeskkalibr-cdedynamicdynamic.yaml --imu dynamic/imu_adis16448.yaml
【注】:CDE版和源码编译版命令略有不同。
其中,参数的含义:

  • --bag包含相机图像数据和IMU数据的ROS包;
  • --cam保存相机系统的内参和外参校准参数的文件(intrinsic and extrinsic calibration parameters)。可以在这里使用multiple-camera-calibration tool标定的结果,因此文件名那么长!(详见第二大节);
  • --imu保存IMU的统计特性和话题名称(the IMU statistics and the IMU’s topic)的文件;
  • --target保存目标图案尺寸信息的文件。

4)输出
标定会产生如下输出文件:
– report-imucam-%BAGNAME%.pdf
– results-imucam-%BAGNAME%.txt
– camchain-imucam-%BAGNAME%.yaml

2. 使用样例数据集的例子下载解压数据集。

存档中将会包含.bag包,标定目标和IMU配置文件。使用如下命令进行标定:kalibr_calibrate_imu_camera --target april_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag dynamic.bag --bag-from-to 5 45
【注】:因为在数据集的开头和结尾(拿起/放下期间)存在有抖动,只有5~45之间的数据被使用。

二、Kalibr的Multiple camera calibration

multiple camera calibration工具能够估计出一个多相机系统的内参和外参(the intrinsic and extrinsic parameters)。支持好多种模型。

1.如何使用?

1)创建一个ROS bag
该ROS bag中记录了传感器的流数据。相机系统固定,标定目标物在相机前运动以获得标定图像。推荐在采集标定数据的时候将相机流的频率降低到4Hz。这可以降低信息的冗余,同时缩短标定时间。
2)运行标定使用下面的命令运行标定:
同样使用上述样例中的数据及文件:
./kalibr_calibrate_cameras --target dynamic/april_6x6.yaml --bag dynamic/dynamic.bag --models pinhole-equi --topic /cam0/image_raw
其中,参数的含义如下:

  • --topics:bag中所有相机的话题列表,和models相对应。
  • --models:(camera/distortion)相机/畸变模型

【注】:有可能,优化刚开始运行就发散,由于焦距初值估计不好。这时,只需重新再开始标定过程。
3)输出
标定会产生如下输出文件:
– report-cam-%BAGNAME%.pdf
– results-cam-%BAGNAME%.txt
– camchain-%BAGNAME%.yaml
4)验证
如果你是从源码编译来的,那么可以使用验证(Calibration validator)工具对标定结果进行验证。

【注】:实际标定时注意两件事:
1.修改--target对应的文件中的值,为自己实际打印出来的图案的值;
2.相机/畸变模型的选择:pinhole-radtan

参考网址及文献
[1]. Kalibr官方wiki链接
[2].标定mynt小觅相机(仅双目)

你可能感兴趣的:(▶,ROS)