【ROS2】初级:客户端-创建工作区

目标:创建一个工作空间,并学习如何为开发和测试设置一个覆盖层。

 教程级别:初学者

 时间:20 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    • 1 源 ROS 2 环境

    • 2. 创建一个新目录

    • 3. 克隆一个示例仓库

    • 4.  解决依赖性

    • 5. 使用 colcon 构建工作空间

    • 6 源覆盖

    • 7 修改覆盖层

  •  摘要

  •  下一步

 背景

工作空间是包含 ROS 2 包的目录。在使用 ROS 2 之前,必须在您计划工作的终端中启用您的 ROS 2 安装工作空间。这使得 ROS 2 的包在该终端中可供您使用。

您还可以选择创建一个“覆盖层”——一个次级工作空间,在这里您可以添加新的软件包,而不会干扰您正在扩展的现有 ROS 2 工作空间,或称为“底层”。您的底层必须包含覆盖层中所有软件包的依赖项。覆盖层中的软件包将覆盖底层中的软件包。也可以有多个层次的底层和覆盖层,每个后续的覆盖层都使用其父底层的软件包。

 先决条件

  •  ROS 2 安装

  •  Colcon 安装

  •  Git 安装

  •  海龟仿真安装

  •  已安装 rosdep

  • 理解基本的终端命令(这里有一个 Linux 指南)

  • 您选择的文本编辑器

 任务

1 源 ROS 2 环境

您的主要 ROS 2 安装将是本教程的底层。(请记住,底层不一定是主要的 ROS 2 安装。)

取决于您是如何安装 ROS 2 的(从源代码还是二进制文件),以及您使用的是哪个平台,您的确切源命令会有所不同:

source /opt/ros/jazzy/setup.bash
# 源码编译
source /home/cxy/ros2_jazzy/install/setup.bash

如果这些命令对您不起作用,请参阅您所遵循的安装指南。

2. 创建一个新目录

最佳实践是为每个新工作区创建一个新目录。名称无关紧要,但最好能够表明工作区的用途。让我们选择目录名称 ros2_ws ,代表“开发工作区”:

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

另一个最佳实践是将工作区中的任何包放入 src 目录。上述代码在 ros2_ws 内创建一个 src 目录,然后导航进入它。

3. 克隆一个示例仓库

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

在接下来的初学者开发者教程中,你将创建自己的包,但现在你将练习使用现有的包来组建一个工作空间。

如果您已经学习了初学者:CLI 工具教程,您会对 turtlesim 很熟悉,它是 ros_tutorials 中的一个软件包。

一个仓库可以有多个分支。您需要检出目标您已安装的 ROS 2 发行版的那个分支。当您克隆此仓库时,添加 -b 参数,后跟该分支。

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

cxy@ubuntu2404-cxy:~/ros2_ws/src$ git clone https://github.com/ros/ros_tutorials.git -b jazzy
正克隆到 'ros_tutorials'...
remote: Enumerating objects: 3114, done.
remote: Counting objects: 100% (434/434), done.
remote: Compressing objects: 100% (178/178), done.
remote: Total 3114 (delta 279), reused 388 (delta 249), pack-reused 2680
接收对象中: 100% (3114/3114), 707.48 KiB | 252.00 KiB/s, 完成.
处理 delta 中: 100% (1896/1896), 完成.

da2538c0932dd62a50233f29482f9984.png

现在 ros_tutorials 已克隆到您的工作区。 ros_tutorials 仓库包含 turtlesim 包,我们将在本教程的剩余部分中使用它。此仓库中的其他包未构建,因为它们包含 COLCON_IGNORE 文件。

到目前为止,您已经用示例包填充了工作空间,但它还不是一个完全功能的工作空间。您需要先解决依赖关系,然后再构建工作空间。

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 jazzy -y

如果您是从源代码或二进制档案在 Linux 上安装了 ROS 2,您将需要使用他们安装说明中的 rosdep 命令。这里是从源代码的 rosdep 部分和二进制档案的 rosdep 部分。

如果您已经具备所有依赖项,控制台将返回:

#All required rosdeps installed successfully

6f84de87d46604e64def12f31c282b03.png

6dcebd160f37cfecb70251ac8a21a444.png

12fb30a46af50c131e54293cb2050e9a.png

