news 2026/6/19 3:01:31

5:ROS2 Humble :工作空间完整详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5:ROS2 Humble :工作空间完整详解

前言

很多初学者会混淆 ROS1 与 ROS2 的工作空间,

ROS1 使用 catkin_ws + catkin_make

ROS2 统一使用 colcon 编译工具

工作空间结构、创建命令、编译命令全部改动。

本文基于 Ubuntu22.04 + ROS2 Humble,全程小白友好,逐行解释命令、拆解每个文件夹作用,看完就能独立搭建、使用自己的 ROS2 工程。

一、什么是 ROS2 工作空间

ROS2 工作空间(workspace)就是一个独立文件夹,专门存放你自己写的机器人代码、功能包、自定义消息、启动文件。

系统自带的 ROS 工具(比如 turtlesim、rviz)存放在 /opt/ros/humble 系统目录,不建议修改;

所有个人开发代码全部放在自定义工作空间,解耦方便,工程迁移、删除、复制都不会破坏系统 ROS 环境。

ROS2 工作空间固定包含 4 个核心目录:src、build、install、log(ROS2 无 ROS1 的 devel 文件夹,这是最大区别)。

二、四大核心目录详解(重点,小白必看懂)

假设你的工作空间名为 colcon_ws,根目录路径:~/colcon_ws/

1. src(Source Space 源码空间,唯一需要手动写代码的文件夹)

  • 路径~/colcon_ws/src/
  • 作用:存放所有自定义功能包(package),Python 脚本、C++ 源码、launch 启动文件、自定义消息、配置文件全部放在这里。
  • 目录结构说明:
    colcon_ws/src/ ├── package_01/ # 第一个自定义功能包 │ ├── package.xml # 功能包配置文件(依赖、名称、版本) │ ├── CMakeLists.txt # 编译规则文件 │ ├── launch/ # 存放.launch.py启动文件 │ ├── scripts/ # 存放Python可执行脚本 │ ├── src/ # 存放C++源码 ├── package_02/ # 第二个自定义功能包
  • 关键规则:工作空间下所有功能包必须直接放在 src 下,不能嵌套文件夹

2. build(Build Space 编译中间文件目录)

  • 路径~/colcon_ws/build/
  • 作用colcon build编译时生成的临时缓存、CMake 编译中间文件、日志、依赖检测文件。
  • 实用知识点:
    1. 里面文件看不懂,不需要手动修改;
    2. 代码改完编译报错时,可以直接删除整个 build 文件夹,重新编译清除缓存;
    3. 每个功能包会在 build 里生成独立子文件夹,互不干扰。

3. install(Install Space 安装空间,运行程序核心目录)

  • 路径~/colcon_ws/install/
  • 作用:编译完成后,生成可执行程序、库文件、环境脚本、启动文件,运行自己代码全靠这个文件夹
  • 内部关键子文件夹:
    • bin/:编译好的可执行程序(Python/C++ 节点);
    • lib/:C++ 编译生成的动态库、Python 包;
    • share/:功能包配置、launch 文件、消息定义、参数文件;
    • setup.bash / setup.sh环境变量脚本,新开终端必须source install/setup.bash,系统才能识别你写的自定义节点;
  • 补充:ROS1 的devel文件夹在 ROS2 中被彻底移除,所有运行相关文件统一放到 install。

4. log(日志目录,ROS2 独有)

  • 路径~/colcon_ws/log/
  • 作用:每次colcon build编译完整日志,编译报错、警告全部存在这里,排查编译失败时可以打开日志查看详细报错信息。

三、从零搭建 ROS2 工作空间(逐行命令 + 详细说明)

前置条件

  1. Ubuntu22.04 系统,已完整安装 ROS2 Humble;
  2. 终端提前加载 ROS2 基础环境(永久配置过.bashrc可跳过)
source /opt/ros/humble/setup.bash

步骤 1:创建工作空间根目录 + src 源码文件夹

mkdir -p ~/colcon_ws/src

-p:自动创建多级目录,上层文件夹不存在也不会报错;
~/colcon_ws:工作空间根目录,~代表当前用户家目录;
/src:源码目录,ROS2 强制要求所有功能包放在 src 内。


步骤 2:进入 src 目录,创建自定义功能包(工程代码载体)

#切换到 src 文件夹 cd ~/colcon_ws/src #创建功能包通用语法 ros2 pkg create --build-type ament_python 包名 依赖1 依赖2

ros2 pkg create:ROS2 创建功能包专用指令(替代 ROS1 的 catkin_create_pkg);


--build-type ament_python:编译类型,写 Python 代码;

--build-type ament_cmake:编译类型,写 C++ 代码;

实操示例(创建名为demo_pkg的 Python 功能包):

ros2 pkg create --build-type ament_python demo_pkg rclpy std_msgs

末尾跟随依赖包,rclpy(Python 通信核心库)、std_msgs(标准消息)是基础必带依赖。

执行后 src 内会生成demo_pkg完整模板文件夹,自带 package.xml、资源目录。


步骤 3:返回工作空间根目录,编译整个工作空间

#切回工作空间根目录(必须在 colcon_ws 下编译,不能在 src 里编译) cd ~/colcon_ws #执行编译命令 colcon build

