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

catkin_make生成的编译文件夹目录结构说明

在 ROS 中使用 catkin_make 构建后,生成的 builddevel 目录结构及 roslaunch 的运行逻辑如下:


1. catkin_make 生成的目录结构

(1) build/ 目录

存放 编译中间文件(如 .o.cmake 等),不直接参与运行:

build/
├── CMakeCache.txt            # CMake 缓存
├── CMakeFiles/               # CMake 临时文件
├── catkin/                   # Catkin 生成的配置
├── catkin_generated/         # 自动生成的代码(如消息/服务)
├── your_package/             # 你的包名
│   ├── CMakeFiles/           # 包的编译临时文件
│   ├── Makefile              # 编译规则
│   └── ...
└── ...
(2) devel/ 目录

存放 最终生成的可执行文件、库、消息头文件等,是 ROS 运行时的核心目录:

devel/
├── include/                   # C++ 头文件
│    └── your_package/          # 你的包名
│       ├── YourMsg.h          # 由 `.msg` 生成的头文件
│       └── ...
├── lib/                       # 可执行文件和库
│   ├── your_package/
│   │   ├── your_node         # 编译后的节点(C++)
│   │   └── ...
│   ├── python3/
│   │   └── dist-packages/    # Python 模块(由 `scripts/` 安装)
│    └── ...
├── share/
│   └── your_package/
│       ├── cmake/            # 包的 CMake 配置
│       ├── launch/           # 复制的 `.launch` 文件
│       └── ...
├── setup.bash                # 环境配置脚本
└── ...

2. roslaunch 运行时加载的文件路径

当执行 roslaunch your_package your_launch.launch 时,ROS 按以下顺序查找文件:

(1) 查找 .launch 文件
  • 优先级 1: devel/share/your_package/launch/your_launch.launch
    catkin_make 会将 src/your_package/launch/ 下的文件复制到这里)
  • 优先级 2: src/your_package/launch/your_launch.launch
    (仅当 devel/ 下不存在时才会使用源码)
(2) 运行的可执行文件
  • C++ 节点: devel/lib/your_package/your_node
    (编译后的二进制文件)
  • Python 节点: src/your_package/scripts/your_script.py
    (通常软链接到 devel/lib/python3/dist-packages/

3. 关键验证方法

(1) 检查 roslaunch 使用的 .launch 文件路径
roscd your_package/launch      # 进入包的 launch 目录
ls                            # 查看文件是否存在

如果 devel/share/your_package/launch/ 下有文件,则优先使用。

(2) 检查节点可执行文件路径
which your_node               # 查看 C++ 节点路径

输出应为:
/path/to/your_workspace/devel/lib/your_package/your_node

(3) 检查 Python 节点路径
rosrun your_package your_script.py --help

若输出正常,说明 Python 脚本已被正确链接到 devel/


4. 常见问题与解决

Q1: 修改代码后 roslaunch 仍运行旧版本?
  • 原因: 未重新编译或未更新 devel/ 文件。
  • 解决:
    catkin_make clean            # 清理旧编译
    catkin_make                  # 重新编译
    source devel/setup.bash      # 更新环境
    
Q2: 如何强制使用 src/ 下的源码?
  • 不推荐,但可通过临时删除 devel/share/your_package/launch/ 实现。

5. 总结

目录/文件作用roslaunch 是否使用
build/编译中间文件❌ 不直接使用
devel/include/C++ 消息头文件✅ 通过 #include 调用
devel/lib/your_package/C++ 可执行文件✅ 直接运行
devel/share/launch/复制的 .launch 文件✅ 优先使用
src/your_package/源码(.cpp, .py, .launch仅在 devel/ 缺失时使用

关键步骤

  1. 修改代码 → catkin_makesource devel/setup.bash
  2. roslaunch 默认优先使用 devel/ 下的编译版本。
http://www.dtcms.com/a/301370.html

相关文章:

  • uart通信
  • python---类型转换
  • Milvus 实战全流程
  • Deja Vu: 利用上下文稀疏性提升大语言模型推理效率
  • Spring 解析 XML 配置文件的过程(从读取 XML 到生成 BeanDefinition)
  • 扩展组件(uni-ui)之uni-group
  • 「iOS」————消息传递和消息转发
  • 26.删除有序数组中的重复项
  • MyBatis-Plus高效开发实战
  • 内存管理和垃圾收集-02: 操作系统如何管理内存?
  • Linux驱动开发笔记(五)——设备树(中)——节点的标准属性
  • 益莱储:明智地投资测试仪器
  • S7-1500 与 S7-1200 存储区域保持性设置特点详解
  • 电子板原理功能区解析与PlantUML图示
  • 3,Windows11安装docker保姆级教程
  • 轻量化多模态文档处理利器SmolDocling:技术原理与场景落地引言:文档智能处理的范式革命
  • 数据结构基础内容(第六篇:二叉搜索与平衡二叉树)
  • MySQL锁机制与MVCC原理剖析
  • 直播带货工具About v1.5.10 免费版
  • GEO优化实战:如何在DeepSeek、豆包等AI平台抢占推荐位?
  • MOE架构详解:原理、应用与PyTorch实现
  • 计算圆周率(π)代码实现【c++】
  • Java中排序规则详解
  • cJSON在STM32单片机上使用遇到解析数据失败问题
  • 计算柱状图中最大的矩形【单调栈】
  • Dify 本地化部署深度解析与实战指南
  • 蜣螂优化算法的华丽转身:基于Streamlit的MSIDBO算法可视化平台
  • 【ESP32设备通信】-W5500与ESP32 /ESP32 S3集成
  • MySQL - 性能优化
  • Java面试实战:电商高并发与分布式事务处理