ROS2 学习笔记11:创建工作空间

Background 背景

工作空间是包含ROS 2包的目录。在使用ROS 2之前,需要在终端source一下安装ROS 2的工作空间(添加ROS 2环境变量)。这样,ROS 2的软件包就可以在该终端中使用了。

也可以选择source顶层(overlay),也就是第二个工作空间,你可以在顶层添加一些新的包,但不干扰现有拓展的ROS2工作空间,(该空间)又称为底层。底层一定包含顶层所有包的依赖。顶层包会覆盖底层包。也可以有多个顶层和底层,并且每一个顶层会使用其对应的底层包。

思考及疑问: 不是很好理解,需要举例说明;顶层与底层的关系, overlay underlay

Prerequisites 前提

ros2安装
colcon安装
git安装
turtlesim安装
rosdep安装
基本的终端指令(linux常用指令指导http://www.ee.surrey.ac.uk/Teaching/Unix/
文本编辑器

Tasks 任务

1 Source ROS 2 environment

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

根据安装 ROS 2 的方式(源代码或二进制文件)以及所使用平台,source命令会有所不同:

source /opt/ros/iron/setup.bash 

2 Create a new directory

为每个新工作区创建一个新目录。名称并不重要,但最好能说明工作区的目的。示例:选择 ros2_ws 作为 "开发工作区 "的目录名:

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

另一个最佳实践是将工作区中的包拉取到 src 目录中。上述代码是 在dev_ws 目录内创建一个 src 文件夹,然后进入该文件夹。

3 Clone a sample repo

拉取之前,请确保你仍在 ros2_ws/src 目录中。

在初级开发者教程的其余部分中,你将创建自己的软件包,但现在你将练习使用现有软件包组建工作区。

如果你已经学习了《初级 CLI 工具教程》,你就会对 ros_tutorials 中的一个软件包 turtlesim 比较熟悉。

一个软件仓库可以有多个分支。你需要查看针对你已安装的 ROS 2 发行版的那个分支,拉取该 repo 时,在该分支后添加 -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) 根目录下运行以下命令:

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

如果在 Linux 源代码或 "fat archive"安装了 ROS 2,则需要使用安装说明中的 rosdep 命令。下面是源代码 rosdep https://docs.ros.org/en/iron/Installation/Alternatives/Ubuntu-Development-Setup.html#linux-development-setup-install-dependencies-using-rosdep部分和 "fat archive" rosdep 部分。

如果你已经有了所有依赖项,控制台将返回

#All required rosdeps installed successfully

软件包会在 package.xml 文件中声明其依赖关系(在下一教程中将进一步了解软件包)。该命令会查看这些声明,并安装缺少的依赖。有关 rosdep 的更多信息,请参阅另一篇教程。

5 Build the workspace with 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目录放的是工作空间的设置文件setup,也就是你用来source顶层。

6 Source the overlay

source顶层之前,你应该新开一个终端,与你编译工作空间的终端分开。在你已编译或者已有其他顶层的终端下,再source顶层会导致一些复杂问题。

在新终端,source一下ros2环境变量作为底层,然后你就可以在上面构建顶层

source /opt/ros/iron/setup.bash

进入工作区的根目录:

cd ~/ros2_ws

在根目录,source顶层:

source install/local_setup.bash

source顶层的local_setup会在你环境中增加顶层应用包。setup使你source了顶层和底层,可以让你使用两个工作空间。
所以,source ros2 安装配置文件setup,和ros2_ws 顶层的local_setup,,如同也sourceros2_ws 工作空间的配置setup,因为它包含了底层的环境

现在,你可以在顶层运行turtlesim包:

ros2 run turtlesim turtlesim_node

但是,你怎么能确定这是运行顶层 turtlesim,而不是你的主安装版 turtlesim 呢?

让我们在顶层中修改 turtlesim,看看效果如何:

  • 你可以在顶层中单独修改和重建软件包。

  • 顶层优先于底层。

7 Modify the overlay

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

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

返回之前运行 colcon build 的第一个终端,再次运行 colcon build

返回第二个终端(底层所在的终端),再次运行 turtlesim

ros2 run turtlesim turtlesim_node

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

尽管您的主 ROS 2 环境是在该终端中先创建的,但您的 ros2_ws 环境的顶层优先于底层的内容。

为了确认底层的还是没有影响的,新开一个终端,只是source一下底层的ros2环境变量,再次运行 turtlesim

ros2 run turtlesim turtlesim_node

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

Summary 总结

在本教程中,source ROS 2主发行版作为底层,并通过拉取和构建新工作区中的软件包来创建顶层。顶层会被预置到路径中,并优先于底层,就像你在修改过的turtlesim 中看到的那样。

建议在处理少量软件包时使用顶层构建,这样就不必把所有东西都放在同一个工作区,也不必在每次迭代时都重建一个巨大的工作区。

Next steps 下一步

现在,你认识了创建,编译工作空间,source工作空间环境变量的细节内容,你可以学习如果创建自己的包了。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值