当前位置: 首页 > news >正文

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,代表整个工作空间搭建流程完全成功。

http://www.jsqmd.com/news/1039782/

相关文章:

  • 阿里国际agent开发岗,我跪了!!!
  • Microchip 24XX256 EEPROM选型、驱动与可靠性设计全指南
  • Motorola MMDS0508硬件仿真器:嵌入式调试利器与总线分析实战
  • 深度学习车道线检测:从U-Net到行锚点模型的工业级实践
  • 拼多多数据采集实战:3大业务场景的完整解决方案与架构设计
  • 小红书2026.6.11推荐算法升级深度解析:语义质量评分、深度互动建模与AI内容检测的技术拆解
  • AutoDrive Challenge™:学生如何从零构建L4自动驾驶系统
  • 第四代USB 2.0闪存媒体控制器:集成电源与多卡支持的设计实践
  • 自动驾驶仿真测试:从原子级建模到闭环验证的工程实践
  • 菏泽高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录
  • 2026年6月常州企业短视频拍摄服务联系指南与优质服务商解析 - 品牌鉴赏官2026
  • 基于YOLOv8与ByteTrack的AI网球追踪:从目标检测到运动分析实战
  • 64Kbit I2C EEPROM选型与应用:低功耗、高可靠性的嵌入式存储方案
  • 2026年当下靠谱的重庆监控安装服务公司深度解析与选型指南 - 品牌鉴赏官2026
  • MCP3301与MCU的SPI通信:从原理到实践的高精度ADC应用指南
  • 从物理引擎到数字孩生:构建奥运跳台滑雪比赛仿真系统
  • 液压解耦悬架技术解析:如何实现舒适与操控的完美平衡
  • MCP3002 ADC芯片选型、驱动与低功耗系统设计实战指南
  • 乌鲁木齐报名 CPPM 注册采购经理哪家靠谱?机构选择避坑指南 - 众智商学院课程中心
  • 深入解析飞思卡尔PDK语音网关硬件:MPC8260架构、DSP协同与实战调试
  • 嵌入式工程师必读:Microchip文档中的合规指南与技术支持网络解析
  • 2026最新领英账户解封全攻略指南:从领英封禁类型到高效申诉恢复实操
  • MPC8240嵌入式处理器架构解析:从PowerPC核心到系统集成实战
  • MCP201 LIN收发器选型指南:从车规温度到封装实战解析
  • CMOS LDO选型与应用实战:TC1223/TC1224低功耗电源设计指南
  • ppt模板_0104_蓝色光球
  • MCP3909电能计量芯片:从架构解析到SPI驱动与校准实战
  • 一站式Visual C++运行库修复方案:高效解决Windows软件兼容性问题
  • 硬件调试接口14EBDI:Motorola MCU的底层调试利器
  • 2026年现阶段,如何选择北海卧室床头画专卖店?这份选购指南请收好 - 品牌鉴赏官2026