ROS1学习笔记:创建工作环境与功能包(ubuntu20.04)

本文详细介绍了如何在Ubuntu20.04环境下搭建ROS工作空间并创建功能包的过程,包括工作空间的创建与编译,环境变量的设置与检查,以及功能包的创建与编译。

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

参考B站古月居ROS入门21讲:创建工作环境与功能包
基于VMware Ubuntu 20.04 Noetic版本的环境

一、工作空间介绍

使用ROS实现机器人开发的主要手段当然是写代码,那么这些代码文件就需要放置到一个固定的空间内,也就是工作空间。

什么是工作空间(workspace)?
工作空间(workspace)是一个存放工程开发相关文件的文件夹。Fuerte版本之后的ROS默认使用的是Catkin编译系统,一个典型Catkin编译系统下的工作做空间结构如图所示:
在这里插入图片描述
典型的工作空间中一般包含包括以下四个目录空间:

(1)src:代码空间(Source Space),开发过程中最常用的文件夹用来存储所有ROS功能包的源码文件。其实就是存放功能包和源码
(2)build:编译空间(Build Space),用来存储工作空间编译过程中产生的缓存信息和中间文件。其实就是存放编译过程中产生的中间文件,平时不用关心的
(3)devel:开发空间(Development Space),用来放置编译生成的可执行文件。其实就是存编译生成的可执行文件、库和脚本,有时候需要看看
(4)install:安装空间(Install Space),编译成功后可以使用make install命令将可执行文件安装到该空间中运行该空间中的环境变量脚本即可在终端中运行这些可执行文件。安装空间并不是必需的很多工作空间中可能并没有该文件夹。其实就是文件安装的位置,与上面有所重复,因此ROS2对此做了调整

二、创建工作空间

2.1 创建工作空间

创建工作空间的命令比较简单,首先使用系统命令创建工作空间目录,然后运行ROS的工作空间初始化命令即可完成创建过程

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

注:“~/”意为当前用户名目录;“-p”意为递归创建目录,即直接创建多级目录。
src文件夹即代码空间,不能自行用别的名称代替

第3行catkin_init_workspace意为将当前文件夹变为工作空间,使其拥有工作空间的属性
我们可以先创建catkin_ws文件夹,然后进入该文件夹继续创建src文件夹
在这里插入图片描述
然后再src文件夹下,将当前文件夹变为工作空间:
在这里插入图片描述
如果在src文件夹下看到生成的这个txt文件,则说明创建工作环境成功!

2.2 编译空代码的工作空间

创建完成后,可以在工作空间的根目录下使用catkin_make命令编译整个工作空间

cd ~/catkin_ws
catkin_make

在这里插入图片描述
第二行命令为编译命令,将src文件夹下的源码都进行编译
在这里插入图片描述
编译过程中在工作空间的根目录里会自动产生builddevel两个文件夹及其中的文件。
编译完成后在devel文件夹中已经产生几个setup.*sh形式的环境变量设置脚本。
但是我们发现没有生成install文件夹,我们需要额外输入命令创建:

catkin_make install

在这里插入图片描述
结果可以看到生成了install文件夹。
这样一个空的工作空间创建好了并且空的代码空间编译完成。

2.3 设置和检查环境变量

使用source命令运行这些脚本文件,则工作空间中的环境变量可以生效。

source devel/setup.bash

为了确保环境变量已经生效,可以使用如下命令进行检查:

echo $ROS_PACKAGE_PATH

如果打印的路径中已经包含当前工作空间的路径,则说明环境变量设置成功,如下图:
在这里插入图片描述

在终端中使用source命令设置的环境变量只能在当前终端中生效
如果希望环境变量在所有终端中有效则需要在终端的配置文件中加入环
境变量的设置echo "source/WORKSPACE/devel/setup.bash">>~/.bashrc
请使用工作空间路径代替WORKSPACE

三、创建功能包

功能包是放置ROS源码的最小单元。
在上面我们创建了一个空的工作空间,但是在src文件夹下并没有写东西,因此我们要创建一个功能包来放置自己的源码文件。
注意同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
ROS不允许在某个功能包中嵌套其他功能包,多个功能包必须平行放置在代码空间中。

3.1 创建功能包

ROS中功能包的形式如下:

my_package/
	CMakeLists.txt
	package.xml
	......
格式:catkin_create_pkg <package_name> [depend1] [depend2] [depend3]...
  • <package_name>:文件夹名字
  • depend:依赖文件,如编译的时候需要用到ROS的其他功能包,比如需要调用python、C++的库,就要指明是rospy、roscpp。还有其他的依赖包,比如std_msgs、geometry_msgs、turtlesim等等。

在这里我们创建一个test_pkg功能包:

cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp

在这里插入图片描述
创建成功后,我们进入到该文件夹里:
在这里插入图片描述
可以看到上图生成的一些文件夹和文件。

3.2 编译新的功能包

然后回到工作空间的根目录下进行编译,并且设置环境变量:

cd ~/catkin_ws
catkin_make

在这里插入图片描述

3.3 设置和检查环境变量

编译完功能包后,为了运行,我们先设置环境变量,以便系统找到我们的工作空间和功能包。

source ~/catkin_ws/devel/setup.bash

检查:

echo $ROS_PACKAGE_PATH

在这里插入图片描述

四、功能包的两个重要文件

package.xml文件提供了功能包的元信息也就是描述功能包属性的信息。
CMakeLists.txt文件记录了功能包的编译规则。

4.1 package.xml

