面试准备
作者:互联网
激光雷达跟随:pid控制:
答:激光雷达跟随主要包括两部分,检测节点使用激光雷达检测目标的距离和角度,在处理激光数据时首先需要消除噪声点,距离最近的激光点索引和周围的激光点距离差需要小于指定的
阈值,将检测到的距离和角度发送给下一个跟随节点,跟随节点在接受到角度和距离后使用pid来更新速度和角速度值,然后发送给cmd_vel。
p:小车会将检测到的距离和期望的距离的差作为pid的偏差,乘以一个系数来作为比例部分。
I:偏差与时间乘积累加后作为积分部分。
D:偏差与时间的乘积。 这里的时间指的是当前的时间和上一次调用的时间。
hector:
原理:激光点与已有的地图“对齐”。
使用当前帧与已经有的地图数据构建误差函数,使用高斯牛顿法得到最优解和偏差量,上一帧位姿作为迭代的初值。
激光点在转换到栅格地图后以最大的概率落在已有地图的障碍物上。那么就可以构造最小二乘问题。
构建一个多分辨率地图,目的是减弱陷入迭代计算的局部极值。
栅格地图更新采用bresenham划线,连线经过的栅格设置为free,也就是减小一个值,最后根据栅格值是否大于0判断是否占用。
cartgrapher:
使用栅格地图,地图中存储着占据概率,通过把点云投影到栅格地图,计算匹配得分,找到最合适的投影,作为位姿变换。
回环检测:激光点云投影到栅格地图,暴力搜索全局地图,分支定界加速,确定初值以后用非线性优化精修;
LOAM:
对点云提取特征,然后根据稀疏的特征来计算位姿变换。 构建边缘点到边缘线的距离、平面点到平面的距离目标函数,通过非线性优化的方式进行梯度下降求解。
建图部分采用map-map的匹配,后端对特征点周围的点云进行主成分分析(求解协方差矩阵的特征值和特征向量)确定边缘线和平面,计算特征点到线和面的距离。
里程计的匹配,是用两帧点云数据,使用最近临法寻找边缘线和平面。
建图的匹配,是用10帧点云数据,和10立方米范围内的整个地图匹配,特征点增加了10倍。
LeGO-LOAM:
预处理:点云分割,点云聚类和特征提取:分割为地面点和非地面点;对非地面点进行点云聚类:聚类低于30个点就当成噪声处理,地面点进行稀疏;
将降噪和稀疏后的点云发布到下一个节点进行处理,从降噪和稀疏后的点云的点云中提取边缘点和平面点,边缘点提取自非地面点,平面特征点提取自地面点。
前端:提取特征,使用scan-to-scan推算两帧激光之间的相对位姿变换(使用两次LM优化),频率较高(10Hz)。
后端:scan-to-map,构建全局地图,获得世界坐标系下的位姿,频率较低。
贡献:解决一些非城市化道路或非平整道路上LOAM存在的问题
构建了目标函数以后,仍然采用LOAM中的列文伯格-马尔夸特优化算法,但是分了两阶段,第一阶段计算竖直维度的z,roll,pitch。
(根据地面的平面点来优化)
第二阶段计算水平维度的x,y,yaw,根据边缘点来优化。(类似于把一个O(n^6)的问题变成了两个O(n^3)的问题。)
不存储所有的传感器点云数据,而是只存储特征点集。
LOAM采取的是map-to-map的优化,最近的十帧点云与10立方米内的全局地图进行匹配,主成分分析,构建点到线、点到面的误差.
Lego-LOAM采取的是scan-to-map的优化,scan为当前帧点云中的特征点集;map有两种取法:第一种,和LOAM中一致,10立方米;第二种,
选一组时间上相近的特征点云,构建图优化问题。当前时刻的特征点云作为观测数据,当前位姿作为优化节点。
回环检测:
单独用一个线程运行。从历史位姿中寻找距离最近并且间隔大于30秒的位姿,找不到回环检测终止。找到了就将最近点对应的前后25帧点云组成一个submap。
然后用最新一帧的点云同这个子图进行ICP配准,获取位姿变换关系,就可以往因子图中添加一个新的约束。
默认偏移较小。如果偏移较大,就不能修正了。2.不具备重定位功能。因为这种算法的前提是需要知道自己的大致位置,和历史中附近的位置进行匹配,修正位姿。
保存的地图为稀疏后的点云地图,只能做定位不能做导航用。
回环检测:
检测当前位置是否曾经来过,即采用当前scan在历史中搜索。
方法:
特征匹配: 提取当前帧与过去所有帧的特征,并进行匹配
基于词袋模型: 词袋模型就是把特征看成是一个个单词,通过比较两张图片中单词的一致性,来判断两张图片是否属于同一场景.
目的:
1. 位姿的估计往往是由上一帧位姿解算当前帧位姿,递增求解导致相邻两帧之间的误差就会产生累计
2. 已有地图时位姿初始化,不知道当前帧初始位姿,也就不清楚在地图中哪个位置,无法做定位。
方法:大范围内穷举来确定初始位置(利用分支定界加速) + 非线性优化修正位姿
后端重定位:没有初始位姿,暴力匹配的范围变成了整个地图。 因此必须采用算法加速处理。:多分辨率地图+分枝定界操作
自动驾驶和机器人定位的区别:自动驾驶有gps和高精地图来实现全局定位,路途远导致不容易出现闭环检测。机器人不容易进行全局定位,但是室内情况下没有雨雾等
复杂环境,闭环检测条件容易出现。
最小二乘:模型的预测结果与实际的测量结果的偏差就是残差。非线性最小二乘的目的就是,调整模型的参数,使得总的残差平方和也就是目标函数最小。
最大似然估计:最大化所有测量的联合概率,本质上也可以转化为最小二乘问题。
最速下降法:只保留一阶项,增量的方向为:Δx∗=−JT(x),只要沿着反向梯度方向前进一个步长 λ,求得最快的下降方式,就是最速下降法。要达到最低点梯度下降法
每次只从你当前所处位置选一个坡度最大的方向走一步,容易走出锯齿形状走了弯路。
牛顿法:如果保留二阶梯度信息,那么增量方程为:HΔx=−JT。牛顿法迭代优化时既利用了梯度,又利用了梯度变化的速度(二阶导数)的信息,牛顿法在选择方向时,
不仅考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。牛顿法比梯度下降法看得更远一点,能更快地走到最底部。牛顿法需要计算 H 矩阵,比较困难。
Gauss-Newton: f(x) 进行一阶的泰勒展开,求解增量方程: J(x)TJ(x)Δ=−J(x)Tf(x)。高斯牛顿法使用J(x)TJ(x)来近似代替海森矩阵来简化计算,但是J(x)TJ(x)只是半正定矩阵,
导致算法不收敛。
1.给定初始值x0.
2. 对于第 k 次迭代,求出当前的雅可比矩阵J(xk) 和误差f(xk)。
3.求解增量方程: H Δ x = g 计算出步长Δ x.
4.若 Δxk 足够小,则停止。否则,令 x k + 1 = xk+Δxk,返回 2
LM方法:在高斯牛顿法基础上将系数矩阵加上一个对角矩阵,使其正定,确保方程有唯一解。
求解线性方程:Cholesky分解 QR分解 SVD分解都是为了避免对系数矩阵求逆。
视觉SLAM框架及组成:视觉SLAM由前端(视觉里程计)、后端(位姿优化)、闭环检测、建图图4个部分组成
如何滤除外点: 法一:RANSAC方法。法二:先求出所有匹配点最小距离min_dist,小于2倍的距离作为内点。法三:
什么情况下需要进行点云滤波:大量数据需要下采样,噪声数据需要去除,因为遮挡等问题造成离群点需要去除。点云数据密度不规则需要平滑。
对于单目相机,E和F矩阵有何不同?
F和E描述的都是两帧间的极线约束,只不过坐标系不同:F描述的是同一空间点在不同帧之间像素坐标的几何约束关系,E描述的是归一化相机坐标之间的几何约束关系
E只与相机外参有关,F与内外参都有关。在相机只有纯旋转而没有平移时,此时t为0,E、F也将为0,导致无法求解R;此时可以使用单应矩阵H求旋转,但仅无平移t,无法三
角化求深度。
描述PnP过程:
通常输入的是上一帧相机坐标系下的3D点和这些3D点在当前帧中的投影得到的2D点,所以它求得的是当前帧相对于上一帧的位姿变换。都是基于已知世界坐标系3D点和对应
的归一化相机坐标系2D点求解相机运动的过程。
BA过程:光束平差法,根据相机的投影模型构造代价函数,利用非线性优化来求最优解,得到最优的相机位姿。
如何选择关键帧:
跟踪质量:比如当前帧跟踪到的特征点数大于一定阈值,如大于50个点。距离最近关键帧的距离是否足够远,距离上一关键帧的帧数是否足够多(时间),
单目SLAM初始化过程、单目SLAM整个过程
a) 初始化过程:是通过前两帧之间2D-2D匹配点,使用对极几何计算出相机的旋转、平移矩阵,并将该平移矩阵初始化为后续相机运动的单位,即初始化之后的运动都以初始化
时的平移作为单位1,是为了解决单目的尺度不确定性问题。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只是纯旋转),否则将导致求得的本质矩阵E为0,也
就无法分解得到相机位姿。
b) 单目SLAM流程是:初始化—PnP—三角化—PnP—三角化……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解
得到相机运动,再依据三角化原理计算特征点距离。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了、后续3D点的计算仍采用三角化方式。
SLAM中的绑架问题(重定位)
a) 绑架问题就是重定位,是指机器人在缺少之前位置信息的情况下如何进行重新定位、确定当前位姿。
词袋模型可以用于回环检测,也可以用于重定位,有什么区别
词袋模型在SLAM中的应用:当前帧与关键帧的特征匹配、重定位的特征匹配、回环检测的特征匹配;(第一个是后两个的基本原理,后两个是应用场景)
重定位:主要是通过当前帧与关键帧的特征匹配,定位当前帧的相机位姿。
回环检测:优化整个地图信息,包括3D路标点、及相机位姿、相对尺度信息。回环检测提供了当前帧与所有历史帧的关系。
欧式变换(刚体变换): 平移(translation)和旋转(rotation)。有3个自由度(θ,tx,ty)
仿射变换的变换矩阵:有6个自由度(a,b,c,d,e,f),4x4矩阵,平移2、旋转、放缩、剪切、反射
什么是紧耦合、松耦合?
融合框架的区别又分为紧耦合和松耦合,松耦合中视觉运动估计和惯导运动估计系统是两个独立的模块,将每个模块的输出结果进行融合,而紧耦合则是使用两
个传感器的原始数据共同估计一组变量。松耦合是在视觉和IMU各自求出的位姿的基础上做的耦合,紧耦合是使用图像和IMU耦合后的数据计算相机位姿。
RANSAC和鲁棒核函数都是为了解决出现outlier的问题,RANAC是从数据中选择正确的匹配进行估计,鲁棒核函数则是直接作用在残差上,
限制单个数据点对于误差函数的影响力。等于对最小二乘问题做了包装,通过降低错误匹配的权重,使得观测数据中的outlier影响不到最终的估计结果。
答:激光雷达跟随主要包括两部分,检测节点使用激光雷达检测目标的距离和角度,在处理激光数据时首先需要消除噪声点,距离最近的激光点索引和周围的激光点距离差需要小于指定的
阈值,将检测到的距离和角度发送给下一个跟随节点,跟随节点在接受到角度和距离后使用pid来更新速度和角速度值,然后发送给cmd_vel。
p:小车会将检测到的距离和期望的距离的差作为pid的偏差,乘以一个系数来作为比例部分。
I:偏差与时间乘积累加后作为积分部分。
D:偏差与时间的乘积。 这里的时间指的是当前的时间和上一次调用的时间。
hector:
原理:激光点与已有的地图“对齐”。
使用当前帧与已经有的地图数据构建误差函数,使用高斯牛顿法得到最优解和偏差量,上一帧位姿作为迭代的初值。
激光点在转换到栅格地图后以最大的概率落在已有地图的障碍物上。那么就可以构造最小二乘问题。
构建一个多分辨率地图,目的是减弱陷入迭代计算的局部极值。
栅格地图更新采用bresenham划线,连线经过的栅格设置为free,也就是减小一个值,最后根据栅格值是否大于0判断是否占用。
cartgrapher:
使用栅格地图,地图中存储着占据概率,通过把点云投影到栅格地图,计算匹配得分,找到最合适的投影,作为位姿变换。
回环检测:激光点云投影到栅格地图,暴力搜索全局地图,分支定界加速,确定初值以后用非线性优化精修;
LOAM:
对点云提取特征,然后根据稀疏的特征来计算位姿变换。 构建边缘点到边缘线的距离、平面点到平面的距离目标函数,通过非线性优化的方式进行梯度下降求解。
建图部分采用map-map的匹配,后端对特征点周围的点云进行主成分分析(求解协方差矩阵的特征值和特征向量)确定边缘线和平面,计算特征点到线和面的距离。
里程计的匹配,是用两帧点云数据,使用最近临法寻找边缘线和平面。
建图的匹配,是用10帧点云数据,和10立方米范围内的整个地图匹配,特征点增加了10倍。
LeGO-LOAM:
预处理:点云分割,点云聚类和特征提取:分割为地面点和非地面点;对非地面点进行点云聚类:聚类低于30个点就当成噪声处理,地面点进行稀疏;
将降噪和稀疏后的点云发布到下一个节点进行处理,从降噪和稀疏后的点云的点云中提取边缘点和平面点,边缘点提取自非地面点,平面特征点提取自地面点。
前端:提取特征,使用scan-to-scan推算两帧激光之间的相对位姿变换(使用两次LM优化),频率较高(10Hz)。
后端:scan-to-map,构建全局地图,获得世界坐标系下的位姿,频率较低。
贡献:解决一些非城市化道路或非平整道路上LOAM存在的问题
构建了目标函数以后,仍然采用LOAM中的列文伯格-马尔夸特优化算法,但是分了两阶段,第一阶段计算竖直维度的z,roll,pitch。
(根据地面的平面点来优化)
第二阶段计算水平维度的x,y,yaw,根据边缘点来优化。(类似于把一个O(n^6)的问题变成了两个O(n^3)的问题。)
不存储所有的传感器点云数据,而是只存储特征点集。
LOAM采取的是map-to-map的优化,最近的十帧点云与10立方米内的全局地图进行匹配,主成分分析,构建点到线、点到面的误差.
Lego-LOAM采取的是scan-to-map的优化,scan为当前帧点云中的特征点集;map有两种取法:第一种,和LOAM中一致,10立方米;第二种,
选一组时间上相近的特征点云,构建图优化问题。当前时刻的特征点云作为观测数据,当前位姿作为优化节点。
回环检测:
单独用一个线程运行。从历史位姿中寻找距离最近并且间隔大于30秒的位姿,找不到回环检测终止。找到了就将最近点对应的前后25帧点云组成一个submap。
然后用最新一帧的点云同这个子图进行ICP配准,获取位姿变换关系,就可以往因子图中添加一个新的约束。
默认偏移较小。如果偏移较大,就不能修正了。2.不具备重定位功能。因为这种算法的前提是需要知道自己的大致位置,和历史中附近的位置进行匹配,修正位姿。
保存的地图为稀疏后的点云地图,只能做定位不能做导航用。
回环检测:
检测当前位置是否曾经来过,即采用当前scan在历史中搜索。
方法:
特征匹配: 提取当前帧与过去所有帧的特征,并进行匹配
基于词袋模型: 词袋模型就是把特征看成是一个个单词,通过比较两张图片中单词的一致性,来判断两张图片是否属于同一场景.
目的:
1. 位姿的估计往往是由上一帧位姿解算当前帧位姿,递增求解导致相邻两帧之间的误差就会产生累计
2. 已有地图时位姿初始化,不知道当前帧初始位姿,也就不清楚在地图中哪个位置,无法做定位。
方法:大范围内穷举来确定初始位置(利用分支定界加速) + 非线性优化修正位姿
后端重定位:没有初始位姿,暴力匹配的范围变成了整个地图。 因此必须采用算法加速处理。:多分辨率地图+分枝定界操作
自动驾驶和机器人定位的区别:自动驾驶有gps和高精地图来实现全局定位,路途远导致不容易出现闭环检测。机器人不容易进行全局定位,但是室内情况下没有雨雾等
复杂环境,闭环检测条件容易出现。
最小二乘:模型的预测结果与实际的测量结果的偏差就是残差。非线性最小二乘的目的就是,调整模型的参数,使得总的残差平方和也就是目标函数最小。
最大似然估计:最大化所有测量的联合概率,本质上也可以转化为最小二乘问题。
最速下降法:只保留一阶项,增量的方向为:Δx∗=−JT(x),只要沿着反向梯度方向前进一个步长 λ,求得最快的下降方式,就是最速下降法。要达到最低点梯度下降法
每次只从你当前所处位置选一个坡度最大的方向走一步,容易走出锯齿形状走了弯路。
牛顿法:如果保留二阶梯度信息,那么增量方程为:HΔx=−JT。牛顿法迭代优化时既利用了梯度,又利用了梯度变化的速度(二阶导数)的信息,牛顿法在选择方向时,
不仅考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。牛顿法比梯度下降法看得更远一点,能更快地走到最底部。牛顿法需要计算 H 矩阵,比较困难。
Gauss-Newton: f(x) 进行一阶的泰勒展开,求解增量方程: J(x)TJ(x)Δ=−J(x)Tf(x)。高斯牛顿法使用J(x)TJ(x)来近似代替海森矩阵来简化计算,但是J(x)TJ(x)只是半正定矩阵,
导致算法不收敛。
1.给定初始值x0.
2. 对于第 k 次迭代,求出当前的雅可比矩阵J(xk) 和误差f(xk)。
3.求解增量方程: H Δ x = g 计算出步长Δ x.
4.若 Δxk 足够小,则停止。否则,令 x k + 1 = xk+Δxk,返回 2
LM方法:在高斯牛顿法基础上将系数矩阵加上一个对角矩阵,使其正定,确保方程有唯一解。
求解线性方程:Cholesky分解 QR分解 SVD分解都是为了避免对系数矩阵求逆。
视觉SLAM框架及组成:视觉SLAM由前端(视觉里程计)、后端(位姿优化)、闭环检测、建图图4个部分组成
如何滤除外点: 法一:RANSAC方法。法二:先求出所有匹配点最小距离min_dist,小于2倍的距离作为内点。法三:
什么情况下需要进行点云滤波:大量数据需要下采样,噪声数据需要去除,因为遮挡等问题造成离群点需要去除。点云数据密度不规则需要平滑。
对于单目相机,E和F矩阵有何不同?
F和E描述的都是两帧间的极线约束,只不过坐标系不同:F描述的是同一空间点在不同帧之间像素坐标的几何约束关系,E描述的是归一化相机坐标之间的几何约束关系
E只与相机外参有关,F与内外参都有关。在相机只有纯旋转而没有平移时,此时t为0,E、F也将为0,导致无法求解R;此时可以使用单应矩阵H求旋转,但仅无平移t,无法三
角化求深度。
描述PnP过程:
通常输入的是上一帧相机坐标系下的3D点和这些3D点在当前帧中的投影得到的2D点,所以它求得的是当前帧相对于上一帧的位姿变换。都是基于已知世界坐标系3D点和对应
的归一化相机坐标系2D点求解相机运动的过程。
BA过程:光束平差法,根据相机的投影模型构造代价函数,利用非线性优化来求最优解,得到最优的相机位姿。
如何选择关键帧:
跟踪质量:比如当前帧跟踪到的特征点数大于一定阈值,如大于50个点。距离最近关键帧的距离是否足够远,距离上一关键帧的帧数是否足够多(时间),
单目SLAM初始化过程、单目SLAM整个过程
a) 初始化过程:是通过前两帧之间2D-2D匹配点,使用对极几何计算出相机的旋转、平移矩阵,并将该平移矩阵初始化为后续相机运动的单位,即初始化之后的运动都以初始化
时的平移作为单位1,是为了解决单目的尺度不确定性问题。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只是纯旋转),否则将导致求得的本质矩阵E为0,也
就无法分解得到相机位姿。
b) 单目SLAM流程是:初始化—PnP—三角化—PnP—三角化……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解
得到相机运动,再依据三角化原理计算特征点距离。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了、后续3D点的计算仍采用三角化方式。
SLAM中的绑架问题(重定位)
a) 绑架问题就是重定位,是指机器人在缺少之前位置信息的情况下如何进行重新定位、确定当前位姿。
词袋模型可以用于回环检测,也可以用于重定位,有什么区别
词袋模型在SLAM中的应用:当前帧与关键帧的特征匹配、重定位的特征匹配、回环检测的特征匹配;(第一个是后两个的基本原理,后两个是应用场景)
重定位:主要是通过当前帧与关键帧的特征匹配,定位当前帧的相机位姿。
回环检测:优化整个地图信息,包括3D路标点、及相机位姿、相对尺度信息。回环检测提供了当前帧与所有历史帧的关系。
欧式变换(刚体变换): 平移(translation)和旋转(rotation)。有3个自由度(θ,tx,ty)
仿射变换的变换矩阵:有6个自由度(a,b,c,d,e,f),4x4矩阵,平移2、旋转、放缩、剪切、反射
什么是紧耦合、松耦合?
融合框架的区别又分为紧耦合和松耦合,松耦合中视觉运动估计和惯导运动估计系统是两个独立的模块,将每个模块的输出结果进行融合,而紧耦合则是使用两
个传感器的原始数据共同估计一组变量。松耦合是在视觉和IMU各自求出的位姿的基础上做的耦合,紧耦合是使用图像和IMU耦合后的数据计算相机位姿。
RANSAC和鲁棒核函数都是为了解决出现outlier的问题,RANAC是从数据中选择正确的匹配进行估计,鲁棒核函数则是直接作用在残差上,
限制单个数据点对于误差函数的影响力。等于对最小二乘问题做了包装,通过降低错误匹配的权重,使得观测数据中的outlier影响不到最终的估计结果。
标签:匹配,地图,矩阵,相机,面试,准备,点云,位姿 来源: https://www.cnblogs.com/liuweiweitju/p/16698572.html