专栏简介
本专栏基于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功能包,必须包含两个核心文件:
-
package.xml:包描述文件,记录包名、版本、作者、依赖库,告诉ROS2当前包的依赖关系
-
C++包:CMakeLists.txt:编译规则文件,定义代码编译方式、生成可执行文件
-
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编译工具无法识别。
九、本章总结
-
工作空间是ROS2项目大本营,src存放源码,build/install/log为自动生成目录,禁止手动修改。
-
功能包是ROS2最小运行单元,分为ament_cmake(C++)和ament_python(Python)两种类型。
-
通过git浅克隆可完美解决虚拟机源码下载失败问题,适配弱网环境。
-
rosdepc可一键安装所有项目依赖,colcon为ROS2标准编译工具。
-
虚拟机环境存在专属网络、系统服务坑点,掌握对应排坑方法可大幅提升开发效率。