ROS2 Humble 从入门实战教程:第五章 ROS2工作空间与功能包:开发过程的大本营【VMware Ubuntu22.04实操】

专栏简介

本专栏基于VMware Ubuntu22.04 + ROS2 Humble环境,全程实操、全程排坑,适合零基础新手入门学习。

本文为第五章核心内容,带你彻底搞懂ROS2两大核心基础:工作空间、功能包,掌握ROS2项目完整组织结构、创建、编译、环境配置,同时收录虚拟机环境专属高频报错解决方案。

摘要

所有ROS2代码开发,都离不开工作空间和功能包。工作空间是机器人项目的「大本营」,功能包是ROS2代码的「最小单元」。本文从零讲解二者核心概念、目录结构、区别联系,手把手实操创建工作空间、下载官方源码、创建C++/Python功能包、编译配置环境,同时解决虚拟机环境下Git克隆报错、PIP安装告警等疑难问题。

一、什么是ROS2工作空间

做过软件开发的同学都知道,开发项目前需要新建工程文件夹,存放所有源码、配置、资源文件。

在ROS2中,这个存放所有机器人项目代码、编译文件、日志文件的专属文件夹 ,就叫做工作空间(Workspace)。

简单理解:工作空间 = ROS2项目总仓库,一个工作空间可以存放无数个功能包,且系统支持创建多个独立工作空间,互不干扰。

1.1 工作空间四大核心目录

标准ROS2工作空间包含四个固定文件夹,分工明确,新手必须熟记:

复制代码
ros2_ws/
├── src/        # 源码空间(唯一手动操作目录)
├── build/      # 编译中间文件(自动生成)
├── install/    # 编译安装产物(自动生成)
└── log/        # 编译运行日志(自动生成)
  • src(核心重点):源代码目录,所有自定义功能包、开源源码必须放入此处,是我们唯一需要手写代码、修改代码的目录。

  • build:编译缓存目录,存放编译过程产生的中间文件,无需手动修改。

  • install:安装目录,编译成功后生成可执行文件、头文件、环境配置文件,系统通过该目录识别我们的自定义功能包。

  • log:日志目录,记录编译报错、运行警告,排查问题时可查看。

💡 核心口诀:只改src,不动build、install、log!编译报错直接删除三个自动生成文件夹重建即可。

1.2 手把手创建ROS2工作空间

遵循ROS2官方规范,工作空间必须手动创建src子目录,否则编译工具无法识别项目:

复制代码
# 1. 创建工作空间及src源码目录
mkdir -p ~/ros2_ws/src

# 2. 进入源码目录(所有功能包、源码都放这里)
cd ~/ros2_ws/src

二、下载全套ROS2教程源码(排坑完整版)

为了配合课程实操,我们需要克隆官方开源教程源码,包含所有章节案例代码(话题、服务、动作、参数、TF、URDF等)。

2.1 常见报错问题(VMware虚拟机专属)

虚拟机网络不稳定,完整克隆仓库极易出现以下TLS连接报错:

复制代码
error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

报错原因:虚拟机网络波动、Git默认缓冲区过小,大仓库传输中途断开。

2.2 完美解决方案(浅克隆,推荐)

先清理克隆失败的残留文件夹,再使用 --depth=1 浅克隆(仅拉取最新代码,大幅减少传输量,适配弱网虚拟机):

复制代码
# 1. 清理残留文件
rm -rf ros2_21_tutorials

# 2. 浅克隆官方源码(虚拟机必用)
git clone --depth=1 https://gitee.com/guyuehome/ros2_21_tutorials.git

2.3 拓展:恢复完整仓库历史

后续需要查看完整提交记录,可进入目录执行命令补全:

复制代码
cd ros2_21_tutorials
git fetch --unshallow

2.4 备选方案:扩容Git缓冲区

复制代码
# 扩容缓冲区至500M
git config --global http.postBuffer 524288000
# 重新克隆
git clone https://gitee.com/guyuehome/ros2_21_tutorials.git

三、安装PIP与ROS依赖自动配置工具

源码下载完成后,需要安装依赖管理工具,自动安装所有功能包所需依赖。

3.1 安装python3-pip(含报错排坑)

执行安装命令:

复制代码
sudo apt install python3-pip

安装末尾可能出现以下告警:

复制代码
Error: GDBus.Error:org.freedesktop.systemd1.UnitMasked: Unit packagekit.service is masked.

问题解析 :该告警为Ubuntu图形包管理服务被虚拟机系统屏蔽导致,不代表安装失败,完全不影响使用,直接忽略即可!

3.2 验证PIP安装成功

复制代码
pip3 -V

输出版本号即为安装成功,同时推荐升级国内清华源加速版pip:

复制代码
pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

3.3 安装rosdep依赖工具

复制代码
# 安装rosdepc(国内适配版,解决官方rosdep超时问题)
sudo pip3 install rosdepc

# 初始化、更新依赖源
sudo rosdepc init
rosdepc update

# 一键安装工作空间所有源码依赖
cd ~/ros2_ws
rosdepc install -i --from-path src --rosdistro humble -y

四、编译ROS2工作空间

