本文共 2095 字,大约阅读时间需要 6 分钟。
当我们往ROS包中添加cpp
文件时,往往需要修改功能包下的这两个文件。下面讨论一些常见情况下的这两个文件的修改。
当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})
当我们创建自定义消息或服务时,除了需要编译cpp
文件外,还需要手动添加相关依赖。
在package.xml
中添加相关依赖;
message_generation message_runtime
修改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
如我在某个功能包中曾使用了#<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/