ROS 2 Iron 教程 第二章 Client libraries 第二节 创建一个工作空间

前言

本系列文章是由笔者翻译自ROS 2 官方教程。笔者水平有限,如有错误,还请读者指正。

本节教程中部分代码为 Liunx下,请使用其他操作系统的读者前往原文查看。

背景

工作空间是存放 ROS 2 包的目录。在使用 ROS 2 之前,将你的 ROS 2 工作空间添加到终端是十分重要的。这使得 ROS 2 包在你使用的终端中可被使用。

你还可以选择添加一个“覆盖层” - 一个辅助工作区,你可以在此添加新包,而不会干扰现有的 ROS 2 工作空间,或是“底层”。你的底层必须包含覆盖层中所有包的依赖项。在你的覆盖层中的包将会替代你的底层中的包。也可以有多层的覆盖层和底层,每级覆盖层使用其相对于的底层。

先决条件

  • ROS 2 安装
  • colcon 安装
  • git 安装
  • turtlesim 安装
  • rosdep 安装
  • 理解基本终端命令
  • 文本编辑器

任务

1 Source ROS 2 environment (添加 ROS 2 环境)

你的主 ROS 2 安装将会在本节教程中充当底层的角色。(底层不一定必须是主 ROS 2 安装)

具体的添加命令将会随着你安装 ROS 2 方式的不同,以及平台的不同而不同(Liunx):

source /opt/ros/iron/setup.bash

如果上方命令不能工作的话,查询 安装教程

2 Create a new directory (创建新目录)

最佳的做法是为每个新工作空间创建新的目录。目录的名字可以任取,但选用一个可以指名工作空间用途的名字是有帮助的。让我们选用ros2_ws作为我们“开发工作空间”的名字(Liunx):

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

译者注:
在上节教程中已经创建该目录的读者可不用重复创建。

另一个好的做法是将包存放在工作空间的src目录。上方的命令在ros2_ws中创建了src目录,并进入该目录。

3 Clone a sample repo (克隆示例仓库)

在克隆之前,确保你仍在ros2_ws/src目录中。

在剩下的初学者教程中,你将会创建自己的包,但目前你将会练习使用现有包组成工作空间。

如果你完成了第一章 CLI Tools 的的教程,你将会对turtlesim很熟悉,它是 ros_tutorials 之中的包之一。

一个仓库可以拥有多个分支。你将会需要找到与你 ROS 2 发行版相对应的分支。当你克隆这个仓库,添加-b参数来选择分支,将分支添加在参数后。

ros2_ws/src目录中,运行如下命令:

git clone https://github.com/ros/ros_tutorials.git -b iron

现在ros_tutorials已经克隆到你的工作空间。ros_tutorials仓库中含有了turtlesim包,这在后续的教程中将会被使用。在这个仓库中的其他包将不会被构建,因为它们包含有COLCON_IGNORE文件。

到目前为止,你已经将示例包放入了工作区,但它还不是一个功能齐全的工作区。需要先解决依赖项,然后再构建工作区。

4 Resolve dependencies (解决依赖)

在构建工作区之前,你需要解决包依赖。你可能已经有了所有依赖,但最好还是在每次克隆时检查一下依赖。你并不想白白等待失败的构建,失败的原因是缺少依赖。

在你工作区的根目录(ros2_ws),运行如下命令(Liunx):

# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro iron -y

如果你在 Liunx 上使用源代码或是“fat”架构安装,你将会需要按照安装说明来使用 rosdep 命令。详见 from-source rosdep section “fat” archive rosdep section

如果你已经拥有了全部依赖,终端将会返回:

#All required rosdeps installed successfully

包在 package.xml 文件中声明它们的依赖项(你将会在下一节教程中了解到更多关于包的内容)。rosdep命令将会历遍这些声明并安装缺少的依赖。

5 Build the workspace with colcon (使用 colcon 构建工作空间)

在你的工作空间的根目录,你可以使用如下命令构建包:

colcon build

终端将会返回如下信息:

Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

提示:
colcon中的其他有用的参数:

  • --packages-up-to构建你想要构建的包,加上所有的依赖项,但不是整个工作空间(节省时间)
  • --symlink-install使你不必在每次调整 Python 脚本时重新构建
  • --event-handlers console_direct+在构建时输出信息(log目录中也会保存)

一旦构建完成,在工作空间根目录(~/ros2_ws)中输入如下命令:

ls

你将会发现 colcon 创建的新目录:

build  install  log  src

install目录存放了你工作空间的启动文件,启动文件可以用来添加为你的覆盖层。

6 Source the overlay (添加覆盖层)

在添加覆盖层之前,重要的是打开一个新终端,与你构建工作空间的终端分离开来。

在你构建的同一个终端内添加覆盖层,或是在添加覆盖层的终端内构建,可能会造成复杂问题。

在一个新终端,添加你的主 ROS 2 环境作为“底层”,所以你可以“在底层之上”构建覆盖层:

source /opt/ros/iron/setup.bash

进入你的工作空间的根目录:

cd ~/ros2_ws

在根目录中,添加你的覆盖层:

source install/local_setup.bash

提示:
在你的覆盖层中添加local_setup只会将覆盖层中可用的包加入你的环境。setup同时添加了覆盖层和它所在的底层,这允许你切换两个工作空间。
所以添加你主 ROS 2 安装的setup然后添加ros2_ws覆盖层的local_setup,与仅仅添加ros2_wssetup是一样的,这是因为它们包括了底层。

现在从覆盖层中运行turtlesim包:

ros2 run turtlesim turtlesim_node

但你怎么分辨是覆盖层的 tutlesim 正在运行,而不是主安装里的 turtlesim 呢?

让我们更改覆盖层里的 turtlesim 来查看效果:

  • 你可以各自更改并重构覆盖层里的包和底层里的包。
  • 覆盖层里的包将会优先于底层中的包。

7 Modify the overlay (更改覆盖层)

你可以更改覆盖层中的turtlesim通过编辑海龟窗口的标题。为了达成这个目标,找到~/ros2_ws/src/ros_tutorials/turtlesim/src中的turtle_frame.cpp文件,并使用你喜欢的文本编辑器打开。

在第52行,你将会看到函数setWindowTitle("TurtleSim");,将"TurtleSim"改为"MyTurtleSim",并保存文件。

回到一开始你运行colcon build的终端并再次运行该命令。

回到第二个终端(添加覆盖层的那个),并再次运行 turtlesim

ros2 run turtlesim turtlesim_node

你将会看到海龟窗口的标题变成了 “MyTurtleSim” :

在这里插入图片描述

即使你在之前在这个终端中添加了你的主 ROS 2 环境,你的ros2_ws覆盖层比你的底层优先级高。

要查看您的底层是否仍然完好无损,请打开一个全新的终端并仅添加主 ROS 2 安装。再次运行 turtlesim:

ros2 run turtlesim turtlesim_node

在这里插入图片描述

你可以看到覆盖层上的改变不会实际影响底层的内容。

总结

在本节教程中,你添加了主要的 ROS 2 发行版安装作为底层,并通过在新工作区中克隆和构建软件包来创建覆盖层。覆盖层被添加到 path 中,并优先于底层,就像您在修改后的 turtlesim 中看到的那样。

建议使用覆盖层来处理少量包,这样你就不必将所有内容放在同一个工作区中,并在每次迭代时重新构建一个巨大的工作区。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值