ROS2文档翻译总结(3)——创建workspace

本文介绍了ROS2中的Underlay和Overlay概念,Underlay是基础层,包含核心软件包,Overlay是自定义层,允许用户扩展和定制。文章详细说明了如何设置工作空间、源码管理、依赖关系管理和构建过程,强调了正确source工作空间的重要性。
摘要由CSDN通过智能技术生成

Workspace是一个包含ROS 2包的目录。在使用ROS 2之前,有必要在计划工作的terminal中source您的ROS 2安装工作空间(workspace)。这使得ROS 2的软件包(package)可供您在该terminal中使用。

Overlay和Underlay

在ROS 2中,"underlay" 和 "overlay" 这两个概念,用于描述 ROS 2 的workspace和package的组织和层次结构。这两个概念有助于更好地组织和管理ROS 2的软件包。

在使用ROS 2时,我们首先要新建一个workspace来存放我们要用的packages。然后要source我们ROS 2系统的安装目录,而ROS 2系统的安装目录就是Underlay,我们的workspace即Overlay。

Underlay:

  • Underlay 是指 ROS 2 工作空间的基础层。它包含了 ROS 2 系统中常用和核心的软件包,通常是 ROS 2 安装的一部分或者是 ROS 2 发行版默认包含的一些软件包。
  • Underlay 提供了 ROS 2 运行时所需的基本功能和工具。例如,ROS 2 的核心库、通信工具、常用节点等通常属于 Underlay。
  • Underlay 中的软件包通常是全局可用的,任何创建的工作空间都可以引用 Underlay 中的软件包。

Overlay:

  • Overlay 是指用户自定义的 ROS 2 工作空间的层。Overlay 允许用户在 Underlay 的基础上添加、修改或覆盖软件包。这使得用户可以根据项目的需要定制和扩展 ROS 2 系统。
  • Overlay 中的软件包可以覆盖 Underlay 中的软件包,也可以添加新的软件包。Overlay 允许用户自由扩展 ROS 2 系统而无需修改 Underlay 中的内容。
  • Overlay 中的软件包通常是特定于项目或用户需求的,不会影响全局范围内的其他工作空间。

也可以出现多层的Overlay和Underlay关系。比如我们建立一个名为ros2_ws的工作空间,里面有已经可以正常工作的packages,现在我要测试一个新的package,或测试一个现有package的更新版本,但又不想放到现有的工作空间里,怕影响到现有项目的正常运行,就可以新建一个比如名为test_ws的工作空间,然后在这个工作空间里source之前的ros2_ws,就构成了一个test_ws——ros2_ws——foxy的层次关系。这样在修改test_ws中的packages时就不会影响到其Underlay工作空间的内容。

比如在测试现有package的更新版本时,Overlay和Underlay里的软件包是同名的,但我们在test_ws工作空间里调用这个package时,ROS会按照从上到下的顺序来运行该package,即在我们打开的terminal里source了test_ws,就会运行test_ws里的package,而不会运行ros2_ws里的package。也就是说,所谓Underlay并不只能是ROS 2的安装目录,也可以是其他现有的workspace。

Source ROS 2 environment

初始情况下,ROS 2的安装目录肯定是我们的Underlay。

source /opt/ros/foxy/setup.bash

Create a new directory

最好是为每个新工作区创建一个新目录。名称并不重要,但按用途命名是很有帮助的。再就是将工作区中的所有packages都放入src目录。下面的代码是在ros2_ws中创建了一个src目录,然后进入到它。

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

Clone a sample repo

在ros2_ws/src里,运行如下代码将ros_tutorials下载到workspace里:

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

Resolve dependencies

在build我们的workspace之前,需要解决包依赖关系。可能已经拥有了所有的dependencies,但最佳做法是每次clone时都要检查依赖项。因为并不希望在build时经过长时间等待后发现失败了,才发现缺少依赖项。

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

#If you already have all your dependencies, the console will return:

#All required rosdeps installed successfully

Packages在package.xml文件中声明其依赖项。此命令遍历这些声明并安装丢失的依赖项。

Build the workspace with colcon

在ros2_ws的根目录下,用如下代码开始build:

colcon build

会返回如下信息:

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

Summary: 1 package finished [5.58s]

colcon build的其他有用参数:
--packages-up-to 构建所需的包及其所有依赖项,而不是整个workspace
--symlink-install 避免每次调整python脚本时都需要重新构建
--event-handlers console_direct+ 在构建时显示控制台输出(否则可以在log目录中找到)

现在ros2_ws的根目录里就有build、install、log、src这四个文件夹,install文件夹里存放的是setup files,也就是需要source的overlay。

Source the overlay

在source overlay之前,需要打开一个新的terminal,而不是在构建工作空间的terminal里,这一点非常重要。在用来build的同一terminal中source overlay,或者在已经source了overlay的同一terminal中进行build,可能会产生复杂的问题。

在新的terminal中,将主要ROS 2环境作为Underlay来source,这样就可以在其上build overlay:

source /opt/ros/foxy/setup.bash
cd ~/ros2_ws
source install/local_setup.bash

Source Overlay里的local_setup只会将Overlay中可用的packages添加到环境中。setup可获取Overlay及其Underlay的所有packages,可以同时使用这两个workspace。

因此,像上述代码所做的那样,先source主ROS 2的setup,然后再source我们ros2_ws的local_setup,与仅source我们ros2_ws的setup是一样的,因为这包括其Underlay的环境。

然后就可以运行我们的node了:

ros2 run turtlesim turtlesim_node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值