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

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

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

Sit1:没有添加任何依赖

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

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

# 设置string_subscriber.cpp
add_executable(string_subscriber src/string_subscriber.cpp)
target_link_libraries(string_subscriber ${catkin_LIBRARIES})

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

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

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

    <build_depend>message_generation</build_depend>
    <exec_depend>message_runtime</exec_depend>
    
  2. 修改CMakeLists.txt文件。

    ...
    find_package(catkin REQUIRED COMPONENTS
      ...
      message_generation
    )
    ...
    ################################################
    ## Declare ROS messages, services and actions ##
    ################################################
    ...
    add_message_files(FILES Person.msg)
    # or
    add_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修改如下:

<build_depend>message_filters</build_depend>
<build_export_depend>message_filters</build_export_depend>
<exec_depend>message_filters</exec_depend>

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})
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值