如何利用ROS來設計移動機器人

2021-01-12 EDN電子設計技術

編者按:本文系微信公眾號「硬創公開課」授權發表,硬創公開課為雷鋒網旗下知識分享類品牌活動,歡迎關注。kQHednc

最近幾年各種移動機器人開始湧現出來,不論是輪式的還是履帶式的,如何讓移動機器人移動都是最核心的工作。要讓機器人實現環境感知、機械臂控制、導航規劃等一系列功能,就需要作業系統的支持,而ROS就是最重要的軟體平臺之一,它在科研領域已經有廣泛的應用。kQHednc

不過有關ROS的書籍並不多,國內可供的學習社區就更少了。本文就帶大家了解一下如何利用ROS來設計移動機器人。kQHednc

移動機器人的三個部分kQHednc

所謂的智能移動, 是指機器人能根據周圍的環境變化,自主地規劃路線、避障,到達目標地。kQHednc

機器人是模擬人的各種行為,想像一下,人走動需要哪些器官的配合? 首先用眼睛觀察周圍環境,然後用腦去分析如何走才能到達目標地,接著用腿走過去, 周而復始,直到到達目標地址為至。機器人如果要實現智能移動,也需要眼、腦和腿這三部分的緊密配合。kQHednc

腿kQHednc

「腿」是機器人移動的基礎。機器人的「腿」不局限於類人或類動物的腿,也可以是輪子、履帶等,能讓機器人移動起來的部件,都可以籠統地稱為「腿」。 kQHednc

類人的腿式優點是:既可以在複雜路況(比如爬樓梯)下移動、也可以更形象地模仿人的動作(比如跳舞),缺點是:結構和控制單元比較複雜、造價高、移動慢等。kQHednc

所以大部分移動的機器人都是輪式機器人,其優勢在於輪子設計簡單、成本低、移動快。而輪式的也分為多種: 兩輪平衡車、三輪、四輪和多輪等等。目前最經濟實用的是兩個主動輪+一個萬向輪。kQHednc

眼睛kQHednc

kQHednc

機器人的眼睛其實就是一個傳感器。它的作用是觀察周圍的環境,適合做機器人眼睛的有雷射雷達、視覺(深度相機、單雙相機)、輔助(超聲波測距、紅外測距)等。kQHednc

「腦」kQHednc

機器人的大腦就負責接收「眼睛」傳輸的數據,實時計算出路線,指揮腿去移動。
其實就是要把看到的東西轉換為數據語言。針對如何描述數據,如何實現處理邏輯等一系列問題。 ROS系統給我們提供一個很好的開發框架。kQHednc

kQHednc

ROS簡介kQHednc

ROS是建立在linux之上的作業系統。它的前身是斯坦福人工智慧實驗室為了支持斯坦福智慧機器人而建立項目,主要可以提供一些標準作業系統服務,例如硬體抽象,底層設備控制,常用功能實現,進程間消息以及數據包管理。kQHednc

ROS是基於一種圖狀架構,從而不同節點的進程能接受、發布、聚合各種信息(例如傳感,控制,狀態,規劃等等)。目前ROS主要支持Ubuntu作業系統。kQHednc

有人問ROS能否裝到虛擬機裡,一般來說是可以的,但是我們建議裝個雙系統,用Ubuntu專門跑ROS。kQHednc

kQHednc

實際上,ROS可以分成兩層,低層是上面描述的作業系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟體包,例如定位繪圖,行動規劃,感知,模擬等等。ROS(低層)使用BSD許可證,所有是開源軟體,並能免費用於研究和商業用途,而高層的用戶提供的包則使用很多種不同的許可證。kQHednc

用ROS實現機器人的移動kQHednc

對於二維空間,使用線速度 + 角速度可以實現輪式機器的隨意移動。kQHednc

線些速度:描述機器人前後移動的速度大小kQHednc

角速度:描述機器人轉動的角速度大小kQHednc

所以控制機器人移動主要是要把線速度角速度轉換為左右輪的速度大小,然後,通過輪子直徑和輪間距,可以把線速度和角速度轉化為左輪和右輪的速度大小。kQHednc

這裡有一個關鍵問題就是編碼器的選擇和pid的調速。kQHednc

編碼器的選擇:一般編碼器和輪子是在一個軸上,目前來說,速度在0.7m/s以下的話,編碼器選600鍵到1200鍵之間都ok。不過需要注意的是,編碼器最好用雙線的,A、B兩線輸出,A向和B向輸出相差90度,這樣可以防抖動。防抖動就是可以在之后里程計算時可以更準確。kQHednc

