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