ROS2教程(入门级):创建ROS2工作空间

本文提供了一步步的教程,指导如何创建ROS2工作空间,包括设置上层工作空间(overlay)。内容涉及源码环境、新建文件夹、克隆仓库、解决依赖、使用colcon构建、源码上层工作空间以及修改工作空间中的包,以实现对基础工作空间的覆盖。通过此教程,读者将了解如何在ROS2环境中管理和定制自己的工作空间。

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

**目标:**创建一个工作空间并且学习如何为开发和测试设置上层工作空间(overlay)。

背景知识

工作空间指的是包含了ROS 2 应用包的文件夹。在使用ROS 2之前,需要在你将要进行工作的终端上,source你安装了ROS 2的工作空间。这使得ROS 2的应用包可以在所打开的终端上使用。

你还有一个选择是source一个上层工作空间,也就是第二工作空间。第二工作空间指的是你添加了一些新的包,但是它跟已经有的ROS 2 工作空间不存在接口。你的基础工作空间必须要包含有你的上层工作空间所需要的全部依赖。你的上层工作空间中的包会覆盖掉基础工作空间的同名应用包。这里也是可能存在多个层工作空间重叠的情况,每一个上层的工作空间都会使用到它的父工作空间的内容。

前提条件

任务

1. source ROS 2 环境

source ROS 2的基础工作空间可以使用下面的命令:

source /opt/ros/foxy/setup.bash

如果上面的命令不能正常工作,那么具体的命令会跟你的安装方式有关,可以参考:ROS 2环境配置

2. 创建一个新的文件夹

最好是为每一个新的工作空间创建一个新的文件夹。名字不重要,但是它可以帮助你区分不同目的的工作空间。我们选择将工作空间的 名字成为dev_ws,意思是开发工作空间。执行类似下面的命令:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

另外一个好的习惯是,将你的工作空间中所有的包都放在src文件夹下。上面的代码在dev_ws下创建一个src文件夹,并且进入到该文件夹下。

3. 克隆一个例程的仓库

在你克隆之前,确认你还在dev_ws/src这个文件夹下。

在接下来的入门级教程中,你将会创建你自己的包,但是现在,你将练习使用已经有的包组成一个工作空间。

你将要使用的已有的包是来自ros_tutorials仓库的。如果你已经看过ROS2专利之前的教程,已经对turtlesim这个包已经很熟悉了,它就是在这个仓库中的其中一个包。

你可以再GitHub上看到这个仓库

注意看文件夹列表左上方的“分支”的下拉菜单。当你克隆这个仓库的时候,通过在命令后面增加-b参数,后面再跟上与你的ROS 2版本想对应分支的名称。

dev_ws/src这个文件夹下,运行对应你正在使用ROS 2版本的命令:

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

比如,如果你正在使用Foxy:

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

现在,ros_tutorials已经克隆到你的工作空间。如果你查看dev_ws/src在的内容,你会看到新的叫ros_tutorials的文件夹。

为了查看在ros_tutorials中的文件夹,你可以输入下面的命令:

ls ros_tutorials

这将会返回你刚刚克隆的内容,大概类似:

roscpp_tutorials  rospy_tutorials  ros_tutorials  turtlesim

前面三个包都被忽略了,turtlesim是这个仓库唯一真实的ROS 2 包。

现在你已经在你的工作空间中新增了一个例程的包,但是这还不是一个完整的工作空间,你还需要解决工作空间的依赖问题,并且构建这个工作空间。

4. 解决依赖

在构建工作空间之前,你需要解决应用包的依赖问题。你可能已经安装了所有的依赖,但是最好的操作还是每次克隆了仓库之后都检查一遍依赖。你大概是不希望因此缺少依赖,导致你等待了很长的时间之后,构建失败了。

在你工作空间的根目录(dev_ws),运行下面的命令:

rosdep install -i --from-path src --rosdistro foxy -y

如果你是通过源码或者”fat“包将ROS2安装到你的Linux上,你将需要用它们的安装指南中提到的rosdep命令。下面是分别是源码的rosdep部分以及”fat“archive的rosdep部分

