近幾年,機器人和人工智能繁榮發(fā)展,曾經(jīng)運行在實驗室的機器人已經(jīng)逐漸走入千家萬戶的生活。作為機器人開發(fā)利器的ROS也得到了非常廣泛的應用,成為機器人領域的普遍標準。 ROS原本針對科研領域的PR2機器人開發(fā),這種大繁榮的景象遠遠超過ROS的最初目標,也使得ROS的缺陷在廣泛應用的同時暴露無遺:
正是由于ROS1存在種種問題,才促使ROS2.0的出現(xiàn)。ROS2.0雖然從根本上解決了ROS1.0的許多問題,但是卻無法短時間替代ROS1.0在龐大生態(tài)系統(tǒng)中的關鍵位置,只能借助越來越多的關鍵開發(fā)者逐漸推進。所以從目前ROS2.0的情況來看,近幾年ROS1.0的應用還會是主流。
ROS1.0能否產(chǎn)品化?
那么目前的ROS1.0到底能不能在機器人的產(chǎn)品化過程中應用?如果可以,又該如何應用于機器人產(chǎn)品的開發(fā)? 筆者不才,使用ROS進行了兩年的機器人產(chǎn)品開發(fā),過程當中也總結(jié)了一些經(jīng)驗,就簡單談一談對于這個問題的看法。 在談ROS的產(chǎn)品化前,我們需要明確一個問題,ROS到底是什么,可以參考我之前的文章: "Powering the world’s robots" 的ROS是什么??
ROS的核心雖然是通信機制,但是如今的ROS已經(jīng)遠遠超過通信機制的范疇??傮w來講,ROS包含四個部分:通信機制、開發(fā)工具、應用功能、生態(tài)系統(tǒng)。 所以在說ROS產(chǎn)品化的時候,我們需要針對這四個方面進行討論。由于內(nèi)容較多,這個主題會分為幾篇文章分別討論。 首先來看第一個部分:
通信機制
點對點的分布式通信機制是ROS的核心,使用了基于TCP/IP的通信方式,實現(xiàn)模塊間點對點的松耦合連接,可以執(zhí)行若干種類型的通信,包括基于話題(Topic)的異步數(shù)據(jù)流通信,基于服務(Service)的同步數(shù)據(jù)流通信,還有參數(shù)服務器上的數(shù)據(jù)存儲等。
但是這種通信機制的實時性和穩(wěn)定性不好,而且強依賴于中心節(jié)點ROS Master。比如我們在機器人產(chǎn)品開發(fā)的過程中,就遇到無數(shù)類似下邊的問題:
這樣看來,好像ROS的核心部分在機器人產(chǎn)品中完全沒有可用性呀!如何去突破這個瓶頸呢?先來看看部分開發(fā)者的改良方法。 ▼ 首先聊聊百度。
自從百度All in人工智能之后,無人駕駛汽車平臺Apollo就被推上了風口浪尖,甚至還登上了2018春晚的舞臺。在這個吸睛無數(shù)的Apollo平臺背后,就隱藏著ROS的身影。 Apollo平臺基于ROS開發(fā),但是對通信機制部分進行了眾多改變,有興趣的小伙伴可以看Apollo改良之后的ROS: https://github.com/ApolloAuto/apollo-platform 或者參考這篇解讀: 干貨曝光(二)|資深架構(gòu)師首次解密Apollo ROS有何不同!? 總結(jié)而言,百度對ROS的優(yōu)化有以下三點:(咋看上去,這些優(yōu)化有點像ROS 2.0干的那些事兒)
1. 去中心話,也就是干掉ROS Master,這部分使用了DDS技術; DDS雖然提供的也是發(fā)布/訂閱模型的通信機制,但商用版本可以達到軍工標準,國際上有幾家大公司也在推進DDS在ROS 2.0中的應用。
2. 使用共享內(nèi)存的方法,優(yōu)化大數(shù)據(jù)傳輸?shù)钠款i; 共享內(nèi)存也是ROS2.0中時間敏感型數(shù)據(jù)通信的方法,吞吐量和傳輸速度肯定可以得到很大程度的優(yōu)化,同時占用的CPU資源也比較少。
3. 使用Protobuf優(yōu)化數(shù)據(jù)格式的兼容性。 Protobuf是google開源的一種結(jié)構(gòu)化數(shù)據(jù)存儲格式,百度拿它取代了ROS中的Message,可以向后兼容數(shù)據(jù)協(xié)議的擴展。 無人駕駛汽車的穩(wěn)定性是一個性命攸關的問題,百度敢對ROS進行大刀闊斧的優(yōu)化,也正說明了ROS的行業(yè)認可度和強大生命力。 ▼ 再來聊聊研究者對ROS中Master宕機、安全性和實時性問題的解決方案。 在ROScon2017上,來自USA Northeastern University的研究者介紹了一個名為“DMCTP”的包,當ROS Master崩潰時,DMCTP會緩存所有狀態(tài)和數(shù)據(jù),并且重啟Master完成系統(tǒng)恢復。
同在ROScon2017上,另一群研究者提出了“SROS”的概念,也就是為ROS附加一系列安全增強策略:安全傳輸層、訪問控制層、進程配置層等。
在ROScon2016上,針對實時性問題,還有研究者為ROS增加了實時性擴展,稱為——RTROS。 對這幾個研究感興趣的小伙伴可以直接看ROScon歷屆的分享視頻和ppt資料: ▼ 基于ROS的機器人產(chǎn)品有不少已經(jīng)投入使用,除上邊提到的百度無人駕駛汽車,還有另外一個開源無人駕駛汽車平臺Autoware、NASA部署在國際空間站的Robonaut 2機器人等,目前很多大公司的開源部門也在推進ROS的產(chǎn)品化應用。 綜觀這些機器人產(chǎn)品和平臺,都可以說是基于ROS開發(fā)的,但是在ROS通信機制部分,也都進行大量的優(yōu)化和改良。 這種做法對于創(chuàng)業(yè)型的公司來講,如果不是以ROS的改良作為產(chǎn)品的話,往往都不愿意去干這件事情,費時費力。那么對于小公司來講,如果不想去動ROS的核心通信部分,應該怎么做呢? ▼ 這就要說回筆者在創(chuàng)業(yè)過程中的實踐了。大概有兩種方法:
第一種:自己不愿意做,就用別人做好的唄; ROS是一個龐大的開源社區(qū),上邊提到的那些ROS優(yōu)化,基本上都可以在社區(qū)中找到開源實現(xiàn),或是找其他公司做好的成熟產(chǎn)品,站在別人的肩膀上繼續(xù)前進。 但是這樣也有問題,一方面,別人實現(xiàn)的功能不一定完全符合自己的需求,另外一方面,這些實現(xiàn)的相關文檔不多,有問題還得從源碼上解決。 那就請使用第二種方法!
第二種:自己不愿意做,也不想基于其他平臺做,那就別強求了。 這就是筆者創(chuàng)業(yè)公司采用的策略——放棄ROS的核心通信機制部分。這句話說來容易,做起來難!畢竟機器人系統(tǒng)還是需要通信功能的,于是我們重新設計了一個。。。 (四十五)—— ROS產(chǎn)品化探索之開發(fā)工具篇上篇講到,在通信機制部分,我們完全舍棄了ROS基于話題和服務的通信機制,自己又實現(xiàn)了一套通信系統(tǒng),具體的實現(xiàn)主要基于Linux系統(tǒng)的各種通信方式,此處暫且不表,這篇我們來看下ROS另外一個重要部分——開發(fā)工具,如何在機器人產(chǎn)品化過程中應用。 ROS相關的開發(fā)工具有很多,大致可以分為以下幾種類型:
就這三種類型的工具,我們來具體分析。
一、ROS原生工具ROS的原生工具非常豐富,可以參考wiki上的說明: http://wiki./Tools 無論是可視化的qt工具還是命令行工具,都頻繁用于ROS開發(fā),這些工具和ROS系統(tǒng)的依賴性最強,想要實現(xiàn)產(chǎn)品化并不容易。
▼ rviz首先來看最重要的一個工具——rviz。 rviz是ROS中的一個三維可視化平臺。為什么說它是ROS最重要的一個工具呢?因為rviz可以把不直觀的數(shù)據(jù)統(tǒng)統(tǒng)可視化地顯示出來,比如圖像、地圖、模型、路徑等等,這些還只是rviz官方提供的顯示插件。 rviz最厲害的地方是它的擴展性,可以通過插件的形式無限擴展,打造自己的人機交互界面。比如上圖是ROScon2017開場演講的Autoware項目,他們將rviz用于無人駕駛汽車的上位機平臺。
上圖是我們自己項目開發(fā)中設計的rviz插件,作為機器人控制的上位機。 rviz原生的顯示組件配合定制化開發(fā)的插件,功能強大,開發(fā)迅速,簡直不能再好用了! OK!吹了半天rviz的強大,也得說說它的問題! rviz最大的問題就是對ROS核心通信機制的強依賴,系統(tǒng)中必須要運行ROS Master,顯示的數(shù)據(jù)需要通過話題發(fā)布,運行不穩(wěn)定等等。。。很多時候在啟動rviz的過程中,總是伴隨著警告和錯誤,一次啟動失敗就再來一次,最多三四次還是可以啟動成功的。。。 基于上邊這些問題,rviz基本不可能直接拿來產(chǎn)品化,作為開發(fā)過程中的工具還是非常棒的。不過,rviz的架構(gòu)設計還值得參考,我曾“企圖”利用rviz的源碼重新開發(fā)一個類似的界面工具,擺脫對ROS的依賴,不過最終還是因為沒有時間而放棄了,有興趣的小伙伴可以試一下,記得告訴我結(jié)果哦!
▼ 命令行工具和rqt工具ROS提供的命令行工具非常豐富,比如rostopic、rosservice、rosnode、rosparam等等。雖然沒有圖形化工具那么直觀,但是很多時候更加簡潔明快。 ROS還提供了一系列輕量化的可視化工具,比如:
顯示計算圖的rqt_graph
顯示數(shù)據(jù)包的rqt_bag
繪制數(shù)據(jù)曲線的rqt_plot
這些工具的問題和rviz類似,或者說ROS的原生工具都有這樣的問題,畢竟是“直系血親”,和ROS核心部分緊密相連,同樣繼承了ROS通信機制部分的問題。 所以,如果想在機器人產(chǎn)品中為用戶提供相關的工具,需要慎重考慮一下面向的對象,和對穩(wěn)定性的需求。
二、編譯和測試工具第二個部分是ROS提供的編譯和測試工具。 ▼ 編譯系統(tǒng)——catkinROS的編譯系統(tǒng)基于CMake,針對ROS本身的特點進行了包裝,可以比較方便的管理包之間的依賴關系,而且ROS功能包可以實現(xiàn)系統(tǒng)模塊化、松耦合的管理機制,編譯開發(fā)版和發(fā)布版都沒有問題。 功能包或編譯系統(tǒng)和ROS的核心通信機制沒有直接關系,所以代碼里邊沒有任何ROS相關的代碼,一樣可以使用。在機器人開發(fā)過程中,我們項目中的所有代碼都使用ROS包管理、catkin編譯。 這種方案還有一個很大的好處,就是很容易在CMakeLists中鏈接ROS的庫,比如tf庫。tf庫是坐標變換的數(shù)學處理庫,而我們常用的tf功能包是在tf庫的基礎上加入了ROS封裝,所以兩者是有區(qū)別的。借助tf庫可以幫助我們實現(xiàn)坐標變換,不需要再重復造這個輪子。
▼ 單元測試——gtestROS的單元測試系統(tǒng)基于谷歌的gtest,結(jié)合catkin編譯系統(tǒng),非常好用。我們項目所有的單元測試,都是通過這種方式完成,相關的語法和gtest一樣,可以參考: http://wiki./gtest 可以說,ROS的編譯和測試工具在產(chǎn)品化開發(fā)過程中可以直接使用,而且包管理機制、單元測試方法讓整個軟件系統(tǒng)的框架清晰明了、分工明確。
三、第三方工具ROS的迅速崛起,也不斷吸收更多第三方工具的加入,比如Gazebo、Matlab、Qt Creator、SolidWorks等。 ▼ 機器人仿真是機器人開發(fā)過程中非常重要的一個環(huán)節(jié),可以針對機器人模型、應用功能、算法處理、環(huán)境狀態(tài)等方面做仿真。Gazebo是ROS中主要的仿真工具,現(xiàn)在已經(jīng)獨立維護,可以通過ROS接口接入ROS環(huán)境,所以無論我們是否使用ROS,都可以使用Gazebo,從開發(fā)到產(chǎn)品的過渡相對平滑。
▼ Matlab是數(shù)據(jù)處理方面的強大工具,2013之后的機器人工具箱也提供了對ROS的支持,實現(xiàn)了ROS核心通信的大部分功能,可以運行ROS Master和節(jié)點,并且發(fā)布話題消息。這為ROS開發(fā)提供了一個強大的數(shù)據(jù)演算后臺,也可以利用matlab的可視化編程功能,實現(xiàn)人機界面的開發(fā)。
▼ Qt Creator、SolidWorks等工具,都是以插件的形式提供對ROS的支持,從而實現(xiàn)與ROS相關的功能。 隨著ROS的發(fā)展,會有越來越多的第三方工具加入ROS的生態(tài)環(huán)境,這些“兵器”也必定會直接帶來生產(chǎn)效率的提高,促進機器人產(chǎn)品化的進程! 本篇針對ROS相關的部分工具進行了分析,當然還有很多工具沒有涵蓋進來。工具的根本目的是提高我們的開發(fā)效率,每一種工具都有其擅長之地,也有其不足之處,所以在我們設計、開發(fā)機器人產(chǎn)品的過程中,可以綜合考慮,發(fā)揮每一個開發(fā)工具的優(yōu)勢。 (四十六)—— ROS產(chǎn)品化探索之應用功能篇上篇我們講到ROS中的開發(fā)工具,可以提高我們的開發(fā)效率,每一種工具都有其擅長之地,也有其不足之處,所以在設計、開發(fā)機器人產(chǎn)品的過程中,可以綜合考慮,發(fā)揮每一個開發(fā)工具的優(yōu)勢。本篇我們來分析一下ROS中豐富的應用功能。 說起ROS中的應用功能,可就非常龐雜了,涵蓋各種各樣的功能包,簡單做一個如下的分類:
就這幾種應用功能,我們來具體分析一下:
一、底層驅(qū)動機器人開發(fā)是一個軟硬件結(jié)合的領域,常常需要涉及很多傳感器、執(zhí)行器的驅(qū)動。常用的硬件一般都可以在ROS中找到匹配的驅(qū)動功能包,例如傳感器可以參考wiki上的這個列表: 針對常用的USB攝像頭,ROS中有usb_cam、uvc_camera等功能類似的驅(qū)動包,運行還算比較穩(wěn)定。我們用usb_cam驅(qū)動1080P的攝像頭做識別,有的時候連續(xù)運行好幾天都不會出問題,不過偶爾也會莫名其妙的掛掉。 一些伺服的驅(qū)動在ROS當中也可以找到,比如dynamixel的伺服,Kungfu Arm前端的靈巧手使用的就是dynamixel,相關的功能包是dynamixel_motor。用ROS驅(qū)動起來確實簡單易用,但是運行時間長了,還是會有問題。有一次給Kungfu Arm錄像,手就有點緊張了,手指不聽使喚,把開水灑了一桌子,驅(qū)動也沒有任何報錯信息,重啟之后再也沒有重現(xiàn)類似的現(xiàn)象。 ROS支持的很多機器人(PR2、KUKA、shadow hand等)都使用到了一種實時工業(yè)以太網(wǎng)總線——EtherCAT。EtherCAT本身就有開源的協(xié)議實現(xiàn)方式,ROS將開源庫集成為功能包——ethercat_soem,可以在很多機器人的軟件源中看到。我們在項目的初期也使用過這種方式,驅(qū)動是沒有問題,但是穩(wěn)定性、實時性、功能方面,都還存在一些問題。 就個人感受而言,ROS中底層驅(qū)動相關的功能包,大部分都是對已有開源驅(qū)動的集成封裝,添加統(tǒng)一的ROS接口,所以穩(wěn)定性主要和原本的驅(qū)動相關,同時還要考慮ROS通信機制的影響。
二、上層功能上層功能是ROS最為擅長的一個領域,可以提供眾多機器人的應用功能:SLAM、導航、定位、圖像處理、機械臂控制等等,這個部分詳細展開夠說三天三夜了。我就針對兩個部分談一下自己的看法。
1. 機器人導航現(xiàn)在很多學?;蛘吖咀鰴C器人導航的時候,都會基于ROS開發(fā)。 ROS的這套導航框架確實好用,很快就可以在機器人上把功能跑起來,而且基本不會涉及太多編碼,但是還沒來得及高興,問題就出現(xiàn)了:現(xiàn)實和理想還是有很大差距的,功能實現(xiàn)的效果可能遠遠達不到我們的需求,更別提產(chǎn)品化應用了。 然后就是調(diào)整功能節(jié)點的各種參數(shù),雖然可以有所改善,但是跟最終的應用還是會有很大差距。使用ROS快速開發(fā)后的興奮,在這個時候就被潑了一盆涼水。 ROS中的功能包一般都是一些通用的功能,不太可能完全適配我們自己的機器人,所以產(chǎn)生各種問題也是情理之中。解決的辦法就是:我們不能太依賴ROS中的資源,核心問題還是需要自己解決,或者針對自己的機器人開發(fā)相關的功能,或者優(yōu)化已有的ROS資源。 在Kungfu Arm的開發(fā)過程中,我們只用了半年時間就利用ROS把機器人功能原型搭建起來了,但是問題多多,接下來的優(yōu)化開發(fā)用了一年多的時間,現(xiàn)在還在持續(xù)的迭代。
2. MoveIt機械臂控制MoveIt是ROS當中針對機械臂控制的運動規(guī)劃平臺,集成了機械臂運動規(guī)劃、避障規(guī)劃、運動學計算等功能模塊。和ROS中的導航功能差不多,用moveit搭建一個簡單的機械臂控制系統(tǒng)不難,真的要去實現(xiàn)一個產(chǎn)品化的控制系統(tǒng)就復雜了。 這是我們基于ROS開發(fā)的工業(yè)機器人控制系統(tǒng),不僅把ROS核心通信機制拋離了,而且還針對moveit、ompl、fastik等功能包進行了代碼級的優(yōu)化和修改,大家可以參考專門介紹這款機器人的文章: 總而言之,ROS中豐富的上層應用資源,對機器人產(chǎn)品化的實現(xiàn)還是有很大幫助的,一方面可以利用這些功能包快速完成原型開發(fā),另一方面也可以從這些源碼資源中獲得靈感。
三、控制模塊
豐富的上層資源最終還是要落實到機器人上,在機器人控制部分,ROS提供了一個控制框架——ros_control,同時還有很多常用的控制器——ros_controllers。 ros_control是ROS為開發(fā)者提供的機器人控制中間件,包含一系列控制器接口、傳動裝置接口、硬件接口、控制器工具箱等等,可以幫助機器人應用功能包快速落地,提高開發(fā)效率。 針對不同類型的機器人(移動機器人、機械臂等),ros_control可以提供多種類型的控制器(controller),但是這些控制器的接口各不相同。 為了提高代碼的復用率,ros_control還提供一個硬件抽象層,負責機器人硬件資源的管理,而controller從抽象層請求資源即可,并不直接接觸硬件。 1. 控制器管理器(Controller Manager) 每個機器人可能有多個控制器(controller),所以這里有一個控制器管理器的概念,提供一種通用的接口來管理不同的控制器。控制器管理器的輸入就是ROS上層應用功能包的輸出。 2. 控制器(Controller) 控制器可以完成每個joint的控制,讀取硬件資源接口中的狀態(tài),再發(fā)布控制命令,并且提供PID控制器。 3. 硬件資源(Hardware Rescource) 為上下兩層提供硬件資源的接口。 4. 機器人硬件抽象(RobotHW) 機器人硬件抽象和硬件資源直接打交道,通過write和read方法完成硬件操作,這一層也包含關節(jié)約束、力矩轉(zhuǎn)換、狀態(tài)轉(zhuǎn)換等功能。 5. 真實機器人(Real Robot) 真實機器人上也需要有自己的嵌入式控制器,將接收到命令反映到執(zhí)行器上,比如接收到旋轉(zhuǎn)90度的命令后,就需要讓執(zhí)行器快速、穩(wěn)定的旋轉(zhuǎn)90度。 關于如何使用ros_control控制一款實體機器人,大家可以參考hans-robot發(fā)布的一款cute_robot: https://github.com/hans-robot/cute_robot 應用功能中的控制模塊提供了不少控制器:位置控制器、軌跡控制器、力控制器、速度控制器等等,這些控制器的框架設計和代碼實現(xiàn),都可以用于自己的機器人開發(fā)中。
四、常用組件應用功能中還有一些常用模塊,這里我把他們統(tǒng)稱為常用組件,比如TF、URDF、Message等。 TF是ROS中非常重要的一個部分,可以根據(jù)機器人系統(tǒng)中的坐標系創(chuàng)建一棵TF樹,然后幫助開發(fā)者完成坐標系之間的變換。在ROS系統(tǒng)中,TF是通過廣播和監(jiān)聽的方式操作的,這種方法在復雜機器人系統(tǒng)中會產(chǎn)生很多冗余信息,效率不高。 刨除上層的廣播和監(jiān)聽封裝,TF的內(nèi)核其實與ROS并沒有關系,而是一個完成坐標運算的數(shù)學庫。在我們的項目開發(fā)中,可以直接鏈接TF的底層數(shù)學庫,幫助完成需要的坐標變換,Kungfu Arm的正向運動學就使用到了TF數(shù)學庫。 URDF是ROS中實現(xiàn)機器人建模的重要工具,很多上層功能的算法實現(xiàn),都依賴于機器人的URDF模型,所以如果直接移植ROS中的功能包源碼,URDF模型部分還是需要維護的。 ROS為機器人提供了一個統(tǒng)一的平臺,很重要的一個部分就是定義了一系列標準的接口,這些接口的定義與ROS系統(tǒng)的通信機制沒有關系,完全可以在程序中調(diào)用,這樣不僅免去了重復定義的問題,還可以保持和ROS統(tǒng)一的接口。 本篇淺談了ROS應用功能在機器人產(chǎn)品化開發(fā)當中的應用,這是ROS中資源最為豐富的一個部分,不僅可以幫助我們快速搭建功能原型,驗證設計上的問題,同時還可以借助開源代碼,助力后續(xù)的功能開發(fā),絕對是機器人開發(fā)的優(yōu)質(zhì)資源。 (四十七)—— ROS產(chǎn)品化探索之生態(tài)系統(tǒng)篇誕生于2007年的ROS,發(fā)展速度之迅猛超出了所有人的預料,已經(jīng)成為一個機器人領域的生態(tài)系統(tǒng),可以提供機器人相關的全方位技術,從硬件到軟件,從框架到功能,從驅(qū)動到應用。。。 前邊三篇已經(jīng)分別從通信機制、開發(fā)工具、應用功能這三個方面淺談了筆者對ROS產(chǎn)品化探索的一點總結(jié),本篇就來聊聊最后一個部分——從生態(tài)系統(tǒng)的角度來看,ROS可以為機器人產(chǎn)品化提供哪些思路。 什么是生態(tài)系統(tǒng)? 維基百科的解釋是:生態(tài)系統(tǒng)(Ecosystem)是指在一個特定環(huán)境內(nèi),相互作用的所有生物和此環(huán)境的統(tǒng)稱。 ROS提供了一個龐大的開源社區(qū),為ROS生態(tài)系統(tǒng)提供了基礎環(huán)境,眾多機器人的基礎工具和應用功能不斷融入這個系統(tǒng),并且不斷吸收第三方開源軟件的精華,同時得到全球范圍內(nèi)眾多開發(fā)者的支持,系統(tǒng)中的各部分協(xié)調(diào)統(tǒng)一、相互促進、共同成長,成為一個整體。 這個ROS生態(tài)系統(tǒng)應該是目前最大的機器人知識庫了,在機器人產(chǎn)品化開發(fā)中,也必將成為一個重要的資源池。
一、機器人資源
目前國內(nèi)外常用的機器人平臺大部分都已經(jīng)支持ROS系統(tǒng),可以在wiki上查找: http://robots./ 就算wiki上找不到的,基本也可以在github上找到其他開發(fā)者的分享。如果加上愛好者自己設計、實現(xiàn)的機器人,那就更加數(shù)不勝數(shù)了。 這些機器人資源對我們有什么用呢? 1. 機器人硬件設計參考ROS中的機器人資源都是開源的,包括機器人的模型文件。如果我們需要做機器人設計,完全可以參考這些開源的機器人模型,畢竟包含了不少知名的機器人平臺。 2. 輔助機器人原型搭建使用ROS中已有的功能包,我們可以在自己的機器人上快速搭建功能原型,驗證機器人設計中的問題。 3. 基于應用功能包的二次開發(fā)ROS中的功能包非常豐富,一定可以找到與我們研究方向相關的應用功能,雖然不太可能直接應用在產(chǎn)品開發(fā)中,但還是可以減少類似重復造輪子的工作。 4. 算法驗證如果我們是算法工程師,手上又沒有現(xiàn)成的機器人平臺,那么使用ROS中的機器人可以隨便挑隨便選,放在物理仿真環(huán)境中,想怎么用怎么用,還分文不要。 5. 學習機器人系統(tǒng)無論我們是機器人方向剛?cè)腴T的初學者,還是資深工程師,都不可能掌握機器人方方面面的知識,那么借助ROS學習更多機器人相關的技能,一定可以事半功倍。
二、功能框架設計一個完善的機器人系統(tǒng)并不是一件簡單的事情,借用Python的一句名言:人生苦短,我用ROS。ROS中豐富的機器人框架,一定可以給你一些設計、實現(xiàn)上的靈感: 1. 機器人通信框架ROS1的通信機制部分在機器人產(chǎn)品化中存在很多問題,但并不代表這種通信框架是不可用的,如果我們設計類似的通信功能,一樣可以參考這個模型。 如果你不喜歡這種“中央集權(quán)”的通信模型,也可以看一下ROS2的通信模型。 這些通信模型的底層實現(xiàn)是開源透明的,真要拿來二次開發(fā)實現(xiàn)商業(yè)化,也不是沒有可能。 2. 機器人導航框架這個框架我們在上一篇已經(jīng)說過,這里就不多說了,誰用誰知道。 3. ROS-I框架工業(yè)機器人是機器人中非常重要的一個部分,在工業(yè)領域應用廣泛而且成熟。ROS迅猛發(fā)展的過程中,也不斷滲入到工業(yè)領域,從而產(chǎn)生了一個新的分支——ROS-Industrial(ROS -I)。 工業(yè)機器人的品牌眾多,接口也各不統(tǒng)一,ROS-I框架為這些機器人提供了一個統(tǒng)一的控制平臺,可以將ROS社區(qū)中的眾多資源應用到生產(chǎn)環(huán)境中,或許會成為ROS最快落地的一個領域。 4. ros_control框架硬件平臺千差萬別,如何將上層應用快速適配到不同的機器人硬件平臺上,也是軟件開發(fā)工程師頭疼的一個問題,那就參考一下ros_control框架吧,仿真控制與實物控制輕松切換,類似于linux系統(tǒng)底層write、read機制一般的統(tǒng)一接口,可以幫助我們解決不少麻煩。 ROS中還有很多功能框架,都是全球范圍內(nèi)頂尖開發(fā)者的知識結(jié)晶,媽媽再也不用擔心我不會機器人設計了。 三、機器人前沿科技機器人絕對是走在當今科技最前沿的一個領域,更新?lián)Q代也異常迅速,所以我們不僅要掌握機器人基礎理論和技術,還要時刻關心前沿動態(tài)。ROS在機器人領域的地位越來越高,也是我們窺看前沿科技的一個窗口。 1. 機器人前沿比如這款“百萬級”的仿生手。 比如這款“不會傷人”的KUKA LWR iiwa。 再比如這款“機器僧人”Pepper。 2. 學術前沿每年機器人頂級期刊和會議上的論文,很多都是基于ROS實現(xiàn)的,部分論文還會把成果和源碼在ROS社區(qū)中分享。很多大公司或大牛也經(jīng)常會把一些機器人算法在ROS社區(qū)分享。這就為我們接觸學術前沿提供了機會,也可以從中汲取不少新的靈感和知識。 比如2016年Google在ROS社區(qū)中開源了一種SLAM實現(xiàn)算法——cartographer,同時也分享了ICRA會議上的相關論文: https://research.google.com/pubs/pub45466.html 再比如基于ROS實現(xiàn)的無人駕駛平臺: http://www./news/2017/06/simulated-car-demo.html 當然,也少不了當今熱門的人工智能與ROS的結(jié)合: http://www./machine-learning-openai-gym-ros-development-studio-2/ 此外,很多基于ROS實現(xiàn)的論文都可以在這里找到: http://wiki./Papers ROS的生態(tài)系統(tǒng)在機器人領域保羅萬象,還有更多資源可以讓我們隨意使用,無論是提高個人技能,還是進行商業(yè)開發(fā),都可以讓我們站在巨人的肩膀上看得更遠。這也是ROS最初的設計目標:提高機器人領域的代碼復用率,促進不同組織之間各施所長、合作共贏。
至此,《淺談ROS的產(chǎn)品化探索》系列文章也就告一段落了,筆者使用四篇文章淺談了個人在ROS學習、應用、產(chǎn)品化開發(fā)過程中的一些感悟和總結(jié),歡迎各位批評指正。 總而言之,ROS能不能產(chǎn)品化應用,不能用一個“能”或者“不能”簡而概之,而是需要剖析開來具體分析,在應用中取其精華去其糟粕。 祝各位有一段美妙的ROS機器人開發(fā)之旅!(四十八)——ROS機器人實例 (PR2)PR2(Personal Robot 2,個人機器人2代)是Willow Garage公司設計的機器人平臺,其中數(shù)字2代表第二代機器人。 PR2有兩條手臂,每條手臂七個關節(jié),手臂末端是一個可以張合的夾爪;PR2依靠底部的四個輪子移動,在頭部、胸部、肘部、夾爪上分別安裝有高分辨率攝像頭、激光測距儀、慣性測量單元、觸覺傳感器等豐富的傳感設備。在PR2的底部有兩臺八核電腦作為機器人各硬件的控制和通信中樞,并且都安裝了Ubuntu和ROS系統(tǒng)。 PR2和ROS有千絲萬縷的關系,可以說ROS產(chǎn)生于PR2,也促成了PR2。ROS原本是Willow Garage為復雜的PR2機器人平臺設計的軟件框架,依靠強大的ROS,PR2可以獨立完成多種復雜的任務,例如PR2可以自己開門、找到插頭給自己充電、打開冰箱取出啤酒、打簡單的臺球等等。只不過PR2價格高昂,而且能力還達不到商業(yè)應用的要求,如今主要用于學術研究。 可見,PR2是ROS中元老級的機器人平臺,所有軟件代碼依托于ROS,并且全部在ROS社區(qū)中開放源代碼,為我們學習、應用ROS提供了豐富的資源。
一、 PR2功能包安裝
在ROS Kinetic中,大部分PR2功能包還無法支持,官方推薦使用ROS Indigo運行PR2。 首先使用如下命令安裝PR2機器人的相關功能包:
以上命令主要安裝了下表中PR2機器人相關的ROS功能包。 PR2機器人售價昂貴,大多數(shù)人都無法接觸到,所以這里我們使用仿真器運行PR2的相關功能。
二、 Gazebo中的PR2
使用如下命令啟動gazebo仿真環(huán)境,并使用pr2.launch將機器人加載到gazebo中:
也可以使用pr2_gazebo功能包中的pr2_empty_world.launch一次性啟動gazebo并加載機器人模型:
啟動成功后,就可以在一個空曠的gazebo仿真環(huán)境中看到PR2機器人了。 查看當前系統(tǒng)中的話題列表,會看到眾多話題已經(jīng)發(fā)布或者等待訂閱,這就是PR2機器人仿真器提供給用戶的接口,我們可以基于這些接口實現(xiàn)很多功能。 為了測試PR2的傳感器是否啟動成功,可以在仿真環(huán)境中隨機添加一些外部物體。 然后打開rviz,添加點云、激光、攝像頭等插件,實現(xiàn)傳感器數(shù)據(jù)的可視化顯示。 目前PR2機器人還處于靜止狀態(tài),可以運行鍵盤控制節(jié)點,控制PR2運動:
啟動后根據(jù)終端中的提示,使用鍵盤控制PR2機器人在gazebo中移動,同時rviz中的PR2模型也會同步更新。
三、 使用PR2實現(xiàn)SLAM
在PR2仿真環(huán)境中,我們已經(jīng)獲取到所有傳感器的數(shù)據(jù),并且可以控制PR2移動,接下來嘗試使用PR2實現(xiàn)SLAM。 第一步還是啟動PR2的gazebo仿真環(huán)境:
然后在空曠的gazebo仿真環(huán)境中添加一些障礙物體。 這里以gmapping為例,創(chuàng)建一個啟動gmapping節(jié)點的啟動文件pr2_build_map.launch:
然后在該文件所在的路徑下直接運行以下命令:
如果launch文件、節(jié)點、可執(zhí)行文件等在終端的當前路徑下,運行命令時可以不加功能包名。 啟動成功后,gmapping節(jié)點就開始SLAM建圖了。啟動rviz并添加顯示插件后,可以看到如圖所示的SLAM效果。 啟動鍵盤控制節(jié)點,控制PR2機器人在仿真環(huán)境中圍繞障礙物體移動,就可以實現(xiàn)SLAM了。
四、 PR2機械臂的使用
PR2不僅是一個移動機器人平臺,它還裝配了兩個機械手,可以實現(xiàn)很多復雜的機械臂操作。類似于鍵盤發(fā)布速度控制指令,我們也可以在終端中使用如下命令控制PR2的兩個機械臂:
啟動成功后,可以在終端中看到提示信息,分別控制PR2的頭部、身體、機械臂等多個可運動部位。 此處選擇控制機械臂,然后會看到一系列控制命令。 按照命令提示點擊鍵盤按鍵,就可以控制PR2機器人的兩個手臂運動了。 說到機械臂運動,就不得不提到MoveIt!,PR2機器人的機械臂也可以通過MoveIt!控制。在安裝完成的PR2功能包中,已經(jīng)包含了PR2手臂的MoveIt!配置功能包,可以直接啟動demo示例:
在啟動的rviz中會看moveit的界面,可以通過MoveIt!插件或代碼控制機械手臂運動。 除此之外,我們也可以使用如下命令,通過MoveIt!控制gazebo仿真器中的PR2:
各種控制器插件在這里都已經(jīng)配置完成,有興趣的讀者可以詳細學習PR2功能包中的源碼,這些都是我們實踐過程中重要的參考資料。 再次在rviz中控制PR2的機械手臂運動,gazebo中PR2的手臂將根據(jù)規(guī)劃的軌跡完成運動。 (四十九)——ROS機器人實例 (TurtleBot)上一篇介紹了ROS中的元老機器人——PR2,雖然功能強大,但價格昂貴,無法推廣。所以Willow Garage又開發(fā)了一款低成本的機器人平臺——TurtleBot。 TurtleBot的目的是給入門級的機器人愛好者或從事移動機器人編程開發(fā)者提供一個基礎平臺,讓他們直接使用TurtleBot自帶的軟硬件,專注于應用程序的開發(fā),避免了設計草圖、購買、加工材料、設計電路、編寫驅(qū)動、組裝等一系列工作。借助該機器人平臺,可以省掉很多前期工作,只要根據(jù)平臺的軟硬件接口,就能開發(fā)出所需的功能。 TurtleBot可以說是ROS中最為重要的機器人之一,它伴隨ROS一同成長,一直都作為ROS開發(fā)前沿的機器人,幾乎每個版本的ROS測試都會以TurtleBot為主,包括ROS2也率先在TurtleBot上進行了大量測試。 所以TurtleBot也是ROS支持度最好的機器人之一,可以在ROS社區(qū)中獲得大量關于TurtleBot的相關資源,很多功能包都能直接復用到我們自己的移動機器人平臺上,絕對是使用ROS開發(fā)移動機器人的重要資源。 ▼ TurtleBot第一代發(fā)布于2010年,兩年后發(fā)布了第二代產(chǎn)品。前兩代TurtleBot都使用iRobot的機器人作為底盤,在底盤上可以裝載激光雷達、Kinect等傳感器,使用PC搭載基于ROS的控制系統(tǒng)。 在2016年的ROSCon上,韓國機器人公司Robotis和開源機器人基金會(OSRF)發(fā)布了TurtleBot 3,徹底顛覆了原有TurtleBot的外形設計,成本進一步降低,而且模塊化更強,可以根據(jù)開發(fā)者的需求自由改裝。TurtleBot 3并不是為取代TurtleBot 2而生,而是提出了一種更加靈活的移動機器人平臺。 那么如何在ROS中使用Turtlebot呢? ▼ 首先需要安裝Turtlebot相關的所有功能包,使用如下命令安裝:
安裝完成后的功能包中包含了所有Turtlebot真機與仿真的功能,這里還是以gazebo仿真為主進行實踐。
gazebo中的TurtleBot
第一步依然是啟動gazebo仿真環(huán)境,并且加載Turtlebot機器人:
這里需要使用環(huán)境變量TURTLEBOT_GAZEBO_WORLD_FILE為仿真環(huán)境指定地圖,否則會顯示找不到地圖的錯誤。 啟動成功后可以看到gazebo界面,TurtleBot 2已經(jīng)成功加載到仿真環(huán)境當中。 查看當前系統(tǒng)中的話題列表,可以看到很多已經(jīng)發(fā)布和等待訂閱的話題。 打開rviz,可視化顯示需要的傳感器數(shù)據(jù),可以看到機器人攝像頭、激光雷達、點云等信息。 然后使用如下命令啟動鍵盤控制節(jié)點:
根據(jù)終端中的命令提示,控制TurtleBot在仿真器中移動,rviz中的機器人以及傳感器信息會同步更新。 TurtleBot導航仿真
接下來在仿真環(huán)境中使用TurtleBot實現(xiàn)導航功能。 第一步是SLAM建圖。turtlebot_gazebo功能包中已經(jīng)提供了使用gmapping實現(xiàn)SLAM建圖的啟動文件,但是文件內(nèi)部的包含路徑有一點問題,直接運行會提示錯誤。 使用如下命令打開gmapping_demo.launch文件,進行一點修改:
在gmapping.launch.xml文件的路徑前加入gmapping文件夾,修改后的gmapping_demo.launch文件內(nèi)容如下:
然后使用如下命令啟動仿真環(huán)境和gmapping節(jié)點:
通過鍵盤控制TurtleBot在仿真環(huán)境中移動,在打開的rviz中可以看到SLAM過程。 SLAM結(jié)束后使用如下命令保存地圖,命名為turtlebot_test_map:
接下來我們在建立完成的地圖上實現(xiàn)TurtleBot自主導航功能。turtlebot_gazebo功能包中同樣提供了實現(xiàn)導航功能的launch啟動文件,但是文件內(nèi)部的包含路徑也有問題,直接運行會提示錯誤。 使用如下命令打開amcl_demo.launch文件,進行一點修改:
在amcl.launch.xml文件的路徑前加入amcl文件夾,修改后的amcl_demo.launch文件內(nèi)容如下:
現(xiàn)在關閉除仿真環(huán)境以外的其他節(jié)點和rviz,運行如下命令就可以開始導航了。
在rviz中選擇導航的目標點后,gazebo中的TurtleBot開始向目標移動,rviz中可以看到傳感器信息和機器人狀態(tài)顯示。 TurtleBot 3ROS Kinetic中也集成了TurtleBot 3相關功能包的二進制安裝文件,我們也來嘗嘗鮮。 使用如下命令安裝TurtleBot 3的所有相關功能包:
安裝完成后,使用如下命令啟動TurtleBot 3的仿真環(huán)境:
TurtleBot 3目前有兩種模型:burger和Waffle,啟動之前必須通過環(huán)境變量的方式設置所需要的模型,這里選擇burger。 啟動成功后,可以看到gazebo仿真環(huán)境和TurtleBot 3機器人。 查看當前系統(tǒng)中的話題列表,因為TurtleBot 3 burger模型較為簡單,搭載的傳感器也并不多,所以這里發(fā)布和訂閱的話題也比較少。 基于這個仿真環(huán)境和現(xiàn)有的傳感器數(shù)據(jù),可以使用如下命令實現(xiàn)TurtleBot 3的SLAM功能:
打開rviz,并且訂閱傳感器和地圖數(shù)據(jù),通過鍵盤控制TurtleBot 3運動,就可以看到SLAM效果了。 類似于TurtleBot 2,我們也可以在建立的地圖上實現(xiàn)導航功能,此處不再贅述。 (五十)——ROS機器人實例 (Universal Robots)Universal Robots(優(yōu)傲機器人)公司是一家引領協(xié)作機器人全新細分市場的先驅(qū)企業(yè),該公司成立于2005年,關注機器人的用戶可操作性和靈活度,總部位于丹麥的歐登塞市,主要的機器人產(chǎn)品有:UR3、UR5和UR10,分別針對不同的負載級別。 Universal Robots早在2009年便推出了第一款協(xié)作機器人——UR5,自重18公斤,負載高達5公斤,工作半徑85cm,不僅顛覆了人們對于傳統(tǒng)工業(yè)機器人的認識,還自此定義了“協(xié)作機器人”的真正意義。除了安全度高、無需安全圍欄等特點外,協(xié)作機器人還應該具備編程簡單和靈活度高等特點,才能實現(xiàn)真正的人機和諧共事。 2015年3月推出的UR3是現(xiàn)今市場上最靈活輕便、并且可與工人一起肩并肩工作的臺式機器人。它自重僅為11公斤,但是有效負載卻高達3公斤,所有腕關節(jié)均可360度旋轉(zhuǎn),而末端關節(jié)可作無限旋轉(zhuǎn)。UR 10的有效負載為10公斤,工作半徑130cm。三款機器人均以編程的簡易性、高度靈活性以及與人一起工作的安全可靠性而享譽業(yè)內(nèi)。 ▼ ROS中同樣集成了Universal Robots機器人的功能包,使用如下命令即可安裝,其中包含UR3、UR5、UR10三款機器人的相關功能:
▼ 在使用之前,先來了解一下Universal Robots的相關功能包。 接下來我們以UR5為例,學習Universal Robots功能包的使用方法。
gazebo中的UR機器人使用以下命令啟動UR5機器人的gazebo仿真環(huán)境:
啟動成功后可以看到仿真環(huán)境中的UR5。 查看當前系統(tǒng)中的話題列表。 follow_joint_trajectory是MoveIt!最終規(guī)劃發(fā)布的action消息,由機器人控制器端接收該消息后控制機器人完成運動。從上邊的話題列表中,可以找到follow_joint_trajectory,由仿真機器人的控制器插件訂閱。 打開啟動的ur5.launch文件,可以看到以下代碼段:
控制器管理節(jié)點controller_manager啟動了一個arm_controller插件,該插件的配置可以查看arm_controller_ur5.yaml文件:
從上邊的配置信息中可以看到,arm_controller是一個JointTrajectory類型的控制器,接收follow_joint_trajectory中的軌跡信息后,完成機器人的運動控制。
使用MoveIt!控制UR機器人ROS中類似于UR5這樣的機械臂控制當然離不開MoveIt!,接下來我們就使用MoveIt!實現(xiàn)對gazebo中UR5的控制。 UR5的控制需要通過follow_joint_trajectory這個action接口實現(xiàn),這就需要在MoveIt!端配置一個控制器插件,實現(xiàn)該接口的功能。該插件的配置在ur5_moveit_config中已經(jīng)實現(xiàn),可以查看ur5_moveit_config功能包中的controllers.yaml文件:
所以我們并不需要進行任何修改,使用如下命令啟動MoveIt!和rviz,啟動過程會包含所需要的控制器插件:
啟動成功后可以看到如下界面。 目前,rviz和gazebo中的UR5應該保持同樣的姿態(tài)。在rviz中使用MoveIt!插件選擇一個運動目標姿態(tài),然后點擊“Plan”。如果可以實現(xiàn)運動規(guī)劃,就會看到如下規(guī)劃軌跡。 再點擊“Execute”按鈕,gazebo中的UR5會按照規(guī)劃的軌跡開始運動,rviz中的UR5模型保持同樣的運動姿態(tài),如下圖所示。
(五十一)——ROS機器人實例 (HRMRP)HRMRP(Hybrid Real-time Mobile Robot Platform,混合實時移動機器人平臺)是筆者在2012年和實驗室的小伙伴們一起從零開始設計、開發(fā)的一款機器人平臺,其中大部分擴展電路、驅(qū)動和ROS相關的底層功能都是我們自己開發(fā)。該機器人平臺具有軟硬件可編程、靈活性強、模塊化、易擴展、實時性強等特點,機器人的整體結(jié)構(gòu)如下圖所示。 HRMRP具備豐富的傳感器和執(zhí)行器,在該平臺的基礎上,可以現(xiàn)了機器人SLAM、自主導航、人臉識別、機械臂控制等功能。
總體架構(gòu)設計HRMRP的總體架構(gòu)如下圖所示。 1. 硬件層 (1)機械平臺 HRMRP主體結(jié)構(gòu)為鋁合金材質(zhì),尺寸為316mm ×313mm ×342mm(高×寬×長),裝配兩個驅(qū)動輪與一個萬向輪。驅(qū)動輪由兩個30W的直流電機帶動,轉(zhuǎn)速可達83轉(zhuǎn)/分鐘,機器人最快速度1.5m/s。HRMRP還裝有一個六自由度機械臂,可以完成三維空間內(nèi)的夾取操作。 (2) 控制平臺 嵌入式系統(tǒng)具備小型化、低功耗、低成本、高靈活性等顯著的特點,電子技術的發(fā)展也促使可編程門陣列FPGA在嵌入式系統(tǒng)中得到了越來越廣泛的應用,很大程度上改善了嵌入式系統(tǒng)硬件的靈活度與繁瑣計算的實時化。 HRMRP的控制平臺即基于Xilinx最新一代集成FPGA與ARM的SoC——Zynq。 Zynq由處理系統(tǒng)(Processor System,PS)與可編程邏輯(Programmable Logic,PL)兩部分組成。其中PS基于ARM Cortex-A9雙核處理器構(gòu)建,包含常用的外設接口,例如網(wǎng)絡、USB、內(nèi)存控制器等。而PL由Xilinx的7系列FPGA構(gòu)成,支持動態(tài)重配置,可以使用Verilog語言編程。 在HRMRP中,PS通過操作系統(tǒng)控制所有功能正常有序的實現(xiàn),而PL作為協(xié)處理器,一方面可以對復雜運算做并行加速處理,另一方面可以進行I/O接口擴展,為多傳感器和執(zhí)行器設計統(tǒng)一的接口,提高系統(tǒng)硬件配置的靈活性。 (3) 傳感器系統(tǒng) 在機器人核心傳感器的選擇上,HRMRP使用了高性價比、高集成度的微軟Kinect 傳感器。除此還裝配有超聲波、加速度、里程計、陀螺儀等多種傳感器,確保機器人平臺可以采集到豐富的傳感信息。
2. 驅(qū)動層 驅(qū)動層的主要工作是采集或預處理硬件層的數(shù)據(jù),下發(fā)操作系統(tǒng)層的指令,為底層硬件與上層功能模塊提供相應的數(shù)據(jù)傳輸通道。由于我們采用“ARM+FPGA”異構(gòu)控制平臺,為配合硬件層功能,驅(qū)動層也分為兩部分,分別放置于硬件的PS端和PL端。 PS端主要驅(qū)動連接到ARM處理器的外設,例如通過PS中的OpenNI驅(qū)動Kinect,并且提供PL端到PS端的接口。而在PL端中,利用可編程硬件的靈活性和并行處理能力,進行I/O擴展與算法的硬件加速,如下圖所示。 在I/O擴展方面,傳統(tǒng)的設計實現(xiàn)中,種類繁多的傳感器、執(zhí)行器對接口的要求各不相同,會占用大量I/O資源,增加處理器的負擔。而在HRMRP的ARM+FPGA系統(tǒng)當中,通過定義一組標準的硬件接口,連接傳感器和電機等外設,可使用編程邏輯取代繁雜的電路連接工作,滿足各種不同需求的硬件外設。 在硬件加速方面,一般來說PS端適合常用接口的驅(qū)動、網(wǎng)絡數(shù)據(jù)的處理等功能,而PL端適合于規(guī)律性的算法處理,在HRMRP中主要負責Kinect的數(shù)據(jù)預處理工作(這里我們將OpenNI中的部分代碼放入FPGA中進行加速)。PS與PL相互配合,提高了系統(tǒng)數(shù)據(jù)處理的實時性。
3. 操作系統(tǒng)層 操作系統(tǒng)層是機器人平臺的控制核心,集成了機器人的功能模塊,負責行為控制、 數(shù)據(jù)上傳、指令解析、人機交互等功能。為與ROS通信接口保持一致,使用Ubuntu作為操作系統(tǒng),運行于Zynq的PS端ARM處理器之中。 ROS為用戶的不同需求提供了大小和功能不同的多種安裝包,為了減少ARM端的執(zhí)行壓力,HRMRP編譯移植了僅包括ROS基本通信機制的核心庫。繼承了ROS的優(yōu)勢,機器人平臺具備ROS通信以及功能包運行的能力,與上層網(wǎng)絡指令無縫連接,結(jié)合開源軟件庫,極大地豐富了機器人的功能模塊與應用范圍。 HRMRP是一種較為典型的高性能、低成本機器人平臺。與現(xiàn)在研究和應用中使用較為廣泛的TurtleBot、Pioneer等機器人相比,HRMRP具有相似的結(jié)構(gòu)與尺寸,同樣可以完成多種多樣的機器人應用;但是在接口的可擴展性、傳感器的豐富度以及成本控制等方面,具備更好的綜合性能。
SLAM與導航在以上架構(gòu)的基礎上實現(xiàn)每個模塊的具體功能,系統(tǒng)運行狀態(tài)下的數(shù)據(jù)流圖如下圖所示。 HRMRP在室內(nèi)環(huán)境下的SLAM建圖效果如下圖所示。
多機器人擴展ROS作為一個分布式框架,從微觀的角度講,分布式體現(xiàn)在節(jié)點的布局和配置上,而從宏觀的角度講,這種分布式可以體現(xiàn)在多機器人、多主機集成的系統(tǒng)當中。在HRMRP機器人的基礎上,我們試圖提出一種多機器人實現(xiàn)的框架,如下圖所示。 由于機器人架構(gòu)多種多樣,處理應用的能力也各不相同,在不同場合下的需求也有差異,我們設計了服務器層來提高機器人應用的計算能力,負責調(diào)度、分配多機器人應用中的任務,同時為用戶提供友好、易用的人機交互界面。 分布的機器人節(jié)點與服務器都采用ROS框架設計,使用無線網(wǎng)絡通信,可以快速集成ROS社區(qū)中豐富的應用功能。在多機器人系統(tǒng)當中,通過機器人之間的信息共享和與任務協(xié)作,可以讓每個機器人在充分發(fā)揮自己能力的同時,獲得更多額外的應用潛力。 機器人節(jié)點是應用的執(zhí)行者與信息的采集者。在該系統(tǒng)中可以集成多種采用ROS框架的機器人,這里以HRMRP機器人平臺為例,針對多機器人的框架也進行了測試,除HRMRP機器人之外,還使用樹莓派制作了一個簡單的小型機器人。 在實驗中,HRMRP機器人在地圖上自主導航前進,服務器負責應用的處理與顯示,同時將HRMRP的位置信息轉(zhuǎn)發(fā)給樹莓派機器人;樹莓派機器人收到信息后,緊跟HRMRP,效果如下圖所示。 (五十二)—— MoveIt!中的運動學插件MoveIt!是ROS中一個重要的集成化開發(fā)平臺,由一系列移動操作的功能包組成,提供運動規(guī)劃、操作控制、3D感知、運動學等功能模塊,是ROS社區(qū)中使用度排名前三的功能包,目前已經(jīng)支持眾多機器人硬件平臺。 MoveIt!中的眾多功能都使用插件機制集成,其中有一個重要的功能模塊——運動學插件。 今天我們就來聊下MoveIt!中的運動學求解器。
一、KDLKinematics and Dynamics Library (KDL)是MoveIt!中的默認運動學插件,在使用MoveIt! Setup Assistant進行模型配置時,可以進行配置。 配置完成后,就可以運行demo.launch控制虛擬機械臂進行運動規(guī)劃了。但是KDL有自己的優(yōu)缺點: 比如一次逆解的求解時間:0.062192秒。。。 很多時候我們在做運動規(guī)劃的時候,MoveIt!經(jīng)常會提示規(guī)劃失敗、求解失敗等錯誤,很多都是因為KDL這款運動學插件導致的,那么問題就來了——能不能更換一個運動學插件? 當然可以,以下介紹兩個用的最多的運動學插件:TRAC-IK和IKFAST。
二、TRAC-IKTRAC-IK和KDL類似,也是一種基于數(shù)值解的運動學插件,但是在算法層面上進行了很多改進,求解效率高了很多。比如在下邊這張圖中,左側(cè)的紅點是KDL無法求解的姿態(tài)點,但是在右側(cè)使用TRAC-IK是可以求解的。 那么如何將KDL更換成TRAC-IK呢,方法很簡單,ROS的軟件源中已經(jīng)集成了TRAC-IK的安裝包,可以直接使用以下命令安裝:
然后修改機械臂MoveIt!配置功能包下的kinematics.yaml文件就可以使用啦:
接下來再次運行demo.launch,默認加載的就是TRAC-IK運動學插件了,試試規(guī)劃求解的效率是不是高了很多! 但是TRAC-IK也有問題,它是一種數(shù)值算法,每次求解得到的關節(jié)位置不一定相同。
三、IKFASTIKFAST是一種基于解析算法的運動學插件,可以保證每次求解的一致性。 相比KDL和TRAC-IK,IKFAST的安裝過程就比較復雜了,不過就筆者的使用經(jīng)驗來講,IKFAST的效果還是很推薦的,所以不妨一試,以下就是IKFAST的安裝配置過程。
現(xiàn)在運行demo.launch文件時,使用的運動學插件就是IKFAST了,快試一試效果是不是還不錯! (五十三)—— ROS與VREP的集成VREP( Virtual Robot Experimentation Platform)是一款瑞士軍刀級的機器人仿真軟件,包含的功能眾多,而且使用方便,在各種系統(tǒng)下都有相應的安裝文件。 今天我們就來看看如何將ROS和vrep集成,把兩個強大的平臺結(jié)合到一起。
一、下載vrep第一步當然是下載vrep軟件啦! 登錄vrep官網(wǎng):http://www./downloads.html 找到相應版本的下載地址,然后選擇Linux版本即可下載。這里選擇的是3.4版本。 下載完成后的vrep是一個壓縮文件,解壓該文件后,放置到home路徑下(可自定義),重命名為vrep。 ubuntu下的vrep不需要特意安裝,直接在終端下運行如下命令即可啟動:
啟動成功的界面如下圖所示:
二、配置ROS接口vrep提供了一個ROS接口——RosInterface,使用ROS插件搭建了一座vrep和ROS之間的橋梁,其原理如下: 不過該插件需要通過編譯四個功能包來生成。 創(chuàng)建一個單獨的工作空間,將 vrep/programming/ros_packages路徑下的四個功能包拷貝到工作空間下,或者使用如下命令下載這四個功能包:
然后在終端設置vrep的路徑,并且編譯工作空間
編譯成功后,在/deve/lib/下找到以下兩個庫,拷貝到vrep根路徑下即可。
三、啟動vrepROS與vrep集成的配置工作已經(jīng)完成,接下來就可以啟動系統(tǒng)啦。 使用如下命令啟動ros master和vrep:
在啟動vrep的終端中應該可以看到如下RosInterface加載的日志提示: 這個時候vrep和ROS已經(jīng)連接成功,不信可以打印當前系統(tǒng)的話題看看: vrep接口相關的話題赫然在目。
四、集成測試最后就進入到激動人心的測試環(huán)節(jié)了。vrep中已經(jīng)自帶了幾個測試例程。 先來加載第一個仿真場景: 然后在顯示區(qū)會出現(xiàn)很多五顏六色的模型,點擊工具欄中的開始按鍵,啟動仿真。vrep場景中的會仿真一個攝像頭,并且發(fā)布圖像話題,在ROS中打開rqt_image_view,訂閱圖像話題,看看是不是已經(jīng)有圖像出現(xiàn)啦!
從這個例程中,我們可以看到vrep中的數(shù)據(jù)可以順利通過RosInterface發(fā)送到ROS端。 接下來將ROS端的數(shù)據(jù)發(fā)送到vrep,一樣需要加載仿真場景: 場景中有幾個可愛的小機器人,每個機器人對應于一個數(shù)據(jù)來源。開始仿真后,其他幾個機器人就開始活躍起來,唯獨下圖中的紅色機器人紋絲不動。 從機器人旁邊的提示可以看到,“小紅”需要通過ROS節(jié)點來控制。這讓我們想起了ROS中的小海龜。 查看當前ROS系統(tǒng)的話題列表: 和小海龜訂閱的Twist消息不同,“小紅”訂閱了兩個話題,分別對應于兩個驅(qū)動電機的速度,在終端中發(fā)布如下命令,即可控制“小紅”移動,差速就要自己來控制啦。
OK!今天就測試到這里,后續(xù)我們再進一步通過ROS控制vrep中的機器人實現(xiàn)仿真。 注:以上內(nèi)容,也可以查看vrep自帶的幫助文檔:/vrep/helpFiles/en/rosTutorial.htm (五十四)—— ROS機器人開發(fā)案例(附ppt)8月1日晚,古月君在深藍學院的的公開課平臺,和大家一起聊了下ROS機器人開發(fā)的相關案例,主要結(jié)合自身機器人開發(fā)經(jīng)驗,從機器人系統(tǒng)組成、移動機器人開發(fā)案例和機械臂開發(fā)案例等三個方面,介紹了古月君是如何將ROS應用于機器人項目開發(fā)的。
公開課的全部內(nèi)容可以免費回看,有興趣的小伙伴可以訪問課程網(wǎng)站:
另外古月君主講的《機器人操作系統(tǒng)ROS理論與實踐》第二期課程也在火熱進行中,同樣可以在深藍學院的機器人課程中找到: http://www./course/92
以下是8月1日晚公開課的ppt內(nèi)容,供各位參考。
|
|
來自: jisuancosimo > 《待分類》