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 ardent apalone安装和使用说明_xml

ROS 2 ardent apalone安装和使用说明_ROS2_02

下面依据官网简单介绍一下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

$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main xenial main" > /etc/apt/sources.list.d/ros2-latest.list'

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 $1}' | 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. 测试

使用消息收发进行测试,如下,如正常则安装完成,进入教程进行学习:

ROS 2 ardent apalone安装和使用说明_xml_03

ROS 2 ardent apalone安装和使用说明_xml_04


源码安装请参考官网,推荐优先阅读官网。

ROS 2 ardent apalone安装和使用说明_xml_05

----

ROS 2 ardent apalone安装和使用说明_ardent apalone_06

----

ROS1与ROS2的区别?http://design.ros2.org/articles/changes.html

ROS 1和ROS 2之间的区别

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

更多文章请关注《万象专栏》