ROS 2经过一个快速迭代期后,逐渐进入了稳定更新,目前的最新版是2019年5月31日发布的Dashing Diademata,维护期两年。
关于ROS 2的介绍,古月居之前已经有很多篇文章进行了说明,大家可以参考:
今天我们就一起来尝试下Dashing版本的安装和使用。
一、安装ROS 2 Dashing
最新版本的ROS 2安装都比较轻松,和ROS 1的安装过程差异不大,按照命令输入就可以完成安装了。
1. 设置UTF-8编码
2. 更新软件源
3. 安装ros2
4. 安装自动补全工具
ros2的命令行使用argcomplete工具进行补全,所以需要安装该工具:
5. 设置环境变量
和ROS 1一样,为了让系统找到ROS命令,安装完成后需要将以下语句添加到.bashrc中:
6. 安装RWM
ROS 2默认安装的RWM是FastRTPS,也可以使用如下方式安装OpenSplice或RTI Connext的RWM:
在使用的时候通过设置环境变量,即可更换需要的RWM:
7. 安装ROS 1
目前ROS 2的功能还不是很全面,很多功能包需要依赖ROS 1,所以还是需要安装ROS 1的,安装方法可以参考ROS 1 wiki教程。
ROS 2和ROS 1之间通过ros-bridge通信,需要安装:
未来如果还有什么包需要安装的话,使用以下命令的形式就OK啦!
安装好的ROS 2及其功能包依然是放置在/opt/ros路径下边。
二、创建工作空间&编译运行
安装完成后,我们当然要迫不及待的试下ROS 2了,还记不记得ROS 1的wiki教程,第一步要干什么?
没错,创建工作空间!在ROS 2中创建工作空间非常简单,在home下创建一个文件夹即可:
然后和ROS 1一样,在工作空间下编译,这里使用的可不是catkin_make命令,而是ROS 2全新升级的colcon编译器,使用的编译命令也改成了“colcon build”。
因为没有任何功能包,所以编译很快,再看看工作空间下,是不是多出了几个文件夹:
其中的build和install大家应该都很熟悉,和ROS 1是一样的,但是多出了一个log文件夹,用来保存编译过程中的日志信息。小伙伴们可以回忆一下,ROS 1中的log文件是放在哪里的呢?
现在我们就可以试试编译功能包了。这里我们直接使用官方提供的example试试,在src中下载功能包源码:
然后回到工作空间下使用“colcon build”编译:
编译完成的功能包都会放置在install文件夹下,可以偷偷看下有没有顺利生成可执行文件。
接下来就可以运行节点了,当然不能忘记设置环境变量:
然后运行talker和listener节点:
现在两个节点就开始通信了,有没有发现,我们并没有使用类似roscore的命令启动master,这就是ROS 2最大的改变,真正成为了去中心化的分布式系统。
三、创建功能包&节点编程
以上我们使用官方提供的功能包,那么如何创建自己的功能包呢?同样使用ROS 2提供的命令行工具。比如说我们想创建一个叫learning_ros2的功能包,那么可以直接使用以下命令创建:
接下来打开创建成功的learning_ros2功能包中的src文件夹,我们尝试写几个ROS 2节点,实现最基本的服务和话题通信。
比如一个发布者节点ros2_talker.cpp:
再比如一个订阅者节点:
* 注释是对应于ROS1的实现API,代码内容较多,完整功能包请参考:
https://github.com/huchunxu/ros2_demos
代码完成之后,还需要修改CMakeLists文件,添加编译规则:
接下来就是在工作空间下编译啦!编译成功后,打开install下的lib文件夹,即可找到编译成功的可执行文件。
最激动人心的莫过于运行自己实现的程序啦:
运行之后,我们不妨理性的分析下ROS 2的代码和ROS 1的代码,到底有什么区别,古月君总结了以下几点:
ROS2中的API相比ROS1中发生了较大的变化,ROS2并不是在ROS1的基础上查漏补缺,而是完全从新设计。关于ROS2的API说明,可以参考API文档:
http://docs.ros2.org/dashing/api/rclcpp/index.html
使用了更多C++的特性,比如auto、make_shared等。
加入了QoS配置,QoS默认的配置rmw_qos_profile_default。
代码的总体架构还是与ROS1极为相似的。
四、URDF&Rviz&Gazebo
ROS 2当然少不了URDF、Rviz、Gazebo等重量级的工具,具体使用方法各位可以参考开头推荐的以往文章,操作过程完全一致。
好啦,今天的尝鲜就到这里,不知各位感觉ROS 2的味道如何呀?
领取专属 10元无门槛券
私享最新 技术干货