ROS2探索总结(九)—— ROS 2发布第三个正式版Crystal Clemmys

11478
13
2018年12月20日 21时38分

也许你还不知道,ROS 2刚刚发布了第三个正式版——Crystal Clemmys,这个版本支持以下平台:

Tier 1 platforms:

  • Ubuntu 18.04 (Bionic)
  • Mac OS X 10.12 (Sierra)
  • Windows 10

Tier 2 platforms:

  • Ubuntu 16.04 (Xenial)

ROS 2也在不断完善自身的功能,在最新的Crystal版本中,又添加了如下新特性:

    • Actions in C / C++ (server / client examples.)
    • gazebo_ros_pkgs
    • image_transport
    • navigation2
    • rosbag2
    • rqt
    • Improvement in memory management
    • Introspection information about nodes
    • Launch system improvements
    • Arguments
    • Nested launch files
    • Conditions
    • Pass params to Nodes
    • Laid the groundwork for file-based logging and /rosout publishing
    • Time and Duration API in Python
    • Parameters work with Python nodes

注:可以在https://github.com/ros2/ros2/releases找到更多发布信息。

说了这么多,还是赶紧上手尝试一下吧!

一、安装ROS 2

首先当然是安装ROS 2 Crystal,可以按照以下步骤进行安装:

1. 设置UTF-8编码

$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8

2. 更新软件源

$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ curl http://repo.ros2.org/repos.key | sudo apt-key add -
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'

3. 安装ros2(选一个速度比较快的源哦)

$ export ROS_DISTRO=crystal # or bouncy or ardent
$ sudo apt update
  • 桌面版安装(包含ROS, RViz, demos, tutorials)
$ sudo apt install ros-$ROS_DISTRO-desktop
  • 基础版安装(包含通讯库、消息包、命令行工具,没有GUI工具)
$ sudo apt install ros-$ROS_DISTRO-ros-base

4. 安装自动补全工具

ros2的命令行使用argcomplete工具进行补全,所以需要安装该工具:

$ sudo apt install python3-argcomplete

5. 设置环境变量

和ROS 1一样,为了让系统找到ROS命令,安装完成后需要将以下语句添加到.bashrc中:

$ source /opt/ros/crystal/setup.bash

6. 安装RWM

ROS 2默认安装的RWM是FastRTPS,也可以使用如下方式安装OpenSplice或RTI Connext的RWM:

$ sudo apt update
$ sudo apt install ros-$ROS_DISTRO-rmw-opensplice-cpp # for OpenSplice
$ sudo apt install ros-$ROS_DISTRO-rmw-connext-cpp # for RTI Connext (需要确认许可)

在使用的时候通过设置环境变量,即可更换需要的RWM:

RMW_IMPLEMENTATION=rmw_opensplice_cpp
RMW_IMPLEMENTATION=rmw_connext_cpp

7. 安装ROS 1

目前ROS 2的功能还不是很全面,很多功能包需要依赖ROS 1,所以还是需要安装ROS 1的,安装方法可以参考ROS 1 wiki教程。

ROS 2和ROS 1之间通过ros-bridge通信,需要安装:

$ sudo apt update
$ sudo apt install ros-$ROS_DISTRO-ros1-bridge ros-$ROS_DISTRO-turtlebot2-*

二、创建工作空间

安装完成后,我们当然要迫不及待的试下ROS 2了,还记不记得ROS 1的wiki教程,第一步要干什么?

没错,创建工作空间!在ROS 2中创建工作空间非常简单,在home下创建一个文件夹即可:

$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws

三、编译与运行节点

然后和ROS 1一样,在工作空间下编译,这里使用的可不是catkin_make命令,而是ROS 2全新升级的colcon编译器,使用的编译命令也改成了“colcon build”。

Screenshot from 2018-11-25 18-20-33

因为没有任何功能包,所以编译很快,再看看工作空间下,是不是多出了几个文件夹:

ROS2探索总结(九)—— ROS 2发布第三个正式版Crystal Clemmys插图(1)

其中的build和install大家应该都很熟悉,和ROS 1是一样的,但是多出了一个log文件夹,用来保存编译过程中的日志信息。小伙伴们可以回忆一下,ROS 1中的log文件是放在哪里的呢?

现在我们就可以试试编译功能包了。这里我们直接使用官方提供的example试试,在src中下载功能包源码:

$ git clonehttps://github.com/ros2/demos.git

然后回到工作空间下使用“colcon build”编译:

Screenshot from 2018-11-25 18-50-36

编译完成的功能包都会放置在install文件夹下,可以偷偷看下有没有顺利生成可执行文件。

接下来就可以运行节点了,当然不能忘记设置环境变量:

$ source install/setup.bash

然后运行talker和listener节点:

$ ros2 run demo_nodes_cpp listener
$ ros2 run demo_nodes_cpp talker

ROS2探索总结(九)—— ROS 2发布第三个正式版Crystal Clemmys插图(3)

ROS2探索总结(九)—— ROS 2发布第三个正式版Crystal Clemmys插图(4)

现在两个节点就开始通信了,有没有发现,我们并没有使用类似roscore的命令启动master,这就是ROS 2最大的改变,真正成为了去中心化的分布式系统。

四、创建功能包

以上我们使用官方提供的功能包,那么如何创建自己的功能包呢?同样使用ROS 2提供的命令行工具。

