☰
ROS 包与构建:catkin / colcon 把节点组织成工程(八)
2026/11/2 1:49:15 网站建设 项目流程

ROS 包与构建:catkin / colcon 把节点组织成工程(八)

通用基础优先 · 第八篇|ROS 通识系列|Docker 实战

一图读懂本文:工作空间 → 包的两份身份证 → catkin/colcon 差异 → 建包实战 → 数采部署衔接。

前面写的节点都是"散装脚本"。真要做数采平台,得把它们、接口、启动文件、配置组织成"包(package)",再用构建工具编译分发。这一篇讲 ROS 1 的 catkin 与 ROS 2 的 colcon,以及最小包的结构。

一、工作空间(Workspace):你的"工程根目录"

~/ws/ # workspace 根 src/ # 所有源码包放这里(你只动这一层) my_robot_driver/ # 一个包 my_robot_interfaces/ install/ # colcon 构建产物(自动生成) build/ log/ # 中间产物(自动生成)

只往src/放代码,构建在 workspace 根目录执行。

新手视角 · 包=App,工作空间=手机:包是一个可安装的"App"(节点+接口+配置打包);工作空间是你的"手机";colcon build是"安装",source install/setup.bash是"开机激活"。记住一个铁律:每次新开终端,source 之后你的包才"存在"。"明明编译了却 run 不到",十有八九是忘了 source。

二、包的两份"身份证"

每个包至少两个文件:

  • package.xml:包的元数据与依赖(名字、版本、作者、依赖列表);
  • CMakeLists.txt(C++/混合)或setup.py+setup.cfg(纯 Python):告诉构建系统怎么编、装到哪。
# package.xml(关键片段,注意标签要转义为正常尖括号)

三、catkin(ROS 1) vs colcon(ROS 2)

catkin(ROS 1)colcon(ROS 2)
命令catkin_make/catkin buildcolcon build
底层CMake + catkin 层通用构建工具(插件化)
环境devel/setup.bashinstall/setup.bash

四、Docker 实战:从零建包并编译

# 进容器、建工作空间 docker run -it --rm -v ~/ws:/ws ros:jazzy bash cd /ws && mkdir -p src && cd src

ros2 pkg create --build-type ament_python my_robot_driver --dependencies rclpy
cd /ws
colcon build # 构建全部包
source install/setup.bash # 让系统找到新包
ros2 run my_robot_driver … # 运行

挂载技巧:用-v ~/ws:/ws把本机目录挂进容器,构建结果留在本机,容器删了代码也不丢。这是本系列所有 demo 的标准玩法。
老手温故 · 构建三坑与交叉编译:①依赖缺失是编译失败头号原因——package.xml里漏<depend>,在别人机器上必挂,用rosdep install --from-paths src --ignore-src -y一次性装齐;②改了接口没重编下游——接口包更新后,依赖它的包要一起重编,colcon build --packages-above my_interfaces;③overlay 隔离——在官方发行版之上叠加自己的 workspace,source 顺序决定谁覆盖谁(后 source 的赢)。另外,往机载 NUC(ARM)部署时有两条路:在 NUC 上直接 colcon build(简单)或 x86 上交叉编译 toolchain(快但配置繁琐),一期建议前者。

五、接回数采平台

  • 数采的采集节点、格式转换节点、回放节点,都应各自成包,便于在 KUAVO 机载 NUC 与云端分别部署;
  • 依赖(rclpy、rosbag2、tf2)写进package.xml,才能 reproducible 地重建环境;
  • KUAVO 是 ROS 1,用 catkin;我们新写的工具链用 ROS 2 + colcon,靠ros1_bridge打通(见第 13 篇)。

六、小结与下篇

  • 包 = 节点 + 接口 + 启动 + 配置的最小可分发单元;
  • 两份身份证:package.xml(依赖)、CMakeLists.txt/setup.py(构建);
  • ROS 1 用 catkin,ROS 2 用 colcon(colcon build+source install/setup.bash);
  • 用-v挂载本机目录,容器可弃、代码不丢;
  • 下一篇:启动与编排 launch——一条命令拉起"采集 + 录制 + 可视化"整条流水线。
参考资料:ROS 2 官方 Tutorials(Creating a package、Colcon build);catkin 文档 wiki.ros.org/catkin。示例基于 ros:jazzy。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询