ROS的CmakeList写法

2023-05-16

catkin是当前ROS的官方编译工具。
catkin编译基于CMake,源代码以package为单位组织,每个package必须包含package.xml和CMakeList.txt两个文件。

(1)package.xml
catkin支持两种package.xml标签格式,格式1标准说明是REP-0127,格式2标准说明是REP-0140。后者是针对前者的一些缺点进行改进后的版本,因此更加被推荐使用。
在package.xml中主要包含以下信息:

描述信息(比如package的功能描述、维护者等)
依赖信息
元信息(比如作者、网页)
package信息(比如版本)
每个package.xml文件必须包含的标签包括:

<package>  : 最高级tag,属性:format,用于指定格式
<name> :package名称
<version> :当前版本
<description>:package的基本描述
<maintainer>(至少一个):维护者
<license>(至少一个):协议
<buildtool_depend>(至少一个):一般情况下只需要指定catkin作为编译工具,在需要交叉编译的情况下需要增加目标机器的编译工具。
可选标签包括:

<package>
<url> (多个):指定package的网址
<author> (多个):作者
<build_depend> (多个):编译时需要依赖的其它package,适用于静态库
<conflict> (多个):声明本package与其它ROS package有冲突,不能同时部署
<replace> (多个):声明本package是其它package的替换版本
<export>:用于添加额外的信息,比如需要嵌入的其它package的插件,或者一些说明信息。

(2)CMakeList.txt
1.cmake_minimum_required():CMake版本
2.project():工程名
3.add_compile_options():编译器选择
比如:

cmake_minimum_required(VERSION 3.0.2)
project(ui_console)
add_compile_options(-std=c++11)

4.find_package():加载外部变量

version和EXACT: 都是可选的,version指定的是版本,如果指定就必须检查找到的包的版本是否和version兼容。如果指定EXACT则表示必须完全匹配的版本而不是兼容版本就可以。
QUIET 可选字段,表示如果查找失败,不会在屏幕进行输出(但是如果指定了REQUIRED字段,则QUIET无效,仍然会输出查找失败提示语)。
MODULE可选字段。前面提到说“如果Module模式查找失败则回退到Config模式进行查找”,但是假如设定了MODULE选项,那么就只在Module模式查找,如果Module模式下查找失败并不回落到Config模式查找。
CONFIG可选字段。直接在Config模式中查找。下文会介绍什么是Moudule模式什么是Config模式。
REQUIRED可选字段。表示一定要找到包,找不到的话就立即停掉整个cmake。而如果不指定REQUIRED则cmake会继续执行。
COMPONENTS:可选字段,表示查找的包中必须要找到的组件(components),如果有任何一个找不到就算失败,类似于REQUIRED,导致cmake停止执行。如find_package( PCL REQUIRED COMPONENT common io )我们就利用了该关键字寻找了common和io包。
OPTIONAL_COMPONENTS:可选的模块,找不到也不会让cmake停止执行。

5.include_directories():添加头文件路径
添加包的头文件路径,如果有其它外部路径也在这里添加。比如

include_directories(
include 
${catkin_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
)

6.add_library():生成库

# 生成库文件,可传入多个源文件
add_library(your_library 
    libsrc1.cpp 
    libsrc2.cpp 
    libsrc_etc.cpp
)

7.add_executable():生成可执行文件

# 生成可执行文件,可以传入多个源文件
add_executable(my_node 
    src0.cpp 
    src1.cpp 
    src2.cpp
)

8.add_dependencies():添加依赖项,在使用ROS的message、service、action时注意添加,如下:

# 添加对其它package消息的依赖,前提是已经通过find_package()引入了这个package
add_dependencies(my_target ${catkin_EXPORTED_TARGETS})
# 添加对本package消息的依赖
add_dependencies(my_target ${${PROJECT_NAME}_EXPORTED_TARGETS})

9.target_link_libraries():链接库

# 为可执行文件或库添加链接库
target_link_libraries(my_node
    ${catkin_LIBRARIES}        # ROS基本库
    ${Boost_LIBRARIES}         # Boost库
)

10.install():安装

# 默认情况catkin会为每个package在./devel中建立目录,存放目标文件
# 目标文件可以直接通过rosrun和roslaunch访问
# 如需制定其它安装位置,则需通过install()命令
install(TARGETS my_node0 my_node1
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

11.add_message_files(), add_service_files(), add_action_files()
用于添加自定义的message、service和action文件。基本语法为:

# 以message为例,service、action类似
add_message_files(
    # 目录名
    DIRECTORY msg
    # 文件名
    FILES YourFirstMessage.msg YourSecondMessage.msg YourThirdMessage.msg
)

11.catkin_package()

catkin_package()是catkin提供的CMake宏,用于为catkin提供构建、生成pkg-config和CMake文件所需要的信息。
必须在声明add_library()或add_executable()前调用
有5个可选参数:

INCLUDE_DIRS - 声明给其它package的include路径
LIBRARIES - 声明给其它package的库
CATKIN_DEPENDS - 本包依赖的catkin package
DEPENDS - 本包依赖的非catkin package
CFG_EXTRAS - 其它配置参数
比如:

catkin_package(
   INCLUDE_DIRS include
   LIBRARIES ${PROJECT_NAME}
   CATKIN_DEPENDS roscpp nodelet
   DEPENDS eigen opencv
   )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS的CmakeList写法 的相关文章

  • 思岚RPLIDAR A2 在ubuntu 16.04上的测试

    1 下载雷达ROS包 首先在github上下载rplidar的ros包 下载指令为 默认安装了git git clone https github com Slamtec rplidar ros git 在ubuntu上创建工作空间 并将该
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • ROS诸多调试工具总结1

    ROS有许多调试工具来为ROS调试你的工具 1 rosnode 参数 用法 作用 list rosnode list 查看当前运行了哪些节点 info rosnode info node name 查看该节点发布 接受哪些话题以及服务 ki
  • 无人驾驶论坛

    1 百度Apollo论坛 http www 51apollo com 2 人工智能中文资讯网 http www ailab cn
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • ROS rosdep update 出错方法 不需要翻墙切换之类的解决方法 ‘https://raw.githubusercontent.com/ros/rosdistro/master/inde

    系统 ubuntu18 rosdep update参考的这篇文章 https blog csdn net weixin 43311920 article details 114796748 utm source app app versio
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息

随机推荐