视觉SLAM的二维和三维点的特征匹配,位姿估计的方法总结

本文详细介绍了视觉传感器的运动估计过程,包括从2D-2D特征点匹配的对极几何、3D-2D的PnP问题到3D-3D匹配的ICP方法。讨论了直接线性变换(DLT)、P3P算法和非线性优化在运动估计中的应用,以及李代数在优化过程中的作用。同时提到了尺度归一化问题和单目视觉的尺度不确定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于视觉,单目经常拿到的数据点是二维,当然也有像双目、kinetic这样的深度相机拿到3d坐标,对于激光一般都是拿到的三维点云坐标。那么对于一些已经提取到的特征点,如何进行匹配,从而估计出传感器的运动,参考视觉十四讲第七讲,自己总结一下,便于以后查看:

首先介绍以下相机的运动过程:世界系、相机系、归一化相机系、像素系

        世界坐标系固定下,有一点Pw(x,y,z),相机在初始时刻在世界坐标系下的位姿已知,可以得到P点在cam0时刻的位姿Pc(x,y,z),再将相机坐标系转换到归一化相机平面(Z=1),得到归一化坐标Pc(x/z,y/z,1)齐次坐标,可以得到像素坐标:K*Pc(x/z,y/z,1)。

1、2d-2d:对极几何 ,要转化为3d-2d的问题

图像特征点对的距离筛选标准一般是,汉明距离 < 最小距离的两倍

1)对极约束:p2^{T}*F*p1 = 0是等式为0的约束(p1、p2是像素坐标),因此E矩阵在不同尺度下是等价的。三个矩阵都会求解出4组解,利用相机深度一定为正(三角化检测),得到第一帧和第二帧间运动的正确解T21(H矩阵还需要其他方式去排除)。

2)基础矩阵E(3x3):t的反对称矩阵乘以R(外积),E = t^ * R(8点法求解E,SVD去分解出运动)

CVlib:findFundamentalMat()

3)本质矩阵F(3x3):与E只差相机内参矩阵(光心、焦距eg.),F = K^{-T}*E*K^{-1}

CVlib:findEssentialMat()、recoverPose()

4)单应矩阵H(3x3):适用于相机平面与特征平面平行(无人机俯视地面),4组匹配点求解,不能有3个共线的点。

CVlib:findHomoGraphyMat()

5)尺度归一化问题:旋转矩阵R自身是正交矩阵,可以认为就是归一化的,所有认为E的尺度是由于t具有一个尺度带来的,这将导致,单目视觉的尺度不确定性;因此,单目视觉在初始化时,必须带有平移,不能只有旋转;

6)三角化检测:从估计的R,t,建立最小二乘方程,求匹配的特征点的深度;然后以初始化计算的点深度对应的归一化的t,完成尺度确定。点深度为正,完成R,t确定。(三角检测相机运动也必须带有平移)

CVlib:triangulatePoints()

总结:特征点共面、相机发生旋转时,E矩阵出现退化,一般是同时估计F和H,选择重投影误差小的解。2)---4)完成运动估计,6)完成深度估计,并解决尺度问题。对于有多于8对点的求解方式:构建最小二乘超定方程组或者ransac。单目初始化完成后,就可以使用3d-2d来估计运动。构建线性方程组时,一般将待求解的nxn的矩阵,写为n^{2}x1的未知向量,进行构建。

2、3d-2d:PnP(至少3对点),一般转换为3d-3d方式

T21求解方式有:

1)DLT:直接线性变换,解线性方程组至少6 对点,多于6对点构建超定方程组,最后对求出的矩阵可以使用QR分解出满足SO(3)的R矩阵和t;

2)P3P:3对点,将2d点求得它的3d坐标,转换到统一坐标系下进行3d-3d的匹配,计算相机运动,因此P3P只是利用三角形相似得到了2d点的3d坐标;

CVlib:solvePnP()、Rodrigues()