比如说我们想创建一个叫test_pkg的功能包,其中包含一个节点my_node,那么可以直接使用以下命令创建:

$ ros2 pkg create test_pkg --cpp-node-name my_node

–cpp-node-name后边是节点名,ROS 2会自动帮助我们创建一个节点的模板。

创建成功后,在src下就可以看到test_pkg功能包了,打开看下一下,其中src文件夹里还自动生成了my_node的代码:

#include <cstdio>

int main(int argc, char ** argv)
{

    (void) argc;
    (void) argv;
    printf("hello world test_pkg package\n");
    return 0;
}

功能包中除了放置代码的src和include文件夹,最重要的依然是CMakeLists.txt和Package.xml,其中的内容基本和ROS1相同。在工作空间中编译代码后,install里就可以看到编译成功的test_pkg功能包。

这里也可以使用如下选项编译某一个功能包:

$ colcon build --packages-select test_pkg

运行这个节点的效果如下:

ROS2探索总结(九)—— ROS 2发布第三个正式版Crystal Clemmys插图(5)

OK,到这里为止,是不是感觉ROS 2的操作和ROS 1并没有太大的差别,原理上都还是类似的。

发表评论

后才能评论

评论列表(13条)

  • ncjqv_7284 2020年2月21日 下午4:04

    古月老师,您好,刚接触ros两天, 这几天把你ROS2文档看完了,
    按照你的方法装了cyrstal 编译demos 报错:
    cheng@ubuntu:~/ros2_crystal/demo/demos/demo_nodes_cpp$ colcon build
    Starting >>> demo_nodes_cpp
    — stderr: demo_nodes_cpp
    CMake Error at CMakeLists.txt:17 (find_package):
    By not providing “Findrclcpp_components.cmake” in CMAKE_MODULE_PATH this
    project has asked CMake to find a package configuration file provided by
    “rclcpp_components”, but CMake did not find one.

    Could not find a package configuration file provided by “rclcpp_components”
    with any of the following names:

    rclcpp_componentsConfig.cmake
    rclcpp_components-config.cmake

    Add the installation prefix of “rclcpp_components” to CMAKE_PREFIX_PATH or
    set “rclcpp_components_DIR” to a directory containing one of the above
    files. If “rclcpp_components” provides a separate development package or
    SDK, be sure it has been installed.


    Failed <<< demo_nodes_cpp [ Exited with code 1 ] Summary: 0 packages finished [1.57s] 1 package failed: demo_nodes_cpp 1 package had stderr output: demo_nodes_cpp 请问如果解决呢?

    • ncjqv_7284 回复 ncjqv_7284 2020年2月21日 下午4:09

      找到原因了, 是branch 不对, 虽然从github 选择的crystal 分支找的下载连接, 但是默认的还是master分支.

  • 2020年1月5日 下午11:00

    嘿,古月老师,是不是ros2 pkg create test_pkg –cpp-node-name my_node,自动生成节点,同时,在CMakeLists.txt和Package.xml里面,也自动把节点对应的源文件加载进去了?这是新的构建工具colcon带来的好处,还是ros2本身就支持这样子一步到位了?

    • 古月 回复 2020年1月19日 下午11:08

      是的,简单的示例可以通过这种形式实现,复杂点的程序还是得自己来修改

  • qxy 2019年6月3日 下午4:13

    HI,请教下是否有在arm上直接进行ros2 colcon build,我一编译就内存CPU挤爆,然后死机,无法像make一样指定线程数吗

    • 古月 回复 qxy 2019年6月4日 上午10:36

      还没在arm上试过

    • qxy 回复 古月 2019年6月6日 上午11:15

      arm我已经编译通过了,主要还是内存消耗问题。现在有另外一个问题请教下,我测试Topic从public到sub到数据的时间,两个node之间从一个node pub数据到另外一个node sub到数据耗时要1.2ms,这个我觉得有点夸张,请问这个时间正常吗,FastRTPS的传输层是UDP,耗时不应该这么大,请教下古大大

    • 古月 回复 qxy 2019年6月11日 上午11:36

      这个我没测试过

    • qxy 回复 古月 2019年6月6日 下午4:41

      X86架构上测试时间为600us,不合理啊。。。。。这是为啥,正常ping才0.02ms

  • Ken 2019年1月19日 下午4:11

    古月老师,我按照这篇文章进行安装ros2 crystal 时提示无法定位
    $export CHOOSE_ROS_DISTRO=crystal
    $ sudo apt install ros-$CHOOSE_ROS_DISTRO-desktop正在读取软件包列表… 完成
    正在分析软件包的依赖关系树
    正在读取状态信息… 完成
    E: 无法定位软件包 ros-crystal-desktop
    这是怎么回事?能有什么办法解决吗?

    • thomas 回复 Ken 2019年4月10日 上午9:57

      ros1的安装包找不到,添加ros的安装包就好了

  • 唐升平 2018年12月26日 下午9:52

    前辈,我在使用UTM-30LX激光雷达时,出现 类似于这个问题https://answers.ros.org/question/286646/error-connecting-to-hokuyo-could-not-open-serial-hokuyo/,我按照UTM-30LX官网设置的,一直出现上述网站的问题;快疯了,我该如何配置

    • 古月 回复 唐升平 2018年12月27日 上午11:38

      这个没用过,不太清楚,串口打不开