左輪和右輪的速度大小的控制,通過輪子編碼器反饋,通過PID實時調整電機的PMW來實現。實時計算出小車的裡程計(odom),得到小車移動位置的變化。kQHednc

計算車的位置變化是通過編碼器來計算的,如果輪子打滑等情況,那麼計算的變化和實際的變化可能不同。要解決這個問題,其實是看哪個問題更嚴重。要走5米只走了4.9米重要,還是要走180度只走了179度重要。kQHednc

其實角度的不精確對小車的影響更大。一般來說,小車的直線距離精確度可以控制在釐米範圍內,在角度方面可以控制精準度在1%~2%。因為角度是比較重要的參數,所以很多人就用陀螺儀來進行矯正。kQHednc

所以有時候大家問小車精度有多高?其實現在這樣已經精度比較高了,難免打滑等問題,不可能做到百分之百的精準。kQHednc

小車在距離和角度方面做到現在這樣對於自建地圖導航已經是可以接受的,要提高更高的精度可能就要其他設備輔助,比如雷射雷達來進行輔助,雷射雷達可以進行二次檢測進行糾正。kQHednc

雷射雷達數據的存儲格式,它首先會有一個大小範圍,如果超出範圍是無效的。還有就是有幾個採樣點,這樣就可以雷射雷達可以告訴你隔多少度有一個採樣點。kQHednc

kQHednc

另外最後那個Intensities是告訴大家數據的準確率,因為雷射雷達也是取最高點的數據,是有一定的準確率的。上面的ppt其實就是用雷射雷達掃了一個牆的形狀。kQHednc

雷射雷達掃出一個靜態形狀其實沒有意義,雷達建圖的意義其實在於建立房間的地圖。kQHednc

如何繪製地圖?kQHednc

第一步是收集眼睛數據: kQHednc

針對雷射雷達,ROS在sensor_msgs 包中定義了專用了數據結構來存儲雷射消息的相關信息,成為LaserScan。kQHednc

它指定了雷射的有效範圍、掃描點採樣的角度及每個角度的測量值。雷射雷達360度實時掃描,能實時測出障礙物的距離、形狀和實時變化。kQHednc

第二步就是把眼睛看到的數據轉化為地圖:kQHednc

kQHednc

ROS的gmapping把雷射雷達的/scan數據轉換為柵格map數據,其中黑色代表障礙物、白色代表空白區域,可以順利通行、灰色 :未知領域。隨著機器人的移動,雷射雷達可以在多個不同方位觀測同一個位置是否有障礙物,如果存在障礙物的閾值超過設置值是,就標定此處是存在障礙物;否則標定不存在障礙物。 把障礙物、空白區域和未知領域的尺寸用不同灰度表示出來,就是柵格地圖。便於下一步定位和導航。kQHednc

有時候會出現很直的牆,機器人卻無法直著行走,這時的問題可能就是機器人的輪子出現打滑等其他問題,而走歪了,這時繪製出的地圖也可能是歪的。這種情況可以通過加一個陀螺儀來避免這個情況。因為雷射雷達的特性,有時候遇到黑色或鏡面會導致測距不準。kQHednc

目前的解決方法就是不用雷射雷達,或者用雷射雷達和超聲波進行輔助處理。kQHednc

ROS的地圖是分多層的,我可以在不同高度放多臺雷射雷達來一起疊加,共同繪製一張地圖。地圖繪製結束之後,就可以進行定位和導航等工作。kQHednc

如何定位和導航?kQHednc

定位:其實是概率性的定位,而不是100%的精度。根據雷射雷達掃描周圍障礙物的形狀,與地圖的形狀做匹配,判斷機器人所在位置的概率。kQHednc

機器人的定位是否成功,與地圖特徵有很大關係,如果區域特徵明顯,那麼機器人就很容易判斷自己的位置。如果出現難以定位的問題,可能需要人給指定初始位置,或者加led來進行位置識別,或者其他的定位設備來協助定位。kQHednc

目前的視覺通過色彩或者光的技術越來越多。kQHednc

導航:全局路徑規劃+局部調整(動態避障)kQHednc

導航其實就是全局定位,首先根據現有地圖進行規劃,但是在運行過程中會進行局部的路線規劃。但是總體還是根據全局路徑來走。kQHednc

