Camera-IMU联合标定原理

这篇具有很好参考价值的文章主要介绍了Camera-IMU联合标定原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在VIO系统中,camera-imu间内外参精确与否对整个定位精度起着重要的作用。所以良好的标定结果是定位系统的前提工作。

目前标定算法主要分为离线和在线标定,离线标定以kalibr为代表,能够标定camera内参、camera-imu之间位移旋转、时间延时以及imu自身的刻度系数、非正交性等。标定过程中,kalibr 会使用 apriltag 作为视觉基准,利用非线性优化的方法优化视觉的重投影误差、角速度误差、加速度误差和 bias 误差,最后得到所需要的 IMU 和相机的外参数以及重力向量大小。除此之外,kalibr 还考虑了相机和 IMU不同步的情况,因此,还可以使用 kalibr 获得相机和 IMU 之间的时间延迟。

一.相机投影模型

这里以常用的针孔相机投影为例,而畸变模型包括最常见rantan、equidistant两种。对于空间中3D点怎样投影得到像素平面2D坐标:

Camera-IMU联合标定原理

由上图,可以看到空间三维点P由三角形相似,可以简单计算出来像素平面坐标(u,v)。实际投影成像过程不想上图那么简单,主要包含三步:
[ X C Y C Z C ] ⟹ 归一化平面 [ u = X C / Z C v = Y C / Z C ] ⟹ 加畸变 [ r = u 2 + v 2 d r = 1 + k 1 r + k 2 r 2 + k 3 r 2 u d = u d r + 2 u v p 1 + ( r + 2 u 2 ) p 2 v d = v d r + 2 u v p 2 + ( r + 2 v 2 ) p 1 ] ⟹ 像素 [ p x = f x u d + c x p y = f y v d + c y ] \begin{bmatrix} X_{C}\\Y_{C}\\ Z_{C}\end{bmatrix}\overset{归一化平面}{\Longrightarrow } \begin{bmatrix} u=X_{C}/Z_{C}\\v=Y_{C}/Z_{C}\end{bmatrix}\overset{加畸变}{\Longrightarrow } \begin{bmatrix} r=u^{2}+v^{2}\\d_{r}=1+k_{1}r+k_{2}r^{2}+k_{3}r^{2}\\u_{d}=ud_{r}+2uvp_{1}+(r+2u^{2})p_{2}\\ v_{d}=vd_{r}+2uvp_{2}+(r+2v^{2})p_{1}\end{bmatrix}\overset{像素}{\Longrightarrow }\begin{bmatrix} p_{x}=f_{x}u_{d}+c_{x}\\p_{y}=f_{y}v_{d}+c_{y} \end{bmatrix} XCYCZC 归一化平面[u=XC/ZCv=YC/ZC]加畸变 r=u2+v2dr=1+k1r+k2r2+k3r2ud=udr+2uvp1+(r+2u2)p2vd=vdr+2uvp2+(r+2v2)p1 像素[px=fxud+cxpy=fyvd+cy]

上图第二步以rantan畸变为例,对于equidistant畸变模型则是另外一种形式:

