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。

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
2月前
launcher中Workspace类大致分析
launcher中Workspace类大致分析
16 1
|
2月前
|
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
关于catkin_init_workspace找不到命令的原因
关于catkin_init_workspace找不到命令的原因
398 3
关于catkin_init_workspace找不到命令的原因
|
Android开发
eclipse多余的Workspace如何删除
eclipse多余的Workspace如何删除
184 0
|
Kubernetes Shell C#
通过kubectx/kubens快速切换管理k8s的context和namespace
通过kubectx/kubens快速切换管理k8s的context和namespace
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
2847 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
弹性计算 Kubernetes 监控
我们为什么会删除不了集群的 Namespace?
阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题。常见的有网络连接失败、服务器宕机、性能不达标及请求响应慢等。但如果要评选的话,什么问题看起来微不足道事实上却让人绞尽脑汁,我相信肯定是“删不掉”的问题,比如文件删不掉、进程结束不掉、驱动卸载不了等。这样的问题就像冰山,隐藏在它们背后的复杂逻辑,往往超过我们的预想。
我们为什么会删除不了集群的 Namespace?
|
SQL Oracle 关系型数据库
MANAGE TABLESPACE
一、官档 BOOK → Database SQL Language Reference → 12 SQL Statements: ALTER TABLE to ALTER TABLESPACE → ALTER TABLESPACE 二、扩容表空间 扩大数据库的第三种方法是手工增大数据文件(datafile)的容量或使表空间(tablespace)内的数据文件容量可以随需动态地增长。
1247 0