動態環境下的slam問題如何解決?
1.哪些情況適合將動態目標當噪點剔除?2.哪些情況需要對其進行跟蹤?3.跟蹤的作用是什麼?4.這3個問題之外,您對動態slam的理解
嘿嘿謝邀~~這個問題還是挺感興趣的, 正好早起看到答一發.
----------
沒有專門研究dynamic scene這個問題, 但是也算看過. 比較明確的是核心問題還是在於data association, 即對於新的observation, 如何與過去已經觀察到的tracks進行關聯. 扣題, 想想為什麼在動態場景下會出現問題?因為我們在mapping的時候建立的點雲, 都是一堆無意義的特徵點而已, 我們並不知道哪些點是什麼物體, 是否在運動...
於是回答第二第三個問題, 其實必須要進行跟蹤, 如果僅僅給出兩幀圖片, 即使是人自己也是很難區分是否動態物體的, 何況是電腦? 跟蹤的意義在於, 對於場景中的多個物體進行運動估計, 加上對自身運動已知, 就可以推測哪些物體在做絕對運動, 哪些在做相對運動, 哪些靜止不動.
數據關聯的問題在現在比較火爆的幾個Monocular SLAM的工作中都沒有明確指出, 但實際上卻是SLAM中的最關鍵問題, 在computer vision領域這個問題又叫做corresponding問題, 即特徵匹配.
回想我們當前的特徵匹配策略, 主要是測量兩個特徵descriptor之間的相似程度. 具體做法是, 在兩個連續圖像幀中提取所有可以提取的特徵點, 然後逐一比對. 如果足夠相似, 就認為兩個特徵點是同一個. 事實證明這樣做是遠遠不夠的, 因為圖像特徵的局部性, 在圖像中的重複性, 會造成大量的誤匹配. 當然我們有很多奇技淫巧, 比如1NN/2NN, RANSAC等方法, 但問題並不算被解決, 只能算是被改善了一些吧.
-------------------------------
既然提到了, 那就順便講講數據關聯吧.
回到最基本的數據關聯問題上. 在做物體跟蹤的時候, 我們是可以根據物體之前的運動, 估計它在新一幀中出現的位置的, 如下圖中藍色的正方形和三角形. 問題在於這個估計值是有一定不確定度的, 就是在圓圈範圍內都是有可能的, 並不一定在藍色圖形處. 於是假如此時我們有5個observation, 對於o1, o2, o5都沒什麼問題, 直接關聯給track1, track2就好了, 但是對於o3, o4就有問題了, 沒辦法確定應該把它們關聯給哪個track, 因為給誰都有可能是對的.
為了方便, 直接盜圖, 於是換一個圖來解釋.......
此時就要使用上概率大法. 注意這時候還有一種可能性是o2,o3其實是假觀測, 就是它根本不屬於任何一個track, 這在現實情況中是有可能發生的, 假設這種情況發生的概率是eta. 假設任意觀察到一個目標的概率是Pd, 把目標i關聯到track j上的概率是g_{ij}.
於是對剛剛的o3, o4有十種可能的關聯方式, 對每一種可以算出一個likelihood出來. 然後選擇likelihood最大的為最終關聯就好了. 這樣做充分地考慮了不確定性的問題, 比起之前RANSAC亂試智能多了.
當然這只是數據關聯的其中一種演算法, JPDAF(Joint probability data association filter). 事實上它有一個很強的假設是, 之前的關聯都是正確的, 我們只考慮新的observation與舊的track如何關聯. 而事實上, 最大likelihood的那個假設有可能只在當前幀是對的. 於是最好的方式是對每一幀保留所有的可能假設, 到具體關聯的時候再做積分就好了. 只是這樣做會帶來隨著幀數增長成指數級別的假設數量, 所以在現實中總需要做些假設去簡化它. 這種方式叫做MHT(Multi-Hypothesis Tracking).
總而言之, 數據關聯問題至關重要, 看看大牛Frank Dellaert的PHD論文吧, 整個工作就是在做data association的.
--------------------------
回到動態場景的問題下來, 剛剛說的是理論的, 吹吹牛吧. 動態場景在語義地圖下當然就好辦很多啦哈哈. 我們如果能識別出點雲中的物體, 至少就可以知道它是否能動, 然後再去判斷它是否真的在動. 語義地圖的工作應該有很多團隊在進行了, 尤其在DL,CV橫行, vision slam當道的大環境下, 語義的引入應該很快會完成吧. 個人對這方面保持持續關注, 論文就是做的Object level slam方面的, 歡迎各位大俠拍磚交流!
--------------------------------
參考資料:
課件: http://www.cse.psu.edu/~rtc12/CSE598C/datassocPart2.pdf
躺了一年多的動態環境下激光定位的坑,忍不住來強答一發。標籤雖然是視覺SLAM,但不管激光也好視覺也好,SLAM也好定位也好,都會面臨環境動態性問題。
環境中的物體通常可以分成三類:- 靜態物體:長時間穩定不變的物體,如牆、柱子等。
- 半靜態物體:大部分時間是靜止的,但會在某個時刻發生變化。如時而開時而關的門,路邊的停車。
- 動態物體:移動的物體,如移動的行人、車輛。
通常的SLAM、定位演算法都是基於靜態環境假設的,也就是假設環境中都是第一類物體,顯然,現實環境中並不是這樣。不過,視覺中的RANSAC匹配,2D下的MCL等演算法都有一定的魯棒性,能夠適應少量的動態變化,所以只要第二、三類物體在環境中占的比重不大,那些基於靜態假設的演算法一般也還是work的。當然,動態環境的挑戰還是要直面的,特別是在項目已經接了,發現現場環境全是二、三類物體,再說做不了已經晚了,必須得硬著頭皮上的情況下,o(╯□╰)o。
處理動態環境其實就是處理第二、三類物體,思路一般就兩種:要麼剔掉,要麼建模。通常的作法是:
1. 對於第三類物體,直接當做outlier剔掉。因為這類物體在連續觀測幀中是移動的,所以先將相鄰幀進行匹配,得到匹配關係R,t,再將不滿足匹配關係的關聯對當做outlier剔除,圖像中可以用RANSAC,激光幀可以ICP。值得注意的是,新出現在視野中的點,也無法與歷史幀關聯,但不應該被當成outlier,可以先通過視野判斷,將新出現在視野中的點抽離出來,剩下的再去剔outlier。但在一些情況仍然有問題,這些極端情況目前也沒有太好的解決方法(也可能是我了解的太少,大家如果有思路,歡迎交流。)
- 當動態物體很大,佔據視野很大一部分的時候,比如,機器人跟在一個很大的車後面行駛,我們希望的outlier(車),會被演算法當成inlier,而我們希望的inlier(兩側的牆等參照物)被錯誤當成了oulier剔除。
- 在長走廊環境下,如果存在移動物體,會被錯誤的當成靜態物體來做匹配。這其實是匹配演算法的問題,在走廊中,前後維度的不確定度很大,而移動物體被錯誤的用來修正前後維度的不確定度。試想一下:在一個平行的走廊,觀測到一個物體離你越來越近,這有幾種可能:1)物體沒動,你在往前運動,2)物體往你動,你沒動。3)物體也在動,你也在動。而匹配演算法同樣也是基於靜態性假設,所以它會優先相信第一種情況。但事實可能是後面兩種情況。當然,我們可以用物理里程計做一定的參考,但物理里程計也是有雜訊的,如果動態物體移動的速度在里程計雜訊範圍內,里程計也是沒法參考的。
2. 對於第二類物體,一般是環境發生的變換,所以需要把這些變化建模、更新到地圖當中,也就是動態地圖更新。在2D-SLAM中,如果用的柵格地圖,環境變化後可以根據新的觀測對柵格地圖的值進行更新(如Gmapping),更厲害的就是直接構建動態地圖模型,比如對每個柵格用HMM構建動態模型。Graph-SLAM中,因為存的是一些關鍵幀或者點雲,所以當發現環境變化時,需要找到歷史的那幾幀過期的關鍵幀剔掉。VSLAM了解的不是太多,特徵點地圖、關鍵幀地圖一般也是可以更新的吧。地圖更新會來帶的一個新的問題在它依賴於定位或匹配的穩定性和精度,如果匹配失敗,地圖可能會被錯誤的更新,當地圖被錯誤更新後,在錯誤地圖上的定位出的位置就也有可能是錯的,進而地圖進一步被錯誤更新,惡性迭代...雖然最後也能形成一張新的地圖,老的地圖被完全覆蓋掉了,但是對於導航而言,之前在老地圖上的導航目標點等沒有被更新,新的地圖已經無法再進行導航了。
動態環境問題對SLAM或定位來說,仍然沒有很好的解決方案。所以現在一般通過多感測器融合來規避這些問題,像激光、視覺、慣導里程等,因為通常環境變化不會對所有感測器產生影響,實在不行,還有慣導可以起作用。另外,有一種比較新的思路是拋棄全局SLAM,不再建模全局地圖,而是進行相對SLAM,因為對機器人來說SLAM的目的還是用來導航,導航只關心機器人能夠準確的移動到環境中的某個位置,並不關心地圖是不是有誤差,所以只需要構建一張位姿的拓撲圖,機器人沿著拓撲路徑就可以導航到某個點。標籤是視覺SLAM,我也只懂一些視覺SLAM,所以我也就回答一些視覺SLAM中的動態場景.
視覺SLAM中的動態場景其實有很多種,我覺得你指的是場景中有會動的物體(Moving Objects),其實還有視覺SLAM中的光照變化(Illumination Change),還有Life-long term中的場景變化,房子拆遷改造之類的= =.但不管是哪種,其實都是一個data association的問題.
視覺SLAM在恢復場景和運動時是有一個靜態場景假設(Static World Assumption)的,因此我們才可以求出相機相對於靜態場景的運動.但就如 @顏沁睿所說的,我們採集的點雲是一堆無意義的特徵點,有運動物體時,光從點雲是分不出哪個是運動物體,哪個是靜態場景(會有一些假設了,比如說背景點分布均勻,運動物體的點往往集中在一個區域).所以在計算相機位置時,是肯定要把運動物體的點當做噪點剔除的.這是第一個問題.
當運動物體點少的時候是可以用RANSAC之類的抽樣方法剔除,但如果是高度動態的場景,就不行了.那肯定需要有一種方法來判別出運動物體和靜態場景,對運動物體進行跟蹤就是一種方法,對於short-term的運動物體進行small baseline的跟蹤是不難的, 既然跟蹤可以做到,那麼去估計物體的運動也是可以做到了,所以map就有兩種形式了,一種就是把運動物體的點給剔除了,一種就是把運動物體隨時間變化的方式記錄下來,形成一個4D的map.這是第二個和第三個問題,
---------------
至於動態場景的解決方法, 我也同意@顏沁睿的高層語義的方式,視覺SLAM下一個方向肯定是結合DL/ML做高層語義,來提高SLAM的穩定性.說了那麼多其實就是複述了一下 @顏沁睿的想法=.=
或者是?
推薦閱讀:
※目前國際上有哪些醫療機器人,分別用於什麼手術或實現哪些功能?
※Boston Dynamics 的機器人 Atlas 和本田公司的機器人 ASIMO 哪個更加先進?
※Universal Robots 的關節到底是怎麼樣設計的?
※有哪些知名的機器人競賽?
※想學習自適應控制、滑模控制、模糊控制、魯棒控制,如何打下基石,該看些什麼書?
TAG:機器人 | 人工智慧 | 計算機視覺 | 同時定位和地圖構建SLAM |