
前言很多初学者会混淆 ROS1 与 ROS2 的工作空间ROS1 使用 catkin_ws catkin_makeROS2 统一使用 colcon 编译工具工作空间结构、创建命令、编译命令全部改动。本文基于 Ubuntu22.04 ROS2 Humble全程小白友好逐行解释命令、拆解每个文件夹作用看完就能独立搭建、使用自己的 ROS2 工程。一、什么是 ROS2 工作空间ROS2 工作空间workspace就是一个独立文件夹专门存放你自己写的机器人代码、功能包、自定义消息、启动文件。系统自带的 ROS 工具比如 turtlesim、rviz存放在 /opt/ros/humble 系统目录不建议修改所有个人开发代码全部放在自定义工作空间解耦方便工程迁移、删除、复制都不会破坏系统 ROS 环境。ROS2 工作空间固定包含 4 个核心目录src、build、install、logROS2 无 ROS1 的 devel 文件夹这是最大区别。二、四大核心目录详解重点小白必看懂假设你的工作空间名为 colcon_ws根目录路径~/colcon_ws/1. srcSource Space 源码空间唯一需要手动写代码的文件夹路径~/colcon_ws/src/作用存放所有自定义功能包packagePython 脚本、C 源码、launch 启动文件、自定义消息、配置文件全部放在这里。目录结构说明colcon_ws/src/ ├── package_01/ # 第一个自定义功能包 │ ├── package.xml # 功能包配置文件依赖、名称、版本 │ ├── CMakeLists.txt # 编译规则文件 │ ├── launch/ # 存放.launch.py启动文件 │ ├── scripts/ # 存放Python可执行脚本 │ ├── src/ # 存放C源码 ├── package_02/ # 第二个自定义功能包关键规则工作空间下所有功能包必须直接放在 src 下不能嵌套文件夹。2. buildBuild Space 编译中间文件目录路径~/colcon_ws/build/作用colcon build编译时生成的临时缓存、CMake 编译中间文件、日志、依赖检测文件。实用知识点里面文件看不懂不需要手动修改代码改完编译报错时可以直接删除整个 build 文件夹重新编译清除缓存每个功能包会在 build 里生成独立子文件夹互不干扰。3. installInstall 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 工作空间逐行命令 详细说明前置条件Ubuntu22.04 系统已完整安装 ROS2 Humble终端提前加载 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 依赖2ros2 pkg createROS2 创建功能包专用指令替代 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末尾跟随依赖包rclpyPython 通信核心库、std_msgs标准消息是基础必带依赖。执行后 src 内会生成demo_pkg完整模板文件夹自带 package.xml、资源目录。步骤 3返回工作空间根目录编译整个工作空间#切回工作空间根目录必须在 colcon_ws 下编译不能在 src 里编译 cd ~/colcon_ws #执行编译命令 colcon build命令说明colconROS2 官方统一编译工具替代 ROS1 catkinbuild执行编译操作可选优化指令colcon build --packages-select demo_pkg只编译单个功能包速度更快编译成功标志终端末尾输出Summary: X packages finished [XX.Xs]无 error 报错。编译完成后根目录自动生成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/src2:创建功能包Python 举例ros2 pkg create --build-type ament_python test_pkg rclpy std_msgs3:返回工作空间根目录cd ~/colcon_ws4:编译colcon build5:加载环境source install/setup.bash6:运行自定义节点ros2 run test_pkg 你的节点文件名五、ROS1 catkin_ws vs ROS2 colcon_ws 核心区别避坑重点表格对比项ROS1catkinROS2colcon编译工具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. 代码修改后运行还是旧效果两种解决方式在工作空间根目录重新执行colcon build再 source 环境彻底清除缓存删除 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代表整个工作空间搭建流程完全成功。