ROS 2 ardent apalone安裝和使用說明
ROS 2 Ardent Apalone是機器人操作系統(2代)第一個正式版。
目前ROS 2和ROS 1 具體資料分別在如下兩個網址:
I . ROS 1(代表indigo/kinetic):http://wiki.ros.org/
I I. ROS 2(代表ardent):https://github.com/ros2/ros2/wiki
III. ROS 1和ROS 2的一些資料:http://blog.csdn.net/zhangrelay/article/details/78418393
在ROS十周年剛過,即發布了第一個ROS 2的正式版ardent apalone。
下面依據官網簡單介紹一下ROS 2的安裝,ROS 2 ardent提供了軟件源和源代碼編譯兩種安裝使用方式,這和ROS 1是幾乎完全一致的。
1. Linux安裝(debians)
設置軟件源,如下:
$ sudo apt update && sudo apt install curl
$ curl http://repo.ros2.org/repos.key | sudo apt-key add -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1679 100 1679 0 0 2887 0 --:--:-- --:--:-- --:--:-- 2889
OK
2. 安裝ROS 2軟件包:
ROS 2的軟件包命令如ROS 1,格式為ros-ardent-xxx,例如rviz,如下可以看到:
$ sudo apt-get install ros-ardent-rviz
ros-ardent-rviz2???????????????? ros-ardent-rviz-ogre-vendor
ros-ardent-rviz-assimp-vendor??? ros-ardent-rviz-rendering
ros-ardent-rviz-common?????????? ros-ardent-rviz-rendering-tests
ros-ardent-rviz-default-plugins? ros-ardent-rviz-yaml-cpp-vendor
使用下面命令安裝ROS 2 ardent全部包,注意,ros-ardent-ros1-bridge和ros-ardent-turtlebot2-*需要ROS 1的支持(需安裝ROS Kinetic,需要請點擊鏈接:http://blog.csdn.net/zhangrelay/article/details/51364622):
$ sudo apt install `apt list ros-ardent-* 2> /dev/null | grep "/" | awk -F/ '{print }' | grep -v -e ros-ardent-ros1-bridge -e ros-ardent-turtlebot2- | tr "\n" " "`
保持足夠耐心等待安裝結束,ROS 2已有的軟件包如下:
Display all 183 possibilities? (y or n)
ros-ardent-actionlib-msgs ros-ardent-ament-uncrustify ros-ardent-lifecycle-msgs ros-ardent-rosidl-typesupport-interface
ros-ardent-amcl ros-ardent-astra-camera ros-ardent-logging-demo ros-ardent-rosidl-typesupport-introspection-c
ros-ardent-ament-clang-format ros-ardent-builtin-interfaces ros-ardent-map-server ros-ardent-rosidl-typesupport-introspection-cpp
ros-ardent-ament-cmake ros-ardent-cartographer ros-ardent-nav-msgs ros-ardent-rosidl-typesupport-opensplice-c
ros-ardent-ament-cmake-auto ros-ardent-cartographer-ros ros-ardent-opensplice-cmake-module ros-ardent-rosidl-typesupport-opensplice-cpp
ros-ardent-ament-cmake-clang-format ros-ardent-cartographer-ros-msgs ros-ardent-orocos-kdl ros-ardent-ros-workspace
ros-ardent-ament-cmake-copyright ros-ardent-class-loader ros-ardent-osrf-pycommon ros-ardent-rttest
ros-ardent-ament-cmake-core ros-ardent-common-interfaces ros-ardent-pcl-conversions ros-ardent-rviz2
ros-ardent-ament-cmake-cppcheck ros-ardent-composition ros-ardent-pendulum-control ros-ardent-rviz-assimp-vendor
ros-ardent-ament-cmake-cpplint ros-ardent-console-bridge ros-ardent-pendulum-msgs ros-ardent-rviz-common
ros-ardent-ament-cmake-export-definitions ros-ardent-demo-nodes-cpp ros-ardent-pluginlib ros-ardent-rviz-default-plugins
ros-ardent-ament-cmake-export-dependencies ros-ardent-demo-nodes-cpp-native ros-ardent-poco-vendor ros-ardent-rviz-ogre-vendor
ros-ardent-ament-cmake-export-include-directories ros-ardent-demo-nodes-py ros-ardent-python-cmake-module ros-ardent-rviz-rendering
ros-ardent-ament-cmake-export-interfaces ros-ardent-depthimage-to-laserscan ros-ardent-rcl ros-ardent-rviz-rendering-tests
ros-ardent-ament-cmake-export-libraries ros-ardent-depthimage-to-pointcloud2 ros-ardent-rclcpp ros-ardent-rviz-yaml-cpp-vendor
ros-ardent-ament-cmake-export-link-flags ros-ardent-diagnostic-msgs ros-ardent-rclcpp-lifecycle ros-ardent-sensor-msgs
ros-ardent-ament-cmake-flake8 ros-ardent-dummy-map-server ros-ardent-rcl-interfaces ros-ardent-shape-msgs
ros-ardent-ament-cmake-gmock ros-ardent-dummy-robot-bringup ros-ardent-rcl-lifecycle ros-ardent-sros2
ros-ardent-ament-cmake-gtest ros-ardent-dummy-sensors ros-ardent-rclpy ros-ardent-std-msgs
ros-ardent-ament-cmake-include-directories ros-ardent-example-interfaces ros-ardent-rcutils ros-ardent-std-srvs
ros-ardent-ament-cmake-libraries ros-ardent-examples-rclcpp-minimal-client ros-ardent-resource-retriever ros-ardent-stereo-msgs
ros-ardent-ament-cmake-lint-cmake ros-ardent-examples-rclcpp-minimal-composition ros-ardent-rmw ros-ardent-teleop-twist-joy
ros-ardent-ament-cmake-nose ros-ardent-examples-rclcpp-minimal-publisher ros-ardent-rmw-fastrtps-cpp ros-ardent-teleop-twist-keyboard
ros-ardent-ament-cmake-pep257 ros-ardent-examples-rclcpp-minimal-service ros-ardent-rmw-implementation ros-ardent-test-msgs
ros-ardent-ament-cmake-pep8 ros-ardent-examples-rclcpp-minimal-subscriber ros-ardent-rmw-implementation-cmake ros-ardent-tf2
ros-ardent-ament-cmake-pyflakes ros-ardent-examples-rclcpp-minimal-timer ros-ardent-rmw-opensplice-cpp ros-ardent-tf2-eigen
ros-ardent-ament-cmake-pytest ros-ardent-examples-rclpy-executors ros-ardent-robot-state-publisher ros-ardent-tf2-geometry-msgs
ros-ardent-ament-cmake-python ros-ardent-examples-rclpy-minimal-client ros-ardent-ros1-bridge ros-ardent-tf2-msgs
ros-ardent-ament-cmake-ros ros-ardent-examples-rclpy-minimal-publisher ros-ardent-ros2cli ros-ardent-tf2-ros
ros-ardent-ament-cmake-target-dependencies ros-ardent-examples-rclpy-minimal-service ros-ardent-ros2msg ros-ardent-tinyxml2-vendor
ros-ardent-ament-cmake-test ros-ardent-examples-rclpy-minimal-subscriber ros-ardent-ros2node ros-ardent-tinyxml-vendor
ros-ardent-ament-cmake-uncrustify ros-ardent-fastcdr ros-ardent-ros2pkg ros-ardent-tlsf
ros-ardent-ament-copyright ros-ardent-fastrtps ros-ardent-ros2run ros-ardent-tlsf-cpp
ros-ardent-ament-cppcheck ros-ardent-fastrtps-cmake-module ros-ardent-ros2service ros-ardent-topic-monitor
ros-ardent-ament-cpplint ros-ardent-geometry-msgs ros-ardent-ros2srv ros-ardent-trajectory-msgs
ros-ardent-ament-flake8 ros-ardent-gmock-vendor ros-ardent-ros2topic ros-ardent-turtlebot2-amcl
ros-ardent-ament-index-cpp ros-ardent-gtest-vendor ros-ardent-rosidl-cmake ros-ardent-turtlebot2-cartographer
ros-ardent-ament-index-python ros-ardent-image-geometry ros-ardent-rosidl-default-generators ros-ardent-turtlebot2-drivers
ros-ardent-ament-lint-auto ros-ardent-image-tools ros-ardent-rosidl-default-runtime ros-ardent-turtlebot2-follower
ros-ardent-ament-lint-cmake ros-ardent-intra-process-demo ros-ardent-rosidl-generator-c ros-ardent-turtlebot2-teleop
ros-ardent-ament-lint-common ros-ardent-joy ros-ardent-rosidl-generator-cpp ros-ardent-uncrustify
ros-ardent-ament-package ros-ardent-kdl-parser ros-ardent-rosidl-generator-dds-idl ros-ardent-urdf
ros-ardent-ament-pep257 ros-ardent-launch ros-ardent-rosidl-generator-py ros-ardent-urdfdom
ros-ardent-ament-pep8 ros-ardent-launch-testing ros-ardent-rosidl-parser ros-ardent-urdfdom-headers
ros-ardent-ament-pyflakes ros-ardent-libcurl-vendor ros-ardent-rosidl-typesupport-c ros-ardent-visualization-msgs
ros-ardent-ament-tools ros-ardent-lifecycle ros-ardent-rosidl-typesupport-cpp
3. 環境設置
這個也和ROS 1是保持一致的,如下:
$ source /opt/ros/ardent/setup.bash
如果有Python包argcomplete(版本0.8.5或更高),可以導入如下文件獲取命令行工具:
$ source /opt/ros/ardent/share/ros2cli/environment/ros2-argcomplete.bash
4. 選擇RMW實現
默認情況下,RMW使用FastRPTS,通過設置環境變量RMW_IMPLEMENTATION=rmw_opensplice_cpp,可以切換為OpenSplice。
5. 使用ROS 1功能包的附加包
在ROS 2和ROS 1都安裝配置完成的系統,可以通過ros1_bridge同時使用,如果使用Docker可以避免環境之間的切換等配置,安裝如下包:
$ sudo apt install ros-ardent-ros1-bridge ros-ardent-turtlebot2-*
如果之前安裝過ROS 2 b3版本,在配置時會出現一些警告,最佳解決方法是卸載beta版本。
$ source /opt/ros/ardent/setup.bash
Warning: OSPL_URI was already set to [[file:///opt/ros/r2b3/share/opensplice_cmake_module/config/ros_ospl.xml]]. This will not override it to the default [[file:///opt/ros/ardent/share/opensplice_cmake_module/config/ros_ospl.xml]]. Please make sure this is the config that you want.
$ sudo apt-get remove ros-r2b3-*
6. 測試
使用消息收發進行測試,如下,如正常則安裝完成,進入教程進行學習:
源碼安裝請參考官網,推薦優先閱讀官網。
----
----
ROS1與ROS2的區別?http://design.ros2.org/articles/changes.html
ROS 1和ROS 2之間的區別
本文概述了ROS 2與ROS 1相比所做的更改。
前言
盡可能簡短地描述每一個變化,但是給熟悉ROS 1的讀者提供足夠的上下文和理由。如果有更多的外部信息可用(例如其他文章),應該將其鏈接到。
某些描述的功能尚不可用,并標有?。
平臺和依賴關系
平臺
ROS 1僅在Ubuntu上進行CI測試。社區在其他Linux版本以及OS X上積極支持。
ROS 2目前在Ubuntu Xenial,OS X El Capitan以及Windows 10上進行了CI測試和支持(請參閱ci.ros2.org)。
語言
ROS 1的核心是針對C ++ 03,并沒有在其API中使用C ++ 11功能。ROS 2廣泛使用C ++ 11,并使用C ++ 14的某些部分。在未來,ROS 2可能會開始使用C ++ 17,只要它在所有主要平臺上受支持。
ROS 1是針對Python 2. ROS 2至少需要Python版本3.5。
重用現有的中間件
ROS 1使用自定義序列化格式,自定義傳輸協議以及自定義中央發現機制。ROS 2有一個抽象的中間件接口,通過它提供序列化,傳輸和發現。目前這個接口的所有實現都是基于DDS標準的。這使得ROS 2能夠提供各種服務質量的策略,從而改善通過不同網絡的通信。
建立系統
有關構建系統的更多信息,請參見柔夷花序Catkin文章。
支持CMake旁邊的其他構建系統
每個ROS包都是一個CMake項目。在ROS 2中,可以輕松地支持其他構建系統。現在構建工具支持CMake旁邊的純Python包。
Python包
在ROS 1中,使用Python代碼的軟件包只能使用setup.py文件中可用功能的一小部分,因為setup.py文件是由CMake內的自定義邏輯處理的。在ROS 2中,一個Python包可以使用setup.py文件中的任何東西,例如入口點,因為它們被調用python3 setup.py install。
環境設置
在ROS 1中,構建工具會生成腳本,這些腳本必須來源以便在能夠使用構建的ROS軟件包之前設置環境。這種方法只有在使用ROS特定的構建工具構建ROS包時才有效。
在ROS 2中,環境設置分為特定于包的腳本和特定于工作空間的腳本。每個軟件包都提供了必要的腳本,使其在構建后可用。構建工具只調用特定于工作空間的腳本,然后調用特定于包的腳本。
沒有非隔離的構建
在ROS 1中,可以在單個CMake上下文中構建多個包。雖然這加快了構建步驟,但是每個包都需要確保正確定義了交叉包目標依賴關系。另外所有的軟件包共享相同的命名空間,導致目標名稱沖突等。
在ROS 2中,只支持隔離的構建,即每個包都是獨立構建的。安裝空間可以是隔離的或合并的。
沒有開發空間
在ROS 1中,可以在不安裝包的情況下構建包。從開發空間與源空間結合起來,系統已經可以使用。但是每個軟件包都必須積極支持開發空間,例如環境鉤子和CMake代碼。
在ROS 2中,必須先安裝一個軟件包,然后才能使用它。
ROS 1中的開發空間的一個原因是使開發人員能夠更改文件,例如Python代碼或啟動文件,并直接使用修改后的代碼,而無需重新編譯軟件包。在ROS 2中保留了這個好處,可以選擇性地用符號鏈接替換安裝步驟中的復制操作。
支持catkin_simple用例
在ROS 1中,包catkin_simple旨在使編寫ROS包的CMake代碼變得更容易。在許多情況下,它不能實現這個目標,這通常是由于像開發空間這樣的支持功能所必需的設計的限制。
在ROS 2中,CMake API進行了重組,以支持這個用例。
對沒有清單的軟件包的最小支持
在ROS 1中,構建系統只考慮具有清單文件的包。在ROS 2中,可以在沒有清單文件的文件夾中檢測具有支持的構建系統的包。如果軟件包遵循慣例,甚至有可能檢測到一些缺失的元信息(如依賴關系)。
消息,服務
有關更多信息,請參閱ROS接口定義文章。
C ++中的分隔名稱空間
在ROS 1中,.msg和.srv文件可以具有相同的名稱,但生成的代碼會發生沖突。請求和響應部分的服務也是如此。
在ROS 2中,生成的代碼使用單獨的名稱空間來保證它是無沖突的。
Python中的同名
為消息和服務生成的Python代碼當前在ROS 1和ROS 2中使用相同的模塊和類名稱。因此,它們不能在單個應用程序中導入。如果需要,這個決定可能會被重新審視。
消息定義中的可選默認值
在ROS 2中,消息中的原始值現在可以具有默認值,在消息構建時設置。非原始字段(即字符串數組,嵌套消息)的默認值不可能(?)。
數組和字符串的可選上限
為了計算消息在內存中的最大大小,這是必要的,這允許用動態大小預分配消息。這對性能和實時用例很有用。
統一持續時間和時間類型
在ROS 1中,持續時間和時間類型是在客戶端庫中定義的。數據結構的成員名稱在C ++(sec,nsec)和Python(secs,nsecs)中是不同的。
在ROS 2中,這些類型被定義為消息,因此在不同的語言中是一致的。
從標題消息中刪除序列字段
該領域已被棄用了很長一段時間,并沒有在ROS 1中一貫設置。
客戶端庫
跨語言
目前ROS 2不支持主題名稱中的命名空間。這主要是由于DDS主題名稱中有效字符的限制。一個設計文檔描述了如何在未來應該加入。
在ROS 1中,關于ROS圖的所有信息都必須從主站查詢。在ROS 2中,更改將發布,例如,如果參數已更改,則會發出通知。
在ROS 1中,每個節點通常都有自己的主要功能。在ROS 2中,建議從具有生命周期的組件中繼承子類。
生命周期可以被像roslaunch這樣的工具用來以確定性的方式啟動一個由許多組件組成的系統(?)。
有關更多信息,請參閱節點生命周期文章。
在ROS 1中,全局參數和節點特定的動態重新配置參數是兩個單獨的概念。在ROS 2中,正在使用統一的方法。它類似于動態重新配置,名為“全局參數服務器”(?)的節點將接受無條件設置值的請求。在ROS 1中,所有這些信息都需要被調查,因為ROS 2的變化將被公布以通知其他實體。
欲了解更多信息,請參閱參數設計文章。
ROS 2目前沒有行動的概念。它將在未來作為可搶占服務器和反饋發布者的組合加入。
在ROS 1中,開發人員只能選擇單線程執行或多線程執行。在ROS 2中,更多的粒度執行模型可以在C ++中使用(例如跨越多個節點),并且自定義執行器可以輕松實現。對于Python來說,執行模型還沒有實現。
在ROS 1中,節點和主題只能在啟動時重新映射。在ROS 2中,對重映射的支持尚未實現(?)。目標是啟用重新映射以及別名,不僅在啟動時間,而且在運行時。
在ROS 1中,節點名稱是唯一的,當啟動具有相同名稱的新節點時,通過關閉現有節點來強制實施。在ROS 2中,節點名稱的唯一性還沒有被強制執行。
C和C ++
ROS 1不支持編寫實時代碼,而是依賴于Orocos等外部框架。在ROS 2中,當使用合適的RTOS和仔細編寫的用戶代碼時,可以編寫實時節點。
C ++
在ROS 1中,節點和節點的API是不同的,并且需要開發者在編程時決定節點到進程的映射。在ROS 2中,建議將每個組件編譯成一個共享庫,然后可以在單獨的進程中加載 它,或與其他組件(如ROS 1 nodelets)共享相同的進程。這使得可以在部署時選擇流程布局。
在ROS 1中,不可能在一個進程中創建多個節點。這是由于API本身,也是由于內部的實施決定。在ROS 2中,可以在一個進程中創建多個節點。
工具
roslaunch(?)
在ROS 1中,roslaunch文件是用XML定義的,功能非常有限。在ROS 2中,啟動文件是用Python編寫的,可以使用更復雜的邏輯,如條件等。當前狀態只提供最小的功能來運行使用多個進程的測試。
資源查找
在ROS 1中,通過基于ROS_PACKAGE_PATH搜索文件系統來查找各種資源(包,消息,插件等)。當ROS_PACKAGE_PATH中的樹很大時,這可能導致性能較差,并且緩存產生不一致的狀態。
在ROS 2中,資源可以在編譯時在索引處注冊,然后在運行時被有效查詢。有關更多信息,請參閱資源索引的文檔。
打包
ABI版本控制(?)
由于它假定ABI不兼容,ROS 1重建所有下游軟件包。為了避免這種大的開銷,ROS 2包應該能夠聲明它的ABI,以盡可能避免重建下游包。
Windows二進制包(?)
ROS 1只能從Windows上的源代碼(也只適用于幾個ROS軟件包,不受支持)構建。ROS 2將提供基于Chocolatey的二進制包。
附件(相關資料):
-ROS 2-
ROS 2
機器人操作系統(ROS)是一套軟件庫和工具,可幫助您構建機器人應用程序。從驅動程序到最先進的算法,以及功能強大的開發人員工具,ROS都可以為您的下一個機器人項目提供所需的內容。這都是開源的。
在這里,您將找到關于如何安裝和使用ROS 2的軟件的文檔,ROS 2正在大力開發之中。請參閱下面有關ROS 2的更多信息。
如果您正在尋找有關ROS 1的信息(即,ROS已經存在10多年,現在可能會用到),請查看ROS網站或文檔wiki。
在繼續閱讀之前,請閱讀功能頁面以了解當前ROS 2版本的內容。
安裝
請參閱安裝頁面。
教程和功能
ROS 2正在大力發展。您可以檢查出的教程頁面看到一系列的什么系統可以在當前狀態下做的,如果它適合你的工程實例今天取決于具體的要求。有關當前功能的詳細信息,請參閱功能。
計劃
ROS 2目前計劃每六個月發布一個新版本(這是ROS 1的兩倍),以便社區成員有機會提供有關不斷發展的系統的早期反饋。有關即將推出的ROS 2功能的詳細信息,請參閱路線圖。
約定
有關如何為ROS 2開發做出貢獻的詳細信息,請參閱貢獻頁面和開發人員指南。
報告或提出問題
查看聯系頁面。
關于ROS 2
自2007年啟動ROS以來,機器人和ROS社區發生了很大變化。ROS 2項目的目標是適應這些變化,充分利用ROS 1的優點,改進不是什么。有一個關于ROS 2的動機完整的文章在這里。
在哪里可以找到更多信息
在design.ros2.org上有關于ROS 2設計的各種文章,例如:為什么要使用ROS 2.0?,DDS上的ROS,以及ROS 1和ROS 2之間的變化。
ROS 2的代碼是開源的,分解成各種版本庫。您可以在ros2 github組織中找到大多數存儲庫的代碼。
docs.ros2.org包含有關ROS 2內部設計和組織的最新詳細信息。
awesome-ros2是ROS 2軟件包和資源的“備忘單”風格快速參考,它將獲得(希望)在精選列表的列表中列出,以幫助GitHub用戶了解ROS 2。
以下是關于ROS 2的ROSCon講座,并提供了有關ROS 2和各種演示工作的信息:
-ROS 1-
ROS (Robot Operating System, 機器人操作系統) 提供一系列程序庫和工具以幫助軟件開發者創建機器人應用軟件。它提供了硬件抽象、設備驅動、函數庫、可視化工具、消息傳遞和軟件包管理等諸多功能。ROS遵循BSD開源許可協議。
ROS:
安裝
在你的機器上安裝ROS。
入門
學習ROS的相關概念、客戶端函數庫以及技術梗概等。
教程
ROS手把手教程,提供每一步詳細操作命令。
貢獻
如何加入ROS社區,比如分享你的代碼。
支持
遇到問題可以從這里尋求支持和幫助。
軟件:
發行版本
查看ROS不同發行版本。
軟件包
查找幾千個可用的軟件包。
核心庫
按編程語言和主題劃分的API。
常用工具
開發或調試ROS應用程序時的常用工具。
機器人/硬件:
機器人
支持ROS的機器人平臺。
傳感器
兼容ROS的傳感器驅動。
出版物、課程以及活動:
論文
帶開源代碼的ROS相關論文。
書籍
出版書籍,包括文檔、教程和開源代碼等。
課程
使用或教授ROS的課程。
活動
歷史活動和相關資料。
ROS中國:
中文社區
收集了ROS相關QQ群、論壇和博客專欄等各種社區資源。
國產機器人平臺
收集了支持ROS的國產機器人,及相關文檔、資源。
ROS維基翻譯
志愿加入ROS維基中文翻譯。
世界各地wiki鏡像站點。
----
Linux Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。