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

ROS开发CMakeLists指南

1.常见命令1.1 find_packagefind_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs )查找catkin 构建系统和其他指定的 ROS 包加载这些包的配置信息设置相关变量供后续使用${catkin_INCLUDE_DIRS} - 包含所有依赖包的头文件路径 ${catkin_LIBRARIES} - 包含所有依赖包的库文件 ${catkin_DEFINITIONS} - 编译定义核心通信包cmake roscpp # C ROS客户端 rospy # Python ROS客户端 std_msgs # 标准数据类型消息 message_runtime # 消息运行时支持消息类型包cmake geometry_msgs # 几何学消息点、向量、姿态等 sensor_msgs # 传感器消息图像、激光、IMU等 nav_msgs # 导航消息路径、地图、里程计等 trajectory_msgs # 轨迹消息 diagnostic_msgs # 诊断消息工具功能包cmake tf2 # 坐标变换库 tf2_ros # tf2的ROS封装 actionlib # 动作服务器 dynamic_reconfigure # 动态参数 nodelet # 节点let轻量级节点 pluginlib # 插件库实际使用示例# 基础ROS包依赖 find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation ) # 特定功能依赖 find_package(catkin REQUIRED COMPONENTS tf2 tf2_ros geometry_msgs sensor_msgs nav_msgs ) # 系统库依赖 find_package(Boost REQUIRED COMPONENTS system) find_package(OpenCV REQUIRED) # 可选依赖 find_package(catkin QUIET COMPONENTS dynamic_reconfigure )1.2 其他常用命令include_directories需要使用的头文件相对路径# 头文件包含 include_directories( include ${catkin_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS} # 添加 Eigen3 头文件 )add_exectuable设置需要编译成节点的文件及节点可执行文件名字add_executable(node_name #可执行文件的名称 src/file1.cpp #要编译的源代码文件 src/file2.cpp )target_link_libraries设置链接库target_link_libraries(node_name ${catkin_LIBRARIES} )add_dependencies添加可执行文件的构建依赖## 添加可执行文件的构建依赖 add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})install : 代码部署时可添加 添加后安装至系统目录所有用户可使用安装 install(TARGETS gait_controller_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) install(TARGETS four_leg_chassis_node RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )catkin_package 定义包的导出信息和依赖关系让其他包能够正确地找到和使用你的包。catkin_package( INCLUDE_DIRS include # 告诉其他包我的头文件在这里 LIBRARIES my_library # 告诉其他包我的库文件叫这个名字 CATKIN_DEPENDS roscpp std_msgs # 告诉其他包我依赖这些ROS包 DEPENDS Boost Eigen # 告诉其他包我依赖这些系统库 )2.ROS massage/service 配置massage/srtvice数据类型 int8, int16, int32, int64 (或者无符号类型: uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]2.1package.xml中添加编译依赖与执行依赖build_dependmessage_generation/build_depend exec_dependmessage_runtime/exec_depend2.2CMakeLists.txt编辑 msg 相关配置find_package(catkin REQUIRED COMPONENTS std_msgs message_generation )2.3 生成消息代码需要指定依赖的消息包# 生成消息时依赖于 std_msgs generate_messages( DEPENDENCIES std_msgs )2.4 配置相应的源文件名称#massage add_message_files( FILES Message1.msg Message2.msg ) #service add_service_files( FILES Service1.srv Service2.srv )2.5 执行时依赖#执行时依赖 catkin_package( # INCLUDE_DIRS include # LIBRARIES demo02_talker_listener CATKIN_DEPENDS roscpp rospy std_msgs message_runtime # DEPENDS system_lib )2.6 话题调用依赖add_dependencies(${Node_name} ${PROJECT_NAME}_generate_messages_cpp) add_dependencies(${Node_name} ${PROJECT_NAME}_generate_messages_cpp)3.CMakeLists模板cmake_minimum_required(VERSION 2.8.3) #最低版本要求 project(test) #项目名称 ## 设置C11编译标准ROS Kinetic及更新版本支持 # add_compile_options(-stdc11) -----------上下两种方法都能设置标准------------------- set(CMAKE_CXX_STANDARD 17) #设置C标准版本 set(CMAKE_CXX_STANDARD_REQUIRED ON) #是否强制执行标准 ## 查找catkin构建系统和相关组件包 find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) ## 查找系统依赖包例如Boost # find_package(Boost REQUIRED COMPONENTS system) ## 如果包中包含setup.py需要取消注释以下行 # catkin_python_setup() ################################################ ## ROS消息、服务和动作配置 ## ################################################ ## 配置自定义消息、服务或动作的步骤 ## 1. 在package.xml中 ## - 添加message_generation构建依赖 ## - 添加所用消息包的构建和执行依赖 ## - 添加message_runtime执行依赖 ## 2. 在本文件中 ## - 在find_package中添加message_generation和依赖包 ## - 在catkin_package中添加message_runtime和依赖包 ## - 取消注释下面的消息文件配置 ## - 取消注释generate_messages并添加依赖 ## 配置消息文件 # add_message_files( # FILES # Message1.msg # Message2.msg # ) ## 配置服务文件 # add_service_files( # FILES # Service1.srv # Service2.srv # ) ## 配置动作文件 # add_action_files( # FILES # Action1.action # Action2.action # ) ## 生成消息代码需要指定依赖的消息包 # generate_messages( # DEPENDENCIES # std_msgs # ) ################################################ ## 动态参数重配置 ## ################################################ ## 配置动态参数重配置的步骤 ## 1. 在package.xml中添加dynamic_reconfigure依赖 ## 2. 在本文件中添加dynamic_reconfigure到find_package ## 3. 取消注释下面的generate_dynamic_reconfigure_options ## 生成动态重配置参数 # generate_dynamic_reconfigure_options( # cfg/DynReconf1.cfg # cfg/DynReconf2.cfg # ) ################################### ## 包导出配置 ## ################################### ## 配置本包对其他包的导出信息 catkin_package( # INCLUDE_DIRS include # 导出头文件目录 # LIBRARIES test # 导出库文件 # CATKIN_DEPENDS roscpp rospy std_msgs # 导出catkin依赖 # DEPENDS system_lib # 导出系统依赖 ) ########### ## 构建配置 ## ########### ## 设置头文件包含路径 include_directories(include ${catkin_INCLUDE_DIRS}) ## 创建库目标将源代码编译为库 # add_library(${PROJECT_NAME} # src/${PROJECT_NAME}/test.cpp # ) ## 添加库目标的构建依赖 add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) ## 创建可执行文件目标 add_executable(${PROJECT_NAME}_node src/test_node.cpp) ## 重命名可执行文件去掉包名前缀 # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX ) ## 添加可执行文件的构建依赖 add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) ## 链接库文件到可执行文件 target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES}) ############# ## 安装配置 ## ############# ## 安装Python脚本 # install(PROGRAMS # scripts/my_python_script # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} # ) ## 安装可执行文件 # install(TARGETS ${PROJECT_NAME}_node # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} # ) ## 安装库文件 # install(TARGETS ${PROJECT_NAME} # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} # ) ## 安装头文件 # install(DIRECTORY include/${PROJECT_NAME}/ # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} # FILES_MATCHING PATTERN *.h # PATTERN .svn EXCLUDE # ) ## 安装其他资源文件如launch文件、配置文件等 # install(FILES # # myfile1 # # myfile2 # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} # ) ############# ## 测试配置 ## ############# ## 添加C单元测试基于gtest # catkin_add_gtest(${PROJECT_NAME}-test test/test_test.cpp) # if(TARGET ${PROJECT_NAME}-test) # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) # endif() ## 添加Python测试基于nosetests # catkin_add_nosetests(test)