如果你已经有了全部的依赖,终端的窗口会返回下面的信息:

All required rosdeps installed successfully

应用包会将它们的依赖声明在package.xml文件中。这个命令会遍历那些声明,并且安装那些缺少的依赖。

5. 使用colcon构建工作空间

在你的工作空间的根目录(dev_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+构建的过程中,在窗口中显示输出。否则的话,可以在log文件夹中找到。

一旦构建结束,在工作空间的根目录中输入ls,你可以看到colcon已经创建了新的文件夹:

build  install  log  src

你的工作空间的setup文件会在install文件夹中,你可以用这个setup文件来source你的上层工作空间。

6. source上层工作空间

在你source上层工作空间之前,一件很重要的事情是你需要打开一个新的终端,跟你构建工作空间的那个终端分隔开。在你构建上层工作空间的终端中source上层工作空间,或者反过来,在source了上层工作空间的终端里面构建上层工作空间,都可能引起复杂的问题。

在一个新的终端中,source你的主要的ROS2环境作为基础工作空间,然后你就可以在它上面构建上层工作空间:

source /opt/ros/foxy/setup.bash

去到你的工作空间的根目录:

cd ~/dev_ws

在根目录中source你的上层工作空间:

. install/local_setup.bash

备注

source上层工作空间的local_setup只是只会将上层工作空间的包增加到你的环境中。sourcesetup的话,则会将上层工作空间以及基础工作空间的应用都添加到你的环境中,允许你同时使用两个工作空间的应用包。

因此,source你安装的主要ROS2的setup,然后像你刚刚做的那样,source上层工作空间dev_wslocal_setup,跟仅仅source dev_wssetup是一样的效果,因为这样做环境中也会包含用于创建上层工作空间的基础工作空间。

现在,你可以从上层工作空间中source turtlesim包了:

ros2 run turtlesim turtlesim_node

不过,你如何可以确定,这个turtlesim是来自上层工作空间的,而不是你安装到主环境中的turtlsim呢?

让我们修改上层工作空间中的turtlesim,这样你就可以看到相关的效果了:

  • 你可以修改然后重新构建上层工作空间的包
  • 上层工作空间相比于基础工作空间具有更高的优先级

7. 修改上层工作空间

你可以通过编辑turtlesim窗口的标题栏来修改你的上层工作空间中的turtlesim。为了做到这个,首先在 ~/dev_ws/src/ros_tutorials/turtlesim/src 这个路径下找到turtle_frame.cpp这个文件,然后用你喜欢的文本编辑器打开它。

在第52行,你可以看到 setWindowTitle("TurtleSim");这个函数,将"Turtlesim"这个值改变为"Myturtlesim",然后保存文件。

回到第一个终端,也就是你运行colcon build的终端,把这个命令再运行一次。

回到第二个终端,也就是你source了上层工作空间的终端,然后将turtlesim在运行一次:

ros2 run turtlesim turtlesim_node

你将会看到窗口的标题栏现在显示的是“MyTurtleSim"。

../../_images/overlay.png

虽然在这个终端启动的时候,你也source了ROS2的环境,但是位于dev_ws环境下的上层工作空间比基础工作空间的内容具有更高的优先级。

为了验证你的基础工作空间的内容依然是可以用的,你打开一个全新的终端,然后仅仅是source的你ROS2的安装目录,然后运行turtlesim:

ros2 run turtlesim turtlesim_node

../../_images/underlay.png

你可以看到修改过的上层工作空间并没有影响基础工作空间中的任何内容。

总结

在这个教程中,你通过source你所安装的ROS版本作为基础工作空间,并且通过克隆和构建软件包在一个新的工作空间中创建了一个上层工作空间。正如你从修改过的turtlesim中所看到的,这个上层工作空间被前置在环境变量中,对基础工作空间具有优先权。

下一步

现在你已经理解了创建、构建以及source你自己的工作空间的一些细节。后面,你可以学习到如何创建自己的软件包。

你可以在接下来的教程里面,学习到更多关于ROS图的连接相关的内容。可以关注我或者订阅我的专栏:ROS 2专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值