《精通ROS机器人编程(原书第2版) 》 —2 ROS编程入门

举报
华章计算机 发表于 2020/02/10 14:25:03 2020/02/10
【摘要】 本节书摘来自华章计算机《精通ROS机器人编程(原书第2版) 》 一书中第2章,第2.1.1节,作者是[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace),张新宇 张志杰 等译 。

第2章

ROS编程入门

在讨论了ROS节点管理器、参数服务器和roscore的基础知识之后,现在我们可以开始创建并编译生成ROS软件包了。在本章中,我们将创建不同的ROS节点来实现ROS通信系统。通过学习ROS软件包,我们还将更新ROS节点、话题、消息、服务和动作库(actionlib)的概念。

本章将介绍以下内容:

创建、编译和运行ROS软件包。

使用标准和自定义的ROS消息。

学习ROS服务和动作库。

维护和发布你的ROS软件包。

为ROS软件包创建一个维基(wiki)页面。

2.1 创建一个ROS软件包

ROS软件包是ROS系统的基本单位。我们可以创建,然后编译生成一个ROS软件包,并将其向公众发布。当前我们使用的ROS发布版本是Kinetic。我们使用catkin编译系统来编译生成ROS软件包。编译系统主要负责将用户的源码生成“目标(target)”(可执行文件或库文件)。在较老的ROS发行版本中,例如Electric和Fuerte,使用rosbuild来编译生成软件包。由于rosbuild存在各种缺陷,所以catkin应运而生了。catkin基本上基于跨平台编译器(Cross Platform Make, CMake)。它有很多优点,例如可以将软件包移植到另一个操作系统(如Windows)上。如果操作系统支持CMake和Python,就可以轻松地将基于catkin的软件包移植到该系统上。

使用ROS软件包的第一个要求是创建ROS的catkin工作区。安装好ROS后,创建一个名为catkin_ws的catkin工作区:

 image.png

为了编译工作区,我们需要获取ROS的环境变量,以便访问ROS系统提供的功能:

 image.png

切换到前面创建的源码文件夹src中:

 image.png

初始化新的catkin工作区:

 image.png

即使现在工作区中没有软件包,我们也可以编译工作区。使用以下命令切换到工作区文件夹中:

 image.png

下面使用catkin_make编译工作区:

 image.png

执行完上面这条命令后,在catkin工作区中将生成devel和build文件夹。各种安装文件位于devel文件夹中。要将创建的ROS工作区添加到ROS环境变量中,我们需要获取其中的一个安装文件setup.bash。此外,在每次使用以下命令启动新的bash会话时,我们都可以获取此工作区的配置文件:

 image.png

配置好catkin工作区后,我们就可以创建自己的软件包了,其中将包含示例节点,用来演示ROS话题、消息、服务和动作库的工作方式。catkin_create_pkg命令就是用来创建ROS软件包的。我们将用它创建各种ROS概念的演示示例。

切换到catkin工作区的src文件夹后,使用以下命令创建软件包:

 image.png

源码文件夹:所有的ROS软件包(无论是从头创建的还是从其他代码库中下载的)都必须放在ROS工作区的src文件夹中,否则ROS系统将无法识别它们,从而导致无法编译。

下面是创建ROS示例软件包的命令:

 image.png

软件包中的依赖关系如下:

roscpp:这是ROS的C++实现,一个ROS客户端库,为C++开发人员提供API,使用ROS话题、服务和参数等生成ROS节点。包含该依赖的原因是我们要编写的是一个C++实现的ROS节点。任何使用C++节点代码的ROS软件包都必须添加此依赖项。

std_msgs:该软件包包含了基本的ROS原始数据类型,例如整型、浮点型、字符串、数组等。我们可以在节点中直接使用这些数据类型,而无须定义新的ROS消息。

actionlib:该超软件包提供了在ROS节点中创建可抢占任务的接口。我们在这个软件包中创建了基于actionlib的节点,所以我们需要包含该软件包来创建ROS节点。

actionlib_msgs:该软件包包含了与动作服务器和动作客户端交互所需的标准消息定义。

创建了软件包后,我们也可以通过编辑CMakeLists.txt和package.xml这两个文件来手动添加其他依赖项。如果成功创建了软件包,我们将收到以下信息,如图2-1所示。

 image.png

图2-1 创建ROS软件包时的终端信息

创建了这个软件包后,可以使用catkin_make命令来编译生成软件包,但是它不会增加任何节点。我们必须在catkin工作区的根路径下执行此命令。以下是我们编译生成空ROS软件包的命令:

 image.png

成功编译生成软件包后,我们可以将节点源码添加到工作区下的src文件夹中。

在CMake的build文件夹中主要包含了节点的可执行文件,该节点的源码位于catkin工作区的src文件夹中。devel文件夹主要包含了在编译过程中生成的bash脚本、头文件和可执行文件。我们可以看到使用catkin_make创建并编译生成ROS节点的过程。

2.1.1 学习ROS话题

话题是两个节点间通信的基本方式。在本节,我们将学习话题的工作原理。下面我们将创建两个ROS节点,一个发布话题,另一个订阅该话题。进入mastering_ros_demo_pkg文件夹中,在/src源码文件夹中,demo_topic_publisher.cpp和demo_topic_subscriber.cpp是我们将要讨论的两个源码文件。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。