相关文章:

ROS开发CMakeLists指南

1.常见命令1.1 find_packagefind_package(catkin REQUIRED COMPONENTSroscpprospy std_msgs )查找 catkin 构建系统和其他指定的 ROS 包加载 这些包的配置信息设置 相关变量供后续使用:${catkin_INCLUDE_DIRS} - 包含所有依赖包的头文件路径${catkin_LIBRARIES} - …...

Qt图形项事件处理全解析:从mousePressEvent到mouseReleaseEvent的正确姿势

1. Qt图形项鼠标事件处理的核心机制 在Qt框架中处理图形项的鼠标交互,本质上是在和事件传播机制打交道。我刚接触Qt图形视图框架时,也曾被mouseMoveEvent不触发的问题困扰过整整两天。后来才发现,这其实是一套设计精巧的事件处理哲学——只有…...

CVPR/ICML/TMI顶会风向标:医学图像分割三大落地范式,从模型精调到临床闭环

1. 医学图像分割的临床落地挑战与范式转变 医学图像分割作为AI在医疗领域最成熟的应用之一,正经历着从实验室精度竞赛到临床实用落地的关键转型。我在参与多家三甲医院PACS系统智能化改造时发现,临床医生对算法的需求呈现明显的"三高"特征&…...

Windows 11 + Ubuntu 20.04双系统安装避坑指南(附分区方案)

