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

解决ROS含动态参数的Config文件无法正确识别的错误

问题描述

功能包名为paddle_detection

在工作空间下, 通过catkin_make可以正常通过编译且执行无异常,

可以通过bloom-generate rosdebian生成依赖

但是在将其打包成deb包的过程中fakeroot debian/rules binary报错

fatal error: paddle_detection/paddle_detectionConfig.h: No such file or directory44 | #include <paddle_detection/paddle_detectionConfig.h>|          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决思路

之前用过一个局部路径规划包, teb_local_planner, 里面包含了动态参数配置, 而且可以成功编译打包, 因此把他的代码拉了下来去分析他的CMakelists.txt, 最终找到了一些区别, 添加后解决

原因

catkin_make的过程中, 程序会自动根据ros的规则去配置与生成头文件, 即只要在CMakelists.txt中添加了

generate_dynamic_reconfigure_options(config/paddle_detection.cfg#...
)

就会自动生成 paddle_detectionConfig.h的头文件, 并被其他文件引用

但是在fakeroot debian/rules binary的过程中, 这一步还没有完成时就会同步开启其他文件的编译, 因此会导致无法找到paddle_detection/paddle_detectionConfig.h这个头文件的错误

解决

在添加完上面的语句后, 再添加一句

add_dependencies(paddle_detection ${PROJECT_NAME}_gencfg)

这就指定了 paddle_detection 这个可执行文件的构建依赖于 ${PROJECT_NAME}_gencfg 目标的完成。这里的 ${PROJECT_NAME}_gencfg 是一个由 generate_dynamic_reconfigure_options 自动生成的目标,它负责处理 dynamic_reconfigure 的配置文件(在这个例子中是 paddle_detection.cfg)。

这种依赖关系的具体含义是:

  • 当你运行 make 命令来构建你的项目时,CMake 会首先确保 ${PROJECT_NAME}_gencfg 目标已经完成。这意味着所有与动态配置相关的自动生成的代码都会在尝试构建 paddle_detection 之前完成。
  • 这样做的目的是确保在编译 paddle_detection 时,所有由 dynamic_reconfigure 生成的头文件都已经存在并可用。这些头文件通常包含了必要的配置类和方法,它们由 paddle_detection.cfg 定义的参数生成。

总结

在进行动态参数的生成与配置时, 至少在CMakelist中包含两项内容

generate_dynamic_reconfigure_options(config/paddle_detection.cfg#...
)
add_dependencies(paddle_detection ${PROJECT_NAME}_gencfg)

补充一点

在生成消息类型时也会遇到这样的问题, ROS会自动把msg, srv等自动转换成.h文件, 但是在进行单独打包时需要注意, 在添加可执行文件时应该完成对这些消息类型的依赖, 否则会报类似的错误

add_executable(getRT src/tool/getRT.cpp 
)
add_dependencies(getRT ${PROJECT_NAME}_generate_messages_cpp) #这一句就是为了保证消息类型先编译
target_link_libraries(getRT ${catkin_LIBRARIES} )
target_include_directories(getRT PRIVATE ${PYTHON_INCLUDE_DIRS})
http://www.lryc.cn/news/271597.html

相关文章:

  • 探索 PyTorch 中的 torch.nn 模块**(1)
  • 【WPF.NET开发】预览事件
  • JDBC->SpringJDBC->Mybatis封装JDBC
  • ts中的keyof 关键字
  • Head First Design Patterns - 装饰者模式
  • MySQL 执行过程
  • 判断电话号码是否重复-excel
  • 【Java开发岗面试】八股文—Java虚拟机(JVM)
  • 【Linux】Linux 下基本指令 -- 详解
  • Eureka注册及使用
  • Ubuntu之修改时区/时间
  • 4、内存泄漏检测(多线程)
  • 在使用tcp长连接时,是否还需要再引入重发机制?
  • 记一次Oracle Cloud计算实例ssh恢复过程
  • 2024年01月数据库流行度最新排名
  • Stable Diffusion API入门:简明教程
  • 数据结构--二叉搜索树的实现
  • 《微信小程序开发从入门到实战》学习六十八
  • 阿里是如何去“O”的?
  • 蓝桥杯备赛 day 1 —— 递归 、递归、枚举算法(C/C++,零基础,配图)
  • 87 双指针解验证回文字符串II
  • 【排序算法】【二叉树】【滑动窗口】LeetCode220: 存在重复元素 III
  • OS 7--DNS配置+Apache发布网站
  • 1月2日代码随想录二叉树的最小深度及层序遍历总结
  • RK3568平台开发系列讲解(Linux系统篇)PWM系统编程
  • Linux CPU 数据 Metrics 指标解读
  • Ansible自动化运维(一)简介及部署、清单
  • 深度学习MLP_实战演练使用感知机用于感情识别_keras
  • [ffmpeg系列 02] 音视频基本知识
  • 【ASP.NET Core 基础知识】--目录