開(kāi)始做SLAM(機器人同時(shí)定位與建圖)研究已經(jīng)近一年了。從一年級開(kāi)始對這個(gè)方向產(chǎn)生興趣,到現在為止,也算是對這個(gè)領(lǐng)域有了大致的了解。然而越了解,越覺(jué)得這個(gè)方向難度很大。總體來(lái)講有以下幾個(gè)原因:
入門(mén)資料很少。雖然國內也有不少人在做,但這方面現在沒(méi)有太好的入門(mén)教程。《SLAM for dummies》可以算是一篇。中文資料幾乎沒(méi)有。
SLAM研究已進(jìn)行了三十多年,從上世紀的九十年代開(kāi)始。其中又有若干歷史分枝和爭論,要把握它的走向就很費工夫。
難以實(shí)現。SLAM是一個(gè)完整的系統,由許多個(gè)分支模塊組成。現在經(jīng)典的方案是“圖像前端,優(yōu)化后端,閉環(huán)檢測”的三部曲,很多文獻看完了自己實(shí)現不出來(lái)。
自己動(dòng)手編程需要學(xué)習大量的先決知識。首先你要會(huì )C和C++,網(wǎng)上很多代碼還用了11標準的C++。第二要會(huì )用Linux。第三要會(huì )cmake,vim/emacs及一些編程工具。第四要會(huì )用openCV, PCL, Eigen等第三方庫。只有學(xué)會(huì )了這些東西之后,你才能真正上手編一個(gè)SLAM系統。如果你要跑實(shí)際機器人,還要會(huì )ROS。
當然,困難多意味著(zhù)收獲也多,坎坷的道路才能鍛煉人(比如說(shuō)走著(zhù)走著(zhù)才發(fā)現Linux和C++才是我的真愛(ài)之類(lèi)的。)鑒于目前網(wǎng)上關(guān)于視覺(jué)SLAM的資料極少,我于是想把自己這一年多的經(jīng)驗與大家分享一下。說(shuō)的不對的地方請大家批評指正。
這篇文章關(guān)注視覺(jué)SLAM,專(zhuān)指用攝像機,Kinect等深度像機來(lái)做導航和探索,且主要關(guān)心室內部分。到目前為止,室內的視覺(jué)SLAM仍處于研究階段,遠未到實(shí)際應用的程度。一方面,編寫(xiě)和使用視覺(jué)SLAM需要大量的專(zhuān)業(yè)知識,算法的實(shí)時(shí)性未達到實(shí)用要求;另一方面,視覺(jué)SLAM生成的地圖(多數是點(diǎn)云)還不能用來(lái)做機器人的路徑規劃,需要科研人員進(jìn)一步的探索和研究。以下,我會(huì )介紹SLAM的歷史、理論以及實(shí)現的方式,且主要介紹視覺(jué)(Kinect)的實(shí)現方式。
其實(shí)還是要根據實(shí)際應用需求去配置硬件。
像無(wú)人駕駛車(chē)輛或飛行器的自主飛行,需要的硬件設備就比較多了,主要是嵌入式計算機+攝像機+IMU,根據應用領(lǐng)域、飛行器的尺寸、整體系統的功耗等等,合理的配置計算機、攝像機和設計VSLAM系統,最近小覓智能新出的小覓魔方是基于Nvidia Jetson TX2打造的嵌入式運算平臺,具備1.5T Flops的運算能力,還集成了視覺(jué)SLAM、人體識別和物體識別的開(kāi)源算法,可以裝在例如攝像頭、無(wú)人機、機器人這種終端設備上,他們家本身也有小覓雙目攝像頭這一類(lèi)產(chǎn)品,帶IMU的。
激光雷達:
1.解析度高,測距精度高
2.抗有源干擾能力強
3.探測性能好
4.不受光線(xiàn)影響
5.測速范圍大
視覺(jué)(主要是攝像頭):
成本低廉,用攝像頭做算法開(kāi)發(fā)的人員也比較多,技術(shù)相對比較成熟。攝像頭的劣勢,第一,獲取準確三維信息非常難(單目攝像頭幾乎不可能,也有人提出雙目或三目攝像頭去做);另一個(gè)缺點(diǎn)是受環(huán)境光限制比較大。
首先搬出寶典:Multiple View Geometry in Computer Vision。
這本書(shū)基本涵蓋了Vision-based SLAM這個(gè)領(lǐng)域的全部理論基礎!讀多少遍都不算多!另外建議配合Berkeley的課件學(xué)習。(更新:這本書(shū)書(shū)后附錄也可以一并讀完,包括附帶bundle adjustment最基本的levenberg marquardt方法,newton方法等)只要是SLAM問(wèn)題就要涉及optimization,就要用到各種least square算法。
所以另一個(gè)基礎理論是Sparse Matrix,這是大型稀疏矩陣處理的一般辦法。可以參考Dr. Tim Davis的課件:Tim Davis ,他的主頁(yè)里有全部的課程視頻和Project。
針對SLAM問(wèn)題,最常用的least square算法是Sparse Levenberg Marquardt algorithm,這里有一份開(kāi)源的代碼以及具體實(shí)現的paper:Sparse Non-Linear Least Squares in C/C++ 然后是框架級的工具。最常用的機器人框架是ROSROS.org | Powering the world's robots,可以使用在Windows,Linux和MacOS等操作系統上,里面包含一整套常用的機器人理論的算法和工具的實(shí)現。
另一個(gè)開(kāi)源工具集是OpenSLAM OpenSLAM.org,其中的g2o是目前最流行的graph optimization的實(shí)現工具。另外OpenCV也是視覺(jué)相關(guān)必備的基礎工具,Multiple View教材中的常用算法在OpenCV中都有常用的實(shí)現。
(更新:OpenCV的文檔Camera Calibration and 3D Reconstruction 中,包含SLAM相關(guān)的基礎理論公式以及C/C++/Python實(shí)現的API) 另外多說(shuō)一句題外話(huà),因為Optimization和圖片的feature extraction是SLAM里最核心的兩個(gè)問(wèn)題,而這兩個(gè)問(wèn)題都是運算量極大的。好的SLAM框架要兼顧速度和精確度。
目前大部分Vision或者RGBD的SLAM框架都是用C++來(lái)時(shí)實(shí)現完成的以確保運算速度。雖然我個(gè)人很欣賞Python,并且Python3也支持SciPy,OpenCV,ROS等重要工具,不過(guò)依然有大量的諸如g2o等基礎性庫在python下無(wú)法使用,而且如果要借鑒其他人的代碼,最方便的還是在C++中實(shí)現。
所以如果提問(wèn)者有志于在這個(gè)領(lǐng)域做深入研究,夯實(shí)的C++基礎是必不可少的。Introduction to Algorithms,以及 @vczh 推薦的C++ Primer等,都是在實(shí)際工作前要自己做好的功課。
下面說(shuō)一些硬件和實(shí)驗上的知識儲備。首先Vision-based SLAM常用攝像機標定(Camera Calibration)的世界通用簡(jiǎn)單方法,是張正友博士(Dr. Zhengyou Zhang,主頁(yè)Zhengyou Zhang's Home Page)的方法(張正友博士是本領(lǐng)域里少數的具有極其巨大影響力和貢獻的華人學(xué)者,已成腦殘粉嚶嚶嚶)。
具體方法和實(shí)現,我在這里推薦兩個(gè),一個(gè)是Caltech工具箱:Camera Calibration Toolbox for Matlab ,以及相關(guān)paper:Camera Calibration Toolbox for Matlab。該方法的另一個(gè)實(shí)現,是Matlab最新版本內置的Camera Calibration的application,自動(dòng)導入標定圖片并把得到的結果輸出給Matlab,更加自動(dòng)化,更加便捷準確。
更多的Camera Model理論知識請參考Multiple View Geometry。 至于RGB-D Camera,最常用的采集設備有兩種,一種是Microsoft Kinect,一個(gè)生態(tài)環(huán)境完備的RGBD Camera,可以直接用Visual Studio可Kinect SDK直接開(kāi)發(fā),也有大量開(kāi)發(fā)好的程序以供借鑒參考,也可以用OpenNI和ROS采集處理,我就不多介紹了,畢竟微軟是對程序員最友好的公司沒(méi)有之一(微軟大法好)。
另一個(gè)是Google的Project Tango,Google對于這個(gè)自家的神器還是很低調的,可以看看宣傳片ATAP Project Tango ,絕對酷炫——可惜我們lab剛剛買(mǎi)的那一臺,我還沒(méi)有用過(guò),所以對具體開(kāi)發(fā)不太了解。 另外有幾個(gè)網(wǎng)上成熟的數據集和測試方法,一個(gè)是Malaga Dataset,一個(gè)西班牙的團隊采集的Malaga城市數據:The Málaga Stereo and Laser Urban Data Set,覆蓋了城市中汽車(chē)駕駛的各種情況(停車(chē),加速,減速,行人,建筑,綠化帶等),里面提供了雙攝像頭,Laser,IMU等數據以及GPS的ground truth trajectory。
不過(guò)該版本因為是在市中心,所以GPS的ground truth并不可靠。另一個(gè)是慕尼黑工業(yè)大學(xué)Computer Vision Lab的RGB-D dataset https://vision.in.tum.de/data/datasets/rgbd-dataset,里面提供了大量的室內的RGBD數據集,以及非常方便好用的benchmark tools。
第三個(gè)是KITTI Dataset:The KITTI Vision Benchmark Suite,也是認可度很廣泛的汽車(chē)駕駛數據集。
首先搬出寶典:Multiple View Geometry in Computer Vision。
這本書(shū)基本涵蓋了Vision-based SLAM這個(gè)領(lǐng)域的全部理論基礎!讀多少遍都不算多!另外建議配合Berkeley的課件學(xué)習。(更新:這本書(shū)書(shū)后附錄也可以一并讀完,包括附帶bundle adjustment最基本的levenberg marquardt方法,newton方法等)只要是SLAM問(wèn)題就要涉及optimization,就要用到各種least square算法。
所以另一個(gè)基礎理論是Sparse Matrix,這是大型稀疏矩陣處理的一般辦法。可以參考Dr. Tim Davis的課件:Tim Davis ,他的主頁(yè)里有全部的課程視頻和Project。
針對SLAM問(wèn)題,最常用的least square算法是Sparse Levenberg Marquardt algorithm,這里有一份開(kāi)源的代碼以及具體實(shí)現的paper:Sparse Non-Linear Least Squares in C/C++ 然后是框架級的工具。最常用的機器人框架是ROSROS.org | Powering the world's robots,可以使用在Windows,Linux和MacOS等操作系統上,里面包含一整套常用的機器人理論的算法和工具的實(shí)現。
另一個(gè)開(kāi)源工具集是OpenSLAM OpenSLAM.org,其中的g2o是目前最流行的graph optimization的實(shí)現工具。另外OpenCV也是視覺(jué)相關(guān)必備的基礎工具,Multiple View教材中的常用算法在OpenCV中都有常用的實(shí)現。
(更新:OpenCV的文檔Camera Calibration and 3D Reconstruction 中,包含SLAM相關(guān)的基礎理論公式以及C/C++/Python實(shí)現的API) 另外多說(shuō)一句題外話(huà),因為Optimization和圖片的feature extraction是SLAM里最核心的兩個(gè)問(wèn)題,而這兩個(gè)問(wèn)題都是運算量極大的。好的SLAM框架要兼顧速度和精確度。
目前大部分Vision或者RGBD的SLAM框架都是用C++來(lái)時(shí)實(shí)現完成的以確保運算速度。雖然我個(gè)人很欣賞Python,并且Python3也支持SciPy,OpenCV,ROS等重要工具,不過(guò)依然有大量的諸如g2o等基礎性庫在python下無(wú)法使用,而且如果要借鑒其他人的代碼,最方便的還是在C++中實(shí)現。
所以如果提問(wèn)者有志于在這個(gè)領(lǐng)域做深入研究,夯實(shí)的C++基礎是必不可少的。Introduction to Algorithms,以及 @vczh 推薦的C++ Primer等,都是在實(shí)際工作前要自己做好的功課。
下面說(shuō)一些硬件和實(shí)驗上的知識儲備。首先Vision-based SLAM常用攝像機標定(Camera Calibration)的世界通用簡(jiǎn)單方法,是張正友博士(Dr. Zhengyou Zhang,主頁(yè)Zhengyou Zhang's Home Page)的方法(張正友博士是本領(lǐng)域里少數的具有極其巨大影響力和貢獻的華人學(xué)者,已成腦殘粉嚶嚶嚶)。
具體方法和實(shí)現,我在這里推薦兩個(gè),一個(gè)是Caltech工具箱:Camera Calibration Toolbox for Matlab ,以及相關(guān)paper:Camera Calibration Toolbox for Matlab。該方法的另一個(gè)實(shí)現,是Matlab最新版本內置的Camera Calibration的application,自動(dòng)導入標定圖片并把得到的結果輸出給Matlab,更加自動(dòng)化,更加便捷準確。
更多的Camera Model理論知識請參考Multiple View Geometry。 至于RGB-D Camera,最常用的采集設備有兩種,一種是Microsoft Kinect,一個(gè)生態(tài)環(huán)境完備的RGBD Camera,可以直接用Visual Studio可Kinect SDK直接開(kāi)發(fā),也有大量開(kāi)發(fā)好的程序以供借鑒參考,也可以用OpenNI和ROS采集處理,我就不多介紹了,畢竟微軟是對程序員最友好的公司沒(méi)有之一(微軟大法好)。
另一個(gè)是Google的Project Tango,Google對于這個(gè)自家的神器還是很低調的,可以看看宣傳片ATAP Project Tango ,絕對酷炫——可惜我們lab剛剛買(mǎi)的那一臺,我還沒(méi)有用過(guò),所以對具體開(kāi)發(fā)不太了解。 另外有幾個(gè)網(wǎng)上成熟的數據集和測試方法,一個(gè)是Malaga Dataset,一個(gè)西班牙的團隊采集的Malaga城市數據:The Málaga Stereo and Laser Urban Data Set,覆蓋了城市中汽車(chē)駕駛的各種情況(停車(chē),加速,減速,行人,建筑,綠化帶等),里面提供了雙攝像頭,Laser,IMU等數據以及GPS的ground truth trajectory。
不過(guò)該版本因為是在市中心,所以GPS的ground truth并不可靠。另一個(gè)是慕尼黑工業(yè)大學(xué)Computer Vision Lab的RGB-D dataset https://vision.in.tum.de/data/datasets/rgbd-dataset,里面提供了大量的室內的RGBD數據集,以及非常方便好用的benchmark tools。
第三個(gè)是KITTI Dataset:The KITTI Vision Benchmark Suite,也是認可度很廣泛的汽車(chē)駕駛數據集。
機器人的最優(yōu)路徑規劃問(wèn)題就是依 據某個(gè)或某些優(yōu)化準則 ( 工作代價(jià)最小、行走時(shí)間最短、行 走路線(xiàn)最短等 ),在機器人的工作空間中尋找一條從起始 位置到目標位置的無(wú)碰撞路徑。
就如人一樣,只有知道怎 么在環(huán)境中行走,才不會(huì )與其他物體相碰撞并且正確地從 起始地到達目的地,才能去做其他的事。但是即使是完成 這樣一個(gè)在我們看來(lái)十分簡(jiǎn)單的任務(wù),其實(shí)也是經(jīng)過(guò)了一 個(gè)良好配合與正確分析的過(guò)程。
首先眼睛要搜集環(huán)境信息, 把看到的環(huán)境狀態(tài)反饋給大腦,然后大腦根據眼睛反饋回 來(lái)的環(huán)境信息和所要到達的目的地做出綜合的分析,得到 一個(gè)判斷和結果,然后指揮人的身體移動(dòng),從而實(shí)現在環(huán) 境中的行走。機器人也是類(lèi)似,只不過(guò)在這里傳感器充當 了機器人的“眼睛”而路徑規劃模塊就相當于機器人的“大 , 腦” ,根據傳感器信息和任務(wù)要求進(jìn)行分析和決策,指揮機 器人的運動(dòng)。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.350秒