Windows 11与Ubuntu 20.04双系统安装全流程精解 对于想要在现有Windows 11系统上体验Ubuntu的用户来说,双系统安装是最佳选择。这种方式既能保留熟悉的Windows环境,又能探索Linux世界的无限可能。本文将详细解析从准备到安装的完整流程,特别针…...

从数据到洞察:如何利用2024版建筑高度SHP数据,5步完成城市热岛效应初步分析

从数据到洞察:如何利用2024版建筑高度SHP数据,5步完成城市热岛效应初步分析 城市热岛效应是城市化进程中普遍存在的环境问题,表现为城市中心区域温度明显高于周边郊区的现象。这种现象不仅影响居民的生活质量,还会加剧能源消耗和空…...

城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读

城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读 你是否遇到过这样的场景:开车穿过高楼林立的CBD时,车载导航突然开始"鬼畜漂移"?或是驶入隧道后&#x…...

SegFormer源码解读:从注意力机制到特征融合的实现细节

SegFormer源码解读:从注意力机制到特征融合的实现细节 【免费下载链接】SegFormer Official PyTorch implementation of SegFormer 项目地址: https://gitcode.com/gh_mirrors/se/SegFormer SegFormer是一个基于Transformer的语义分割模型,它通过…...

打开软件就弹出D3DCompiler_47.dll错误 免费下载修复方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...

Ensp与SecureCRT高效连接指南及常见回车空行问题排查

1. Ensp与SecureCRT连接全流程详解 第一次用Ensp连接SecureCRT时,我也被那一堆串口参数搞得头晕。后来才发现,只要掌握几个关键步骤,整个过程其实非常简单。下面我就把踩坑后总结的最稳定连接方案分享给大家。 1.1 软件安装与环境准备 在开始…...

打开软件就弹出d3dcompiler_43.dll丢失找不到 免费下载修复方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...

FOC算法中SIMULINK常用模块解析:从坐标变换到SVPWM(实践指南)

1. FOC算法与SIMULINK模块概述 第一次接触FOC(磁场定向控制)算法时,我被那些复杂的坐标变换搞得晕头转向。直到在SIMULINK里亲手搭建了完整的控制环路,才真正理解每个模块的作用。FOC算法的核心思想,简单来说就是把三相…...

GemPy:让三维地质建模从复杂算法变成简单Python代码

GemPy:让三维地质建模从复杂算法变成简单Python代码 【免费下载链接】gempy GemPy is an open-source, Python-based 3-D structural geological modeling software, which allows the implicit (i.e. automatic) creation of complex geological models from inter…...

OpenClaw多语言支持:百川2-13B量化模型国际化任务实践

OpenClaw多语言支持:百川2-13B量化模型国际化任务实践 1. 为什么需要多语言自动化助手 去年接手一个跨国协作项目时,我每天要处理来自五个国家的邮件、文档和会议记录。最头疼的不是时差问题,而是不同语言的文档混在一起——英文技术规范、…...

Java Spring Boot 中构造器循环依赖的处理

本文探讨了 Java Spring Boot 循环依赖问题是由于工程中结构设计不当造成的。通过分析示例代码,解释了循环依赖的原因,并提供了有效的解决方案来避免这些问题,重点是避免在结构中创建依赖对象的新例子,以防止无限递归调用 StackOv…...

手把手教你搭建轻量级Gitea代码托管平台:Windows本地部署实战

1. 为什么选择Gitea作为本地代码托管平台 作为一个长期在Windows环境下开发的程序员,我深知一个轻量级代码托管平台的重要性。以前我也用过Gitblit这类工具,但随着项目复杂度提升,越来越需要一个更现代的解决方案。Gitea就像是为个人开发者量…...

掌握NeuralForecast:构建企业级时间序列预测解决方案

掌握NeuralForecast:构建企业级时间序列预测解决方案 【免费下载链接】neuralforecast Nixtla/neuralforecast - 一个Python库,提供统一的接口来训练和预测时间序列数据,使用神经网络方法,如N-BEATS和N-HITS,以及传统的…...

4大价值点:旧设备复活开源工具如何让经典iOS设备重获新生?

4大价值点:旧设备复活开源工具如何让经典iOS设备重获新生? 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-…...

RVC与VITS技术对比:检索式vs端到端语音转换的适用场景分析

