淺談ROS的產品化探索(二)——開發工具篇
上篇講到,在通信機制部分,我們完全捨棄了ROS基於話題和服務的通信機制,自己又實現了一套通信系統,具體的實現主要基於Linux系統的各種通信方式,此處暫且不表,這篇我們來看下ROS另外一個重要部分——開發工具,如何在機器人產品化過程中應用。
ROS相關的開發工具有很多,大致可以分為以下幾種類型:
1.ROS原生工具,比如rviz、qt工具箱、命令行工具等;
2.編譯和測試工具,基於已有工具進一步的包裝;3.第三方工具,基於成熟工具,使用一些插件或介面和ROS系統兼容。
就這三種類型的工具,我們來具體分析。
一、ROS原生工具
ROS的原生工具非常豐富,可以參考wiki上的說明:
http://wiki.ros.org/Tools
無論是可視化的qt工具還是命令行工具,都頻繁用於ROS開發,這些工具和ROS系統的依賴性最強,想要實現產品化並不容易。
▼ rviz
首先來看最重要的一個工具——rviz。
rviz是ROS中的一個三維可視化平台。為什麼說它是ROS最重要的一個工具呢?因為rviz可以把不直觀的數據統統可視化地顯示出來,比如圖像、地圖、模型、路徑等等,這些還只是rviz官方提供的顯示插件。
rviz最厲害的地方是它的擴展性,可以通過插件的形式無限擴展,打造自己的人機交互界面。比如上圖是ROScon2017開場演講的Autoware項目,他們將rviz用於無人駕駛汽車的上位機平台。
上圖是我們自己項目開發中設計的rviz插件,作為機器人控制的上位機。
rviz原生的顯示組件配合定製化開發的插件,功能強大,開發迅速,簡直不能再好用了!
OK!吹了半天rviz的強大,也得說說它的問題!
rviz最大的問題就是對ROS核心通信機制的強依賴,系統中必須要運行ROS Master,顯示的數據需要通過話題發布,運行不穩定等等。。。很多時候在啟動rviz的過程中,總是伴隨著警告和錯誤,一次啟動失敗就再來一次,最多三四次還是可以啟動成功的。。。
基於上邊這些問題,rviz基本不可能直接拿來產品化,作為開發過程中的工具還是非常棒的。不過,rviz的架構設計還值得參考,我曾「企圖」利用rviz的源碼重新開發一個類似的界面工具,擺脫對ROS的依賴,不過最終還是因為沒有時間而放棄了,有興趣的小夥伴可以試一下,記得告訴我結果哦!
▼ 命令行工具和rqt工具
ROS提供的命令行工具非常豐富,比如rostopic、rosservice、rosnode、rosparam等等。雖然沒有圖形化工具那麼直觀,但是很多時候更加簡潔明快。
ROS還提供了一系列輕量化的可視化工具,比如:
這些工具的問題和rviz類似,或者說ROS的原生工具都有這樣的問題,畢竟是「直系血親」,和ROS核心部分緊密相連,同樣繼承了ROS通信機制部分的問題。
所以,如果想在機器人產品中為用戶提供相關的工具,需要慎重考慮一下面向的對象,和對穩定性的需求。
二、編譯和測試工具
第二個部分是ROS提供的編譯和測試工具。
▼ 編譯系統——catkin
ROS的編譯系統基於CMake,針對ROS本身的特點進行了包裝,可以比較方便的管理包之間的依賴關係,而且ROS功能包可以實現系統模塊化、松耦合的管理機制,編譯開發版和發布版都沒有問題。
功能包或編譯系統和ROS的核心通信機制沒有直接關係,所以代碼裡邊沒有任何ROS相關的代碼,一樣可以使用。在機器人開發過程中,我們項目中的所有代碼都使用ROS包管理、catkin編譯。
這種方案還有一個很大的好處,就是很容易在CMakeLists中鏈接ROS的庫,比如tf庫。tf庫是坐標變換的數學處理庫,而我們常用的tf功能包是在tf庫的基礎上加入了ROS封裝,所以兩者是有區別的。藉助tf庫可以幫助我們實現坐標變換,不需要再重複造這個輪子。
▼ 單元測試——gtest
ROS的單元測試系統基於谷歌的gtest,結合catkin編譯系統,非常好用。我們項目所有的單元測試,都是通過這種方式完成,相關的語法和gtest一樣,可以參考:
http://wiki.ros.org/gtest
可以說,ROS的編譯和測試工具在產品化開發過程中可以直接使用,而且包管理機制、單元測試方法讓整個軟體系統的框架清晰明了、分工明確。
三、第三方工具
ROS的迅速崛起,也不斷吸收更多第三方工具的加入,比如Gazebo、Matlab、Qt Creator、SolidWorks等。
▼
機器人模擬是機器人開發過程中非常重要的一個環節,可以針對機器人模型、應用功能、演算法處理、環境狀態等方面做模擬。Gazebo是ROS中主要的模擬工具,現在已經獨立維護,可以通過ROS介面接入ROS環境,所以無論我們是否使用ROS,都可以使用Gazebo,從開發到產品的過渡相對平滑。
▼
Matlab是數據處理方面的強大工具,2013之後的機器人工具箱也提供了對ROS的支持,實現了ROS核心通信的大部分功能,可以運行ROS Master和節點,並且發布話題消息。這為ROS開發提供了一個強大的數據演算後台,也可以利用matlab的可視化編程功能,實現人機界面的開發。
▼
Qt Creator、SolidWorks等工具,都是以插件的形式提供對ROS的支持,從而實現與ROS相關的功能。
隨著ROS的發展,會有越來越多的第三方工具加入ROS的生態環境,這些「兵器」也必定會直接帶來生產效率的提高,促進機器人產品化的進程!
本篇針對ROS相關的部分工具進行了分析,當然還有很多工具沒有涵蓋進來。工具的根本目的是提高我們的開發效率,每一種工具都有其擅長之地,也有其不足之處,所以在我們設計、開發機器人產品的過程中,可以綜合考慮,發揮每一個開發工具的優勢。
(未完待續)
PS. 下篇預告:淺談ROS的產品化探索(二)——應用功能篇
更多內容可關注微信公眾號:古月居 (guyue_home)
或訪問古月居網站:
古月居 - 怕什麼真理無窮,進一寸有一寸的歡喜推薦閱讀:
※厲害了!浙大研發出踹不倒四足機器人「絕影」,中國版波士頓動力來了
※如何來對智能掃地機器人的產品進行選購?
※揭秘現實中的「拆彈專家」:遊走在死亡邊緣的安全衛士
※艾灸機器人
TAG:機器人操作平台ROS | 機器人 |