在这里插入图片描述
在这里插入图片描述

4.2 CMakeLists.txt

在这里插入图片描述

<think>好的,我现在需要帮助用户在Ubuntu 20.04创建ROS工作空间功能。根据用户提供的引用资料,我需要整理一个清晰的步骤指南。首先,我得确认用户使用的是ROS1的Noetic版本,因为引用中提到了这个版本。 第一步应该是创建工作空间。我记得在ROS中,工作空间通常以catkin_ws命名,结构是src目录下初始化的。用户提到的命令是mkdir -p创建目录,然后进入src运行catkin_init_workspace,这应该是初始化工作空间的关键步骤。然后需要回到工作空间根目录进行catkin_make,这样会生成builddevel目录。编译完成后,还需要source devel/setup.bash来激活环境,这一步很重要,否则可能找不到工作空间中的功能。 接下来是创建功能功能应该在src目录下,使用catkin_create_pkg命令,后面跟着依赖项,比如roscpp、rospy等。用户可能需要知道依赖项的作用,比如roscpp是C++库,rospy是Python库。创建完成后,再次编译整个工作空间,确保功能被正确识别。 然后,用户可能需要创建节点,也就是编写代码文件。比如在功能的src目录下创建C++或Python文件,并修改CMakeLists.txtpackage.xml来配置编译依赖。这部分可能需要详细说明,但用户的问题主要是创建步骤,可能不需要深入代码编写,但需要提到这些后续步骤。 需要注意的常见问题括:是否正确source了setup.bash,是否在正确的目录下创建功能,以及环境变量是否设置正确。例如,如果用户没有source,可能会导致找不到功能,这时候应该提醒他们检查这一步,或者将source命令添加到.bashrc中自动执行。 用户提供的引用资料中,引用[1][2]都提到了创建工作空间功能的基本命令,我需要确保步骤这些资料一致,并且在回答中正确引用。比如,在步骤中提到引用来源,如引用[1]引用[2]。 最后,生成相关问题的时候,需要考虑用户可能的后续疑问,比如如何编译节点、如何运行节点、工作空间结构的作用等。这些问题应该创建过程相关,帮助用户进一步学习。 现在需要将这些步骤分点说明,确保结构清晰,使用中文,并且正确应用LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及到的LaTeX较少,主要是代码块命令的展示。代码部分需要用反引号裹,并注明语言类型,比如bash或python。 总结步骤应该是: 1. 创建工作空间 - mkdir创建目录 - catkin_init_workspace初始化 - catkin_make编译 - source环境 2. 创建功能 - 使用catkin_create_pkg命令 - 添加依赖项 - 再次编译 3. 后续步骤注意事项 - 创建节点文件 - 修改CMakeListspackage.xml - 常见问题检查 这样分步应该能帮助用户顺利完成创建过程。同时,确保引用标记正确放置,比如在提到初始化工作空间时引用[2],或者在整体流程中提到参考古月居的教程引用[1]。</think>### 如何在 Ubuntu 20.04创建 ROS 工作空间功能? 以下步骤基于 ROS Noetic 版本,适用于 Ubuntu 20.04 系统: --- #### **一、创建 ROS 工作空间** 1. **新建工作空间目录** 在终端中依次执行以下命令: ```bash mkdir -p ~/catkin_ws/src # 创建工作空间目录结构 cd ~/catkin_ws/src # 进入src目录 catkin_init_workspace # 初始化工作空间 ``` 此命令会生成 `CMakeLists.txt` 文件,标志工作空间初始化完成[^2]。 2. **编译工作空间** ```bash cd ~/catkin_ws # 返回工作空间根目录 catkin_make # 编译生成builddevel文件夹 ``` 3. **激活环境变量** ```bash source devel/setup.bash # 临时生效,仅在当前终端有效 ``` **永久生效**:将 `source ~/catkin_ws/devel/setup.bash` 添加到 `~/.bashrc` 文件末尾。 --- #### **二、创建 ROS 功能** 1. **在src目录下创建功能** 功能名称需唯一,且不能含大写字母。例如创建名为 `my_pkg` 的: ```bash cd ~/catkin_ws/src catkin_create_pkg my_pkg roscpp rospy std_msgs # 名称 + 依赖项 ``` - `roscpp`:C++ 依赖库 - `rospy`:Python 依赖库 - `std_msgs`:标准消息类型 2. **重新编译工作空间** ```bash cd ~/catkin_ws catkin_make source devel/setup.bash # 更新环境变量 ``` --- #### **三、验证功能** - **查看功能路径**: ```bash rospack find my_pkg # 应返回路径:~/catkin_ws/src/my_pkg ``` - **检查依赖项**: ```bash rospack depends1 my_pkg # 显示roscpp, rospy, std_msgs ``` --- #### **四、后续开发步骤** 1. **添加节点文件** - 在功能的 `src` 目录下创建 C++/Python 文件(如 `node.cpp` 或 `node.py`)。 2. **配置编译规则** - 修改 `CMakeLists.txt` 以编译 C++ 节点(Python 节点无需编译)。 3. **声明依赖关系** - 在 `package.xml` 中添加功能依赖的描述。 --- #### **常见问题** 1. **找不到功能**:未正确执行 `source devel/setup.bash` 或未编译。 2. **编译错误**:依赖项未在 `package.xml` 中声明或代码语法错误。 3. **环境冲突**:多个工作空间时需注意 `ROS_PACKAGE_PATH` 的优先级。 ---
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron-ywl

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值