筆者開始寫系列文的時候,也有被問過知不知道ROS2.0啊? 有沒有考慮換成ROS2.0啊? 等等的問題,因此誕生了這篇簡要的說明XD
有在關注ROS應該都知道,ROS近年出現二代革新版: ROS2.0,但是ROS2.0跟原本的ROS不太相容,所以一開始在開發的時候就需要先訂好版本要用哪個喔!
ROS2.0出現的目的,當然就是要解決現行的ROS問題,因此在設計時大刀闊斧,改變了許多原有的架構,但也因為這樣造成許多開源的專案無法在ROS2.0上實行,需要透過ROS Bridge才能串接。所以如果想要用的一些package沒有支援ROS2.0的話,建議需要評估一下兩代之間的取捨。
因為筆者我本身使用的是ROS,對於ROS2.0僅有官網和一些文章上的認識,所以列一些比較重要的改革如下:
項目 | ROS | ROS2.0 |
---|---|---|
系統平台 | 僅支援Ubuntu,其他系統為社群自行開發 | 支援Ubuntu Xenial, OS X El Capitan以及Windows 10 |
C++ | 使用C++03 | 主要使用C++11,並計畫納入C++14和17 |
Python | 使用python2 | 支援python3.5以上版本 |
應用層 | 使用master管理各個node | 使用P2P 讓各個node各自執行 |
中介層 | 自定義格式(protocol等) | 使用DDS 標準 |
統一的時程(duration)及時間(time)類型 | 用戶端自訂義,C++(sec, nsec)和Python(secs, nsecs)中的名稱也不一致 | 定義成message的一種,所以可以跨語言處理 |
node的生命週期 | 每個node都有自己的main function | 可利用像是roslaunch類的工具進行系統化管理多個node的週期 |
執行緒 | 一開始要先選擇使用單執行緒或多執行緒 | 可任意切換使用 |
多重node | 一個process只能用一個node | 支援一個process可以使用多個node |
roslaunch工具 | roslaunch檔使用XML檔定義, 會因此而受限 | roslaunch用Python寫, 因此可以使用較複雜的邏輯運算功能,例如if判斷條件 |
若是需要更詳盡的差異,還請參考下方reference處囉!
筆者我因為一開始學ROS時就是用一代,之後工作也用一代,在公司內部若要革新換成ROS2.0會有太高的陣痛期,因此目前也是不考慮轉換成ROS2.0的~~所以後續的文章都是以ROS一代的架構為基礎寫出來的呦!
https://design.ros2.org/articles/why_ros2.html
http://design.ros2.org/articles/changes.html
https://hackmd.io/@zSxsWbvXSued884MJiNZAQ/rkOlIHnUf?type=view
https://blog.generationrobots.com/en/ros-vs-ros2/
TROS: Protecting Humanoids ROS from Privileged Attackers, Giovanni Mazzeo and Mariacarla Staffa , International Journal of Social Robotics, August 2019
https://github.com/ros2/ros1_bridge