導航中工作量還很大,比如掃地機的路徑規劃和服務機器人的路徑規劃是不一樣的,掃地機器人可能要全覆蓋的有牆角的地圖,而服務機器人主要圍繞指定的路徑或者最短路徑來進行規劃,這部分是ROS工作量最大的一塊。kQHednc

路徑規劃根據不同應用場景變化比較大,但是ROS提供基礎的路徑規劃的開發包,在這個基礎上我們會做自己的路徑規劃。kQHednc

機器人描述和坐標系變換kQHednc

kQHednc

在導航時,哪些區域可以通過,取決於機器人形狀等信息,ROS通過URDF(UnifiedRobot Description Format) 就是描述機器人硬體尺寸布局,比如輪子的位置、底盤大小、雷射雷達安裝位置,這些都會影響到坐標系的轉換。kQHednc

坐標系遵循的前提是每個幀只能有一個父幀,再往上進行一些眼神或者關聯。kQHednc

雷射雷達的安裝位置直接影響/scan輸出數據。所以雷射雷達和機器人的相對位置是需要做坐標變換,才能把雷射雷達的數據轉化為機器人視角的數據。kQHednc

ROS的坐標系,最終歸結為三個標準框架,可以簡化許多常見的機器人問題:kQHednc

1)全局準確,但局部不連續的幀(’map」)kQHednc

2)全局不準確,但局部光滑框架(』odom」)kQHednc

3)機器人自身框架(』base_link」)kQHednc

多種傳感器(像雷射雷達、深度攝像頭和陀螺儀加速度計等)都可以計算base_link和odom的坐標關係,但由於「每個幀只能有一個父幀」,所以只能有一個節點(比如 robot_pose_ekf 融合多傳感器)發布base_link和odom的坐標關係。kQHednc

Base link自身的坐標系,因為不同元件裝在機器人上不同位置,都要對應到base link的坐標系中,因為所有的傳感器都是要通過機器人的視角來「看」。kQHednc

有些朋友問我,雷射雷達在建地圖的時候,小車移動後地圖就亂了,這是因為小車的底盤坐標系和雷射雷達的坐標系沒有標定準確。kQHednc

map和odom之間的關聯kQHednc

因為小車移動需要一個局部聯繫,比如小車在向前走,不停的累加,這是裡程計的作用,map起到全局的、不連續的作用,經過雷射雷達和map對應。kQHednc

如果要學習ROS的話,坐標系的變化是重要的點。坐標系的變換還有一個點,就是每個幀都只有一個父幀,有時候兩個坐標都和它有關聯的話,就是A和B關聯,B再和C關聯,而不是B/C都和A關聯。kQHednc

三個坐標幀的父子關係如下:kQHednc

map –> odom –> base_linkkQHednc

其實, map和odom都應該和base_link關聯,但為了遵守「每個幀只能有一個父幀」的原則,根據map和base_link 以及 odom->base_link的關係,計算出map與odom的坐標關係並發布。kQHednc

odom->base_link的坐標關係是由裡程計節點計算並發布的。kQHednc

map -> base_link的坐標關係是由定位節點計算出來,但並不發布,而是利用接收odom->base_link的坐標關係,計算出map->odom的坐標關係,然後發布。
只有裡程計的時候,沒有雷射雷達,也可以跑,但是要先根據預設地圖進行簡單避障。kQHednc

精彩問答kQHednc

Q:還有ROS的實時性有什麼改進進展嗎 ?kQHednc

A:實時改進要看ROS2.0的設計,其實ROS2.0的進展網上有公開。但是實際上他的進展離實際應用還有一定距離,至少今年下半年還達不到穩定,不過可以去研究下他的代碼,他對內存管理,線程管理,在實時性上有了很大改善。kQHednc

Q:vSLAM對內存和CPU要求頗高。實際工程中,李老師使用的是什麼硬體配置?可以做多大的地圖呢? kQHednc

A:確實如此,目前來說我們還是使用雷射雷達和傳感器輔助來進行,這個和地圖大小沒有太大關係,主要是與地形障礙物複雜程度有關。kQHednc

kQHednc

註:分享嘉賓李金榜,EAI科技創始人兼CEO,畢業於北京理工大學,碩士學位。 曾在網易、雪球、騰訊技術部有多年linux底層技術研發經驗。2015年聯合創立EAI科技,負責SLAM算法研發及相關定位導航軟體產品開發。EAI科技,專注機器人移動,提供消費級高性能雷射雷達、slam算法和機器人移動平臺。kQHednc

