ROS 1.0 和 ROS 2.0 的前世、今生、安裝使用說明與資料匯總

本文是易科機器人實驗室張瑞雷老師整理的ROS機器人操作系統的相關書籍、資料和學習路徑,想學習這方面技術的同學一定要收藏了。

現在,最常用的ROS indigo或ROS Kinetic等都是1.0時代的ROS,這個時代的ROS有一個master(roscore)。

歷經10年發展,不斷壯大。那麼問題來了為什麼會有ROS 2.0?

要想搞清楚這個問題,需要參考ROS 2.0設計網址: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).

----

為什麼不改進完善ROS 1.0?

從本質上來說,上面描述的更改都可以集成到現有的ROS核心代碼中。如,新的傳輸機制可以添加到roscpp和rospy中。但是當我們考慮到下面問題時,就能理解這個結論,即這些改進和優化對原有系統會造成入侵式的變化,改變當前ROS系統有非常大的風險,當前有很多功能是開發人員依賴原ROS系統開發的。於是,我們既繼續維護ROS 1.0,不受ROS 2.0的影響,同時進行ROS 2.0的設計。ROS 2.0與ROS 1.0並行不悖,同時通過消息橋接進行通信。

----

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

圖1,架構圖

Master沒了,節點平等了,無主節點了。DDS是什麼?數據分發服務。我想到了微軟的DSS(分散式軟體服務)。

圖2,數據發布與訂閱

需要了解更多內容,推薦古月居ROS 2.0探索總結+ROS 1.0和ROS 2.0到底用哪個呢?

~~~~

小烏龜動起來

[html] view plain copy print?

  1. relaybot@relaybot-desktop:~$ rosnode list
  2. /ros_bridge
  3. /rosout
  4. /turtlesim
  5. relaybot@relaybot-desktop:~$ ros2 node list
  6. teleop_turtle
  7. ros_bridge
  8. ros_bridge
  9. teleop_turtle
  10. relaybot@relaybot-desktop:~$ ros2 topic list
  11. /color_sensor
  12. /parameter_events
  13. /pose
  14. /turtle1/cmd_vel
  15. relaybot@relaybot-desktop:~$ rostopic list
  16. /rosout
  17. /rosout_agg
  18. /turtle1/cmd_vel
  19. /turtle1/color_sensor
  20. /turtle1/pose

