SLAM常見面試題集錦

前言

在備戰秋招時,發現SLAM相關的知識點比較龐雜零碎,網上對於常見的面試題也沒有全面的集錦可以參考複習,所以參考我找到的一些面試題,自發整理了一些常見的問題及參考答案。參考答案是博主參考大佬的回答及自己的理解給出的,用於自己秋招備戰使用的,所以答案都力求準確、簡潔。但奈何能力有限,答案仍可能存在錯誤或者瑕疵,歡迎留言批評指正。

當然這裏整理的也不全面,只是略盡綿薄之力,希望對大家有所幫助。另外,希望各位在此基礎上進行修改、補充添加,並繼續共享給大家,這樣慢慢就會有比較全面的複習資料了。

ps:2020年秋招算法崗實在是太難了,相較2019年難的不是一星半點,都說2019年算法崗是“神仙打架”,2020年則是“諸神黃昏”,很多搞算法的都轉行做了軟開。況且博主還是半路出家,沒有相關實習經歷(客觀原因)、沒有項目經驗(平臺限制),7-8月份提前批折騰了兩個月,結果發現毫無進展,最終無奈選擇了去*廠搬磚。

最後,給後來者的忠告:想進大廠,項目經驗、相關實習經歷至關重要!面試官都是通過你的項目、實習內容展開問題,一看沒有項目、沒有實習,就一票pass了。所以一定要提前找實習,早做打算。