3)非线性:BA,最小化重投影误差(将像素坐标与3d点按照当前估计的位姿进行投影构建的误差),高斯牛顿、列-马、Dog-leg等非线性优化方法(SLAM常用的优化库g2o、ceres、gtsam);

        --李群:SO(3)3维、SE(3)6维,对乘法封闭;记三维向量为\phi,\xi,也叫李代数,关系如下:

                R在t时刻的一阶导数 = \phi^  *  R,\phi反应了R的导数性质,是SO(3)原点附近的正切空间。在t时刻,且有R = exp(\phi^),T = exp(\xi^);

        --李代数:so(3) 、se(3)对加法封闭;李代数求导:掌握左乘扰动模型。

      左扰动\Delta R对应的李代数为\varphi,Rp对R求导,R用李代数表示(指数映射),转为Rp对\varphi求导,那么:

                \frac{\partial Rp}{\partial \varphi } = -(Rp)^{\wedge }

       左扰动\Delta T对应的李代数为\sigma \xi,那么:

                \frac{\partial Tp}{\partial \sigma \xi } = \begin{bmatrix} I & -(Rp+t)^{\wedge }\\ 0^{T} & 0^{T} \end{bmatrix}

        --泰勒展开: e(x+\Delta x) =e(x)+J*\Delta x

        设此处e(x)为误差函数,J是雅克比矩阵是误差函数对待优化变量的一阶导数;那么对应于书中推到的误差函数e(\xi , P),主要想优化相机位姿(李代数)和特征点的空间位置,最关键的就是关于这两个变量推到出来的矩阵。

注意:g2o提供的se3的边是旋转在前,平移在后,与李代数的定义相反。因此_jacobianOplusXx的前三列和后三列与推导出来的矩阵要交换;误差的定义:可以是观测值-预测值,也可以是预测值-观测值,此时的雅克比矩阵只需要取相反数;

3、3d-3d

icp求解方式

非线性优化的具体方法算法,内容比较多,以后再总结。。。

参考:高博视觉十四讲

### 回答1: 常用的 SLAM 软件有: 1. G2O 2. ORB-SLAM 3. DSO (Direct Sparse Odometry) 4. Cartographer 5. LSDSLAM (Large-Scale Direct Monocular SLAM) 这些软件都是用于实现机器人或者相机的自主定位与地图构建的。 ### 回答2: 实现SLAM(同时定位与地图构建)的软件有很多。以下是一些常用的SLAM软件: 1. GMapping:GMapping是一个基于粒子滤波的SLAM算法,可生成维栅格地图。它使用扫描匹配机器人运动模型来估计机器人的位姿,并通过粒子滤波来构建地图。 2. Hector SLAM:Hector SLAM是一种基于激光扫描的SLAM算法。它使用单线激光扫描计算机器人的位姿,并利用扫描数据来构建地图。 3. ORB-SLAM:ORB-SLAM是一种基于特征点的视觉SLAM算法。它使用ORB特征点来估计相机的位姿,并通过优化来构建三维地图。 4. Cartographer:Cartographer是由Google开发的一种维和三维SLAM算法。它使用激光和视觉传感器数据来定位机器人并构建地图。 5. RTAB-Map:RTAB-Map是一种实时应用的视觉SLAM算法。它使用RGB-D相机和激光传感器来定位机器人并构建建环回路优化的三维地图。 6. LSD-SLAM:LSD-SLAM是一种基于直接法的视觉SLAM算法。它使用单目相机的连续图像流来构建稠密的三维地图。 这些软件都具有不同的特点和适用场景,可以根据实际应用需求选择合适的SLAM软件。 ### 回答3: 实现SLAM(同步定位与地图构建)的软件有多种,这里列举一些常用的: 1. ROS(机器人操作系统):ROS是一种开源的机器人软件平台,提供强大的SLAM算法库和工具,如gmapping、Hector SLAM和Cartographer等。 2. GTSAM(通用滤波与样条优化库):GTSAM是一个用于处理非线性优化问题的库,可用于SLAM中的滤波和优化任务。 3. OpenSLAM:OpenSLAM是一个开源的SLAM算法集合,包含多种SLAM算法实现,如ORB-SLAM、LSD-SLAM和MSCKF等。 4. RTAB-Map:RTAB-Map是一种基于ROS的实时稠密地图构建和回环检测的SLAM系统,可用于移动机器人和无人机等。 5. SLAM++:SLAM++是一种用于快速建立稠密地图的V-SLAM系统,具有高精度和高鲁棒性。 6. OctoMap:OctoMap是一种基于概率体素的三维地图表示方法,可用于环境感知和定位。 7. Cartographer:Cartographer是Google开发的一种用于构建精确三维地图的SLAM系统,可用于自动驾驶机器人导航等领域。 当然,除了以上列举的软件,还有很多其他的SLAM实现,每种软件都有其特点和适用领域,选择合适的软件取决于具体的应用需求和硬件平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值