ROS2使用 colcon 作为统一编译工具,先安装编译依赖:

复制代码
sudo apt install python3-colcon-ros

4.1 完整编译命令

复制代码
# 回到工作空间根目录
cd ~/ros2_ws

# 编译所有功能包
colcon build

# 【开发推荐】符号链接编译,修改代码无需重新编译
colcon build --symlink-install

4.2 加载环境变量

编译完成后必须加载环境,系统才能识别自定义包:

复制代码
# 当前终端临时生效
source install/setup.bash

# 永久配置(所有终端生效)
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

五、ROS2功能包详解(代码最小单元)

工作空间是大仓库,功能包(Package) 就是仓库里的独立项目,是ROS2可编译、可运行的最小代码单元。

ROS2所有功能(导航、建图、控制、视觉),全部以功能包的形式存在,方便代码拆分、复用、分享。

5.1 功能包两大类型

ROS2支持C++、Python两种开发语言,对应两种功能包构建类型:

  • C++功能包 :构建类型 ament_cmake,编译型语言,运行效率高,适合核心控制、算法开发

  • Python功能包 :构建类型 ament_python,解释型语言,开发速度快,适合脚本、视觉、上层逻辑

5.2 核心配置文件

合法的ROS2功能包,必须包含两个核心文件:

  1. package.xml:包描述文件,记录包名、版本、作者、依赖库,告诉ROS2当前包的依赖关系

  2. C++包:CMakeLists.txt:编译规则文件,定义代码编译方式、生成可执行文件

  3. Python包:setup.py:程序入口配置文件,定义脚本运行入口

5.3 手把手创建自定义功能包

必须在 src 目录下创建功能包!

复制代码
cd ~/ros2_ws/src

# 1. 创建C++功能包(依赖rclcpp核心库)
ros2 pkg create --build-type ament_cmake my_cpp_pkg --dependencies rclcpp

# 2. 创建Python功能包(依赖rclpy核心库)
ros2 pkg create --build-type ament_python my_py_pkg --dependencies rclpy

5.4 单独编译指定功能包

多包项目开发,单独编译单个包速度更快:

复制代码
cd ~/ros2_ws
colcon build --packages-select my_cpp_pkg

六、工作空间 VS 功能包(通俗区分)

  • 工作空间:全局容器,一个文件夹容纳多个功能包,是项目的「大文件夹」

  • 功能包:最小功能单元,一个包实现一个独立功能,是项目的「子模块」

✅ 层级关系:工作空间 > 功能包 > 源码文件

七、ROS2包查询常用命令

复制代码
# 列出系统所有功能包
ros2 pkg list

# 查找指定功能包路径
ros2 pkg find rclcpp

# 查看功能包详细信息
ros2 pkg describe my_cpp_pkg

八、VMware Ubuntu22.04 专属高频踩坑汇总

坑1:Git克隆源码TLS连接中断

虚拟机网络不稳定导致克隆失败,解决方案:清理残留文件 + 浅克隆

坑2:apt安装pip出现packagekit告警

系统服务被屏蔽导致的无害告警,忽略即可,不影响功能使用。

坑3:新建终端找不到自定义包

未永久配置环境变量,执行source ~/.bashrc 或重启终端即可。

坑4:编译报错、文件冲突

缓存文件异常,清空自动生成目录重新编译:

复制代码
rm -rf build install log
colcon build --symlink-install

坑5:在根目录创建功能包

功能包必须创建在src目录下,否则colcon编译工具无法识别。

九、本章总结

  1. 工作空间是ROS2项目大本营,src存放源码,build/install/log为自动生成目录,禁止手动修改。

  2. 功能包是ROS2最小运行单元,分为ament_cmake(C++)和ament_python(Python)两种类型。

  3. 通过git浅克隆可完美解决虚拟机源码下载失败问题,适配弱网环境。

  4. rosdepc可一键安装所有项目依赖,colcon为ROS2标准编译工具。

  5. 虚拟机环境存在专属网络、系统服务坑点,掌握对应排坑方法可大幅提升开发效率。

相关推荐
FPGA信号处理1 小时前
【信号检测与估计】第一次作业:无偏性、均方误差与最小方差无偏估计
人工智能·机器学习·概率论
田里的水稻2 小时前
IL_部署推理---工具和语言
人工智能·神经网络·机器学习
在所不辞兄2 小时前
为什么PINN非常适合求解有限元模型
人工智能·深度学习·神经网络·算法·机器学习
workflower3 小时前
汽车自动驾驶9 要素
人工智能·机器学习·重构·云计算·汽车·无人机
joopthd18 小时前
工业在线 TDLAS 器件源头厂商|连续监测场景器件选型要点
机器学习·激光气体检测·tdlas分析模块·仪器集成开发·工业在线监测
方方洛18 小时前
ray教程-00-前言与导读
人工智能·分布式·机器学习
方方洛18 小时前
ray教程-01-认识Ray
人工智能·分布式·机器学习
段一凡-华北理工大学19 小时前
高炉炼铁机器视觉与智能识别十八讲~系列文章11:从单帧到视频流:时序与异常行为识别
人工智能·机器学习·python开发·智能识别·高炉智能化·时序识别