解放双手——相机与IMU外参的在线标定

本文介绍了相机与IMU在SLAM中的融合,及其外参标定的重要性。相机与IMU的外参包括相对位姿和时间差,标定方法包括基于VINS和VI-ORB-SLAM的在线标定,以及基于像素点匀速运动的时间差标定。在线标定解放了双手,确保了系统精度。

本文作者 沈玥伶,公众号:计算机视觉life,编辑部成员

一、相机与IMU的融合

在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图。这是因为这两个传感器之间具有互补性:相机在快速运动、光照改变等情况下容易失效。而IMU能够高频地获得机器人内部的运动信息,并且不受周围环境的影响,从而弥补相机的不足;同时,相机能够获得丰富的环境信息,通过视觉匹配完成回环检测与回环校正,从而有效地修正IMU的累计漂移误差。

图1.png

二、什么是相机与IMU外参?

足够准确的相机与IMU外参是实现相机与IMU融合的定位与建图的前提。相机与IMU之间的外参包括两部分:

(1)相机与IMU之间的相对位姿

如下图所示,相机与IMU之间的相对位姿值的是相机坐标系和IMU坐标系之间的变换,包括相对旋转角和相对平移量。

图2.png

相机坐标系坐标和IMU坐标系坐标之间满足如下变换关系:

公式1.png

将上式展开可以得到分别得到相机坐标系和IMU坐标系之间旋转角和平移量的变换关系:

公式2.png

(2)相机与IMU之间的时间差

由于触发延时、传输延时的存在,传感器的采样时间和时间戳的时间不匹配,如下图所示,从而导致相机和IMU之间存在时间差td。

图3.png

td用公式表示为:

公式3.png

将相机的时间戳平移td后,相机与IMU之间实现了同步。

三、为什么需要在线标定?

大部分同学都是从跑公开的数据集开始入门的,这些数据集都给出了传感器的内外参数,不需要我们进行标定。但是,如果想投入到实际应用中,我们就需要使用自己的传感器。对于低成本、自己组装的相机与IMU传感器组合,相机与IMU之间的外参是未知的,这就需要我们对相机与IMU之间的外参进行标定。

对于相机与IMU之间的相对位姿,传统的标定方法往往采用离线的形式,需要手持标定板进行一系列操作,费时费力。对于相机与IMU之间的时间差,由于每次运行时间差都不相同,所以只能依靠在线标定的方法。所谓在线标定方法,指的是在系统运行之初或者系统运行过程中完成标定,这种方法解放了双手,也能够保证足够的精度。

四、相对位姿在线标定方法

(1)VINS基础上的在线标定

港科大沈劭劼实验室提出了在初始化的同时对相机与IMU之间的外参进行标定的方法[1]。流程如下图所示。首先进行相机与IMU之间相对旋转角的标定,标定完成之后进行初始化和相机与IMU之间相对平移量的标定。标定和初始化完成后进行视觉惯性联合的状态估计,并且把标定量也当做待估计的状态放入联合优化中。此在线标定方法被应用于VINS[2]中。代码实现包含于VINS中,VINS的源码已上传至github:https://github.com/HKUST-Aerial-Robotics/VINS-Mono。

图4.png

(2)VI-ORB-SLAM基础上的在线标定

Weibo Huang等借鉴了(1)中的标定方法,在VI-ORB-SLAM的基础上加上了相机与IMU的相对位姿在线标定[3]。与(1)的不同之处在于,此方法能够在系统运行之初快速得到足够精度的标定结果,没有将外参纳入状态估计的优化变量中,大大节省了计算量。作者暂时没有开源代码。

五、时间差在线标定方法

(1)基于像素点匀速运动的时间差标定方法

此时间差标定方法[4]同样出自港科大沈劭劼实验室并且应用于VINS中。代码实现包含于VINS中,VINS的源码已上传至github:https://github.com/HKUST-Aerial-Robotics/VINS-Mono。

原理为:假设在较短时间内相机从公式4.png匀速运动到

### 双目相机IMU标定方法 #### 安装准备 为了实现双目相机IMU的内标定,需先完成必要的软件安装。对于Ubuntu环境下操作,推荐使用Kalibr作为主要工具来执行这一系列工作[^3]。 #### 数据采集配置 在开始标定之前,确保已成功部署并运行目标硬件设备的小觅SDK,在此之上利用该SDK发布所需的数据流用于后续处理。这一步骤至关重要,因为高质量的数据输入直接影响最终标定精度[^2]。 #### 执行内标定 针对双目相机而言,其内部数(焦距、主点偏移等)可通过棋盘格模式图像序列来进行精确计算。具体做法是在不同位置拍摄多张含有固定图案的照片,并将其导入至Kalibr中自动获取最优解。同样地,IMU自身的内在特性也需要单独评估,通常涉及噪声水平及时钟同步等方面的考量[^1]。 ```bash rosrun kalibr_bagcreater create_calib_target_board --target target.yaml --output data.bag ``` 上述命令展示了如何创建一个包含校准板信息的数据包文件,其中`target.yaml`定义了所使用的特定类型的检测模板规格说明。 #### 实施关联 当各自独立完成了摄像头惯性测量单元各自的属性测定之后,则进入到两者间相对姿态关系的确立阶段——即所谓的“数”。通过共视场景下同时触发两传感器读数的方式收集样本集,再经由优化算法求得最佳匹配状态下的转换矩阵表示形式。值得注意的是,理想情况下重投影误差应控制在极低范围内,比如零点几个像素级别以内以保证足够的准确性。 ```python import os os.system('kalibr_calibrate_cameras --bag data.bag --models pinhole-radtan pinhole-equi --topics /left/image_raw /right/image_raw') os.system('kalibr_calibrate_imu_camera --bag data.bag --cam camchain-imucam.yaml --imu imu-yaml.yaml --target target.yaml') ``` 这两条Python脚本片段分别代表了调用Kalibr库函数进行相机之间以及相机IMU间的联合标定过程。 #### 结果验证分析 最后,应当仔细审查所得出的各项系数是否合理有效,并借助可视化手段直观展示二者之间的映射效果;必要时重复以上各环节直至满足预期性能指标为止。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值