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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
ROS2编程基础课程文档 ROS 2机器人操作系统2)是用于机器人应用的开源开发套件。ROS 2之目的是为各行各业的开发人员提供标准的软件平台,从研究和原型设计再到部署和生产。 ROS 2建立在ROS 1的成功基础之上,ROS 1目前已在世界各地的无数机器人应用中得到应用。 特色 缩短上市时间 ROS 2提供了开发应用程序所需的机器人工具,库和功能,可以将时间花在对业务非常重要的工作上。因为它 是开源的,所以可以灵活地决定在何处以及如何使用ROS 2,以及根据实际的需求自由定制,使用ROS 2 可以大幅度提升产品和算法研发速度! 专为生产而设计 凭借在建立ROS 1作为机器人研发的事实上的全球标准方面的十年经验,ROS 2从一开始就被建立在工业级 基础上并可用于生产,包括高可靠性和安全关键系统。 ROS 2的设计选择、开发实践和项目管理基于行业利 益相关者的要求。 多平台支持 ROS 2在Linux,Windows和macOS上得到支持和测试,允许无缝开发和部署机器人自动化,后端管理和 用户界面。分层支持模型允许端口到新平台,例如实时和嵌入式操作系统,以便在获得兴趣和投资时引入和推 广。 丰富的应用领域 与之前的ROS 1一样,ROS 2可用于各种机器人应用,从室内到室外、从家庭到汽车、水下到太空、从消费 到工业。 没有供应商锁定 ROS 2建立在一个抽象层上,使机器人库和应用程序与通信技术隔离开来。抽象底层是通信代码的多种实现, 包括开源和专有解决方案。在抽象顶层,核心库和用户应用程序是可移植的。 建立在开放标准之上 ROS 2中的默认通信方法使用IDL、DDS和DDS-I RTPS等行业标准,这些标准已广泛应用于从工厂到航空 航天的各种工业应用中。 开源许可证 ROS 2代码在Apache 2.0许可下获得许可,在3条款(或“新”)BSD许可下使用移植的ROS 1代码。这两个 许可证允许允许使用软件,而不会影响用户的知识产权。 全球社区 超过10年的ROS项目通过发展一个由数十万开发人员和用户组成的全球社区,为机器人技术创建了一个庞大 的生态系统,他们为这些软件做出贡献并进行了改进。 ROS 2由该社区开发并为该社区开发,他们将成为未 来的管理者。 行业支持 正如ROS 2技术指导委员会成员所证明的那样,对ROS 2的行业支持很强。除了开发顶级产品外,来自世界 各地的大大小小公司都在投入资源为ROS 2做出开源贡献。 与ROS1的互操作性 ROS 2包括到ROS 1的桥接器,处理两个系统之间的双向通信。如果有一个现有的ROS 1应用程序, 可 以通过桥接器开始尝试使用ROS 2,并根据要求和可用资源逐步移植应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值