ros中创建msg和srv文件时,配置CMakeLists.txt文件问题

以下是创建并编译一个新的package后生成的CMakeLists.txt文件内容。


[plain]  view plain  copy
  1. cmake_minimum_required(VERSION 2.8.3)  
  2. project(chloe)  
  3.   
  4. ## Find catkin macros and libraries  
  5. ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)  
  6. ## is used, also find other catkin packages  
  7. find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)  
  8.   
  9. ## System dependencies are found with CMake's conventions  
  10. # find_package(Boost REQUIRED COMPONENTS system)  
  11.   
  12. ## Uncomment this if the package has a setup.py. This macro ensures  
  13. ## modules and scripts declared therein get installed  
  14. # catkin_python_setup()  
  15.   
  16. #######################################  
  17. ## Declare ROS messages and services ##  
  18. #######################################  
  19.   
  20. ## Generate messages in the 'msg' folder  
  21. # add_message_files(  
  22. #   FILES  
  23. #   Message1.msg  
  24. #   Message2.msg  
  25. # )  
  26.   
  27. ## Generate services in the 'srv' folder  
  28. # add_service_files(  
  29. #   FILES  
  30. #   Service1.srv  
  31. #   Service2.srv  
  32. # )  
  33.   
  34. ## Generate added messages and services with any dependencies listed here  
  35. # generate_messages(  
  36. #   DEPENDENCIES  
  37. #   std_msgs  
  38. # )  
  39.   
  40. ###################################################  
  41. ## Declare things to be passed to other projects ##  
  42. ###################################################  
  43.   
  44. ## LIBRARIES: libraries you create in this project that dependent projects also need  
  45. ## CATKIN_DEPENDS: catkin_packages dependent projects also need  
  46. ## DEPENDS: system dependencies of this project that dependent projects also need  
  47. catkin_package(  
  48.    INCLUDE_DIRS include  
  49. #  LIBRARIES chloe  
  50. #  CATKIN_DEPENDS roscpp rospy std_msgs  
  51. #  DEPENDS system_lib  
  52. )  
  53.   
  54. ###########  
  55. ## Build ##  
  56. ###########  
  57.   
  58. ## Specify additional locations of header files  
  59. include_directories(include  
  60.   ${catkin_INCLUDE_DIRS}  
  61. )  
  62.   
  63. ## Declare a cpp library  
  64. # add_library(chloe  
  65. #   src/${PROJECT_NAME}/chloe.cpp  
  66. # )  
  67.   
  68. ## Declare a cpp executable  
  69. # add_executable(chloe_node src/chloe_node.cpp)  
  70.   
  71. ## Add dependencies to the executable  
  72. # add_dependencies(chloe_node ${PROJECT_NAME})  
  73.   
  74. ## Specify libraries to link a library or executable target against  
  75. # target_link_libraries(chloe_node  
  76. #   ${catkin_LIBRARIES}  
  77. # )  
  78.   
  79. #############  
  80. ## Install ##  
  81. #############  
  82.   
  83. ## Mark executable scripts (Python etc.) for installation  
  84. ## not required for python when using catkin_python_setup()  
  85. # install(PROGRAMS  
  86. #   scripts/my_python_script  
  87. #   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}  
  88. # )  
  89.   
  90. ## Mark executables and/or libraries for installation  
  91. # install(TARGETS chloe chloe_node  
  92. #   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}  
  93. #   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}  
  94. #   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}  
  95. # )  
  96.   
  97. ## Mark cpp header files for installation  
  98. # install(DIRECTORY include/${PROJECT_NAME}/  
  99. #   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}  
  100. #   FILES_MATCHING PATTERN "*.h"  
  101. #   PATTERN ".svn" EXCLUDE  
  102. # )  
  103.   
  104. ## Mark other files for installation (e.g. launch and bag files, etc.)  
  105. # install(FILES  
  106. #   # myfile1  
  107. #   # myfile2  
  108. #   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}  
  109. # )  
  110.   
  111. #############  
  112. ## Testing ##  
  113. #############  
  114.   
  115. ## Add gtest based cpp test target and link libraries  
  116. # catkin_add_gtest(${PROJECT_NAME}-test test/test_chloe.cpp)  
  117. # if(TARGET ${PROJECT_NAME}-test)  
  118. #   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})  
  119. # endif()  
  120.   
  121. ## Add folders to be run by python nosetests  
  122. # catkin_add_nosetests(test)  



 
 在创建的package中创建文件夹msg和srv,在这两个文件夹下分别编辑.msg和.srv文件。 
 