常見面試題

  1. 視覺SLAM框架及組成
    a) SLAM即實時定位建圖,按照使用的傳感器分爲激光SLAM(LOAM、V-LOAM、cartographer、gmapping)與視覺SLAM,其中視覺SLAM又可分爲單目SLAM(MonoSLAM、PTAM、DTAM、LSD-SLAM、ORB-SLAM(單目爲主)、SVO)、雙目SLAM(LIBVISO2、S-PTAM等)、RGBD SLAM(KinectFusion、ElasticFusion、Kintinous、RGBD SLAM2、RTAB SLAM);按照前端方法分爲特徵點法(稀疏法)、光流法、稀疏直接法、半稠密法、稠密法;按照後端方法分爲基於濾波(EKF,UKF,PF原理簡介)與基於圖優化的方法。
    b) 視覺SLAM由前端(視覺里程計)、後端(位姿優化)、閉環檢測、建圖圖4個部分組成。
    在這裏插入圖片描述

  2. 如何對匹配好的點做進一步的處理,更好保證匹配效果?或如何濾除外點
    a) 確定匹配的最大距離:先求出所有匹配點最小距離min_dist(Hamming距離嗎?),小於2倍的最小距離的點,認爲是內點,即30<匹配點距離<=2*min_dist,30是經驗值,有些點會特別小。
    b) 基於KNN匹配算法:令k=2,即取最近鄰與次近鄰距離(.distance(),該距離類似於歐式距離,用於表徵匹配質量,距離越小,匹配效果越好)的比值,比值小於一定閾值(如<0.8)則認爲是內點;
    c) RANSAC方法。

  3. 對於單目相機,F和H矩陣有何不同,E和F矩陣有何不同,只旋轉不平移能不能求F、能不能求H?
    a) F和E描述的都是兩幀間的極線約束,只不過座標系不同:F描述的是同一空間點在不同幀之間像素座標的幾何約束關係,也即極線約束,E描述的是歸一化相機座標之間的幾何約束關係,且 , ,其中 ;可知,E只與相機內參有關,F與內外參都有關;而H描述的是一系列共面的3D點到相機成像平面(兩個平面間)的投影變換關係;
    b) 三者分解出R,t不同: ,其中(n,d)表示世界座標系下某個平面的平面方程,因此H只與外參、平面參數有關,而與內參無關。
    c) 在相機只有純旋轉而沒有平移時,此時t爲0,E、F也將爲0,導致無法求解R;此時可以使用單應矩陣H求旋轉,但僅無平移t,無法三角化求深度。

  4. 計算H矩陣和F矩陣的時候有什麼技巧呢?實際上在問歸一化的操作。

  5. ORB-SLAM初始化的時候爲什麼要同時計算H矩陣和F矩陣?
    a) 當特徵點共面或相機間發生了純旋轉時,基礎矩陣自由度下降,即發生了所謂的退化,此時如果仍採用八點法估算F矩陣,基礎矩陣多出來的自由度將會由噪聲決定,對結果造成極大誤差。爲避免退化現象造成的影響,通常會同時估計基礎矩陣F和單應矩陣H,選擇重投影誤差較小的那個作爲最終的運動估計矩陣。

  6. 什麼是極線約束
    a) 所謂極線約束就是說同一個點在兩幅圖像上的映射,已知左圖映射點p1,那麼右圖映射點p2一定在相對於p1的極線上,這樣可以減少待匹配的點數量、提高匹配效率。(畫圖解釋)

  7. 描述BA過程
    a) BA是Bundle Adjustment的簡稱,又稱光束法平差、捆綁調整、集束調整,其本質是一個優化模型,其目的是最小化重投影/光度誤差,用於優化相機位姿和路標點。其主要過程爲:根據相機的投影模型構造代價函數,利用非線性優化(比如高斯牛頓或L-M(Levenberg-Marquardt)算法)來求最優解,利用Hessian矩陣的稀疏性解增量方程,得到最優的相機位姿和3D特徵點。
    b) 局部BA用於優化局部的相機位姿/三維點,提高跟蹤的精度;全局BA用於全局過程中的相機位姿/三維點,使相機經過長時間、長距離的移動之後,相機位姿還比較準確。可以直接計算,也可以使用g2o或者Ceres等優化庫進行計算。局部BA的約束:相機位姿、三維點,全局BA約束:相機位姿、三維點、迴環檢測的約束。
    c) Bundle Adjustment :光束指的是三維空間點投影到像平面上的光速,每一個特徵點都會反射幾束光線,當把相機位姿和特徵點位置做出最優的調整後,即使用光束法調整光束以後,這些光線都收束到相機光心。
    在這裏插入圖片描述

  8. 描述PnP過程
    a) PnP即Perspective-n-Points,它是一種由3D-2D匹配點求解相機位姿的方式,此處的3D點是世界座標系,2D點是歸一化相機座標(內參已知),對於那些沒有3D匹配點的2D-2D匹配點對,求解其3D點仍需採用三角化的方式。
    b) 此時求解出來的位姿均是相機相對世界座標系的變換關係Twc(Twc是所求目標結果,但一般存儲的是Tcw,便於計算)。
    c) 目前遇到的場景主要有兩個,其一是求解相機相對於某2維圖像/3維物體的位姿;其二就是SLAM算法中估計相機位姿時通常需要PnP給出相機初始位姿。在場景1中,我們通常輸入的是物體在世界座標系下的3D點以及這些3D點在圖像上投影的2D點,因此求得的是相機座標系相對於世界座標系(Twc)的位姿。在場景2中,通常輸入的是上一幀相機座標系下的3D點(把上一幀視爲世界座標系,本質仍是世界座標系)和這些3D點在當前幀中的投影得到的2D點,所以它求得的是當前幀相對於上一幀的位姿變換。兩種情況本質上是相同的,都是基於已知世界座標系3D點和對應的歸一化相機座標系2D點求解相機運動的過程。

  9. 描述Gaussian-Newton法、LM法
    a) Gaussian-Newton:是線搜索方法,是將f(x)進行一階泰勒展開、再平方,最後求解線性方程H△x=b,其中H=J^TJ,b= -JT*f(x_k),G-N法使用JTJ近似Newton法中Hessian矩陣,省略了其H矩陣的計算過程。缺點:H有可能不可逆,導致穩定性差、可能不收斂。
    b) LM:是信賴區域法,再G-N法基礎上添加了阻尼因子λ,求解線性方程(H+λI)△x=b;當λ較大時,相當於梯度下降法、λ較小時,相當於G-N法。
    c) LM算法中λ如何變化:在使用L-M法時,常先設置一個比較小的λ值,當發現代價函數反而增大時(說明阻尼帶來的“阻力”不夠,或步長太大),將λ增大、減小步長,使用梯度下降法搜索,拒絕此次迭代;如果代價函數減小(說明方向正確,可嘗試進一步減小阻尼、增大步長,),則再將λ減小使用高斯牛頓法,進一步增大步長、加速收斂,即λ的變化與代價函數的變化是正相關的。更科學的,使用阻尼更新策略比例因子衡量ρ=f(x)f(x+Δ)JΔ\rho=\frac{f(x)-f(x+\Delta)}{J\Delta},分子:實際函數下降值,分母:使用近似模型計算的下降值。若ρ>34\rho>\frac{3}{4},則令λ=2λ\lambda=2*\lambdaρ<14\rho<\frac{1}{4},則λ=0.5λ\lambda=0.5*\lambda
    d) 參考

  10. 說一下Dog-Leg算法

  11. 如何選擇關鍵幀
    關鍵幀選擇指標:
    a) 跟蹤質量:比如當前幀跟蹤到的特徵點數大於一定閾值,如大於50個點,或關鍵幀跟蹤到的點比參考關鍵幀少90%。
    b) 距離最近關鍵幀的距離是否足夠遠(空間):即當前幀空間位置是否有足夠的變換,如在靜止不動或移動幅度較小的情況下,當移動角度大於一定程度才認爲是關鍵幀。
    c) 距離上一關鍵幀的幀數是否足夠多(時間):如過了20幀仍沒有插入關鍵幀;
    d) 關鍵幀作用:圖像插入頻率過高會導致信息冗餘度快速增加,而這些冗餘的信息對系統的精度提升卻十分有限,甚至沒有提高,反而消耗了更多的計算資源。關鍵幀的目的在於,適當地降低信息冗餘度,減少計算機資源的損耗,保證系統的平穩運行。

  12. 爲什麼要引入李羣李代數?李羣與李代數的關係?
    a) 旋轉矩陣自身是帶有約束的,即是正交矩陣且行列式爲1,他們作爲優化變量時,會引入額外的約束,優化變的困難,通過李羣李代數的轉換關係,把位姿估計變成無約束的優化問題。
    b) 李羣與李代數是對數與指數的關係,李羣到李代數是對數變換,李代數到李羣是指數變換。李羣是矩陣的集合,李代數是向量的集合,矩陣求導時對加法不封閉,而映射爲李代數之後對向量來說,加法是封閉的。

  13. 什麼是閉環檢測
    a) 在視覺SLAM問題中,位姿的估計往往是由上一幀位姿解算當前幀位姿,這麼遞增求解,因此相鄰兩幀之間的誤差就會產生累計。如我們在求解第五幀位姿的時候,一般是根據第四幀計算的,但是如果我們發現第5幀還可以由第2幀計算出來,就減少了誤差的累計。這種與之前的某一幀(非相鄰幀)建立位姿約束關係就叫做迴環。找到可以建立這種位姿約束的歷史幀,就是迴環檢測。迴環通過減少約束數,起到了減小累計誤差的作用。
    b) 方法:特徵匹配,提取當前幀與過去所有幀的特徵,並進行匹配,這種方式假設了過去所有幀都有可能出現迴環,匹配十分耗時、計算量大。基於詞袋模型,詞袋模型就是把特徵看成是一個個單詞,通過比較兩張圖片中單詞的一致性,來判斷兩張圖片是否屬於同一場景。詞袋模型需要訓練字典(K-means聚類),但通常字典內單詞數量巨大,在確定某個特徵時需要與字典內每個單詞進行匹配,效率低下。爲提高匹配效率,字典在訓練的過程中構建了一個有k個分支,深度爲d的樹(K叉樹),類似於層次聚類,可容納k^d個單詞,保證了對數級別的查找效率。

  14. 單目視覺尺寸漂移是怎麼產生的
    a) 單目相機無法根據一張圖片得出一張圖片中物體的實際大小,同理也就無法得出運動的尺度大小,這是產生尺度漂移的根源。而在使用單目估計相機位姿和3D點座標時,需要通過對極幾何、三角化進行估計,在這個過程中會產生誤差(特徵點精度誤差、計算誤差),即使是極小的誤差經過多幀累積後會變得特別大,無法保證尺度的一致性,造成尺度漂移。
    b) 解決辦法:從理論上說,只靠單目相機是無法確定尺度的。視覺與IMU融合,IMU可以測量實際尺度,藉助IMU測得的高幀率的角速度、加速度對視覺進行修正、補充;後端優化時,把尺度作爲一個優化變量進行優化,可以減小尺度漂移問題。

  15. 單目SLAM初始化過程、單目SLAM整個過程
    a) 初始化過程:是通過前兩幀之間2D-2D匹配點,使用對極幾何計算出相機的旋轉、平移矩陣,並將該平移矩陣初始化爲後續相機運動的單位,即初始化之後的運動都以初始化時的平移作爲單位1,是爲了解決單目的尺度不確定性問題。且在初始化時,要保證兩幀圖片之間的運動必須包括平移(不能只是純旋轉),否則將導致求得的本質矩陣E爲0,也就無法分解得到相機位姿。
    b) 單目SLAM流程是:初始化—PnP—三角化—PnP—三角化……。具體方法是依賴對極幾何的相關知識,根據2D-2D匹配點對計算本質矩陣(或基本矩陣),並對其進行分解得到相機運動,再依據三角化原理計算特徵點距離。至此即得到3D-2D匹配點對,後續的相機位姿的估計就是PnP問題了、後續3D點的計算仍採用三角化方式。

  16. SLAM中的綁架問題(重定位)
    a) 綁架問題就是重定位,是指機器人在缺少之前位置信息的情況下,或跟蹤丟失的情況下,如何進行重新定位、確定當前位姿。例如當機器人被安置在一個已經構建好地圖的環境中,但是並不知道它在地圖中的相對位置,或者在移動過程中,由於傳感器的暫時性功能故障或相機的快速移動,都導致機器人先前的位置信息的丟失,在這種情況下如何重新確定自己的位置。

  17. 詞袋模型可以用於迴環檢測,也可以用於重定位,有什麼區別
    詞袋模型在SLAM中的應用:當前幀與關鍵幀的特徵匹配、重定位的特徵匹配、迴環檢測的特徵匹配;(第一個是後兩個的基本原理,後兩個是應用場景)。連續幀間特徵匹配採用的並不是詞袋模型。
    a) 重定位:主要是通過當前幀與關鍵幀的特徵匹配,定位當前幀的相機位姿。
    b) 迴環檢測:優化整個地圖信息,包括3D路標點、及相機位姿、相對尺度信息。迴環檢測提供了當前幀與所有歷史幀的關係,

  18. 相比VSLAM,加入IMU後,哪些狀態可觀?
    a) 單目SLAM7個自由度不可觀:6個自由度+尺度;
    b) 單目+IMU4個自由度不可觀:偏航角(yaw)+3自由度不可觀;翻滾角(roll)、俯仰角(pitch)由於重力存在而可觀,尺度因子由於加速度計的存在而可觀;

  19. 仿射變換、透視變換、歐式變換有什麼區別
    a) 仿射變換:形狀會改變,但直線的平行關係不變,如矩形變成平行四邊形。是透視變換的特殊形式。
    b) 透視變換(或稱射影變換):是仿射變換更一般的形式,是共麪點投影的變換關係,如單應性矩陣。平行的直線變換前後可能不會保持平行。
    c) 歐式變換(或稱等距變換):旋轉、平移;

  20. 什麼是緊耦合、松耦合?優缺點
    a) VIO是融合相機和IMU數據實現SLAM的算法,根據融合框架的區別又分爲緊耦合和松耦合,松耦合中視覺運動估計和慣導運動估計系統是兩個獨立的模塊,將每個模塊的輸出結果進行融合,而緊耦合則是使用兩個傳感器的原始數據共同估計一組變量,傳感器噪聲也是相互影響的,緊耦合算法上比較複雜,但充分利用了傳感器數據,可以實現更好的效果,是目前研究的重點。
    b) 按照是否把圖像的Feature加入到狀態向量區分,也就是松耦合是在視覺和IMU各自求出的位姿的基礎上做的耦合,緊耦合是使用圖像和IMU耦合後的數據計算相機位姿。

  21. 室內SLAM與自動駕駛SLAM有什麼區別?

  22. RANSAC在選擇最佳模型的時候用的metric是什麼?
    a) Metric譯作:admission to a group,可以理解爲指標、許可。我的理解是,此處指的是按照什麼指標選擇最佳模型,對每個模型計算內點數量,內點數量的大小即是選擇指標,內點數量最大的即是最佳模型。

  23. 除了RANSAC之外,還有什麼魯棒估計的方法?
    a) M-估計(魯棒核函數)、最小中值估計。
    b) 參考

  24. 有哪幾種魯棒核函數?
    a) RANAC和魯棒核函數都是爲了解決出現outlier的問題:RANAC是從數據中選擇正確的匹配進行估計,魯棒核函數則是直接作用在殘差上,對殘差進行飽和函數運算,限制單個數據點對於誤差函數的影響力。等於對最小二乘問題做了包裝,通過降低錯誤匹配的權重,使得觀測數據中的outlier影響不到最終的估計結果:
    在這裏插入圖片描述
    b) 常用核函數:Huber、Cauchy、Turkey;
    c)
    在這裏插入圖片描述
    d)
    在這裏插入圖片描述

  25. 如果把一張圖像去畸變,寫公式,流程。

  26. 寫出單目相機的投影模型,畸變模型。

  27. 說一個自己熟悉的SLAM算法,Lidar/Visual slam,說優缺點

  28. 什麼是邊緣化?First Estimate Jacobian算法?一致性?可觀性?
    a) 對於VIO系統,邊緣化的目的是把舊的狀態量從狀態估計窗口中移除,保證運行效率;同時,需要把移除的狀態量的信息保留下來,作爲當下窗口的先驗,儘可能避免信息丟失。

  29. RGB-D的SLAM和RGB的SLAM有什麼區別?
    a) RGBD-SLAM與RGB-SLAM使用的相機不同,前者可讀出深度圖像和彩色圖像、後者只能讀出彩色圖像(單目或雙目);
    b) 傳感器數據不同,主要造成前端視覺里程計很多不同,如RGBD-SLAM不用初始化、計算3D點雲方式不同、可以使用ICP直接計算相機位姿,
    c) 參考

  30. 什麼是ORB特徵,ORB特徵的旋轉不變性是如何做的,BRIEF算子是怎麼提取的。
    a) ORB特徵即Oriented FAST and Rotated BRIEF,由FAST關鍵點和BRIEF描述子兩部分組成,先使用FAST提取角點作爲特徵點,再使用BRIEF對特徵點周圍區域進行描述,計算描述子;
    b) 通過改進FAST特徵點獲得尺度不變性和旋轉不變性:普通FAST角點不具備方向性和尺度不變性,ORB對其進行改進,增加了尺度不變性和特徵點的方向信息,所以稱爲Oriented FAST關鍵點;尺度不變性通過構建圖像金字塔、並在金字塔每一層檢測角點實現;特徵的方向(旋轉)信息由灰度質心法計算圖像塊的質心、再連接圖像塊幾何中心O與質心C,即可得到特徵點的方向向量OC,特徵點的方向即定義爲theta =arctan(m01/m10)。至此FAST角點具有了尺度與旋轉的描述。FAST特徵點有了方向信息,在後續計算BRIEF描述子時,即可保證特徵點的旋轉不變性。
    c) FAST角點提取:半徑爲3的圓上16個像素點,如果連續的N個點的亮度大於Ip+T或小於Ip-T(T爲設定的閾值,如0.2*Ip),則認爲該點是特徵點,N常去12,即FAST-12。
    d) BRIEF算子是二進制描述子,其描述向量由許多0和1組成,通過在關鍵點附近隨機取兩個像素(如p和q),比較p和q像素值的大小關係,如果p大於q,則取1,反之取0,取128組這樣的p、q,即可得到特徵點的128維描述子。
    e) ORB速度快的原因:相比其他特徵點檢測算法,FAST只是比較像素亮度大小;BRIEF通過隨機選點、編碼0和1的方式計算描述子,因此速度快。
    f) 參考:《視覺SLAM十四講》P134-P36;

  31. ORB-SLAM中的特徵是如何提取的?如何均勻化的?

  32. ORB-SLAM中關鍵幀之間的連接,共視圖(Covisibility Graph)數據結構
    a) ORB-SLAM2中關鍵幀之間的連接是通過共視圖(Covisibility Graph)和生成樹(Spanning Tree)表達的。
    b) 共視圖:是一個有權重的無向圖,圖的結點爲一個關鍵幀,如果兩個關鍵幀能共同觀測到一定數量的地圖點,那麼這兩個關鍵幀之間建立一條邊,邊的權重爲共同觀測到的地圖數量。
    c) 生成樹: 生成樹是共視圖的包含最少邊的子圖,每次向生成樹添加一個關鍵幀時,將該關鍵幀與樹中共視地圖點數量最多的關鍵幀連接。從生成樹中刪除一個關鍵幀時,也要更新受到影響的所有關鍵幀的連接關係。
    d)參考
    在這裏插入圖片描述

  33. 地圖點的構建方法有哪些?3D地圖點是怎麼存儲的?表達方式?
    a) 地圖點構建:單目:可以通過關鍵幀匹配構造、也可以通過普通幀構造(臨時被Tracking用來追蹤的);雙目:立體匹配、塊匹配;RGBD:彩色深度圖對齊得到深度d,再根據彩色(u,v)座標根據相機投影公式計算3D點座標。
    b) 3D地圖點存儲方式:Vector3f
    c) 地圖主要包含關鍵幀、3D地圖點、BoW向量、共視圖、生長樹等:關鍵幀(包括特徵點、描述符、當前幀的相機位姿,BoW向量無法保存,可在加載關鍵幀後重新計算)、3D地圖點、共視圖、
    d) 參考

  34. 如果對於一個3D點,我們在連續幀之間形成了2D特徵點之間的匹配,但是這個匹配中可能存在錯誤的匹配。請問你如何去構建3D點?

  35. 說一下3D空間的位姿如何去表達?
    a) 旋轉、平移矩陣;旋轉可用:旋轉向量(即李代數)、歐拉角、四元數、RPY表示;
    b)

  36. SLAM中的EKF,UKF,PF原理簡介
    a) 參考

  37. 給你m相機n個點的bundle adjustment。當我們在仿真的時候,在迭代的時候,相機的位姿會很快的接近真值。而地圖點卻不能很快的收斂這是爲什麼呢?

  38. 給兩組已經匹配好的3D點,計算相對位姿變換。已知匹配的ICP問題,寫代碼。

  39. 給一組點雲,從中提取平面。

  40. 機器人從超市門口出發,前往3公里外的小區送貨。請你設計一個定位系統,包括傳感器的配置、算法的流程,用僞代碼寫出來。

  41. 雙線性差值如何去做,寫公式。

  42. 如何標定IMU與相機之間的外參數?

  43. 說一下VINS-Mono的優缺點

  44. 描述(擴展)卡爾曼濾波與粒子濾波,你自己在用卡爾曼濾波時遇到什麼問題沒有?

  45. 熟悉Ceres優化庫嗎?說一下。

  46. 除了視覺傳感器,還用過其他傳感嗎?比如GPS,激光雷達

Word版

爲方便複習使用,這裏分享上述常見面試題集錦的word版本,CSDN下載鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章