资讯

【泡泡传感器评测】小觅双目摄像头D1000-IR-120/Color模组评测(下)

转载 2019-08-17 14:55 paopaoslam 来源:泡泡机器人SLAM
轻客小觅智能科技(北京)有限公司

分析camera的参数

  每个相机镜头都有不同的参数, 因此针对每个镜头都需要做光学标定. 首先需要对镜头进行参数建模,分投影模型和畸变模型, 投影模型我们选用比较通用的pinhole模型, 包括焦距,光心. 畸变模型我们选用radtan模型, 包括径向畸变,切向畸变.

  Pinhole模型即针孔相机模型, 投影方程及示意图为:

  其中fx,fy为焦距, cx,cy为光心, (x,y,z)为相机坐标系下的3d点坐标, (ix,iy)为图像坐标系下的像素点坐标.

  Radtan模型即radial-tangential模型, 包括径向畸变参数和切向畸变参数.畸变方程及示意图为:

  以上是单个相机镜头的一些标定参数, 被称为内参. 如果具有多个相机镜头, 比如现在广泛使用的双目相机, 则还存在相机与相机之间的变换关系, 被称为外参, 模型及示意图如下:

  其中(x0,y0,z0)’和(x1,y1,z1)’分别是每个相机自身坐标系下的同一3d点坐标, R是旋转矩阵, T是平移向量, R和T被称为外参, 表示相机间的相对旋转和相对平移.

  相机标定是计算机视觉领域经久不衰的研究方向, 一般都是使用非线性的迭代优化方法求迭代解. 下面我们将使用两个工具包来标定手上的小觅相机, 并与相机本身自带标定参数做对比.

  首先是被广泛使用的opencv的标定方法. 我们使用了opencv自带的stereo_calib例子. 使用小觅相机采集了1280*720分辨率大小(下同)的图像, opencv默认是使用黑白棋盘格作为标定板, 我们使用A4纸打印了一个9X6大小的棋盘格, 采集了一组17对的双目图像, 共三组,用于标定. 其中一对图像样例及特征提取结果如下图所示:

  基于标定板的标定算法一般是先为待求解参数设置初值, 由于标定板上的特征点(如果是黑白棋盘格则是格子角点)分布及坐标已知, 则采用PnP初始化所有相机的pose, 然后使用非线性优化方法迭代优化. 目标函数则是投影误差方程.

  程序优化结束后,利用优化得到的内外参数值, 可以得到去畸变及双目校正后的结果图:

  图中红色方框为图像有效区域, 而绿色直线为双目的对极线.可以看出, 左右图中任意一个相同的点,都在同一条水平直线上, 即完成了双目校正. 我们还可以看到校正后的图像形变比较大, 这是因为小觅相机采用的是FOV视角比较大比较接近鱼眼的镜头, 而pinhole投影模型是平面投影模型, 因此这样会导致形变比较大. 如果FOV视角过大, 则应该采用鱼眼投影模型比如omni模型来建模.

  下面我们采用更加专业的标定工具包Kalibr来进行双目标定. Kalibr不仅支持多种相机模型,畸变模型, 还支持多相机标定,卷帘相机标定, imu-camera联合标定. 是目前开源工具包中功能较为全面的一个.

  Kalibr也支持多种类型标定板目标,如棋盘格,原点整列, 二维码棋盘格, 这里我们使用了kalibr默认的二维码棋盘格, 其中图像样例及特征提取效果图如下,其中左图是角点提取效果, 而右图是二维码中心的提取结果,这种基于区域的特征提取相比基于角点的特征提取的优势是, 对运动模糊更加鲁棒:

  运行完kalibr标定程序后, 会生成一个详细的标定结果报告, 以下是一些标定结果示例:

  从图中及标定结果可以看出小觅这款相机基本是平行的, 相机间的相对旋转非常小. 而我们得到重投影误差比较大, 这一般与采集数据的过程, 及标定板的精密程度非常相关.

  在使用两种工具包的多组数据进行了标定之后, 我们同时使用小觅相机的api获取了相机出厂自带的内外参, 与我们自身标定的结果对比, 我们使用kalibr标定了5组数据, 使用opencv标定了3组数据, 主要对比三类参数, camera0的内参, camera1的内参, camera1相对camera0的外参:

  由于opencv中的相机内参没有径向畸变参数, 我们将其设置为0, 从表中数据可以看出, 不同kalibr数据组之间的一致性比较好, 与小觅出厂数据也较为接近. 但是与opencv的标定结果相差较大.

分析imu-camera联合标定

  Kalibr最大的优势在于可以实现imu和camera的联合标定, 相比visual-odometry, visual-internal-odometry具有尺度可知, 重力方向可知, 旋转预测精确等许多优势, 因此在camera系统中加入imu是许多slam系统的选择, 但是imu和camera之间相对关系的标定还是一个相对复杂的问题. 而Kalibr将这个问题纳入了工具包, 提供了标定的算法.

  Kalibr做imu-camera联合标定的前提是提供camera标定参数, 及imu是已经校正好的(kalibr也提供更复杂的算法联合标定时同时标定imu的scale和misalignment, 但本文不考虑这个问题). 因此我们在对手中的小觅相机做联合标定时, 使用了上一节kalibr标出的相机内外参作为固定参数, 在采集imu的时候还设定了PROC_IMU_ALL模式,即同时校正了温漂问题和scale/misalignment问题.

  Kalibr做imu-camera联合标定的框架与camera标定的框架基本一致. 需要标定imu与camera的相对旋转和平移. 但与camera标定最大的不同是, camera标定是静态的标定, 而imu数据是时序相关的, 每个数据都带一个时间戳, 即动态标定. camera产生的图像数据的时间戳与imu产生的gyro/acc数据的时间戳并不一定完全同步, 所以涉及到不同硬件的时间戳同步问题. 因此Kalibr还将camera与imu之间时间戳的延时加入了优化参数中.

  参照Kalibr的文档, 我们同样采集了5组数据用于标定, 在数据采集过程中需要注意的主要有两点, 一是需要经量激励加速度计的各个轴, 因此只有imu产生足够的数据变化, 一些参数才能变得可观,即可优化. 二是需要提高外部环境光强度, 降低快门和曝光时间, 因为需要运动, 如果曝光时间长,则图像会产生运动模糊, 会影响特征提取的精度. 下图是运行kalibr动态标定的重投影误差结果示意图:

  从上图可知, 结果有一些误差比较大的outlier点, 这可能会影响标定的效果.

  在和小觅的技术同学沟通后,小觅的技术也进行了Kalibr标定,从重投影误差看,标定的结果还可以,outlier较少。

  标定的结果有很多影响因素,这个问题,还可以进一步深挖。

  小觅的技术标定结果如下图:

  我们使用api从小觅相机中读出出厂标定的结果, 与我们kalibr的标定结果做对比, 数据如下:

  从表中可以看出, 在imu与camera的相对平移值上, 我们的标定结果与出厂数据差别较大,达到厘米级, 但是kalibr结果本身的分布是相对一致的.

  参考资料:

  《学习OpenCV(中文版)》

  imu_tk:https://bitbucket.org/alberto_pretto/imu_tk/src/master/

  《A Robust and Easy to Implement Method for IMU Calibration without External Equipments》 http://www.dis.uniroma1.it/~pretto/papers/tpm_icra2014.pdf

  imu_utils:https://github.com/gaowenliang/imu_utils

0 0

网友评论

取消