例如:进入自己的workspace的package下的msg文件夹,利用gedit编辑msg文件。命令如下:

[plain]  view plain  copy
  1. cd ~/wry_ws/src/chloe/msg  
  2. gedit Num.msg  
在Num.msg文件中输入以下内容并保存:

[plain]  view plain  copy
  1. string first_name  
  2. string last_name  
以上就创建了一个msg文件,下面是最关键的,需要确保msg文件被转换成为C++,Python和其他语言的源代码。

配置步骤如下:

首先查看Chloe功能包中的package.xml文件中是否包含以下两行,若没有,就加上:

[plain]  view plain  copy
  1. <build_depend>message_generation</build_depend>  
  2. <run_depend>message_runtime</run_depend>  
下面利用gedit打开CMakeLists.txt文件,并对其中的需要修改及补充的内容进行说明。

[plain]  view plain  copy
  1. #find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)  
 
 在这里,指明了构建chloe这个package,所依赖的包,因为要使用catkin编译功能包,所以包含catkin,另外,在编译所建立的msg文件时,需要依赖message_generation,因此,去掉前面的注释,并更改为: 
 
[plain]  view plain  copy
  1. find_package(catkin REQUIRED COMPONENTS   
  2.                roscpp  
  3.                rospy   
  4.                std_msgs  
  5.                message_generation  
  6. )  
下面修改message_files

[plain]  view plain  copy
  1. #  add_message_files(  
  2. #   FILES  
  3. #   Message1.msg   
  4. #   Message2.msg  
  5. # )  
去掉其中的注释,并将
[plain]  view plain  copy
  1. Message1.msg   
 
 修改为自己创建的msg文件的名字。本人的修改后的代码为: 
 

[plain]  view plain  copy
  1. add_message_files(  
  2.     FILES  
  3.     Num.msg   
  4. )  
注意:如果创建了srv文件,那么就需要将
[plain]  view plain  copy
  1. # add_service_files(  
  2. #   FILES  
  3. #   Service1.srv  
  4. #   Service2.srv  
  5. # )  
[plain]  view plain  copy
  1. #   Service1.srv  
  2. #   Service2.srv  
改为自己创建的srv文件的名字,并去掉注释。


下面修改:

[plain]  view plain  copy
  1. #  generate_messages(  
  2. #   DEPENDENCIES  
  3. #   std_msgs  
  4. # )  

需要将其注释去掉,改为:

[plain]  view plain  copy
  1. generate_messages(  
  2.  DEPENDENCIES  
  3.  std_msgs  
  4. )  
最后,要确保自己运行了依赖:

[plain]  view plain  copy
  1. catkin_package(  
  2.    INCLUDE_DIRS include  
  3. #  LIBRARIES chloe  
  4. #  CATKIN_DEPENDS roscpp rospy std_msgs  
  5. #  DEPENDS system_lib  
  6. )  

这里,需要添加message_runtime,并且依赖其他的package,改为:

[plain]  view plain  copy
  1. catkin_package(  
  2.    INCLUDE_DIRS include  
  3.    LIBRARIES chloe  
  4.    CATKIN_DEPENDS message_runtime  
  5.    roscpp  
  6.    rospy  
  7.    std_msgs  
  8.    DEPENDS system_lib  
  9. )  


到此,文件中需要配置和更改就完成了。由于重新配置了CMakeLists.txt文件,因此需要对workspace尽心编译。

需要注意的是:

find_package(...)

add_message_files(...)

add_service_files(...)

generate_message(...)

catkin_package(...)
这几项的先后顺序不能发生变化。



下面利用rosmsg show filename.ms和rossrv show filename.srv文件就可以查看其中的内容。

注意:所有在msg文件夹下的.msg文件都将转换为ROS所支持的语言的源文件。生成的C++头文件将会放置在~/wry_ws/devel/include/chloe/。Python脚本语言在~/wry_ws/devel/lib/python2.7/dist-package/chloe/下。

猜你喜欢

转载自blog.csdn.net/wangjingqi930330/article/details/73967720
今日推荐