[html] view plain copy print?

  1. $ ros2 run ros1_bridge dynamic_bridge
  2. Created 2 to 1 bridge for service /clear
  3. Created 2 to 1 bridge for service /reset
  4. created 2to1 bridge for topic /turtle1/cmd_vel with ROS 2 type geometry_msgs/Twist and ROS 1 type
  5. [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

這裡有一點需要特別說明,ROS 2.0是支持Linux,Mac OS X和Windows,但仍然是使用Ubuntu最方便。

安裝過程比較簡單,直接使用Debian包即可,簡單說一下,參考鏈接:https://github.com/ros2/ros2/wiki/Installation

設置安裝源:

sudo apt update && sudo apt install curlncurl http://repo.ros2.org/repos.key | sudo apt-key add -nsudo sh -c echo "deb http://repo.ros2.org/ubuntu/main xenial main" > /etc/apt/sources.list.d/ros2-latest.listn

安裝ROS 2.0軟體包:

sudo apt updatensudo 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" " "`n

環境配置:

source /opt/ros/r2b3/setup.bashn

如果需要與ROS 1.0通信

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

具體安裝請參考英文原版網址。

----

下面我們來測試一下ROS 2.0。

老方法在一個終端發送消息,另一個終端接受消息:

ros2 run demo_nodes_cpp talkern

ros2 run demo_nodes_py listenern

發布TF數據:

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

ros2 run tf2_ros tf2_echo -- foo barn

測試USB攝像頭:

ros2 run image_tools cam2image

ros2 run image_tools showimage

----

ROS 1.0和ROS 2.0的示例:

1. 簡單的發布和訂閱

需要四個終端,需要注意環境配置:

2. 圖像傳輸

3. 服務

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

[html] view plain copy print?

  1. relaybot@relaybot-desktop:~$ ros2 pkg executables
  2. amcl amcl
  3. astra_camera astra_camera_node
  4. astra_camera create_udev_rules
  5. cartographer_ros cartographer_node
  6. composition api_composition
  7. composition api_composition_cli
  8. composition dlopen_composition
  9. composition linktime_composition
  10. composition manual_composition
  11. demo_nodes_cpp add_two_ints_client
  12. demo_nodes_cpp add_two_ints_client_async
  13. demo_nodes_cpp add_two_ints_server
  14. demo_nodes_cpp allocator_tutorial
  15. demo_nodes_cpp imu_listener
  16. demo_nodes_cpp list_parameters
  17. demo_nodes_cpp list_parameters_async
  18. demo_nodes_cpp listener
  19. demo_nodes_cpp listener_best_effort
  20. demo_nodes_cpp one_off_timer
  21. demo_nodes_cpp parameter_events
  22. demo_nodes_cpp parameter_events_async
  23. demo_nodes_cpp parameter_node
  24. demo_nodes_cpp reuse_timer
  25. demo_nodes_cpp ros2param
  26. demo_nodes_cpp set_and_get_parameters
  27. demo_nodes_cpp set_and_get_parameters_async
  28. demo_nodes_cpp talker
  29. demo_nodes_cpp_native talker
  30. demo_nodes_py add_two_ints_client
  31. demo_nodes_py add_two_ints_client_async
  32. demo_nodes_py add_two_ints_server
  33. demo_nodes_py listener
  34. demo_nodes_py listener_qos
  35. demo_nodes_py talker
  36. demo_nodes_py talker_qos
  37. depthimage_to_laserscan depthimage_to_laserscan_node
  38. depthimage_to_pointcloud2 depthimage_to_pointcloud2_node
  39. dummy_map_server dummy_map_server
  40. dummy_sensors dummy_joint_states
  41. dummy_sensors dummy_laser
  42. examples_rclcpp_minimal_client client_main
  43. examples_rclcpp_minimal_composition composition_composed
  44. examples_rclcpp_minimal_composition composition_publisher
  45. examples_rclcpp_minimal_composition composition_subscriber
  46. examples_rclcpp_minimal_publisher publisher_lambda
  47. examples_rclcpp_minimal_publisher publisher_member_function
  48. examples_rclcpp_minimal_publisher publisher_not_composable
  49. examples_rclcpp_minimal_service service_main
  50. examples_rclcpp_minimal_subscriber subscriber_lambda
  51. examples_rclcpp_minimal_subscriber subscriber_member_function
  52. examples_rclcpp_minimal_subscriber subscriber_not_composable
  53. examples_rclcpp_minimal_timer timer_lambda
  54. examples_rclcpp_minimal_timer timer_member_function
  55. examples_rclpy_executors callback_group
  56. examples_rclpy_executors composed
  57. examples_rclpy_executors custom_callback_group
  58. examples_rclpy_executors custom_executor
  59. examples_rclpy_executors listener
  60. examples_rclpy_executors talker
  61. examples_rclpy_minimal_client client
  62. examples_rclpy_minimal_client client_async
  63. examples_rclpy_minimal_client client_async_member_function
  64. examples_rclpy_minimal_publisher publisher_local_function
  65. examples_rclpy_minimal_publisher publisher_member_function
  66. examples_rclpy_minimal_publisher publisher_old_school
  67. examples_rclpy_minimal_service service
  68. examples_rclpy_minimal_service service_member_function
  69. examples_rclpy_minimal_subscriber subscriber_lambda
  70. examples_rclpy_minimal_subscriber subscriber_member_function
  71. examples_rclpy_minimal_subscriber subscriber_old_school
  72. image_tools cam2image
  73. image_tools showimage
  74. intra_process_demo camera_node
  75. intra_process_demo cyclic_pipeline
  76. intra_process_demo image_pipeline_all_in_one
  77. intra_process_demo image_pipeline_with_two_image_view
  78. intra_process_demo image_view_node
  79. intra_process_demo two_node_pipeline
  80. intra_process_demo watermark_node
  81. joy joy_node
  82. lifecycle lifecycle_listener
  83. lifecycle lifecycle_service_client
  84. lifecycle lifecycle_service_client_py.py
  85. lifecycle lifecycle_talker
  86. map_server map_saver
  87. map_server map_server
  88. robot_state_publisher robot_state_publisher
  89. ros1_bridge dynamic_bridge
  90. ros1_bridge ros1_bridge_generate_factories
  91. ros1_bridge parameter_bridge
  92. ros1_bridge simple_bridge
  93. ros1_bridge simple_bridge_1_to_2
  94. ros1_bridge simple_bridge_2_to_1
  95. ros1_bridge static_bridge
  96. ros1_bridge test_ros2_client_cpp
  97. ros1_bridge test_ros2_server_cpp
  98. rosidl_generator_c rosidl_generator_c
  99. rosidl_generator_cpp rosidl_generator_cpp
  100. rosidl_generator_dds_idl rosidl_generator_dds_idl
  101. rosidl_generator_py rosidl_generator_py
  102. rosidl_typesupport_c rosidl_typesupport_c
  103. rosidl_typesupport_cpp rosidl_typesupport_cpp
  104. rosidl_typesupport_introspection_c rosidl_typesupport_introspection_c
  105. rosidl_typesupport_introspection_cpp rosidl_typesupport_introspection_cpp
  106. rosidl_typesupport_opensplice_c rosidl_typesupport_opensplice_c
  107. rosidl_typesupport_opensplice_cpp rosidl_typesupport_opensplice_cpp
  108. teleop_twist_joy teleop_node
  109. teleop_twist_keyboard teleop_twist_keyboard
  110. tf2_ros static_transform_publisher
  111. tf2_ros tf2_echo
  112. tf2_ros tf2_monitor
  113. topic_monitor data_publisher
  114. topic_monitor launch_depth_demo
  115. topic_monitor launch_fragmentation_demo
  116. topic_monitor launch_reliability_demo
  117. topic_monitor topic_monitor
  118. turtlebot2_drivers dumb_teleop
  119. turtlebot2_drivers kobuki_node
  120. turtlebot2_follower follower
  121. relaybot@relaybot-desktop:~$

[html] view plain copy print?

  1. relaybot@relaybot-desktop:~$ ros2 topic -h
  2. usage: ros2 topic [-h] [--include-hidden-topics]
  3. Call `ros2 topic <command> -h` for more detailed usage. ...
  4. Various topic related sub-commands
  5. optional arguments:
  6. -h, --help show this help message and exit
  7. --include-hidden-topics
  8. Consider hidden topics as well
  9. Commands:
  10. echo Output messages from a topic
  11. list Output a list of available topics
  12. pub Publish a message to a topic
  13. Call `ros2 topic <command> -h` for more detailed usage.
  14. relaybot@relaybot-desktop:~$ ros2 topic list
  15. /parameter_events
  16. relaybot@relaybot-desktop:~$ ros2 node list
  17. ros_bridge
  18. relaybot@relaybot-desktop:~$
  19. relaybot@relaybot-desktop:~$ ros2 --help
  20. usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
  21. ros2 is an extensible command-line tool for ROS 2.
  22. optional arguments:
  23. -h, --help show this help message and exit
  24. Commands:
  25. daemon Various daemon related sub-commands
  26. msg Various msg related sub-commands
  27. node Various node related sub-commands
  28. pkg Various package related sub-commands
  29. run Run a package specific executable
  30. security Various security related sub-commands
  31. service Various service related sub-commands
  32. srv Various srv related sub-commands
  33. topic Various topic related sub-commands
  34. Call `ros2 <command> -h` for more detailed usage.

資料匯總:

------

機器人操作系統(ROS)的2.0時代(ROS 2.0)

一個精心設計的機器人操作系統2.0版本(ROS 2.0)資源和庫的列表

內容

  • 軟體
  • 文檔
  • 圖書
  • 培訓
  • 演講

軟體包(或庫)

  • 示例
    • examples / rclcpp - C ++示例。
    • examples / rclpy - Python示例。
    • rcljava_examples - 包含如何使用rcljava API的示例的軟體包。
    • ros2_talker_android,ros2_listener_android - 用於ROS2 Java綁定的Android應用程序示例。
  • 「系統」綁定
    • rclandroid - Android API for ROS2。
    • rclnodejs - Node.js版本的ROS2.0客戶端。
    • riot-ros2 - 該項目使ROS2能夠使用RIOT操作系統在微控制器上運行。
  • 客戶端庫
    • rclcpp - C ++的ROS客戶端庫。
    • rclpy - 用於Python的ROS客戶端庫。
    • rcljava - 用於Java的ROS客戶端庫。
    • rclobjc - Objective C的ROS客戶端庫(適用於iOS)。
    • rclc - C的ROS客戶端庫
    • rosserial - 用於小型嵌入式設備(如Arduino)的ROS客戶端庫。
  • 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靜態代碼生成實現ROS中間件介面。
    • rmw_fastrtps_cpp - 使用C ++中的eProsima FastRTPS靜態代碼實現ROS中間件界面。
    • rmw_opensplice_cpp - 使用C ++中的PrismTech OpenSplice靜態代碼生成實現ROS中間件界面。
  • 編譯系統(Linux)
    • meta-ros2 - 用於OpenEmbedded Linux的ROS 2層
  • 編譯系統(ROS2)
    • ament_cmake_export_jars - 將Java歸檔導出到CMake中的ament構建系統中的下遊程序包的功能。
    • rmw_implementation_cmake - 可以發現和枚舉可用實現的CMake功能。

文檔

  • ROS 2設計 - 指導和指導ROS 2.0設計工作的文章。
  • ROS 2文檔(概述) - 有關ROS 2內部設計和組織的詳細信息。
  • ROS 2維基 - 入口點用於查找有關ROS 2的所有信息。

圖書

沒有書出版

培訓班

還沒有課程

演講

  • ROSCon 2017
    • 推出用於機器人未來開發的ROS 2.0願景 幻燈片 視頻
    • ROS2改進和細節調整 幻燈片 視頻
    • 在Turtlebot2使用ROS2實現SLAM 幻燈片 視頻
    • 使用ROS2進行基於視覺的操作與工業機器人 幻燈片 視頻
  • ROSCon 2016
    • ROS 2更新 幻燈片 視頻
    • 評估ROS2通信層的擴展性 幻燈片 視頻
  • ROSCon 2015
    • 「小」嵌入式系統上的ROS 2 幻燈片 視頻
    • ROS 2狀態 - 演示和背後的技術 幻燈片 視頻
    • ROS 2的實時性能 幻燈片 視頻

------

~End~

推薦閱讀:

小朋友學ROS機器人——使用Scratch2和ROS進行機器人圖形化編程學習
【ROS教程 007】3D建模與模擬
怎樣用ROS打造機器人建圖導航
ROS和ROS2.0現在到底該學習哪個呢?
基於ROS的自主導航小車Plantbot--SLAM

TAG:机器人操作平台ROS |