软件包在 package.xml 文件中声明它们的依赖项(您将在下一个教程中了解更多关于软件包的信息)。这个命令会检查这些声明,并安装那些缺失的依赖项。您可以在另一个即将推出的教程中了解更多关于 rosdep 的信息。

0f2eccf63b44b273961351163af54688.png

使用 colcon 构建工作空间

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

cxy@ubuntu2404-cxy:~/ros2_ws$ colcon build --packages-select turtlesim
Starting >>> turtlesim
Finished <<< turtlesim [3.20s]                     


Summary: 1 package finished [3.43s]

 便条

其他有用的参数为 colcon build :

  • --packages-up-to 构建您想要的包以及所有依赖项,但不包括整个工作区(节省时间)

  • --symlink-install 可以避免你每次调整 Python 脚本时都要重新构建

  • --event-handlers console_direct+ 在构建时显示控制台输出(否则可以在 log 目录中找到)

  • --executor sequential 逐个处理包裹,而不是使用并行处理

构建完成后,在工作区根目录输入命令 ( ~/ros2_ws ):您将看到 colcon 已创建新目录:

cxy@ubuntu2404-cxy:~/ros2_ws$ ls
build  install  log  src

install 目录是您工作区设置文件所在的地方,您可以使用它来源覆盖。

6 源覆盖层

在配置 overlay 之前,非常重要的是您需要打开一个新的终端,这个终端要与您构建工作空间的终端分开。在同一个终端中配置 overlay,或者在已配置 overlay 的终端中构建,可能会产生复杂的问题。

在新终端中,将您的主要 ROS 2 环境作为“底层”,这样您就可以在其上构建“上层”:

source /opt/ros/jazzy/setup.bash
# 源码编译安装
source ~/ros2_jazzy/install/setup.bash

进入您工作区的根目录:

cd ~/ros2_ws

在根目录中,源你的覆盖层 source your overlay:

71430af342633954eb5af557a1cd1963.png

source install/local_setup.bash

 便条

导入覆盖层的 local_setup 只会将覆盖层中可用的包添加到您的环境中。 setup 导入覆盖层以及创建它的底层,使您能够同时使用这两个工作空间。

所以,像你刚才所做的那样,源自你主要的 ROS 2 安装的 setup 然后是 ros2_ws 覆盖的 local_setup ,与仅仅源自 ros2_ws 的 setup 是一样的,因为那包含了它下层的环境。

现在您可以从覆盖层运行 turtlesim 包:

ros2 run turtlesim turtlesim_node

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

让我们在覆盖层中修改 turtlesim,这样您就可以看到效果:

  • 您可以单独修改和重建 overlay 中的包,而不影响 underlay。

  • 覆盖层优先于底层。

7. 修改叠加层

您可以通过编辑 turtlesim 窗口上的标题栏来修改覆盖层中的 turtlesim 。为此,请在 ~/ros2_ws/src/ros_tutorials/turtlesim/src 中找到 turtle_frame.cpp 文件。用您喜欢的文本编辑器打开 turtle_frame.cpp 。

找到函数 setWindowTitle("TurtleSim"); ,将值 "TurtleSim" 更改为 "MyTurtleSim" ,然后保存文件。

返回到您之前运行 colcon build 的第一个终端,并再次运行它。

返回到第二个终端(源自覆盖层的地方),并再次运行 turtlesim:

ros2 run turtlesim turtlesim_node

您将看到 turtlesim 窗口的标题栏现在显示为“MyTurtleSim”。

7b8645b424d044850ec993ceeb1ad797.png

即使您的主要 ROS 2 环境早先已在此终端中被加载,您的 ros2_ws 环境的覆盖层仍然优先于底层内容。

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

835db51cae052cbd7c35aea7185b7fd9.png

您可以看到,叠加层中的修改实际上并未影响底层中的任何内容。

 摘要

在本教程中,您将主要的 ROS 2 发行版安装作为底层,并通过在新工作空间克隆和构建包来创建一个覆盖层。覆盖层被添加到路径前面,并且优先于底层,正如您在修改后的 turtlesim 中所看到的。

使用叠加层进行少量包的工作是推荐的,这样你就不必把所有东西都放在同一个工作区,也不必在每次迭代时重建一个庞大的工作区。

 下一步

现在您已经了解了创建、构建和配置您自己的工作空间背后的细节,您可以学习如何创建自己的包。https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值