【轉載請聯繫授權,並保留出處和作者,不得刪減內容。】kQHednc

kQHednc

相關焦點

  • 機器人課程系列:如何安裝ROS(Robot Operating System,機器人操作...
    維基上ROS的定義如下,ROS(機器人作業系統,RobotOperating System),是專為機器人軟體開發所設計出來的一套電腦作業系統架構。之前的課程裡分享了很多機器人的專案,很多夥伴也都有做各種不同的機器人,例如:雙足機器人、教育型機器人或是Arduino的關節型機器人。這些機器人有些沒有作業系統,且硬體設計都不一樣,如果在新的項目只是想用之前設計的一部分的話,代表要重複製作,才有辦法使用到別人早就做過的東西。
  • 一起做ROS-DEMO:控制移動機器人自主導航並停到標籤(AR Marker)之前
    ,我們看到了這樣一個場景:可以看到機器人在檢測到物體的標籤後,自主導航至物體之前,並對標籤物體進行抓取。中強大的TF樹功能,我們只需要將機器人的模型配置好就可以使用其中的TF轉換,自動將某個想要的坐標從一個坐標系轉換到另一個坐標系下:先看一下效果:圖中的紅色方塊即為識別到的標籤坐標,地上的紅色大箭頭即為經過轉換的,想要機器人移動到的目標點坐標,箭頭的起始位目標點位置,箭頭的朝向為機器人停的朝向。
  • ROS(機器人作業系統)筆記
    moveit 機械臂開發ros_bag 記錄amcl 導航rviz 可視化平臺gezebo 機器人仿真tf 坐標轉換move_base 路徑規劃roboware ROS IDEslam 三維建圖PR2 最早的ROS機器人16.04 穩定ubuntu版本
  • Ubuntu18安裝ros機器人避坑指南,讓你輕鬆安裝成功
    linux系統安裝軟體一直是眾多初學者一個頭疼的問題,有時候運氣好很容易安裝好,運氣差點可能會讓你崩潰甚至到發瘋[看],今天我就以圖文的形式給大家講講如何在ubuntu18安裝ros機器人系統設置好系統軟體更新源我再來設置ROS軟體源(註:
  • 利用ROS和Web,讓機器人更智能
    對於機器人設計廠商來講,他們在極力尋求更好的軟硬體解決方案,所以有人自然想到將ROS和Web相結合從而得到更好的機器人解決方案。或許有人會問:為什麼要在機器人技術中使用Node.js 和Web?它們各自有什麼特點?
  • 如何利用ROS MoveIt快速搭建機器人運動規劃平臺?
    主要是因為機器人運動規劃涉及太多基礎內容,如果跳過不講就會變成新坑;一時半會又沒法講完。 所以,這次就從初學者如何利用MoveIt快速搭建機器人運動規劃平臺來講吧,先展示Big Picture,其他細節內容以後有空再慢慢填。但可能會坑的地方我會用(坑)標註出來。
  • 如何利用ROSMoveIt快速搭建機器人運動規劃平臺?
    主要是因為機器人運動規劃涉及太多基礎內容,如果跳過不講就會變成新坑;一時半會又沒法講完。所以,這次就從初學者如何利用MoveIt快速搭建機器人運動規劃平臺來講吧,先展示Big Picture,其他細節內容以後有空再慢慢填。但可能會坑的地方我會用(坑)標註出來。
  • 基於Arduino和ROS來創建更智能的機器人系統
    基於Arduino和ROS來創建更智能的機器人系統 風箏 發表於 2021-01-09 11:30:10 Arduino開發板經常用於製作一些小型的機器人,並具有簡單的邏輯定義控制。
  • ubuntu ros 雷射雷達
    了解完這款高品質建圖雷達後,我們再來看看,SLAMTEC Mapper雷射建圖雷達結合ROS又該如何獲取地圖及定位數據,並將其用於ROS的其他組件中進行機器人開發和應用。 硬體需求: 為使用ros sdk,您需要一臺SLAMTEC Mapper設備或者基於 SLAMWARE導航定位系統的移動機器人,開啟並配置合適的IP位址。slamware_ros_sdk_server_node節點啟動後將嘗試連接該機器人。
  • cartographer簡介及其在ROS下的安裝配置
    作者利用現代雷射雷達的高更新率和低距離測量噪聲,通過掃描匹配實時地對機器人運動進行估計。所以當只有低更新率的雷射傳感器時,即便測距估計很精確,對該系統都會出現一定的問題。Gmapping是一種基於粒子濾波的雷射SLAM算法,它已經集成在ROS中,是移動機器人中使用最多的SLAM算法。基於粒子濾波的算法用許多加權粒子表示路徑的後驗概率,每個粒子都給出一個重要性因子。
  • 機器人作業系統從ROS升級到ROS2 部署不再是難題
    ROS建立強大生態系統,ROS2從原型設計邁向部署  不管是開源軟體,還是開源硬體,一經推出在全球都受到開發者的熱捧,這些產品對科技的發展起到了巨大的推動作用。在機器人領域,開源作業系統ROS2如何驅動該領域的增長?Greg表示,「雖然ROS被稱為機器人作業系統,但實際上它並不是像Linux和Windows真正意義上的作業系統。
  • 如何在Gazebo裡仿真ROS機器人的SLAM建圖和導航
    在這個仿真中,我們將使用Gmapping算法,需要使用USB手柄來控制機器人在場景中進行移動,遍歷所有活動區域,建立環境地圖。將手柄接到電腦USB上之後,通過如下指令啟動SLAM建圖的仿真場景啟動後,會彈出Gazebo窗口,裡面顯示的是一個模擬RoboCup@Home比賽環境的場景。
  • 乾貨:機器人開源作業系統ROS
    例如,你想聯合攝像頭的數據和雷達的數據,你必須知道傳感器位於什麼地方,具有共同的參考系,特別是針對那些具有很多活動部件的類人機器人。在ROS中,我們通過 tf (變換)庫來解決這個問題,它可以持續追蹤機器人系統每個部件的位置。
  • OpenVINO + ROS 加速機器人應用
    而ROS-industrial的開發是為了能夠更好地支持工業類機器人的發展,比如多軸工業機械臂。這一分支以Consortium的方式組織運營。最後,ROS 2.0,則是在社區在2014年推出的新一代機器人作業系統的概念,其目的是為了使得機器人作業系統具有更好的實時性以及更好的安全性。
  • 除了ROS 機器人自主定位導航還能怎麼做?
    因此,除了官方提供的功能包之外,ROS還聚合了全世界開發者實現的大量開源功能包,如思嵐科技(SLAMTEC)就發布了針對其自主研發的雷射雷達RPLIDAR的ROS功能包rplidar_ros。這些開源功能包與ROS一起構成了強大的開源生態環境。
  • 2019年全球十大基於ROS的機器人公司
    該公司的機器人基於ROS,從第1分鐘開始就可以用ROS編程。這就是為什麼這些機器人被用於創建用於採礦、調查、檢查、農業和材料處理的第三方應用程式。Clearpath最著名的一些機器人包括豺狼UGV,是可以學習如何編程的。其他包括哈士奇UGV, Heron USV,以及最近推出的工業環境奧託機器人系列。2.
  • 除了ROS ,機器人自主定位導航還能怎麼做?
    因此,除了官方提供的功能包之外,ROS還聚合了全世界開發者實現的大量開源功能包,如思嵐科技(SLAMTEC)就發布了針對其自主研發的雷射雷達RPLIDAR的ROS功能包rplidar_ros。這些開源功能包與ROS一起構成了強大的開源生態環境。
  • 機器人應用部署——ROS簡介
    「機器人」一詞起源於捷克,本意是指「助理」或者「工人」。近100年來,機器人活躍在各行各業,比如工業裝配、食品準備、家庭援助,另外還有各種陸地、海上和空中自主車輛,而機器人技術也在得到不斷的完善。機器人產生的原因基本上都是為了自動執行環境骯髒、乏味、危險或困難的任務。這些機器人擁有「智慧的大腦」,可以獨立工作,或者只需要最低限度的人為幹預。
  • 基於Ubuntu安裝ROS 系統(melodic版本)
    ROS (Robot Operating System, 機器人作業系統) 提供一系列程序庫和工具以幫助軟體開發者創建機器人應用軟體。它提供了硬體抽象、設備驅動、函數庫、可視化工具、消息傳遞和軟體包管理等諸多功能。
  • 如何利用SRC核心控制器來打造自己的專屬移動機器人
    打開APP 如何利用SRC核心控制器來打造自己的專屬移動機器人 仙知機器人 發表於 2020-01-31 10:40:00 (文章來源:仙知機器人) 你覺得打造移動機器人難嗎?