RVC与VITS技术对比:检索式vs端到端语音转换的适用场景分析 1. 引言 你有没有想过,为什么有些AI翻唱听起来特别像原唱,而有些则感觉“味儿”不太对?或者,为什么有些语音转换工具训练起来飞快,但效果时好时…...

利用Python和快速傅里叶变换解析振动传感器数据:从趋势图到频谱分析的完整指南

1. 振动传感器数据分析入门指南 当你第一次拿到振动传感器采集的数据时,可能会被满屏的数字搞得一头雾水。别担心,我刚开始接触时也是这样。振动数据就像是一本用密码写成的日记,而Python和快速傅里叶变换(FFT)就是我们破译这些密码的神奇工具…...

永磁同步电机矢量控制进阶:电流环前馈补偿的5个关键点与避坑指南

永磁同步电机矢量控制进阶:电流环前馈补偿的5个关键点与避坑指南 在工业伺服系统与新能源驱动领域,永磁同步电机(PMSM)凭借其高功率密度和动态响应特性占据主导地位。而电流环作为矢量控制的内环,其性能直接影响整个系…...

PowerPaint-V1 Gradio 新手入门指南:3步搞定图片修复,小白也能变大神

PowerPaint-V1 Gradio 新手入门指南:3步搞定图片修复,小白也能变大神 1. 为什么选择PowerPaint-V1? 如果你经常需要处理图片中的瑕疵、水印或者想替换某些元素,PowerPaint-V1绝对是你的得力助手。这个由字节跳动与香港大学联合研…...

这次终于选对了!2026年性价比拉满的专业AI论文网站

2026年AI论文写作工具已从“基础辅助”升级为融合多模态处理与学术合规的智能写作系统,核心评价维度涵盖文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规与跨语言支持。本次测评覆盖6款主流工具,测试场景包含中文与英文论文、全流程与专项功能、…...

用过才敢说!盘点2026年备受喜爱的的AI论文平台

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台,覆盖选题构思、文献整理、内容生成、降重润色等核心场景,帮你高效搞定论文,告别熬夜赶稿! 一、全流程王者:一站式搞定论文全链路…...

TNTSearch 实战案例:构建电商产品搜索系统的完整流程

TNTSearch 实战案例:构建电商产品搜索系统的完整流程 【免费下载链接】tntsearch A fully featured full text search engine written in PHP 项目地址: https://gitcode.com/gh_mirrors/tn/tntsearch TNTSearch 是一个功能强大的 PHP 全文搜索引擎&#xff…...

一般非线性最优问题的迭代解法思路

1.迭代方法在经典最优化极值问题中,解析法虽然具有概念简明,计算精确等优点,但因只能适用于简单或特殊问题的寻优,对于复杂的工程实际问题通常无能为力,一般采用迭代算法,逐渐逼近最优解。​ 最优化问题的迭…...

深入XFS文件系统:从一次CentOS 7的Internal error报错,聊聊xfs_repair背后的原理与避坑指南

深入XFS文件系统:从Internal error报错到修复原理与实战指南 当你在一台运行CentOS 7的生产服务器上看到"XFS_WANT_CORRUPTED_GOTO"这个鲜红的报错信息时,作为运维工程师的肾上腺素会立刻飙升。这不是一个普通的I/O错误,而是XFS文件…...

Navicat Premium Mac版试用期重置技术解析与实战指南

Navicat Premium Mac版试用期重置技术解析与实战指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 问题导入:Navicat试用期限制的技术挑战 Navicat Premium作为一…...

通道注意力与空间注意力【实战篇】

1. 通道注意力实战技巧 第一次在项目中引入通道注意力机制时,我对着论文反复调试了三天才跑通。现在回头看,其实核心代码不到20行,但当时确实踩了不少坑。通道注意力最实用的价值在于:它能自动发现哪些特征通道对当前任务更重要。…...

终极QMC音频解密方案:qmc-decoder如何3分钟转换100首加密音乐

终极QMC音频解密方案:qmc-decoder如何3分钟转换100首加密音乐 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 在数字音乐版权保护的浪潮中,QQ音乐QM…...

[PTA]从汉诺塔到斐波那契:递归思想在经典算法问题中的实战解析

1. 递归思想:从神话到代码的魔法之旅 第一次接触递归时,我盯着汉诺塔的代码看了整整三小时。那种感觉就像小时候听魔术师说"见证奇迹的时刻"——明明看着他把鸽子变没了,却死活想不通机关在哪。递归就是编程世界最优雅的魔术&#…...