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
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. 测试
使用消息收发进行测试,如下,如正常则安装完成,进入教程进行学习:
源码安装请参考官网,推荐优先阅读官网。
----
----
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)。
语言
C ++标准
ROS 1的核心是针对C ++ 03,并没有在其API中使用C ++ 11功能。ROS 2广泛使用C ++ 11,并使用C ++ 14的某些部分。在未来,ROS 2可能会开始使用C ++ 17,只要它在所有主要平台上受支持。
Python
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图表
在ROS 1中,节点和主题只能在启动时重新映射。在ROS 2中,对重映射的支持尚未实现(⏳)。目标是启用重新映射以及别名,不仅在启动时间,而且在运行时。
在ROS 1中,节点名称是唯一的,当启动具有相同名称的新节点时,通过关闭现有节点来强制实施。在ROS 2中,节点名称的唯一性还没有被强制执行。
C和C ++
支持实时
ROS 1不支持编写实时代码,而是依赖于Orocos等外部框架。在ROS 2中,当使用合适的RTOS和仔细编写的用户代码时,可以编写实时节点。
C ++
节点与Nodelet
在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 1-
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议。
ROS:
-
- 在你的机器上安装ROS。
- 学习ROS的相关概念、客户端函数库以及技术梗概等。
- ROS手把手教程,提供每一步详细操作命令。
- 如何加入ROS社区,比如分享你的代码。
- 遇到问题可以从这里寻求支持和帮助。
软件:
机器人/硬件:
出版物、课程以及活动:
ROS中国:
世界各地wiki镜像站点。
----
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/78778590
- 点赞
- 收藏
- 关注作者
评论(0)