博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ROS:关于功能包下CMakeLists.txt和package.xml的修改
阅读量:2079 次
发布时间:2019-04-29

本文共 2095 字,大约阅读时间需要 6 分钟。

ROS:关于功能包下CMakeLists.txt和package.xml的修改

当我们往ROS包中添加cpp文件时,往往需要修改功能包下的这两个文件。下面讨论一些常见情况下的这两个文件的修改。

Sit1:没有添加任何依赖

cpp文件没有添加任何外部依赖时,或者在创建功能包时就已经添加了相关依赖时,我们仅需要编译创建的cpp文件即可,不需要做其他的操作。CMakeLists.txt修改如下:

# 设置string_publisher.cppadd_executable(string_publisher src/string_publisher.cpp) # 可执行文件名 cpp文件路径target_link_libraries(string_publisher ${catkin_LIBRARIES})# 设置string_subscriber.cppadd_executable(string_subscriber src/string_subscriber.cpp)target_link_libraries(string_subscriber ${catkin_LIBRARIES})

Sit2:创建自定义消息或服务

当我们创建自定义消息或服务时,除了需要编译cpp文件外,还需要手动添加相关依赖。

  1. package.xml中添加相关依赖;

    message_generation
    message_runtime
  2. 修改CMakeLists.txt文件。

    ...find_package(catkin REQUIRED COMPONENTS  ...  message_generation)...################################################## Declare ROS messages, services and actions ##################################################...add_message_files(FILES Person.msg)# oradd_service_files(FILES PersonSrv.srv)generate_messages(DEPENDENCIES std_msgs)...##################################### catkin specific configuration #####################################...catkin_package(#  INCLUDE_DIRS include#  LIBRARIES learning_topic   CATKIN_DEPENDS ... message_runtime#  DEPENDS system_lib)

修改好后,使用catkin_make进行编译,就会生成自定义消息的头文件。自定义服务的修改内容与自定义消息类似。

生成相关头文件后,就可以开始编译cpp文件,与第一种情况相同,需要修改CMakeLists.txt

add_executable(person_publisher src/person_publisher.cpp)target_link_libraries(person_publisher ${catkin_LIBRARIES})add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)  # new

Sit3:cpp文件中使用到了未添加的依赖

如我在某个功能包中曾使用了#<message_filters/xxx.h>一系列关于message_filters的头文件,因此需要在这两个文件中添加message_filters的依赖。

package.xml修改如下:

message_filters
message_filters
message_filters

CMakeLists.txt修改如下:

...find_package(catkin REQUIRED COMPONENTS  ...  message_filters)...############# Build #############include_directories(  include  # 若功能包的include文件中有需要用到的头文件,则需要添加这个  ${catkin_INCLUDE_DIRS})...add_executable(robot_navigation_pub src/robot_navigation_pub.cpp) target_link_libraries(robot_navigation_pub ${catkin_LIBRARIES})

转载地址:http://psuqf.baihongyu.com/

你可能感兴趣的文章
fastjson使用(三) -- 序列化
查看>>
浅谈使用单元素的枚举类型实现单例模式
查看>>
Java 利用枚举实现单例模式
查看>>
Java 动态代理作用是什么?
查看>>
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
查看>>
三种线程安全的单例模式
查看>>
Spring AOP 和 动态代理技术
查看>>
从 volatile 说起,可见性和有序性是什么
查看>>
如何开始接手一个项目
查看>>
Netty 5用户指南
查看>>
Java实现简单的RPC框架
查看>>
一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
查看>>
从零手写RPC
查看>>
高并发和多线程的关系
查看>>
Java并发与多线程
查看>>
对于多线程程序,单核cpu与多核cpu是怎么工作的
查看>>
多线程和CPU的关系
查看>>
认识cpu、核与线程
查看>>
关于Java健壮性的一些思考与实践!
查看>>
如何避免自己写的代码成为别人眼中的一坨屎!
查看>>