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

本文涉及的产品
资源编排,不限时长
简介: Creating a workspace:创建一个工作空间

@[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。

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

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
1月前
|
API Android开发
Eclipse 工作空间(Workspace)
Eclipse 工作空间(Workspace)
48 9
|
2月前
|
前端开发 开发者
@workspace 使用指南
我是一位前端开发工程师,使用通义灵码@workspace进行项目了解、问题解答及代码优化建议,效率提升80%。通过询问项目赔付方式、架构信息和特定文件的优化建议,快速掌握项目细节,极大提高开发效率。
|
4月前
|
存储 编译器 Go
深入理解Go Workspace的三个关键目录结构
【8月更文挑战第31天】
204 0
|
JSON Kubernetes 数据中心
k8s--命名空间 namespaces
k8s--命名空间 namespaces
|
7月前
|
Android开发
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
|
算法 C语言 C++
【C++技能树】NameSpace --命名空间的使用
我在这段代码中想使用rand这个变量名字.这是正常的行为.
100 0
关于catkin_init_workspace找不到命令的原因
关于catkin_init_workspace找不到命令的原因
550 3
关于catkin_init_workspace找不到命令的原因
|
Kubernetes 调度 数据中心
K8S 集群 NameSpace(命名空间)_NameSpace 介绍及查看 | 学习笔记
快速学习 K8S 集群 NameSpace(命名空间)_NameSpace 介绍及查看
1107 0
K8S 集群 NameSpace(命名空间)_NameSpace 介绍及查看 | 学习笔记
|
Kubernetes 开发者 容器
K8S 集群 NaneSpace(命名空间)NameSpace 删除及学习总结 | 学习笔记
快速学习 K8S 集群 NaneSpace(命名空间)NameSpace 删除及学习总结
1918 0
K8S 集群 NaneSpace(命名空间)NameSpace 删除及学习总结 | 学习笔记