ROS中 package.xml CMakeList.txt launch文件

2024-02-04 23:38

本文主要是介绍ROS中 package.xml CMakeList.txt launch文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要介绍ROS package程序包里package.xml,cmakelist.txt,launch文件,分别介绍文件里的语法组成,对于后续开发ROS程序有很大帮助。一个catkin程序包必须包含 package.xml和CMakeList.txt文件,这个package.xml文件提供有关程序包的元信息,而catkin metapackages中必须包含一个对CMakeList.txt文件的引用。

Part 1: 最简单的程序包:

my_package/
      CMakeLists.txt
      package.xm

一个简单catkin工作空间:
Workspace_folder                       -- WORKSPACE
        src/                           -- SOURCE SPACE
              CMakeLists.txt               -- ‘Toplevel’CMake file, provided by catkin
              package_1/
                      CMakeLists.txt       -- CMakeLists.txt file for package_1
                      package.xml          -- Package manifest for package_1
              …
              package_n/
                      CMakeLists.txt       -- CMakeLists.txt file for package_n
                      package.xml          -- Package manifest for package_n

Part 2: package.xml

每一个package.xml文件都以<package>作为根标签

<package>
...
</package>

在<package>内部至少得包含以下一系列标签:

<name> - 标签名
<version> - 程序包版本号
<description> - 程序包内容描述
<maintainer> - 维护程序包人名
<license> - 软件协议如GPL, BSD, ASL等


最简单package.xml文件example:

<package>
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
  This package provides foo capability.
  </description>
  <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <license>BSD</license>
</package>


接下来的标签用来描述程序包的各种依赖项,这些依赖项分为build_depend、buildtool_depend、run_depend、test_depend。buildtool_depend指的编译package所需要systemtools,build_depend指的编译这个package所需要的package,run_depend运行这个包里代码所需的package或library,test_depend指的是单元测试所需的额外依赖项。

<buildtool_depend> <build_depend> <run_depend> <test_depend> 至少得有一个依赖的项。

<package>
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintaineremail="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <license>BSD</license>
 <buildtool_depend>catkin</buildtool_depend>
</package>

此外,还有<url> <author>等标签。

Part 3: CMakeList.txt

CMakeList.txt文件需要以以下格式,否则不能正确编译

1,Required CMake Version (cmake_minimum_required)
2,Package Name (project())
3,Find other CMake/Catkin packages needed for build (find_package())
4,Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files())
5,Invoke message/service/action generation (generate_messages())
6,Specify package build info export (catkin_package())
7,Libraries/Executables to build (add_library()/add_executable()/target_link_libraries())
8,Tests to build (catkin_add_gtest())
9,Install rules (install())

(1)  CMakeLists.txt最开始指出CMake所需版本,Catkin 要求2.8.3或者更高

cmake_minimum_required(VERSION 2.8.3)

(2)  接下来项是package name

project(beginner_tutorials)

(3)  find_package用来指明build project所需要其他的CMake package

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)   依赖于catkin roscpp rospy std_msgs message_generation。

(4)  catkin_package() 是一个catkin Cmake宏,必须在 add_library()和add_executable()之前,catkin_package()包含5个可选的参数:

INCLUDE_DIRS - The exported include paths (i.e. cflags) for the package

LIBRARIES - The exported libraries from the project

CATKIN_DEPENDS - Other catkin projects that this project depends on

DEPENDS - Non-catkin CMake projects that this project depends on

CFG_EXTRAS - Additional configuration options

例如

catkin_package(
     INCLUDE_DIRS include
     LIBRARIES ${PROJECT_NAME}
     CATKIN_DEPENDS roscpp nodelet
     DEPENDS eigen opencv)

(5)  Build Targets:编译目标有多种形式,通常是可执行目标文件或者可执行文件编译和运行所需要的库文件。

1.  include_directories()   link_directories()

include_directories(<dir1>, <dir2>, ..., <dirN>)

link_directories(<dir1>, <dir2>, ..., <dirN>)

例如使用catkin和Boost,则  include_directories(include ${Boost_INCLUDE_DIRS}  ${catkin_INCLUDE_DIRS}) 第一个参数”include”指的是package内的include/路径

link_directories()可以用来添加额外库的路径,但是一般不推荐。  比如:  link_directories(~/my_libs)

2.  add_executable()

add_executable(myProgramsrc/main.cpp src/some_file.cpp src/another_file.cpp)

把src/main.cpp  src/some_file.cpp  src/another_file.cpp.编译成可执行文件myProgram

3. add_library() 

add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SRCS})

4. target_link_libraries()

target_link_libraries() 指明可执行文件运行所需要的链接库

语法:target_link_libraries(<executableTargetName>,<lib1>, <lib2>, ... <libN>)

例子:

add_executable(foo src/foo.cpp)
add_library(moo src/moo.cpp)
target_link_libraries(foo moo)  -- This links foo against libmoo.so

(6)  messages services actions

有3个宏分别用来添加messages  services 和actions: add_message_files()  add_service_files()  add_action_files(),紧接着  generate_messages()生成对应的messages,services,actions 。这些宏必须在 catkin_package()宏之前,如下:

find_package(catkinREQUIRED COMPONENTS ...)
 add_message_files(...)
 add_service_files(...)
 add_action_files(...)
 generate_messages(...)
 catkin_package(...)
 ...

(7)  catkin_package()

catkin_package(
 ...
 CATKIN_DEPENDS message_runtime ...
 ...)

必须有个CATKIN_DEPENDS 、message_runtime。

Part 4: launch

例如下面launch xml文件

<launch>
  <groupns="turtlesim1">
    <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>
  </group>
  <groupns="turtlesim2">
    <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>
  </group>
  <nodepkg="turtlesim"name="mimic"type="mimic">
    <remapfrom="input"to="turtlesim1/turtle1"/>
    <remapfrom="output"to="turtlesim2/turtle1"/>
  </node>
</launch>

<launch>  以launch标签开头以表明这是一个launch文件 

<groupns="turtlesim1">
    <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>
  </group>
  <groupns="turtlesim2">
    <nodepkg="turtlesim"name="sim"type="turtlesim_node"/>
  </group>

创建了两个节点分组并以'命名空间(namespace)'标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个组里面都使用相同的turtlesim节点并命名为'sim'。这样可以同时启动两个turtlesim模拟器而不会产生命名冲突。

<nodepkg="turtlesim"name="mimic"type="mimic">
    <remapfrom="input"to="turtlesim1/turtle1"/>
    <remapfrom="output"to="turtlesim2/turtle1"/>
  </node>

在这里我们启动模仿节点,并将所有话题的输入和输出分别重命名为turtlesim1和turtlesim2,这样就会使turtlesim2模仿turtlesim1。

 </launch>  这个是launch文件的结束标签。



这篇关于ROS中 package.xml CMakeList.txt launch文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679137

相关文章

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

java中XML的使用全过程

《java中XML的使用全过程》:本文主要介绍java中XML的使用全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录什么是XML特点XML作用XML的编写语法基本语法特殊字符编写约束XML的书写格式DTD文档schema文档解析XML的方法​​DOM解析XM

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J