Creating a workspace:创建一个工作空间

举报
MAVER1CK 发表于 2023/03/19 16:20:46 2023/03/19
【摘要】 @[toc]参考官方文档:Creating a workspace 背景工作区是包含 ROS 2 包的目录。 在使用 ROS 2 之前,有必要在您计划使用的终端中source您的 ROS 2 安装工作区。这使得 ROS 2 的包可供您在该终端中使用。您还可以选择source一个“覆盖层”——一个辅助工作区,您可以在其中添加新包而不会干扰您正在扩展的现有 ROS 2 工作区,或“底层”。 您的...

@[toc]

参考官方文档:Creating a workspace

背景

工作区是包含 ROS 2 包的目录。 在使用 ROS 2 之前,有必要在您计划使用的终端中source您的 ROS 2 安装工作区。这使得 ROS 2 的包可供您在该终端中使用。

您还可以选择source一个“覆盖层”——一个辅助工作区,您可以在其中添加新包而不会干扰您正在扩展的现有 ROS 2 工作区,或“底层”。 您的底层必须包含覆盖层中所有包的依赖项。覆盖层中的包将覆盖底层中的包。也可以有多层底层和覆盖层,每个连续的覆盖层都使用其父底层的包。

1. source ROS 2环境

source /opt/ros/humble/setup.bash

2. 创建一个新的文件夹

最佳做法是为每个新工作区创建一个新目录。 名称并不重要,但它有助于表明工作区的用途。 让我们为“开发工作区”选择目录名称 ros2_ws:

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

3. 下载示例仓库

确保你在下载之前仍然在ros2_ws/src目录下。

在初学者开发人员教程的其余部分,您将创建自己的包,但现在您将练习使用现有包将工作区放在一起。

您将使用的现有包来自 ros_tutorials 存储库 (repo)。 turtlesim 就是此存储库中的一个包。

你可以在GitHub中查看这个repo

注意目录列表左侧的“Branch”下拉列表。 当您克隆此 repo 时,添加 -b 参数,后跟与您的 ROS 2 发行版对应的分支。

在ros2_ws/src目录下,为你所使用的发行版运行以下命令:

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

现在 ros_tutorials 已克隆到您的工作区中。 ros_tutorials 存储库包含 turtlesim 包,我们将在本教程的其余部分使用它。 此存储库中的其他包未构建,因为它们包含 COLCON_IGNORE 文件。
image.png
现在您已经使用示例包填充了您的工作区,但它还不是一个功能齐全的工作区。 您需要先解决依赖关系并构建工作区。

4. 解决依赖

在构建工作区之前,您需要解决包依赖关系。 您可能已经拥有所有依赖项,但最佳做法是在每次克隆时检查依赖项。 您不希望由于缺少依赖项而在长时间等待后构建失败。

从你的工作空间(ros2_ws)的根部,运行以下命令:

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

如果您已经拥有所有依赖项,终端将返回:

All required rosdeps installed successfully

包在 package.xml 文件中声明它们的依赖关系(您将在下一个教程中了解有关包的更多信息)。 此命令遍历这些声明并安装缺少的声明。 您可以在另一个教程(即将推出)中了解更多关于 rosdep 的信息。

5. 使用colcon构建工作空间

从工作区的根目录 (ros2_ws),您现在可以使用以下命令构建您的包:

colcon build

终端将返回以下信息:

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

Summary: 1 package finished [5.58s]

下面是其他关于colcon build的参数:

--packages-up-to:构建你想要的软件包,以及它的所有依赖项,但不是整个工作区(节省时间)。
--symlink-install:使您不必每次修改 python 脚本时都必须重新构建。
--event-handlers console_direct+:在构建时显示控制台输出(否则可以在日志目录中找到)

一旦构建完成,在工作区根(~/ros2_ws)输入ls,你会看到colcon已经创建了新的目录:

build  install  log  src

install目录是你的工作空间的设置文件所在的地方,你可以用它来source你的覆盖层。

6. source覆盖层

在source之前,最好打开一个新终端,要与您构建工作区的终端分开。 在您构建的同一终端中source覆盖层,或者同样在source覆盖层后构建,可能会产生复杂的问题。 在新终端中,将你的主要 ROS 2 环境作为“底层”,这样你就可以在它“之上”构建覆盖层:

source /opt/ros/humble/setup.bash

进入你的工作空间的根部:

cd ~/ros2_ws

在根部,source你的覆盖层:

. install/local_setup.bash

现在你可以从覆盖层中运行turtlesim软件包:

ros2 run turtlesim turtlesim_node

但是,你怎么能知道这是在运行覆盖层的海龟模型,而不是你的ROS 2主安装的海龟模型?
让我们在覆盖层中修改turtlesim,这样你就可以看到效果了。你可以在覆盖层中单独修改和重建软件包,而不是在底层中。覆盖层比底层优先权更高。

7. 修改覆盖层

你可以通过编辑turtlesim窗口的标题栏在你的覆盖层中修改turtlesim。要做到这一点,找到 ~/ros2_ws/src/ros_tutorials/turtlesim/src 中的 turtle_frame.cpp 文件。用你喜欢的文本编辑器打开turtle_frame.cpp。

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

回到你先前运行colcon build的第一个终端,再次运行它。

返回到第二个终端(source覆盖层的终端),再次运行turtlesim:

ros2 run turtlesim turtlesim_node

你会看到海龟模拟窗口的标题栏现在显示 “MyTurtleSim”。

为了查看你的底层是否仍然完好无损,打开一个全新的终端,只用source你的ROS 2安装。再次运行turtlesim:

ros2 run turtlesim turtlesim_node

窗口名称仍然是TurtleSim。

你可以看到,对覆盖层的修改实际上并没有影响到底层的任何东西。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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