{ r = u 2 + v 2 θ d = θ ( 1 + k 1 θ 2 + k 2 θ 4 + k 3 θ 6 + k 4 θ 8 ) u d = u ⋅ θ d r , v d = v ⋅ θ d r \left\{\begin{matrix} r=\sqrt{u^2+v^2} \\ \theta_{d}=\theta(1+k_{1}\theta^{2}+k_{2}\theta^{4}+k_{3}\theta^{6}+k_{4}\theta^{8}) \\ u_{d}=u\cdot \frac{\theta_{d}}{r},v_{d}=v\cdot \frac{\theta_{d}}{r} \end{matrix}\right. r=u2+v2 θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)ud=urθd,vd=vrθd

投影过程首先是算出归一化平面上点,然后再对归一化平面上点加rantan、equidistant畸变,最后再作用于内参焦距、主点,得到成像像素点坐标。

二.IMU 模型

惯性测量单元(Inertial Measurement Unit,IMU),主要用来测量机器人运动过程中的角速度以及加速度。由于相机在运动过快的过程中拍摄的图片会产生模糊,从而导致在两帧图片中存在的共同区域将变少,算法无法确定机器人的运动方向。因此,使用 IMU 可以持续提供可靠的(R,t)估算。对于视觉算法,IMU 起着互补的作用。

对于一个理想的 IMU,其加速度的三个轴与陀螺仪的三个轴定义了一个共享、正交的三维坐标系。加速度计用来感应物体在运动过程中沿着不同轴产生的加速度陀螺仪用来测量物体围绕不同轴的角速度。但在实际情况下,由于组装的原因,加速度计和陀螺仪的三维坐标系是两个非正交,因此导致轴偏转角误差,如下图所示。对于两个坐标系之间的变换,可以通过下式获得:

Camera-IMU联合标定原理

​ 非正交传感器坐标轴 ( x S 、 y S 、 z S ) (x^{S}、y^{S}、z^{S}) (xSySzS)和 IMU 主体坐标轴 ( x B 、 y B 、 z B ) (x^{B}、y^{B}、z^{B}) (xByBzB)

假设 IMU 主体坐标系与加速度计正交坐标系相重合,那么在这种情况下,角度 β x z 、 β x y 、 β y x β_{xz}、β_{xy}、β_{yx} βxzβxyβyx的值都为零,上式可以简化为:

Camera-IMU联合标定原理

式中,字母 a 表示加速度计情况,而 a O a^{O} aO a S a^{S} aS分别表示理想坐标系和实际坐标系。

陀螺仪和加速度计测量应该参考同样的坐标系,因此可以使用下式来表示如何从实际陀螺仪坐标系变换到理想陀螺仪坐标系:

Camera-IMU联合标定原理

加速度计和陀螺仪都会受数字信号转换为物理量带来误差的影响,因此引入加速度计与陀螺仪尺度因子矩阵:
Camera-IMU联合标定原理

加速度计和陀螺仪精确加工的条件下,当 IMU 静止时,加速度计和陀螺仪三轴均输出0。但是由于加工误差的存在,加速度计与陀螺仪产生零偏向量:

Camera-IMU联合标定原理

在相机和 IMU 联合使用的情况下,主要考虑数据怎么从一个坐标系转换到另一个坐标系. 相机坐标系{C}、IMU 坐标系{B}和世界坐标系{W}之间的关系如下图所示,各个坐标系之间可以相互变换:

Camera-IMU联合标定原理

​ 不同坐标系之间相互转换的关系

用 T 来表示不同坐标系之间的变换,在相机和 IMU 使用前,需要对相机和 IMU 之间的变换矩阵 T c b T_{cb} Tcb进行标定。因此相机坐标系和 IMU 坐标系之间满足如下变换关系:

T w b = T w c ⋅ T c b T_{wb}=T_{wc}\cdot T_{cb} Twb=TwcTcb

将 T 表示成旋转矩阵 R 和平移向量 t:

Camera-IMU联合标定原理

将上式进行矩阵之间的运算,可以分别得到相机坐标系和 IMU 坐标系之间旋转和平移的变换关系:

Camera-IMU联合标定原理

​ 由于相机和 IMU 是两个不同的传感器,两者的触发不能完全同步进行,因此在使用中相机和 IMU 之间触发存在时间差 t d t_{d} td。如下图 所示,传感器采样实例和时间戳之间存在偏差。

Camera-IMU联合标定原理

传感器采样时间戳

​ IMU 的采样时间等于相机的采样时间加上时间差 t d t_{d} td: t I M U = t c a m + t d t_{IMU}=t_{cam}+t_{d} tIMU=tcam+td

三.Camera-IMU标定模型

对于低纹理、运动模糊和遮挡的环境,视觉和惯性传感器的结合具有较强的鲁棒性。在纯视觉 SLAM 中通常缺少尺度信息,IMU 通过提供可靠的 R 和 t 以恢复绝对尺度。具有代表性的算法有 EKF-SLAM、MSCKF、OKVIS、VINS-Mono和ORB-SLAM3。以上经典的算法都依赖于系统准确的初始化相机-IMU精准的标定。相机-IMU 的外参标定主要来标定从相机坐标系{C}到 IMU 坐标系{B}的变换矩阵(即旋转和平移),我们首先求取从相机到 IMU 的旋转,然后再求取平移.

(一) 相机-IMU旋转

相机-IMU 之间的旋转对于视觉惯性 SLAM 系统的鲁棒性非常重要,过大的偏差会导致系统的初始化崩溃。因为单目相机可以跟踪系统的位姿,而两幅图像之间的相对旋转可以通过经典的五点算法来解决两帧之间图片的相对旋转 R c k , c k + 1 R_{c_{k},c_{k+1}} Rck,ck+1。此外,角速度可以通过对陀螺仪积分来获得相关的旋转 R b k , b k + 1 R_{b_{k},b_{k+1}} Rbk,bk+1。对于任意的 k 帧的图片,遵循以下等式:

R b k , b k + 1 ⋅ R b c = R b c ⋅ R c k , c k + 1 R_{b_{k},b_{k+1}}\cdot R_{bc}=R_{bc}\cdot R_{c_{k},c_{k+1}} Rbk,bk+1Rbc=RbcRck,ck+1

将上式中的旋转矩阵用四元数来表示:

Camera-IMU联合标定原理

对于给定的多对连续图像之间的旋转,我们可以构建一个超定方程:

Camera-IMU联合标定原理

式中 N 表示旋转矩阵收敛时所使用帧的数量, w k , k + 1 w_{k,k+1} wk,k+1是异常处理的权重。当旋转校准与传入的测量一起运行时,先前估计的结果 R ^ b c \hat{R}_{bc} R^bc可以作为初始值对残差进行加权:

Camera-IMU联合标定原理

残差函数的权重为:

Camera-IMU联合标定原理

如果没有足够的特征来估计相机旋转,则将 w k , k + 1 w_{k,k+1} wk,k+1设置为零。以上的超定方程的解可以找到对应于 Q N Q_{N} QN的最小奇异值的右单位奇异向量。即可以解算出对应的旋转矩阵 R b c R_{bc} Rbc

(二) 相机-IMU平移

相机-IMU 的旋转可以从上部分得到,获得旋转矩阵 R b c R_{bc} Rbc后,我们可以估计相机-IMU 的平移,使用紧耦合的滑动窗口来初始化这些参数。初始化在 IMU 坐标系下完成,我们定义的状态向量为:

Camera-IMU联合标定原理

其中 x k x_{k} xk是第 k 个 IMU 的状态, g b k g^{bk} gbk是重力向量,N 是 IMU 的状态在滑动窗口中 s 的数量,M是在滑动窗口中具有足够视差的特征的数量。n 和 m 是在滑动窗口中的起始索引。 λ l λ_{l} λl 是第 l l l个特征从第一次观察开始的深度, P b 0 b k P_{b_{0}b_{k}} Pb0bk=[0,0,0]事前设定好。

初始化通过最大似然估计来完成,即最小化滑动窗口内来自 IMU 和单目相机的所有测量误差的马氏范数之和:

Camera-IMU联合标定原理

其中 B 是所有 IMU 测量值的集合,C 是任何特征和任何相机姿态之间的所有观测值的集合。由于增量和相对旋转是已知的,上式可以使用非迭代线性方式求解。其中 IMU 的测量可以表示为:

Camera-IMU联合标定原理
{ r p , H p r_{p},H_{p} rp,Hp}是线性估计器的解,{ P b k , b k + 1 , H b k , b k + 1 P_{b_{k},b_{k+1}},H_{b_{k},b_{k+1}} Pbk,bk+1,Hbk,bk+1}是线性 IMU 测量模型, H c j l H_{cjl} Hcjl是线性相机测量模型。上式最优化方程描述的过于复杂,为了便于参数的求解,将线性代价函数转换为以下形式:

Camera-IMU联合标定原理其中{$ \Lambda_{B},b_{B}KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲和{\Lambda_{C},b_{C}$}分别是 IMU 和视觉测量的信息矩阵和向量。由于已知的增量和对应的旋转,代价函数的状态是线性的,并且上式具有唯一的解。通过对该方程线性的求解,就能获得相机-IMU 之间的平移向量 t b c t_{bc} tbc

(三) 视觉惯性代价函数

​ 单目视觉惯性问题可以被公式化为一个联合优化的代价函数 J ( x ) J(x) J(x),代价函数包括视觉测量的残差权重 e v e_{v} ev和惯性测量的残差权重 e i e_{i} ei:

Camera-IMU联合标定原理

其中 i 是图像的特征索引,k 代表相机数量索引,j 表示 3D 目标的位置,W 表示位置测量的信息矩阵。

四. camera-imu联合标定

​imu可以获取每一时刻加速度和角速度,对加速度、角速度进行积分可以得到速度、位置、旋转。不同于SLAM中对离散imu数据进行积分得到状态可能带来较大的误差,采用对时间连续的状态求导来反推imu数据。把离散的状态描述成连续的就需要B-spline。

Kalibr 离线标定方法步骤:

  1. 粗略估计camera与imu之间时间延时。

  2. 获取imu-camera之间初始旋转,还有一些必要的初始值:重力加速度、陀螺仪偏置。

  3. 大优化,非线性优化代价函数,包括所有的角点重投影误差、imu加速度计与陀螺仪测量误差、偏置随机游走噪声。

(一) 粗略估计camera与imu之间时间延时

通过相机内参标定,可以先标定出camera的内参。现在已知每一帧图像的3D-2D对应,可以算出每一帧camera的pose。用这些离散的pose构造连续的B-spline,就可以获取任意时刻pose。

这里对pose参数化采用六维的列向量,分别三维的位移和旋转矢量 。对位移和旋转矢量分别求一阶导、二阶导可以得到速度与加速度:
v = t ˙ v = \dot{t} v=t˙
a = t ˙ a = \dot{t} a=t˙
w i = J r ( θ ) θ ˙ w_{i} = J_{r}(\theta)\dot{\theta} wi=Jr(θ)θ˙

​ 利用camera的样条曲线获取任意时刻camera旋转角速度,而陀螺仪又测量imu的角速度。忽略偏置和噪声影响,两者相差一个旋转,且模长相等: w i = R i c w c w_{i}=R_{ic}w_{c} wi=Ricwc

(二) 获取imu-camera之间初始旋转,还有一些必要的初始值:重力加速度、陀螺仪偏置

同样利用角速度测量关系,这次构造一个优化问题

这样就可以获得camera-imu之间的旋转,以及陀螺仪偏置初始值。

忽略加速度偏置与噪声,假设整个标定过程中平均加速度为零,所以也可以获得重力加速度在参考坐标系下的表示: g ^ = − 1 n ∑ i = 1 n R w c ∗ R c i ∗ a m \hat{g} =-\frac{1}{n} \sum_{i=1}^{n} R_{wc}*R_{ci}*a_{m} g^=n1i=1nRwcRciam

(三) 大优化,包括所有的角点重投影误差、imu加速度计与陀螺仪测量误差、偏置随机游走噪声

前面两步为最后大优化提供一个不错的初始值,接着大优化就是调整所有要优化的变量来让所有的观测误差最小。

误差项包括所有标定板角点重投影误差imu加速度计与陀螺仪测量误差偏置的随机游走噪声(相对特殊点)。

为了简化imu测量误差的构建,这里利用camera pose乘上上面计算出来外参,得到imu的pose 曲线。当然这个曲线可能误差比较大,会在后续优化过程中进行调整。

参考:

https://blog.csdn.net/Yong_Qi2015/article/details/117490261文章来源地址https://www.toymoban.com/news/detail-473104.html

到了这里,关于Camera-IMU联合标定原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jetson orin+livox mid-70+imu+云台相机联合标定和数据采集

    将之前无人机上的x86多源数据采集和联合标定算法重建在新板子jetson orin上,解决之前多传感器采集数据时间戳没对齐的问题。 安装ros环境,推荐小鱼:http://fishros.com/#/fish_home,大佬的包避免了自己安装的很多坑; 安装livoxsdk: https://github.com/Livox-SDK/Livox-SDK; 安装云台相机s

    2024年02月11日
    浏览(43)
  • MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

          激光雷达 - 相机标定建立了三维激光雷达点和二维相机数据之间的对应关系,从而将激光雷达和相机输出融合在一起。 激光雷达传感器和相机被广泛用于自动驾驶、机器人和导航等应用中的三维场景重建。激光雷达传感器捕捉环境的三维结构信息,而相机则捕捉色彩、

    2024年02月20日
    浏览(52)
  • 相机标定(Camera calibration)原理及步骤

     这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。 1.为什么要相机标定?        在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点

    2024年02月09日
    浏览(41)
  • lidar-camera 标定系统

    (i) sphere center detection in the point cloud, (ii)the 3D sphere center estimation from the image (iii)relative pose calculation. 在点云中准确、鲁棒地检测球体是估计目标物体中心的关键任务。随机抽样一致性(RANSAC)[24]用于检测内点,迭代过程中使用快速最小拟合方法[25]。确定最大内点集后,使用

    2024年02月07日
    浏览(36)
  • imu的静态标定过程-使用imu_utils

    IMU标定使用imu_utils工具包,开源见https://github.com/gaowenliang/imu_utils[1],通过该工具包完成标定可以提供IMU的随机误差——noise和random walk。 imu_utils 测量结果:零偏  随机噪音 1.安装imu_utils git clone --recursive https://github.com/gaowenliang/imu_utils 注意:这个是ros版本,在Ros的catkin_ws空间

    2024年02月09日
    浏览(39)
  • 相机与IMU标定教程

    标定教程 way 1、 imu_utils标定IMU的内参,可以校准IMU的噪声密度和随机游走噪声 2、kalibr包标定相机的内外参数,相机与IMU之间的外参 1.1安装环境 这里使用的包是 imu_utils ,使用这个包可以校准IMU的噪声密度和随机游走噪声 step1: 安装ceres库 下载编译 ceres-solver step2: 安装 cod

    2023年04月18日
    浏览(36)
  • IMU标定实验

    参考代码 5.1.1 c++代码分析 下面代码确实是高斯噪声连续到离散除以 sqr(δt) ,偏差随机游走则是乘以 sqr(δt) 。 运动模型:利用p求出v,a;通过欧拉角的导数求出角速度w,根据时间变量t来产生数据。 5.1.2 生成ros包数据   GitHub同时提供了 ros 代码,我们直接用这套代码生成

    2024年02月21日
    浏览(37)
  • 使用kalibr对相机和IMU标定

    目录 一、IMU标定 二、相机标定 三、联合标定 关于需要下载的环境和具体的包参考【1】 记录标定过程 : ①录制imu的rosbag ②标定 单位问题 :   ①连续时间  ②离散时间 parameter symbol units gyr_n acc_n gyr_w acc_w 对于离散时间的白噪声  = 连续时间的白噪声 * 频率的平方根 对于离

    2024年02月15日
    浏览(44)
  • VIO第2讲:IMU标定实验

    参考代码 5.1.1 c++代码分析 下面代码确实是高斯噪声连续到离散除以 sqr(δt) ,偏差随机游走则是乘以 sqr(δt) 。 运动模型:利用p求出v,a;通过欧拉角的导数求出角速度w,根据时间变量t来产生数据。 5.1.2 生成ros包数据   GitHub同时提供了 ros 代码,我们直接用这套代码生成

    2024年02月21日
    浏览(30)
  • d435i 相机和imu标定

    使用 imu_utils 功能包标定 IMU,由于imu_utils功能包的编译依赖于code_utils,需要先编译code_utils,主要参考 相机与IMU联合标定_熊猫飞天的博客-CSDN博客 Ubuntu20.04编译并运行imu_utils,并且标定IMU_学无止境的小龟的博客-CSDN博客 1.1 编译 code_utils 创建工作空间 1.1.1 修改 CMakeLists.txt 文件

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包