1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從零開始搭二維激光SLAM --- 零基礎如何入門激光SLAM

        共 7603字,需瀏覽 16分鐘

         ·

        2021-03-26 06:25

        最近有幾個人加我,都說是剛開始學激光slam,基本都是研一,也有一些大四的(大四的都開始學SLAM了?。?。

        情況也都差不多,有的是課題組里只有自己做slam,有的是完全沒人帶,有的是完全沒基礎,c++都沒學過的那種。

        這些小白都不知道怎么進行學習,問了我好多相同的問題,所以我就將我自己的思路整理了一下,也就是這篇文章的由來.

        第一部分是我自己的SLAM接觸史,第二部分是為碩士小白入門寫的推薦學習路線,第三部分是為了SLAM愛好者入門寫的推薦學習路線.

        長文,無圖,做好準備.以下內容僅為我自己的觀點,有可能有錯誤及不足,望見諒.

        1 我的SLAM接觸史

        1.1 c++

        我也是研一的時候知道自己課題是SLAM相關的。

        所以就在2016年10月份的時候開始看 c++ prime plus。之前我沒接觸過編程,就大一時候上過c語言的課,學完了也沒記得什么,之后也沒再碰過代碼。

        這時候還不知道咋編代碼,咋運行程序,所以 c++ prime plus 就是光看,沒去實際編代碼。

        1.2 ubuntu

        到了2017年3月,課題正式確定,《基于SLAM的室內移動機器人導航技術研究》。

        經(jīng)過同學的幫助,幫我裝了人生第一個雙系統(tǒng),ubuntu1404,開始正式接觸linux系統(tǒng)。

        1.3 ROS

        之后邊學ubuntu的命令行(簡單教程),邊去學ROS ,ROS的wiki地址為 wiki.ros.org。

        ROS的wiki上的知識實在是太多了,有太多太多的網(wǎng)頁跳轉,導致我花了太多的時間用在逛wiki上,當時存了30多個書簽等著我一個一個的去看。

        其實只要學完 Beginner Level 的教程就可以了,這個之后詳細說明。

        1.4 ROS By Example 1

        之后去看了這本書《ros by example 1》,這本書對我來說真的非常重要,讓我跑通了第一個ros的demo,十分有成就感。

        這本書有配套的代碼,可以直接運行,照著書中的步驟一步一步運行即可。學了這么久,通過這本書里的例子,終于在rviz中看到了turtlebot,并讓機器人成功的動起來了,真是非常有成就感的一件事。

        1.4 概率機器人

        忘記了看這本書的具體時間了,只記得實驗室里有這本書,然后我實習的時候借去看了一遍。這本書真的是很厲害,里邊有關于機器人定位與建圖的所有概念和公式。

        強烈建議入門的時候不要讀這本書,不要讀,不要讀。

        因為當時我看完了一遍,真是一點都沒理解,也一點沒記住。這本書就是現(xiàn)在的我來看,也有很多不理解,讀不懂的地方,更別說剛入門的小白了。

        1.5 小強機器人

        之后,我去公司實習,實習的時候有個機器人可以讓我玩,小強機器人。這是第一次弄機器人,也是第一次在機器人上操作ROS。

        實踐ROS與操作機器人大概花費了我至少2個月的時間。時間很長,因為可能突然出現(xiàn)有些問題導致你卡住,進行不下去了。

        記得很清楚,在筆記本上rviz點擊下發(fā)move_base的目標點,機器人始終不動,這個問題卡了我2周的時間。原因是沒有在機器人里的/etc/hosts里添加筆記本的ip。。。

        所以,如果你課題組里只有自己做SLAM或者機器人相關,一定要多加幾個社群,qq群也好,微信群也好,一定不要自己一個人去研究.有很多小問題在別人那只是一句話就能解決的事,自己研究可能就要耽誤2周甚至更長的時間。而且,現(xiàn)在做社群的有很多,搜索也很容易找到。

        1.6 cartographer

        再之后,17年12月份開始,到18年1月份,弄了將近1個月如何使用carographer。弄懂如何跑demo之后,又開始學如何修改launch文件,如何寫urdf。

        再之后,就是做導航相關的了。

        回顧這一年的時間,由于沒人帶真是走了挺多彎路,學習也沒有抓住重點。當然,學過的所有知識都不是無用的,只是沒到需要用的時間而已。同時,由于之前基礎打的牢,學的多,所以現(xiàn)在我對ROS相關的理解非常深刻,操作也很流暢。

        接下來,我將我認為的入門需要學的最重要的東西以及流程寫下來,希望可以幫助小白們知道如何學習SLAM,以及如何做SLAM相關的科研。

        2 碩士小白做激光SLAM相關課題的學習路線

        碩士同學如果課題是SLAM相關的,該如何盡快入門呢?課題組只有自己一個做SLAM的該怎么辦呢?

        不要慌。目前大部分做SLAM的幾乎都是自學的,即使是課題組有其他做SLAM的也只能是讓自學的速度更快一點而已,因為知識始終是要自己理解了之后才能成為自己的。多加幾個社群多交流,也是一樣的.

        2.1 第一步:雙系統(tǒng)

        我認為的第一步就是先要裝個雙系統(tǒng),windows+ubuntu ,不建議使用虛擬機,虛擬機本身會有很多問題,小白根本不知道出現(xiàn)的問題是虛擬機本身的問題還是環(huán)境沒弄好導致的問題。相信每個做SLAM的都自己裝過不下1遍的雙系統(tǒng)。

        因為ubuntu系統(tǒng)不是十分健壯,有時候裝環(huán)境,裝驅動尤其是顯卡驅動,很可能就把系統(tǒng)弄壞了。有時候強制關機也會導致進不去系統(tǒng)。

        由于每個人的電腦配置不一樣,導致裝雙系統(tǒng)的時候會出現(xiàn)各種小問題,花時間都是可以解決的。

        裝雙系統(tǒng)這一階段大概花費 1天到2周 不等的時間。

        2.2 第二步:ubuntu的基礎指令

        這一步很簡單,只要稍微學習下ubuntu的最基礎的指令就可以了,可以照著這個簡單教程進行學習,也可以在b站中找視頻進行學習。

        一定要記住,剛開始只需要學習最基礎的指令就夠了,如 如何打開終端,如何復制移動文件,如何新建文件夾等等。

        不要學的太多,像shell編程,腳本編寫執(zhí)行等等。很多知識是會在以后的使用中,邊學邊查就夠了,不要第一時間全都去學,基礎不夠的情況學了再多也不一定能理解和記住。

        這一階段會花費 1天到1周 不等的時間。

        2.3 第三步:學習ROS

        2.3.1 為什么要學ROS

        ROS最大的貢獻就是為機器人相關的開發(fā)者,統(tǒng)一了接口與操作方式。讓開發(fā)者可以聚焦于上層的算法設計,不用每個人都去重復的去做通訊,驅動等底層的搭建。同時,ros中也提供了能讓各種傳感器數(shù)據(jù)可視化的軟件Rviz,以及查看各個節(jié)點的關系可視化圖等特別好用的工具。

        而且,目前的激光SLAM,不管是二維的還是三維的,幾乎都是使用ROS的接口編寫的,不會用ROS你就不會啟動SLAM。所以,ROS是必須要學的。

        2.3.2 安裝ROS

        安裝ROS網(wǎng)上有太多的教程,這里就不再說明了,一般照著ROS wiki的 安裝教程 一步一步安裝都會成功的。

        2.3.3 怎么學ROS

        ROS的wiki網(wǎng)站(ros.wiki.org)里有幾乎所有關于ROS的教程與信息,在學習ROS的時候,最好直接看wiki上的內容,不要去找一些其他網(wǎng)站翻譯之后的內容,這里的英文很簡單,一般都能直接看懂。

        能找到的翻譯過的文章大都只是簡單的進行翻譯與復制,不一定準確不說,往往都是只翻譯一個章節(jié)或者一小部分,會讓人學的不夠全面與透徹。

        2.3.3.1 ROS Tutorials Beginner Level

        首先要照著ROS的官方教學內容進行學習,也就是 ROS Tutorials 的 Beginner Level 內容進行學習,一定要保證每個章節(jié)都弄懂,保證每個章節(jié)的內容都自己跟著實踐過不止1次。只有自己實際操作之后,才能真正的理解,光看是看不會的!

        這20個章節(jié)真的非常重要,有的時候我也會去再重溫一下這20個章節(jié)的內容,這真的是使用ROS的最核心的內容,一定要好好學習,要真正的學會,理解。

        這一階段大概花費 2周到3周 的時間。

        2.3.3.2 launch文件

        學完了初級教程之后,先不要去學中級教程以及其他的教程,因為其他的教程是短時間內用不到的。ROS Tutorials中有2個常用的知識點沒有說,一個是用于啟動多個節(jié)點的roslaunch命令與launch文件,另一個是URDF模型。

        launch文件的語法可以去wiki上學一下http://wiki.ros.org/roslaunch.

        wiki上的內容很多,可以不用全部學,要學的只有2個,一個是如果使用roslaunch命令啟動launch文件,命令的格式如下所示

        roslaunch package_name file.launch

        另一個是launch文件的XML語法 http://wiki.ros.org/roslaunch/XML。

        launch文件的具體教學可以在百度里搜一搜,也可以在任意一個ros的包中查看launch文件的具體內容。

        這一階段最多花費 1天 的時間。

        2.3.3.3 URDF

        URDF是用來描述傳感器坐標系與機器人坐標系間的物理關系的,也就是坐標變換。

        wiki上有更詳細的介紹:http://wiki.ros.org/urdf ,也有對應的教程 http://wiki.ros.org/urdf/Tutorials.

        這個文件可能第一次看感覺很復雜,又是一種新的語言格式,但是其內容模式是固定的,只需要大段的復制,簡單的更改其中的坐標系名字與對應的坐標變換的具體數(shù)值,即可完成自己機器人的URDF模型的搭建。

        如果沒看明白完全沒有關系,因為大部分SLAM算法已經(jīng)編寫好了對應的URDF模型,你理解了URDF的概念也是完全可以的,以后再來弄清楚。

        這其中可能涉及到一些TF的知識,可以暫時不用管他,只要知道這是ROS幫助我們管理傳感器坐標系與機器人坐標系間坐標變換關系的即可。TF也是十分必要的,是之后的必學項

        這一階段最多花費 1天 的時間。

        2.4 第四步:試著跑通現(xiàn)有的SLAM算法

        如果一切順利的話,學到這差不多花費一個月的時間,如果你學的快的甚至不需要一個月的時間。

        下一階段為嘗試在ROS下跑通現(xiàn)有的SLAM算法。

        如果你是做二維的激光SLAM,建議優(yōu)先跑通 gmapping ,因為這個SLAM算法網(wǎng)上能找到的教程非常多。對應的數(shù)據(jù)bag文件(bag會在 ROSTutorials 中學到)可以在 http://download.ros.org/data/gmapping/ 中獲取。

        如果是做三維的激光SLAM,建議優(yōu)先跑通LOAM,這個SLAM的數(shù)據(jù)包及如何運行的教程網(wǎng)上也是非常多。

        在跑demo的過程中,你會體驗到如何運行l(wèi)aunch文件,如何在launch文件中修改訂閱的話題的名稱,以及如何播放bag文件。同時,也要體會激光雷達的數(shù)據(jù)是什么樣的,構建出的二維地圖或者三維地圖是什么樣的。

        這一階段大概花費 1周到3周 的時間。

        2.5 第五步:理解SLAM各個模塊的理論概念以及調研SLAM

        經(jīng)過上面的步驟,相信你大致知道SLAM是干什么的了,就是為了構建地圖用的,這個地圖可以保存下來,用于后續(xù)的定位及導航避障中。也有一些SLAM作為里程計在使用,始終提供估計的位姿.

        現(xiàn)在,我們可以更深入的學習下SLAM的概念了。我是覺得,只有先實際跑了下SLAM,再去看理論,才能理解SLAM到底是要干什么.要不然直接學習SLAM的各個理論概念,可能等你學完了也沒有理解,過一陣時間就忘了.

        目前,主流SLAM的結構基本都差不過,分為前端里程計,后端優(yōu)化,回環(huán)檢測三個大模塊.前端的目的是始終累加位姿,作為里程計使用;后端使用圖的結構模型,優(yōu)化整體位姿,減小前端里程計產(chǎn)生的累計誤差;回環(huán)檢測可以提供一個更強烈的圖結構的約束,能夠更好的減小累計誤差.

        這一階段就是理解SLAM的概念,可以在網(wǎng)上搜下相關的文章,也可以去看下論文,如中文的博士論文,國外的論文;推薦優(yōu)先看博士論文的綜述章節(jié),以及SLAM綜述相關的文章,這可以讓你很快的理解SLAM各個模塊的概念.

        調研主流SLAM算法

        理解了SLAM概念的時候,相信綜述里會列舉很多SLAM算法,可以順便調研下目前的主流SLAM算法方案有哪些,每個SLAM算法的框架是什么樣的.

        一些傳統(tǒng)的SLAM算法如下所示.

        二維激光SLAM:hector,gmapping,karto,cartographer等等.

        三維激光SLAM:LOAM,Lego-LOAM,LIO-SAM,HDL graph SLAM,cartographer等等.

        還有些語義的SLAM我不太懂這里就不說了.

        這一階段大概花費 1周到2周 的時間。

        2.6 第六步:閱讀文獻找創(chuàng)新點

        完成以上步驟大概已經(jīng)過去至少2個月了,相信這時的你已經(jīng)對SLAM有了一定的理解.接下來就是要為了做課題而改進SLAM.

        既然是找創(chuàng)新點,首先就要了解最新SLAM論文的改進點,也就是要瘋狂看論文了.我是覺得,只有先理解了SLAM各個模塊的理論概念,再看論文才能真正理解論文說的是啥,才能理解論文的創(chuàng)新點在哪.

        看論文是為了找創(chuàng)新點,同時也要選擇一個現(xiàn)有的SLAM框架,因為從零搭一個SLAM算法是非常難的,所以只能在現(xiàn)有SLAM框架上做改進.

        這一階段可能花費 1個月到2個月 的時間。

        2.7 第七步:跑通選定的SLAM框架

        將選定的SLAM算法跑通.

        如果沒有硬件的同學可以直接下載網(wǎng)上的數(shù)據(jù)集,將數(shù)據(jù)集和選定的SLAM算法調通.

        如果是有機器人以及激光雷達的同學這一步還要多花費一些時間將選定的SLAM算法與自己的硬件及機器人調通,做好心里準備,這一步可能會出現(xiàn)各種問題導致你卡住.

        針對自己的硬件,首先要學會如何啟動雷達,如何配置雷達;如果是要做移動機器人的,還要學習一下移動機器人如何操作,也就是如何用ROS操作機器人;再之后是如何將自己的硬件與SLAM算法調通,這步網(wǎng)上的教程很多,一定要注意下話題的名字對不對的上.

        跑通選定的SLAM算法的意思是 將數(shù)據(jù)集或者實際的傳感器接入到SLAM中,并啟動成功,以及保存地圖.之后,要再試著改一改這個SLAM的參數(shù),看看不同的參數(shù)更改了會帶來什么影響.

        這一階段可能花費 1周到2個月 的時間。

        2.8 第八步:學習C++

        如果你已經(jīng)找到了想要做的創(chuàng)新點,接下來的步驟就是要將想法通過代碼實現(xiàn)出來.

        之前的步驟并沒有涉及到編程語言,因為最開始真的是用不到自己編寫代碼.由于ROS社區(qū)的貢獻,導致機器人開發(fā)人員的編寫代碼量驟降,能想到的功能基本開源社區(qū)里都有,只需要跑通調參就可以了.

        現(xiàn)在要自己實現(xiàn)新功能,需要自己寫代碼,所以這一階段才開始學習編程語言.

        語言推薦C++,因為大部分SLAM是用c++編寫的.優(yōu)先推薦閱讀 c++ prime plus ,也可以在網(wǎng)上找一些其他的教程.

        不管通過什么方式學習 C++ ,一定多多進行編程練習,學習編程只通過看書是永遠也學不會的,只有自己多編,多練,才能讓自己熟練準確的編程.

        這一階段可能花費 1個月 的時間,也可以在之前的步驟當中抽空學一下。

        2.9 第九步:閱讀SLAM源碼

        學完了C++,并不意味著你能夠編寫SLAM以及自己的想法了.因為編寫SLAM是一件挺工程,挺需要經(jīng)驗的事情.

        這時的你,可能會陷入到想要實現(xiàn)某些功能,但是完全不知道該怎么寫代碼的階段.

        這時候就需要你去閱讀想要改進的SLAM的代碼了.看代碼的目的是為了學習如何將實現(xiàn)自己想法實現(xiàn),以及自己的功能添加到SLAM的哪里.可以只看自己想要改進模塊的代碼,也可以將整個SLAM的代碼全看了,只要知道了自己的功能如何實現(xiàn)了就可以.

        C++ 11

        由于一般的SLAM的實現(xiàn)都用到了很多C++ 11的新特性,所以看代碼的時候也可以簡單學一學 C++ 11 相關的知識,以便更好的閱讀代碼.

        參數(shù)

        看代碼的時候要將每個參數(shù)在哪里使用的,這個參數(shù)具體代表什么意思弄懂,這樣可以讓你更好更準確的調參.

        同時,也要學習下SLAM的具體實現(xiàn)該怎么寫代碼,思考自己想要實現(xiàn)的功能該如何寫代碼,該添加到SLAM的哪部分代碼中,要帶著問題去讀代碼.

        這一階段可能花費 1個月到2個月 的時間。

        2.10 第十步:編寫代碼,驗證想法

        知道了代碼怎么寫,在SLAM的哪個部分添加,就可以上手寫代碼了.

        新手寫代碼,調試代碼,這一階段的時間可能花費的要久一點.

        寫完了代碼之后,就是要通過與之前的SLAM算法對比軌跡精度,地圖精度等等.輸出圖片,表格,曲線,證明你的算法更加優(yōu)秀.

        再之后就是寫論文,發(fā)論文,寫碩士論文,畢業(yè).

        有些學校要求工作量,這一點一定提前考慮好.SLAM相關功能的改進,撐死了一個改進點一個大章節(jié),編程是不算工作量的,能算在論文里的工作只有改進之后的對比圖,對比曲線.

        一篇碩士論文大概4-5個大章節(jié),其他章節(jié)的內容怎么寫,一定要提前考慮好.不要編程編了2年,最后寫論文發(fā)現(xiàn)只能算1個大章節(jié),那就尷尬了.

        3 單純的喜歡激光SLAM,非科研,零基礎如何入門

        對于想轉行的同學,或者是單純的喜歡激光SLAM同學,不需要寫論文,該怎么入門呢?

        基本上是一樣的,只是第六步可以忽略,可以不用讀論文.如果不需要改代碼的話第十步也是可以忽略的.而第九步,閱讀源碼,這一部分可以進行擴展,多閱讀幾個SLAM算法的源碼與實現(xiàn),將有助于幫你更好的理解SLAM的實現(xiàn).

        總結

        這一路走下來真是不容易啊,涉及到了很多元的知識,也需要花挺長的時間來探索,來入門.如果沒人帶路的話可能要花更久的時間來找到正確的路,希望上邊的步驟可以幫到你們.

        這只是我的一點建議,不一定正確,只是給各位小白們提供個參考.

        上邊的步驟有很多是可以同時進行的,您可以自己選擇如何組合.

        上邊的路線還有很多知識點沒有提到,如 ROS 中的TF,這是所有SLAM中都會用到的;如 SLAM的理論求解算法,像高斯牛頓,LM等等.這篇文章沒有講太多理論算法方面的東西,以對小白更加友好.



        其他原創(chuàng)文章可以戳:

        從零開始搭二維激光SLAM --- 基于PL-ICP的幀間匹配
        從零開始搭二維激光SLAM --- 基于ICP的幀間匹配
        從零開始搭二維激光SLAM --- 使用PCL進行雷達的消息類型轉換

        文章將在 CSDN: 李太白lx 與 知乎:李想 進行同步更新,可以更方便的看代碼,歡迎大家關注。

        如果您對我寫的文章有什么建議,或者想要看哪方面功能如何實現(xiàn)的,請直接在公眾號中聯(lián)系我,我將認真考慮您的建議。

        同時,也希望您將這個公眾號推薦給您身邊做激光SLAM的人們,大家共同進步。


        【您的在看與轉發(fā),是對我莫大鼓勵】


        瀏覽 37
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一级A片处破女免费 | 蜜乳在线视频 | 久久之久久 | 全部孕妇毛片丰满孕妇孕交最新章节免费阅读 | 日韩一级片在线观看 | 日本在线无码 | 嬷嬷羞耻调教后宫日常h视频 | 开心激情网五月 | 内射白浆视频 | 成人A片无码永久免费第三集 |