ROS 1 和 ROS 2 的前世、今生、安裝使用說(shuō)明與資料匯總

      網(wǎng)友投稿 1690 2025-03-31

      ----ROS 2 Ardent Apalone發(fā)布----


      現(xiàn)在,最常用的ROS indigo或ROS Kinetic等都是1.0時(shí)代的ROS,這個(gè)時(shí)代的ROS有一個(gè)master(roscore)。

      歷經(jīng)10年發(fā)展,不斷壯大。那么問(wèn)題來(lái)了為什么會(huì)有ROS 2.0?

      要想搞清楚這個(gè)問(wèn)題,需要參考ROS 2.0設(shè)計(jì)網(wǎng)址:http://design.ros2.org/

      這里摘錄一段話,選自Why ROS 2.0:

      Why not just enhance ROS 1

      In principle, the changes described above could be integrated into the existing core ROS code. E.g., new transport technologies could be added to?roscpp?and?rospy. We considered this option and concluded that, given the intrusive nature of the changes that would be required to achieve the benefits that we are seeking, there is too much risk associated with changing the current ROS system that is relied upon by so many people. We want ROS 1 as it exists today to keep working and be unaffected by the development of ROS 2. So ROS 2 will be built as a parallel set of packages that can be installed alongside and interoperate with ROS 1 (e.g., through message bridges).

      ----

      為什么不改進(jìn)完善ROS 1.0?

      從本質(zhì)上來(lái)說(shuō),上面描述的更改都可以集成到現(xiàn)有的ROS核心代碼中。如,新的傳輸機(jī)制可以添加到roscpp和rospy中。但是當(dāng)我們考慮到下面問(wèn)題時(shí),就能理解這個(gè)結(jié)論,即這些改進(jìn)和優(yōu)化對(duì)原有系統(tǒng)會(huì)造成入侵式的變化,改變當(dāng)前ROS系統(tǒng)有非常大的風(fēng)險(xiǎn),當(dāng)前有很多功能是開(kāi)發(fā)人員依賴原ROS系統(tǒng)開(kāi)發(fā)的。于是,我們既繼續(xù)維護(hù)ROS 1.0,不受ROS 2.0的影響,同時(shí)進(jìn)行ROS 2.0的設(shè)計(jì)。ROS 2.0與ROS 1.0并行不悖,同時(shí)通過(guò)消息橋接進(jìn)行通信。

      ----

      下面放幾張圖,大家感受一下兩者的差別:

      圖1,架構(gòu)圖

      Master沒(méi)了,節(jié)點(diǎn)平等了,無(wú)主節(jié)點(diǎn)了。DDS是什么?數(shù)據(jù)分發(fā)服務(wù)。我想到了微軟的DSS(分布式軟件服務(wù))。

      圖2,數(shù)據(jù)發(fā)布與訂閱

      需要了解更多內(nèi)容,推薦古月居ROS 2.0探索總結(jié)+ROS 1.0和ROS 2.0到底用哪個(gè)呢?

      ROS1與ROS2的區(qū)別?http://design.ros2.org/articles/changes.html

      ROS 1和ROS 2之間的區(qū)別

      本文概述了ROS 2與ROS 1相比所做的更改。

      前言

      盡可能簡(jiǎn)短地描述每一個(gè)變化,但是給熟悉ROS 1的讀者提供足夠的上下文和理由。如果有更多的外部信息可用(例如其他文章),應(yīng)該將其鏈接到。

      某些描述的功能尚不可用,并標(biāo)有?。

      平臺(tái)和依賴關(guān)系

      平臺(tái)

      ROS 1僅在Ubuntu上進(jìn)行CI測(cè)試。社區(qū)在其他Linux版本以及OS X上積極支持。

      ROS 2目前在Ubuntu Xenial,OS X El Capitan以及Windows 10上進(jìn)行了CI測(cè)試和支持(請(qǐng)參閱ci.ros2.org)。

      語(yǔ)言

      ROS 1的核心是針對(duì)C ++ 03,并沒(méi)有在其API中使用C ++ 11功能。ROS 2廣泛使用C ++ 11,并使用C ++ 14的某些部分。在未來(lái),ROS 2可能會(huì)開(kāi)始使用C ++ 17,只要它在所有主要平臺(tái)上受支持。

      ROS 1是針對(duì)Python 2. ROS 2至少需要Python版本3.5。

      重用現(xiàn)有的中間件

      ROS 1使用自定義序列化格式,自定義傳輸協(xié)議以及自定義中央發(fā)現(xiàn)機(jī)制。ROS 2有一個(gè)抽象的中間件接口,通過(guò)它提供序列化,傳輸和發(fā)現(xiàn)。目前這個(gè)接口的所有實(shí)現(xiàn)都是基于DDS標(biāo)準(zhǔn)的。這使得ROS 2能夠提供各種服務(wù)質(zhì)量的策略,從而改善通過(guò)不同網(wǎng)絡(luò)的通信。

      建立系統(tǒng)

      有關(guān)構(gòu)建系統(tǒng)的更多信息,請(qǐng)參見(jiàn)柔夷花序文章。

      支持CMake旁邊的其他構(gòu)建系統(tǒng)

      每個(gè)ROS包都是一個(gè)CMake項(xiàng)目。在ROS 2中,可以輕松地支持其他構(gòu)建系統(tǒng)。現(xiàn)在構(gòu)建工具支持CMake旁邊的純Python包。

      Python包

      在ROS 1中,使用Python代碼的軟件包只能使用setup.py文件中可用功能的一小部分,因?yàn)閟etup.py文件是由CMake內(nèi)的自定義邏輯處理的。在ROS 2中,一個(gè)Python包可以使用setup.py文件中的任何東西,例如入口點(diǎn),因?yàn)樗鼈儽徽{(diào)用python3 setup.py install。

      環(huán)境設(shè)置

      在ROS 1中,構(gòu)建工具會(huì)生成腳本,這些腳本必須來(lái)源以便在能夠使用構(gòu)建的ROS軟件包之前設(shè)置環(huán)境。這種方法只有在使用ROS特定的構(gòu)建工具構(gòu)建ROS包時(shí)才有效。

      在ROS 2中,環(huán)境設(shè)置分為特定于包的腳本和特定于工作空間的腳本。每個(gè)軟件包都提供了必要的腳本,使其在構(gòu)建后可用。構(gòu)建工具只調(diào)用特定于工作空間的腳本,然后調(diào)用特定于包的腳本。

      沒(méi)有非隔離的構(gòu)建

      在ROS 1中,可以在單個(gè)CMake上下文中構(gòu)建多個(gè)包。雖然這加快了構(gòu)建步驟,但是每個(gè)包都需要確保正確定義了交叉包目標(biāo)依賴關(guān)系。另外所有的軟件包共享相同的命名空間,導(dǎo)致目標(biāo)名稱沖突等。

      在ROS 2中,只支持隔離的構(gòu)建,即每個(gè)包都是獨(dú)立構(gòu)建的。安裝空間可以是隔離的或合并的。

      沒(méi)有開(kāi)發(fā)空間

      在ROS 1中,可以在不安裝包的情況下構(gòu)建包。從開(kāi)發(fā)空間與源空間結(jié)合起來(lái),系統(tǒng)已經(jīng)可以使用。但是每個(gè)軟件包都必須積極支持開(kāi)發(fā)空間,例如環(huán)境鉤子和CMake代碼。

      在ROS 2中,必須先安裝一個(gè)軟件包,然后才能使用它。

      ROS 1中的開(kāi)發(fā)空間的一個(gè)原因是使開(kāi)發(fā)人員能夠更改文件,例如Python代碼或啟動(dòng)文件,并直接使用修改后的代碼,而無(wú)需重新編譯軟件包。在ROS 2中保留了這個(gè)好處,可以選擇性地用符號(hào)鏈接替換安裝步驟中的復(fù)制操作。

      支持catkin_simple用例

      在ROS 1中,包c(diǎn)atkin_simple旨在使編寫(xiě)ROS包的CMake代碼變得更容易。在許多情況下,它不能實(shí)現(xiàn)這個(gè)目標(biāo),這通常是由于像開(kāi)發(fā)空間這樣的支持功能所必需的設(shè)計(jì)的限制。

      在ROS 2中,CMake API進(jìn)行了重組,以支持這個(gè)用例。

      對(duì)沒(méi)有清單的軟件包的最小支持

      在ROS 1中,構(gòu)建系統(tǒng)只考慮具有清單文件的包。在ROS 2中,可以在沒(méi)有清單文件的文件夾中檢測(cè)具有支持的構(gòu)建系統(tǒng)的包。如果軟件包遵循慣例,甚至有可能檢測(cè)到一些缺失的元信息(如依賴關(guān)系)。

      消息,服務(wù)

      有關(guān)更多信息,請(qǐng)參閱ROS接口定義文章。

      C ++中的分隔名稱空間

      在ROS 1中,.msg和.srv文件可以具有相同的名稱,但生成的代碼會(huì)發(fā)生沖突。請(qǐng)求和響應(yīng)部分的服務(wù)也是如此。

      在ROS 2中,生成的代碼使用單獨(dú)的名稱空間來(lái)保證它是無(wú)沖突的。

      Python中的同名

      為消息和服務(wù)生成的Python代碼當(dāng)前在ROS 1和ROS 2中使用相同的模塊和類(lèi)名稱。因此,它們不能在單個(gè)應(yīng)用程序中導(dǎo)入。如果需要,這個(gè)決定可能會(huì)被重新審視。

      消息定義中的可選默認(rèn)值

      在ROS 2中,消息中的原始值現(xiàn)在可以具有默認(rèn)值,在消息構(gòu)建時(shí)設(shè)置。非原始字段(即字符串?dāng)?shù)組,嵌套消息)的默認(rèn)值不可能(?)。

      數(shù)組和字符串的可選上限

      為了計(jì)算消息在內(nèi)存中的最大大小,這是必要的,這允許用動(dòng)態(tài)大小預(yù)分配消息。這對(duì)性能和實(shí)時(shí)用例很有用。

      統(tǒng)一持續(xù)時(shí)間和時(shí)間類(lèi)型

      在ROS 1中,持續(xù)時(shí)間和時(shí)間類(lèi)型是在客戶端庫(kù)中定義的。數(shù)據(jù)結(jié)構(gòu)的成員名稱在C ++(sec,nsec)和Python(secs,nsecs)中是不同的。

      在ROS 2中,這些類(lèi)型被定義為消息,因此在不同的語(yǔ)言中是一致的。

      從標(biāo)題消息中刪除序列字段

      該領(lǐng)域已被棄用了很長(zhǎng)一段時(shí)間,并沒(méi)有在ROS 1中一貫設(shè)置。

      客戶端庫(kù)

      跨語(yǔ)言

      目前ROS 2不支持主題名稱中的命名空間。這主要是由于DDS主題名稱中有效字符的限制。一個(gè)設(shè)計(jì)文檔描述了如何在未來(lái)應(yīng)該加入。

      在ROS 1中,關(guān)于ROS圖的所有信息都必須從主站查詢。在ROS 2中,更改將發(fā)布,例如,如果參數(shù)已更改,則會(huì)發(fā)出通知。

      在ROS 1中,每個(gè)節(jié)點(diǎn)通常都有自己的主要功能。在ROS 2中,建議從具有生命周期的組件中繼承子類(lèi)。

      生命周期可以被像roslaunch這樣的工具用來(lái)以確定性的方式啟動(dòng)一個(gè)由許多組件組成的系統(tǒng)(?)。

      有關(guān)更多信息,請(qǐng)參閱節(jié)點(diǎn)生命周期文章。

      在ROS 1中,全局參數(shù)和節(jié)點(diǎn)特定的動(dòng)態(tài)重新配置參數(shù)是兩個(gè)單獨(dú)的概念。在ROS 2中,正在使用統(tǒng)一的方法。它類(lèi)似于動(dòng)態(tài)重新配置,名為“全局參數(shù)服務(wù)器”(?)的節(jié)點(diǎn)將接受無(wú)條件設(shè)置值的請(qǐng)求。在ROS 1中,所有這些信息都需要被調(diào)查,因?yàn)镽OS 2的變化將被公布以通知其他實(shí)體。

      欲了解更多信息,請(qǐng)參閱參數(shù)設(shè)計(jì)文章。

      ROS 2目前沒(méi)有行動(dòng)的概念。它將在未來(lái)作為可搶占服務(wù)器和反饋發(fā)布者的組合加入。

      在ROS 1中,開(kāi)發(fā)人員只能選擇單線程執(zhí)行或多線程執(zhí)行。在ROS 2中,更多的粒度執(zhí)行模型可以在C ++中使用(例如跨越多個(gè)節(jié)點(diǎn)),并且自定義執(zhí)行器可以輕松實(shí)現(xiàn)。對(duì)于Python來(lái)說(shuō),執(zhí)行模型還沒(méi)有實(shí)現(xiàn)。

      在ROS 1中,節(jié)點(diǎn)和主題只能在啟動(dòng)時(shí)重新映射。在ROS 2中,對(duì)重映射的支持尚未實(shí)現(xiàn)(?)。目標(biāo)是啟用重新映射以及別名,不僅在啟動(dòng)時(shí)間,而且在運(yùn)行時(shí)。

      在ROS 1中,節(jié)點(diǎn)名稱是唯一的,當(dāng)啟動(dòng)具有相同名稱的新節(jié)點(diǎn)時(shí),通過(guò)關(guān)閉現(xiàn)有節(jié)點(diǎn)來(lái)強(qiáng)制實(shí)施。在ROS 2中,節(jié)點(diǎn)名稱的唯一性還沒(méi)有被強(qiáng)制執(zhí)行。

      C和C ++

      ROS 1不支持編寫(xiě)實(shí)時(shí)代碼,而是依賴于Orocos等外部框架。在ROS 2中,當(dāng)使用合適的RTOS和仔細(xì)編寫(xiě)的用戶代碼時(shí),可以編寫(xiě)實(shí)時(shí)節(jié)點(diǎn)。

      C ++

      在ROS 1中,節(jié)點(diǎn)和節(jié)點(diǎn)的API是不同的,并且需要開(kāi)發(fā)者在編程時(shí)決定節(jié)點(diǎn)到進(jìn)程的映射。在ROS 2中,建議將每個(gè)組件編譯成一個(gè)共享庫(kù),然后可以在單獨(dú)的進(jìn)程中加載 它,或與其他組件(如ROS 1 nodelets)共享相同的進(jìn)程。這使得可以在部署時(shí)選擇流程布局。

      在ROS 1中,不可能在一個(gè)進(jìn)程中創(chuàng)建多個(gè)節(jié)點(diǎn)。這是由于API本身,也是由于內(nèi)部的實(shí)施決定。在ROS 2中,可以在一個(gè)進(jìn)程中創(chuàng)建多個(gè)節(jié)點(diǎn)。

      工具

      ROS 1 和 ROS 2 的前世、今生、安裝使用說(shuō)明與資料匯總

      roslaunch(?)

      在ROS 1中,roslaunch文件是用XML定義的,功能非常有限。在ROS 2中,啟動(dòng)文件是用Python編寫(xiě)的,可以使用更復(fù)雜的邏輯,如條件等。當(dāng)前狀態(tài)只提供最小的功能來(lái)運(yùn)行使用多個(gè)進(jìn)程的測(cè)試。

      資源查找

      在ROS 1中,通過(guò)基于ROS_PACKAGE_PATH搜索文件系統(tǒng)來(lái)查找各種資源(包,消息,插件等)。當(dāng)ROS_PACKAGE_PATH中的樹(shù)很大時(shí),這可能導(dǎo)致性能較差,并且緩存產(chǎn)生不一致的狀態(tài)。

      在ROS 2中,資源可以在編譯時(shí)在索引處注冊(cè),然后在運(yùn)行時(shí)被有效查詢。有關(guān)更多信息,請(qǐng)參閱資源索引的文檔。

      打包

      ABI版本控制(?)

      由于它假定ABI不兼容,ROS 1重建所有下游軟件包。為了避免這種大的開(kāi)銷(xiāo),ROS 2包應(yīng)該能夠聲明它的ABI,以盡可能避免重建下游包。

      Windows二進(jìn)制包(?)

      ROS 1只能從Windows上的源代碼(也只適用于幾個(gè)ROS軟件包,不受支持)構(gòu)建。ROS 2將提供基于Chocolatey的二進(jìn)制包。

      ~~~~

      ~~~~

      小烏龜動(dòng)起來(lái)

      relaybot@relaybot-desktop:~$ rosnode list

      /ros_bridge

      /rosout

      /turtlesim

      relaybot@relaybot-desktop:~$ ros2 node list

      teleop_turtle

      ros_bridge

      ros_bridge

      teleop_turtle

      relaybot@relaybot-desktop:~$ ros2 topic list

      /color_sensor

      /parameter_events

      /pose

      /turtle1/cmd_vel

      relaybot@relaybot-desktop:~$ rostopic list

      /rosout

      /rosout_agg

      /turtle1/cmd_vel

      /turtle1/color_sensor

      /turtle1/pose

      $ ros2 run ros1_bridge dynamic_bridge

      Created 2 to 1 bridge for service /clear

      Created 2 to 1 bridge for service /reset

      created 2to1 bridge for topic '/turtle1/cmd_vel' with ROS 2 type 'geometry_msgs/Twist' and ROS 1 type ''

      [INFO] [ros1_bridge]: Passing message from ROS 2 ROS2_T to ROS 1 ROS1_T (showing msg only once per type) (ros2_callback() at /tmp/binarydeb/ros-r2b3-ros1-bridge-0.0.3/include/ros1_bridge/factory.hpp:144)

      下面介紹一下ROS 2.0的安裝和使用

      官方wiki: https://github.com/ros2/ros2/wiki

      這里有一點(diǎn)需要特別說(shuō)明,ROS 2.0是支持Linux,Mac OS X和Windows,但仍然是使用Ubuntu最方便。

      安裝過(guò)程比較簡(jiǎn)單,直接使用Debian包即可,簡(jiǎn)單說(shuō)一下,參考鏈接:https://github.com/ros2/ros2/wiki/Installation

      設(shè)置安裝源:

      sudo apt update && sudo apt install curl

      curl http://repo.ros2.org/repos.key | sudo apt-key add -

      sudo sh -c 'echo "deb http://repo.ros2.org/ubuntu/main xenial main" > /etc/apt/sources.list.d/ros2-latest.list'

      安裝ROS 2.0軟件包:

      sudo apt update

      sudo apt install `apt list ros-r2b3-* 2> /dev/null | grep "/" | awk -F/ '{print $1}' | grep -v -e ros-r2b3-ros1-bridge -e ros-r2b3-turtlebot2- | tr "\n" " "`

      環(huán)境配置:

      source /opt/ros/r2b3/setup.bash

      如果需要與ROS 1.0通信

      sudo apt update

      sudo apt install ros-r2b3-ros1-bridge ros-r2b3-turtlebot2-*

      具體安裝請(qǐng)參考英文原版網(wǎng)址。

      ----

      下面我們來(lái)測(cè)試一下ROS 2.0。

      老方法在一個(gè)終端發(fā)送消息,另一個(gè)終端接受消息:

      ros2 run demo_nodes_cpp talker

      ros2 run demo_nodes_py listener

      發(fā)布TF數(shù)據(jù):

      ros2 run tf2_ros static_transform_publisher -- 1 2 3 0.5 0.1 -1.0 foo bar

      ros2 run tf2_ros tf2_echo -- foo bar

      測(cè)試USB攝像頭:

      ros2 run image_tools cam2image

      ros2 run image_tools showimage

      ----

      ROS 1.0和ROS 2.0的示例:

      1. 簡(jiǎn)單的發(fā)布和訂閱

      需要四個(gè)終端,需要注意環(huán)境配置:

      2.? 圖像傳輸

      3. 服務(wù)

      ros2.0的命令與ros1.0保持了比較好的兼容性。示例如下:

      relaybot@relaybot-desktop:~$ ros2 pkg executables

      amcl amcl

      astra_camera astra_camera_node

      astra_camera create_udev_rules

      cartographer_ros cartographer_node

      composition api_composition

      composition api_composition_cli

      composition dlopen_composition

      composition linktime_composition

      composition manual_composition

      demo_nodes_cpp add_two_ints_client

      demo_nodes_cpp add_two_ints_client_async

      demo_nodes_cpp add_two_ints_server

      demo_nodes_cpp allocator_tutorial

      demo_nodes_cpp imu_listener

      demo_nodes_cpp list_parameters

      demo_nodes_cpp list_parameters_async

      demo_nodes_cpp listener

      demo_nodes_cpp listener_best_effort

      demo_nodes_cpp one_off_timer

      demo_nodes_cpp parameter_events

      demo_nodes_cpp parameter_events_async

      demo_nodes_cpp parameter_node

      demo_nodes_cpp reuse_timer

      demo_nodes_cpp ros2param

      demo_nodes_cpp set_and_get_parameters

      demo_nodes_cpp set_and_get_parameters_async

      demo_nodes_cpp talker

      demo_nodes_cpp_native talker

      demo_nodes_py add_two_ints_client

      demo_nodes_py add_two_ints_client_async

      demo_nodes_py add_two_ints_server

      demo_nodes_py listener

      demo_nodes_py listener_qos

      demo_nodes_py talker

      demo_nodes_py talker_qos

      depthimage_to_laserscan depthimage_to_laserscan_node

      depthimage_to_pointcloud2 depthimage_to_pointcloud2_node

      dummy_map_server dummy_map_server

      dummy_sensors dummy_joint_states

      dummy_sensors dummy_laser

      examples_rclcpp_minimal_client client_main

      examples_rclcpp_minimal_composition composition_composed

      examples_rclcpp_minimal_composition composition_publisher

      examples_rclcpp_minimal_composition composition_subscriber

      examples_rclcpp_minimal_publisher publisher_lambda

      examples_rclcpp_minimal_publisher publisher_member_function

      examples_rclcpp_minimal_publisher publisher_not_composable

      examples_rclcpp_minimal_service service_main

      examples_rclcpp_minimal_subscriber subscriber_lambda

      examples_rclcpp_minimal_subscriber subscriber_member_function

      examples_rclcpp_minimal_subscriber subscriber_not_composable

      examples_rclcpp_minimal_timer timer_lambda

      examples_rclcpp_minimal_timer timer_member_function

      examples_rclpy_executors callback_group

      examples_rclpy_executors composed

      examples_rclpy_executors custom_callback_group

      examples_rclpy_executors custom_executor

      examples_rclpy_executors listener

      examples_rclpy_executors talker

      examples_rclpy_minimal_client client

      examples_rclpy_minimal_client client_async

      examples_rclpy_minimal_client client_async_member_function

      examples_rclpy_minimal_publisher publisher_local_function

      examples_rclpy_minimal_publisher publisher_member_function

      examples_rclpy_minimal_publisher publisher_old_school

      examples_rclpy_minimal_service service

      examples_rclpy_minimal_service service_member_function

      examples_rclpy_minimal_subscriber subscriber_lambda

      examples_rclpy_minimal_subscriber subscriber_member_function

      examples_rclpy_minimal_subscriber subscriber_old_school

      image_tools cam2image

      image_tools showimage

      intra_process_demo camera_node

      intra_process_demo cyclic_pipeline

      intra_process_demo image_pipeline_all_in_one

      intra_process_demo image_pipeline_with_two_image_view

      intra_process_demo image_view_node

      intra_process_demo two_node_pipeline

      intra_process_demo watermark_node

      joy joy_node

      lifecycle lifecycle_listener

      lifecycle lifecycle_service_client

      lifecycle lifecycle_service_client_py.py

      lifecycle lifecycle_talker

      map_server map_saver

      map_server map_server

      robot_state_publisher robot_state_publisher

      ros1_bridge dynamic_bridge

      ros1_bridge ros1_bridge_generate_factories

      ros1_bridge parameter_bridge

      ros1_bridge simple_bridge

      ros1_bridge simple_bridge_1_to_2

      ros1_bridge simple_bridge_2_to_1

      ros1_bridge static_bridge

      ros1_bridge test_ros2_client_cpp

      ros1_bridge test_ros2_server_cpp

      rosidl_generator_c rosidl_generator_c

      rosidl_generator_cpp rosidl_generator_cpp

      rosidl_generator_dds_idl rosidl_generator_dds_idl

      rosidl_generator_py rosidl_generator_py

      rosidl_typesupport_c rosidl_typesupport_c

      rosidl_typesupport_cpp rosidl_typesupport_cpp

      rosidl_typesupport_introspection_c rosidl_typesupport_introspection_c

      rosidl_typesupport_introspection_cpp rosidl_typesupport_introspection_cpp

      rosidl_typesupport_opensplice_c rosidl_typesupport_opensplice_c

      rosidl_typesupport_opensplice_cpp rosidl_typesupport_opensplice_cpp

      teleop_twist_joy teleop_node

      teleop_twist_keyboard teleop_twist_keyboard

      tf2_ros static_transform_publisher

      tf2_ros tf2_echo

      tf2_ros tf2_monitor

      topic_monitor data_publisher

      topic_monitor launch_depth_demo

      topic_monitor launch_fragmentation_demo

      topic_monitor launch_reliability_demo

      topic_monitor topic_monitor

      turtlebot2_drivers dumb_teleop

      turtlebot2_drivers kobuki_node

      turtlebot2_follower follower

      relaybot@relaybot-desktop:~$

      relaybot@relaybot-desktop:~$ ros2 topic -h

      usage: ros2 topic [-h] [--include-hidden-topics]

      Call `ros2 topic -h` for more detailed usage. ...

      Various topic related sub-commands

      optional arguments:

      -h, --help show this help message and exit

      --include-hidden-topics

      Consider hidden topics as well

      Commands:

      echo Output messages from a topic

      list Output a list of available topics

      pub Publish a message to a topic

      Call `ros2 topic -h` for more detailed usage.

      relaybot@relaybot-desktop:~$ ros2 topic list

      /parameter_events

      relaybot@relaybot-desktop:~$ ros2 node list

      ros_bridge

      relaybot@relaybot-desktop:~$

      relaybot@relaybot-desktop:~$ ros2 --help

      usage: ros2 [-h] Call `ros2 -h` for more detailed usage. ...

      ros2 is an extensible command-line tool for ROS 2.

      optional arguments:

      -h, --help show this help message and exit

      Commands:

      daemon Various daemon related sub-commands

      msg Various msg related sub-commands

      node Various node related sub-commands

      pkg Various package related sub-commands

      run Run a package specific executable

      security Various security related sub-commands

      service Various service related sub-commands

      srv Various srv related sub-commands

      topic Various topic related sub-commands

      Call `ros2 -h` for more detailed usage.

      資料匯總:

      ------

      機(jī)器人操作系統(tǒng)(ROS)的2.0時(shí)代(ROS 2.0)

      一個(gè)精心設(shè)計(jì)的機(jī)器人操作系統(tǒng)2.0版本(ROS 2.0)資源和庫(kù)的列表

      內(nèi)容

      軟件

      文檔

      圖書(shū)

      培訓(xùn)

      演講

      軟件包(或庫(kù))

      示例

      examples / rclcpp?- C ++示例。

      examples / rclpy?- Python示例。

      rcljava_examples?- 包含如何使用rcljava API的示例的軟件包。

      ros2_talker_android,ros2_listener_android?- 用于ROS2 Java綁定的Android應(yīng)用程序示例。

      “系統(tǒng)”綁定

      rclandroid?- Android API for ROS2。

      rclnodejs?- Node.js版本的ROS2.0客戶端。

      riot-ros2?- 該項(xiàng)目使ROS2能夠使用RIOT操作系統(tǒng)在微控制器上運(yùn)行。

      客戶端庫(kù)

      rclcpp?- C ++的ROS客戶端庫(kù)。

      rclpy?- 用于Python的ROS客戶端庫(kù)。

      rcljava?- 用于Java的ROS客戶端庫(kù)。

      rclobjc?- Objective C的ROS客戶端庫(kù)(適用于iOS)。

      rclc?- C的ROS客戶端庫(kù)

      rosserial?- 用于小型嵌入式設(shè)備(如Arduino)的ROS客戶端庫(kù)。

      IDL生成器

      rosidl_generator_java?- 在Java中生成ROS接口。

      rosidl_generator_objc?- 生成Objective C中的ROS接口。

      rosidl_generator_cpp?- 在C ++中生成ROS接口。

      rosidl_generator_py?- 在Python中生成ROS接口。

      rosidl_generator_c?- 在C中生成ROS接口

      RMW(ROS中間件接口)

      rmw?- 包含ROS中間件API。

      rmw_connext_cpp?- 使用C ++中的RTI Connext靜態(tài)代碼生成實(shí)現(xiàn)ROS中間件接口。

      rmw_fastrtps_cpp?- 使用C ++中的eProsima FastRTPS靜態(tài)代碼實(shí)現(xiàn)ROS中間件界面。

      rmw_opensplice_cpp?- 使用C ++中的PrismTech OpenSplice靜態(tài)代碼生成實(shí)現(xiàn)ROS中間件界面。

      編譯系統(tǒng)(Linux)

      meta-ros2?- 用于OpenEmbedded Linux的ROS 2層

      編譯系統(tǒng)(ROS2)

      ament_cmake_export_jars?- 將Java歸檔導(dǎo)出到CMake中的ament構(gòu)建系統(tǒng)中的下游程序包的功能。

      rmw_implementation_cmake?- 可以發(fā)現(xiàn)和枚舉可用實(shí)現(xiàn)的CMake功能。

      文檔

      ROS 2設(shè)計(jì)?- 指導(dǎo)和指導(dǎo)ROS 2.0設(shè)計(jì)工作的文章。

      ROS 2文檔(概述)?- 有關(guān)ROS 2內(nèi)部設(shè)計(jì)和組織的詳細(xì)信息。

      ROS 2維基?- 入口點(diǎn)用于查找有關(guān)ROS 2的所有信息。

      圖書(shū)

      沒(méi)有書(shū)出版

      培訓(xùn)班

      還沒(méi)有課程

      演講

      ROSCon 2017

      推出用于機(jī)器人未來(lái)開(kāi)發(fā)的ROS 2.0愿景 ? ?幻燈片?視頻

      ROS2改進(jìn)和細(xì)節(jié)調(diào)整 ? ?幻燈片?視頻

      在Turtlebot2使用ROS2實(shí)現(xiàn)SLAM ? ?幻燈片?視頻

      使用ROS2進(jìn)行基于視覺(jué)的操作與工業(yè)機(jī)器人 ? ?幻燈片?視頻

      ROSCon 2016

      ROS 2更新 ? ?幻燈片?視頻

      評(píng)估ROS2通信層的擴(kuò)展性 ? ?幻燈片?視頻

      ROSCon 2015

      “小”嵌入式系統(tǒng)上的ROS 2 ? ?幻燈片?視頻

      ROS 2狀態(tài) - 演示和背后的技術(shù) ? ?幻燈片?視頻

      ROS 2的實(shí)時(shí)性能 ???幻燈片?視頻

      ------

      發(fā)布Ardent Apalone

      Chris Lalancette

      ROS 2 Ardent Apalone(代號(hào)“ardent”; 2017年12月)

      歡迎使用Ardent Apalone的ROS 2軟件的第一個(gè)非beta版本!

      支持的平臺(tái)

      這個(gè)版本的ROS 2支持三種平臺(tái):

      Ubuntu 16.04(Xenial)

      Mac OS X 10.12(Sierra)

      Windows 10

      所有3個(gè)平臺(tái)都提供了二進(jìn)制包以及如何從源代碼編譯的說(shuō)明(請(qǐng)參閱安裝說(shuō)明以及文檔)。

      特征

      分布式發(fā)現(xiàn),發(fā)布/訂閱,請(qǐng)求/響應(yīng)通信

      由C API提供

      使用不同的供應(yīng)商實(shí)施:

      eProsima的FastRTPS以及凌華的OpenSplice(來(lái)自二進(jìn)制和源代碼)

      RTI的Connext(僅來(lái)自源)

      許多服務(wù)質(zhì)量的設(shè)置處理非理想的網(wǎng)絡(luò)

      DDS安全支持(使用Connext和FastRTPS)

      C ++和Python 3客戶端庫(kù)

      在C中共享通用代碼來(lái)統(tǒng)一實(shí)現(xiàn)

      執(zhí)行模型與節(jié)點(diǎn)分離,可組合的節(jié)點(diǎn)

      節(jié)點(diǎn)特定的參數(shù)(僅在C ++ atm中)

      生命周期(僅在C ++ atm中)

      可選的使用相同API的進(jìn)程內(nèi)通信(僅在C ++中)

      消息定義(包含數(shù)組和字符串以及默認(rèn)值)

      命令行工具(例如ros2 run)

      rviz?與幾個(gè)顯示類(lèi)型(Windows版本可能會(huì)在幾個(gè)星期后)

      基于文件系統(tǒng)的資源索引(查詢信息無(wú)遞歸爬行)

      pub / sub的實(shí)時(shí)安全代碼路徑(僅兼容DDS實(shí)現(xiàn))

      ROS 1和ROS 2之間的橋梁

      HSR演示參見(jiàn)Beta 3

      Turtlebot演示請(qǐng)參閱Beta 2

      有關(guān)更詳細(xì)的說(shuō)明,請(qǐng)參閱功能頁(yè)面。

      自Beta 3版本以來(lái)的改進(jìn):

      rviz

      C ++中消息數(shù)據(jù)結(jié)構(gòu)的不同初始化選項(xiàng)

      記錄API改進(jìn),現(xiàn)在也用于演示

      用C ++支持不同的時(shí)鐘

      Python客戶端庫(kù)中的等待服務(wù)支持

      REP 149的實(shí)現(xiàn)草案指定了包清單文件的格式3

      已知的問(wèn)題

      FastRTPS性能與更大的數(shù)據(jù),如圖像演示

      使用Connext,目前不允許具有相同基本名稱但名稱空間不同的兩個(gè)主題具有不同的類(lèi)型(請(qǐng)參見(jiàn)問(wèn)題)。

      節(jié)點(diǎn)名稱(例如使用ros2 node list)的列表在某些rmw實(shí)現(xiàn)中不起作用。

      在Windows上,嘗試中止使用時(shí),Python啟動(dòng)文件可能會(huì)掛起Ctrl-C(請(qǐng)參閱問(wèn)題)。為了繼續(xù)使用被掛起命令阻塞的shell,可能需要使用進(jìn)程監(jiān)視器來(lái)結(jié)束掛起的Python進(jìn)程。

      ------

      ROS 2 Ardent Apalone發(fā)布

      ros2

      1

      我們很高興宣布ROS 2發(fā)布Ardent Apalone!

      安裝說(shuō)明和教程可以在ROS 2 wiki?86上找到。

      要了解此版本中的內(nèi)容,請(qǐng)務(wù)必閱讀Ardent頁(yè)面36。

      我們希望在此版本中強(qiáng)調(diào)一些功能和改進(jìn):

      第一個(gè)非beta版本。

      rviz?包括幾個(gè)插件(Windows版本將在幾周后)

      C ++中消息數(shù)據(jù)結(jié)構(gòu)的不同初始化選項(xiàng)

      記錄API改進(jìn),現(xiàn)在也用于演示

      用C ++支持不同的時(shí)鐘

      Python客戶端庫(kù)中的等待服務(wù)支持

      實(shí)施草案REP 149?6包清單文件的指定格式3

      雖然總是有更多的工作要做,但我們還是要考慮幾個(gè)核心組件,以供更廣泛的受眾使用。因此,我們放棄了“beta”標(biāo)簽,并將支持Ardent一年,修復(fù)錯(cuò)誤并保持發(fā)布工作,尤其是在具有滾動(dòng)依賴版本(OS X / Windows)的平臺(tái)上。我們將為ROS 2的新版本定期發(fā)布六個(gè)月的發(fā)布周期。雖然我們的目標(biāo)是盡可能保持API的穩(wěn)定性,但我們不能保證發(fā)布之間的API兼容性為100%。也就是說(shuō),ROS 2是否可以用于您的應(yīng)用程序,或者現(xiàn)在是否可以從ROS 1切換到ROS 2,取決于用例的確切功能集和要求。請(qǐng)檢查功能頁(yè)面21以及路線圖16?了解更多信息。

      與往常一樣,我們邀請(qǐng)您嘗試新軟件,提供反饋,報(bào)告錯(cuò)誤,并建議功能(并貢獻(xiàn)代碼!):https://github.com/ros2/ros2/wiki/Contact?1

      ------

      ~End~

      Python 任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何應(yīng)用負(fù)vlookup以返回Excel中鍵字段左側(cè)的值?
      下一篇:什么是零代碼平臺(tái)?適合誰(shuí)用,如何選型?
      相關(guān)文章
      久久国产亚洲精品无码| 亚洲欧洲日产v特级毛片| 亚洲一区二区女搞男| 在线a亚洲v天堂网2019无码| 亚洲免费一级视频| 亚洲啪啪AV无码片| 成人精品国产亚洲欧洲| 亚洲精品免费在线视频| 亚洲区日韩区无码区| 亚洲综合国产精品| 亚洲精品国产精品乱码不卞| 亚洲男人天堂2018av| 国产成人无码综合亚洲日韩| 中文日韩亚洲欧美制服| 亚洲视频一区网站| 亚洲视频一区二区在线观看| 亚洲综合一区二区| 亚洲人成免费网站| 亚洲国产精品不卡在线电影| 国产精品久久亚洲一区二区| 亚洲精品在线视频| 国产午夜亚洲精品午夜鲁丝片 | 狠狠综合亚洲综合亚洲色| 亚洲国产成人久久综合一区| 久久99亚洲网美利坚合众国| 亚洲成aⅴ人片在线影院八| 亚洲一区二区三区在线| 久久精品国产96精品亚洲| 色天使色婷婷在线影院亚洲| 夜色阁亚洲一区二区三区| 亚洲一区二区影院| 亚洲天堂电影在线观看| 亚洲国产美国国产综合一区二区| 久久亚洲精品无码VA大香大香| 亚洲剧情在线观看| 亚洲嫩草影院在线观看| 亚洲中文字幕久久精品无码A| 亚洲a无码综合a国产av中文| 亚洲中文字幕乱码AV波多JI| 深夜国产福利99亚洲视频| 亚洲AV无码专区亚洲AV桃|