- SIFT和SUFT的区别。
- 相似变换、仿射变换、射影变换的区别。
- Homography、Essential和Fundamental Matrix的区别。
- 视差与深度的关系。
- 描述PnP算法。
- 闭环检测常用方法。
- 给一个二值图,求最大连通域。
- 推导一下卡尔曼滤波、描述下粒子滤波。
- 如何求解$Ax=b$的问题?
- 什么是极线约束?
- 单目视觉SLAM中尺寸漂移是怎么产生的?
- 解释SLAM中的绑架问题。
- 描述特征点法和直接法的优缺点。
- EKF和BA的区别。
- 边缘检测算子有哪些?
- 简单实现
cv::Mat
- 10个相机同时看到100个路标点,问BA优化的雅克比矩阵多少维?
- 介绍经典的视觉SLAM框架。
- 介绍下熟悉的非线性优化库。
- 室内SLAM与自动驾驶SLAM有什么区别?
- 什么是紧耦合、松耦合?优缺点。
- 地图点的构建方法有哪些?
- 如果对于一个3D点,我们在连续帧之间形成了2D特征点之间的匹配,但是这个匹配中可能存在错误的匹配。请问你如何去构建3D点?
- RANSAC在选择最佳模型的时候用的判断准则是什么?
- 除了RANSAC之外,还有什么鲁棒估计的方法?
- 3D地图点是怎么存储的?表达方式?
- Point cloud
- 3D voxel grid (e.g. octomap)
- 2.5D maps (extended elevation maps)
- Surface map (multi-level surface map)
- Mesh (TSDF)
- 给你$m$相机$n$个点的bundle adjustment。当我们在仿真的时候,在迭代的时候,相机的位姿会很快的接近真值。而地图点却不能很快的收敛这是为什么呢?
- LM算法里面那个$\lambda$是如何变化的呢?
- 说一下3D空间的位姿如何去表达?
- 李群和李代数的关系。
- 求导$\frac{\partial R_{1}R_{2}}{R_{1}}$
cv::Mat
是如何访问元素的?先访问行还是先访问列?- 写出单目相机的投影模型,畸变模型。
- 安装2D lidar的平台匀速旋转的时候,去激光数据畸变,写代码
- 给两组已经匹配好的3D点,计算相对位姿变换,写代码
- ORB-SLAM初始化的时候为什么要同时计算$H$矩阵和$F$矩阵?
- 介绍Dog-Leg算法。
- VINS-Mono里面什么是边缘化?First Estimate Jacobian?一致性?可观性?
- 介绍VINS-Mono的优缺点
- 推到VINS-Mono里面的预积分公式。
- 给定一些有噪声的GPS信号的时候如何去精准的定位?
- 如何标定IMU与相机之间的外参数?
- 给你xx误差的GPS,给你xx误差的惯导你怎么得到一个cm级别的地图?
- 计算$H$矩阵和$F$矩阵的时候有什么技巧呢?
- 给一组点云,从中提取平面。
- 给一张图片,知道相机与地面之间的相对关系,计算出图的俯视图。
- 双线性插值如何去做,写公式。
- RGB-D的SLAM和RGB的SLAM有什么区别?
- 什么是ORB特征? ORB特征的旋转不变性是如何做的? BRIEF算子是怎么提取的?
- ORB-SLAM中的特征是如何提取的?如何均匀化的?
- 请写出MSCKF的状态空间,并简单说说MSCKF2.0版本的零空间投影的操作方式,以及其线性空间和其零空间的rank的关系。
- 下图中l表示3D landmark,x表示6D pose,Pose-pose为里程计,pose-landmark的观察为相机投影。请写出Jacobian矩阵和Hessian矩阵的稀疏性结构(矩阵块结构即可)。其次请总结下你知道的landmark的参数化方式(3种即可)。
- (本题为图像处理方向)视觉slam中常用的边缘化处理的原理和方法。
- (本题为图像处理方向)单目视觉slam中尺寸漂移是怎么产生的?
- 如何用李代数解决求导问题?
- 用李代数表示姿态,然后根据李代数加法对李代数求导。这个方法要求计算一个雅可比矩阵。
- 对李群左乘或者右乘微小扰动,然后对该扰动求导,称为左扰动或右扰动模型。这种方法不需要求雅可比矩阵。
- ORB-SLAM2用的哪种模型?为什么不用计算雅可比矩阵?
- 用了是左乘扰动模型,省略了计算雅可比矩阵。
- 数据怎么在ORB-SLAM2的三个线程间传递的?(从代码层面解释)
main
里面启动三个线程(不考虑Viewer
的话)-mpTracker
,mpLocalMapper
,mpLoopCloser
。- 对于每张输入的图片,
main
函数会调用System::TrackMonocular()
,这个函数会使用mpTracker->GrabImageMonocular()
函数进行tracking。通过最后一步判断是否为keyframe,来决定我们是否应该插入一个keyframe到mpLocalMapper
的std::list<KeyFrame*> mlNewKeyFrames
变量中。 mpLocalMapper
一直处于while(1)
循环中,调用CheckNewKeyFrames()
函数。LocalMapping::CheckNewKeyFrames()
会检查std::list<KeyFrame*> mlNewKeyFrames
这个变量是否为空。转换成BoW,删除多余的地图点,创建新的地图点,试图找到更多的地图点,进行Local BA,删除多余的keyframe,以及最后把新的keyframe加入到mpLoopCloser
的std::list<KeyFrame*> mlpLoopKeyFrameQueue
变量中。mpLoopCloser
一直处于while(1)
循环中,调用CheckNewKeyFrames()
函数。LoopClosing::CheckNewKeyFrames()
会检查std::list<KeyFrame*> mlpLoopKeyFrameQueue
这个变量是否为空。检查是否是一个loop,计算sim3,进行loop fusion,以及Essential Graph Optimization(位姿图优化)。