命令说明:

  • colcon:ROS2 官方统一编译工具,替代 ROS1 catkin;
  • build:执行编译操作;
  • 可选优化指令:colcon build --packages-select demo_pkg只编译单个功能包,速度更快;
  1. 编译成功标志:终端末尾输出Summary: X packages finished [XX.Xs],无 error 报错。
  2. 编译完成后,根目录自动生成build、install、log三个文件夹。


步骤 4:加载工作空间环境变量(关键!不 source 无法运行自定义节点)

临时生效(仅当前终端,新开终端需要重新执行)
source ~/colcon_ws/install/setup.bash

原理:执行 install 内的 setup 脚本,把你的自定义功能包路径注册到系统 ROS 环境,终端才能通过ros2 run找到你写的节点。

永久生效(推荐,新开终端自动加载)
#编辑 bash 配置文件 gedit ~/.bashrc #在文件最底部添加一行: source ~/colcon_ws/install/setup.bash #保存关闭文件,刷新配置立刻生效 source ~/.bashrc

步骤 5:验证工作空间环境是否配置成功

执行检查命令:

echo $COLCON_PREFIX_PATH

正常输出会包含/home/wzl/colcon_ws/install,代表环境加载成功。


四、创建 / 编译功能包完整流程复盘(简化实操流程)

1:进入源码目录:cd ~/colcon_ws/src
2:创建功能包(Python 举例):ros2 pkg create --build-type ament_python test_pkg rclpy std_msgs
3:返回工作空间根目录:cd ~/colcon_ws
4:编译:colcon build
5:加载环境:source install/setup.bash
6:运行自定义节点:ros2 run test_pkg 你的节点文件名

五、ROS1 catkin_ws vs ROS2 colcon_ws 核心区别(避坑重点)

表格

对比项ROS1(catkin)ROS2(colcon)
编译工具catkin_make / catkin buildcolcon build
工作空间名称catkin_ws(习惯命名)colcon_ws(习惯命名)
中间目录build + develbuild + install + log,无 devel
创建功能包命令catkin_create_pkgros2 pkg create
环境脚本路径devel/setup.bashinstall/setup.bash
编译系统catkinament_python / ament_cmake

六、小白高频问题解答

1. 为什么运行自己写的节点提示 “包不存在”?

90% 原因:没有执行source install/setup.bash,系统没识别到你的工作空间,永久写入.bashrc即可一劳永逸。

2. 代码修改后运行还是旧效果?

两种解决方式:

  1. 在工作空间根目录重新执行colcon build,再 source 环境;
  2. 彻底清除缓存:删除 build、install、log 三个文件夹,重新编译。

3. src 里可以放多个功能包吗?

完全可以,src 下能存放几十个独立功能包,一次colcon build全部编译。

4. 能不能创建多个工作空间?

可以,比如一个colcon_ws做 AGV 导航、一个camera_ws做视觉,注意source时只会生效最后加载的工作空间,多工程开发建议分开终端。

5. build 文件夹可以删除吗?

完全可以,删除后重新colcon build会自动生成,常用于解决编译缓存错乱、奇怪报错。

七、拓展小实操(快速测试你的工作空间)

#在 src 创建测试包 cd ~/colcon_ws/src ros2 pkg create --build-type ament_python hello_world rclpy std_msgs #返回根目录编译 cd ~/colcon_ws colcon build source install/setup.bash #查看包是否被识别 ros2 pkg list | grep hello_world

能输出 hello_world,代表整个工作空间搭建流程完全成功。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 3:00:49

赛马娘中文补丁终极指南:3步解锁完整本地化体验

赛马娘中文补丁终极指南:3步解锁完整本地化体验 【免费下载链接】umamusume-localify Localify "ウマ娘: Pretty Derby" DMM client 项目地址: https://gitcode.com/gh_mirrors/um/umamusume-localify 想体验赛马娘完整中文界面却苦于日文障碍&…

作者头像 李华
网站建设 2026/6/19 2:59:19

智能锡膏柜选购经验分享,亲测效果好

引言在电子制造行业中,特别是SMT(表面贴装技术)生产过程中,锡膏的管理和存储对于确保产品质量和提高生产效率至关重要。随着智能制造理念的不断深入,智能锡膏柜逐渐成为解决传统锡膏管理痛点的有效工具。本文基于实际使…

作者头像 李华
网站建设 2026/6/19 2:43:34

分布式黎曼优化算法在非欧数据中的应用与实现

1. 流形优化与分布式计算的基础概念在传统的欧几里得空间中,优化问题通常假设数据点存在于平坦的向量空间。然而,许多实际应用中的数据本质上具有非欧几里得特性,例如:计算机视觉中的旋转矩阵(SO(3)群)机器…

作者头像 李华
网站建设 2026/6/19 2:43:31

深入解析ColdFire BDM实时调试:硬件断点与内存访问实战

1. 项目概述在嵌入式开发的深水区,尤其是面对像Freescale(现NXP)ColdFire这类经典的微控制器架构时,传统的“插桩打印”或“全速运行看现象”的调试方法往往力不从心。当你的代码在实时操作系统中飞奔,或者在与硬件时序…

作者头像 李华
网站建设 2026/6/19 2:43:20

表格数据处理技术:从传统方法到现代LLM应用

1. 表格数据表示与检索的技术演进表格数据作为结构化信息的主要载体,在企业数据管理和科学研究的各个领域都扮演着关键角色。过去十年间,我们见证了表格数据处理技术从传统关系型方法到现代深度学习范式的重大转变。早期的表格处理主要依赖精确的模式匹配…

作者头像 李华