鑒于題主是激光SLAM入門,就以下面這樣一個思路來答一下吧。
1.SLAM與ROS的關系
1.1.關于SLAM
1.2.關于ROS
1.3.SLAM與ROS的關系
2.ROS移動機器人的整體構造
2.1.硬件構造解析
2.2.電機解析
2.3.電機驅動板解析
2.4.底盤驅動方式的解析
2.5.IMU模塊解析
2.6.激光雷達解析
2.7.ROS主機解析
2.8.攝像頭解析
3.商業應用ROS機器人
3.1.SLAM建圖導航的應用案例
3.2.商業ROS機器人相關公司
3.3.商業ROS機器人兩大發展思路
4.科研學習ROS機器人
4.1.科研學習ROS機器人與商業應用ROS機器人的區別
4.2.淘寶上科研學習ROS機器人相關產品
4.3.選購ROS機器人入門指南
—————分割線—————–
1.SLAM與ROS的關系
1.1.關于SLAM
在了解SLAM之前,需要先對機器人有一個整體的認識。一個典型的機器人的模樣,執行機構:輪式運動底盤、機械手臂、音響和顯示屏,感知機構:激光雷達、聲吶、攝像頭、IMU、輪式里程計編碼盤、麥克風、觸摸感應,決策機構:自我認知、環境認知、思想。
機器人通常借助感知裝置持續跟外部環境進行交互,從而來獲取機器人的狀態和環境的狀態,我們可以簡單的把機器人獲取自身狀態的行為叫做自我認知,把機器人獲取環境狀態的行為叫做環境認知。由于目前的機器人智能還比較低級,所以這里講到的機器人認知也是低級別的,例如人臉識別、語音識別、機器人定位、環境障礙物探測。有了認知,機器人就可以幫人類完成很多工作了,例如搬運貨物、照看小孩、陪伴閑聊、幫忙管理家里的智能設備、查詢天氣交通新聞資訊等等。我們可以把機器人幫助人類完成的這些個工作叫做機器人的技能,機器人擁有的這些個技能我們可以簡單的理解為機器人低級別的思想。機器人的軀殼 機器人的認知 機器人的思想,基本上就是機器人該有的模樣了。
咋一看機器人是個超級復雜的東東,但是作為機器人開發人員來說就那么幾個關鍵技術。其實,學界和工業界熱門的研究和開發也是圍繞這幾個關鍵技術展開的。
關鍵技術1:機器人移動底盤
關鍵技術2:機械手臂
關鍵技術3:SLAM導航
關鍵技術4:語音交互
關鍵技術5:物體識別
本人在這里總結歸納了機器人上的5大關鍵技術,由于個人能力和篇幅限制原因,接下來的內容將主要涉足機器人SLAM導航領域的相關技術。大家別以為SLAM是一個很新的技術,只是最近借著人工智能的風突然就火了起來。其實SLAM研究已經有幾十年的歷史了,SLAM最早是出現在軍事應用中,比如勇氣號火星探測車,在不能實時遙控的未知環境行星上的探測車為了執行任務,需要借助SLAM技術來導航和避障。后來慢慢的SLAM技術就從軍用轉民用了,有了我們現在看到的小到家里的掃地機器人大到無人駕駛汽車的各種SLAM應用,還有各種AR和VR應用很多也用到了SLAM技術。
SLAM是用來解決同時建圖和定位問題的,單獨的定位技術已經在日常生活很多見了(比如GPS定位技術、wifi定位技術、磁條導軌定位技術),單獨的環境建圖技術也很成熟了(比如學中的CT、電影制作特效、隧道勘探測繪等)。
但是面對機器人這樣一個復雜的應用,單獨的定位技術和單獨的環境建圖技術都不能很好的解決問題,于是結合了定位與建圖的SLAM技術就出現了。接下來,簡單的梳理一下定位、建圖、SLAM同時定位于建圖、SLAM導航技術的理論發展過程。
(1)機器人中的不確定性
機器人所處的環境存在大量不可預測性,傳感器測量誤差、電機控制的不穩定性、軟體方面的近似處理。。。簡單點說,就是通過對機器人的概率建模,可以對機器人的不確定性進行明確的可計算性的表示。
(2)機器人中的狀態估計
處理機器人中的這種不確定性的概率技術我們稱之為概率機器人技術,其核心是用傳感器數據來估計狀態的思路。
這就是機器人與環境交互的一個過程,傳感器負責從環境測量資訊,控制機構負責用來作用于環境。用概率模型來表示這個交互過程,就是大名鼎鼎的貝葉斯迭代網路。
(3)貝葉斯濾波及其各種實現算法
通過對機器人中狀態估計的了解,我們知道了貝葉斯概率法則起著重要的作用,而且大部分計算置信度的通用算法都是由貝葉斯算法給出的。算法其實就是兩個步驟預測和更新。貝葉斯濾波的具體實現算法可以分為參數化實現算法和非參數化實現算法兩種,由于貝葉斯濾波理論及各種具體實現算法涉及到大量深奧的數學知識,由于篇幅和個人能力受限,就不展開了,有興趣的朋友可以參閱《概率機器人》這本書。
(4)機器人中的運動與測量概率模型
了解了機器人中的狀態估計及各種濾波概率算法后,我們發現機器人的運動和測量概率模型對算法中的預測和更新步驟起著至關重要的作用。
(5)移動機器人定位與建圖
透過貝葉斯迭代網路,不難發現,進行機器人位姿估計,求解位姿置信度分布的過程其實就是機器人的定位問題;進行環境狀態估計,求解地圖置信度分布的過程就會機器人的建圖問題。
(6)SLAM同時定位與建圖
上面已經單獨的提出了機器人定位與機器人建圖的方法,但是獨立的定位問題是建立在地圖已知的情況下的,單獨的建圖問題也是建立在定位已知的情況下的。當機器人不能得到環境地圖,也不知道自身位姿的時候,SLAM問題就出現了。也就是說SLAM要同時的進行機器人定位和建圖,這個問題比單獨的定位和單獨的建圖都要難得多。
在線SLAM算法的代表是EKFSLAM,歷史上最早并可能是最有影響力的SLAM算法,可以說是SLAM研究的元老級算法。EKFSLAM中的地圖是基于特征的,地圖由點地標組成。除了估計機器人當前的位姿,EKFSLAM算法還估計路徑上遇到的所有地標的坐標,也就是機器人位姿和地圖地標點包含進聯合狀態矢量里,算法對該聯合狀態矢量進行估計。
全SLAM算法的代表是GraphSLAM,該算法將機器人的運動路徑和測量組件成一個軟約束的圖,利用圖論中的優化算法對整個圖中的軌跡點和測量點進行估計。由于圖的稀疏性特點,可以大大加快計算。
EKFSLAM和GraphSLAM是兩個極端。EKFSLAM需要取得每一時刻的資訊,把資訊分解為概率分布,因此每一步的計算代價都非常昂貴。而GraphSLAM剛好相反,只是簡單的積累每一時刻的資訊,也就是簡單的將收到的資訊存儲下來,然后可以離線的進行推理的步驟,加之存儲下來的資訊的稀疏性,因此GraphSLAM計算的開銷是比較小的,但是隨著地圖規模擴大算法會消耗越來越多的內存直至崩潰。面對這兩個極端問題,當然就會有介于EKFSLAM和GraphSLAM是兩個極端之間的折中的方法,就是SEIFSLAM。SEIFSLAM算法繼承了EKFSLAM資訊表示的高效性,也保留了GraphSLAM計算代價小的優點,可以說SEIFSLAM是高效和可實現的SLAM算法。還有另外一種高效和可實現的SLAM算法,就是FastSLAM,該算法使用粒子濾波估計機器人的路徑,我們都知道粒子濾波和眾多基于參數化的濾波算法相比存在計算開銷小和便于處理非線性模型的優勢,基于FastSLAM的多個變種算法在機器人已經得到廣泛的應用了,比如gmapping等等,由于篇幅限制就不展開了。
(7)現今主流的SLAM算法
現今在機器人上使用最廣泛的應該算激光SLAM了,在掃地機器人、服務機器人、AGV智能車上普遍搭載了單線激光雷達SLAM算法,像無人駕駛汽車、戶外機器人則普遍搭載了多線激光雷達SLAM。另一種熱門的研究是視覺SLAM,視覺SLAM有配備單目、雙目、深度相機的多種形態,并且根據采用視覺特征點的區別還有直接法、半直接法、稀疏法之分。然后還有就是各種復合式的SLAM算法,比如激光與視覺融合的SLAM、融合了IMU的視覺SLAM。最后,就是一些最新穎的SLAM算法,比如用深度學習來做的端到端的SLAM、基于物體識別的語義SLAM。由于本文的重點不是SLAM綜述,所以具體的算法性能比較就不展開了,有興趣的朋友可以參閱相關SLAM綜述文章。
(8)機器人自主導航與動態避障
機器人用SLAM構建出了環境的地圖,在已知了環境地圖的情況下,可以用SLAM的重定位功能或者單獨的基于已知地圖的定位算法比如AMCL來進行機器人的定位。環境地圖和機器人位姿都有了,就可以開始來做自主導航和避障了。機器人自主導航可以分成兩個實現部分,第一個部分就是路徑規劃,第二個部分就是控制策略。路徑規劃利用地圖資訊尋找一條能到達目標的全局路徑,全局路徑在機器人導航過程中起到全局戰略性的指導。理想情況是,機器人完全按照全局路徑移動到目標,但是實際環境往往是多變和復雜的,而且機器人實際控制也會存在偏差,所以機器人的實際運動控制需要有一套控制策略來最終實現。控制策略需要盡量逼近全局路徑、盡量遠離障礙物、最快時間到達目標等因素,這些因素可以用一個回報函數來評價,尋找最佳控制策略的過程中遞歸的計算每一次行動的回報函數值。這樣控制策略在回報函數的指引下,就可以給出最佳的控制策略,控制策略控制機器人完成實際的移動。
1.2.關于ROS
大家一聽到ROS機器人操作系統,就被操作系統幾個字給嚇到了。其實,ROS就是一個分布式的通信機制,幫助程式進程之間更方便的通信。搞懂了ROS的通信機制后,機器人的各種算法的開發還是基于我們常見的C 和Python的。
1.3.SLAM與ROS的關系
SLAM最核心的地方在算法,側重點在于如何構建出效果好的地圖,并為機器人導航提供更好的數據保障。ROS幫忙解決傳感器驅動、顯示、各種核心算法間的溝通協調問題。如果做商用產品就另當別論了,商業的產品一般會專門開發自己的一套驅動、調度、顯示的系統,或者拿ROS系統來裁剪以保障穩定性和效率。
2.ROS移動機器人的整體構造
這個就是一個典型的ROS移動機器人的硬件構造,由于篇幅限制,就不具體展開了,有興趣的朋友可以去我的專欄閱讀更詳細的文章:SLAM導航 語音交互機器人DIY
3.商業應用ROS機器人
為了增加學習動力,還是有必要了解下商業上都有什么具體的用途。這里就舉幾個有趣的例子吧。
(1)智慧農業自動噴藥機器人
(2)智慧餐廳送餐機器人
(3)樓宇送快遞機器人
(4)大型機房智能巡檢機器人
當然也有很多做的很不錯的機器人公司,也可以了解一下他們的最新動態。
(1)日本軟銀集團pepper
(2)北京進化者機器人公司的小胖
(3)上海思嵐科技的ZEUS
(4)上海高仙機器人公司的室外機器人
(5)云跡科技的大潤機器人
(6)交通銀行大堂機器人嬌嬌
最后談一談創業公司都是怎么來下手做機器人的,主要介紹兩種發展思路:核心部件和系統集成。
(1)核心部件
就是集中力量研究機器人上的一項關鍵技術,比如激光雷達、底盤、SLAM導航主板方案。
(2)系統集成
及時自己本身沒有特別的核心技術,購買各種別人的機器人零部件,然后自己集成成整機,主要精力是解決用戶的實際應用場景的需求。
4.科研學習ROS機器人
4.1.科研學習ROS機器人與商業應用ROS機器人的區別
商業ROS機器人都是面向具體的產品落地,設計上考慮的是緊湊耦合和降低成本,最求軟體的精簡和穩定。
科研學習ROS機器人正是為了學習開發者而設計的,當然是硬件模塊化設計,軟體和硬件接口盡量開放出來。
4.2.淘寶上科研學習ROS機器人相關產品
(1)Pioneer先鋒機器人
(2)Turtlebot海龜機器人
(3)EAI移動底盤
(4)miiboo語音交互移動機器人
(5)淘寶上眼花繚亂的ROS機器人
4.3.選購ROS機器人入門指南
(1)提供系統的開發和使用教程的重要性
(2)外形結構可擴展的重要性
(3)硬件模塊化的重要性
(4)別太迷信軟體開源
(5)技術支持的重要性
—————分割線—————–
由于篇幅限制,很多內容沒來得及展開,如果需要了解更多細節,可以來我的今日熱點專欄:
zhuanlan.youmelive.com