ROS2 中级之 建立自己的工作空间和包

660阅读 0评论2020-06-17 iibull
分类:其他平台

	

点击(此处)折叠或打开

  1. ros2 pkg create --dependencies [deps]
  2. ros2 pkg create --dependencies [deps] --build-type ament_python
  3. ros2 pkg create --dependencies [deps] --build-type ament_cmake
  4. --------------------------------------------------------------------------------------------------------------
  5. CMakeFiles.txt 修改
  6. ament_target_dependencies( [dependencies])
  7. 在 ament_package()前加入
  8. # Install launch files
  9. install( DIRECTORY launch DESTINATION share/${PROJECT_NAME} )
  10. # Install nodes
  11. install( TARGETS [node-names] DESTINATION lib/${PROJECT_NAME} )
  12. #######################################################################3
  13.  colcon build --symlink-install
  14. 用于一些python 和资源文件等等无需编译文件被修改的情况
  15. #####################################################
  16. https://index.ros.org/doc/ros2/Tutorials/Ament-CMake-Documentation/
  17. ament_cmake 是ROS2基于CMake的一个编译系统.
  18. 类似Shell脚本, 里边可以定义自定义宏以及自定义函数
  19. ros2 pkg create 会产生 package.xml 以及 CMakeLists.txt
  20. package.xml: 包含所有依赖项和一些元数据,以便让colcon为您的包找到正确的构建顺序,
  21. 以便在CI中安装所需的依赖项,并为bloom发布提供信息
  22. CMakeLists.txt :用于构建和打包可执行文件和库的命令
  23. CMakeLists.txt 解析: project : 包名, package_name, 必须和 package.xml 相同.
  24. 一些通用的编译选项
  25. -Wall -Wextra -Wpedantic 是必须的
  26. -Wshadow -Werror 建议使用.
  27. target_compile_options(my_target PRIVATE -Wshadow -Werror)
  28. #####################
  29. ament_package(): 放在 CMakeLists.txt最后. 项目必须调用一次, 用于建立项目.
  30.     类似于Makeifle中的 make all. 他从 CMakeLists.txt 前面搜集很多信息,
  31. ament_package 需要的参数
  32.     CONFIG_EXTRAS: 一些 CMake文件的列表, 最先include进来
  33.     ${PROJECT_NAME}_CONFIG_EXTRAS: 第二被include进来
  34.     ${PROJECT_NAME}_CONFIG_EXTRAS_POST 第三被include进来
  35.     CONFIG_EXTRAS_POST: 一些 CMake文件的列表, 最后 include 进来
  36. 添加头文件
  37. target_include_directories(my_target
  38.     PUBLIC
  39.     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  40.     $<INSTALL_INTERFACE:include>
  41. )
  42. 增加依赖
  43. find_package(Eigen3 REQUIRED)
  44. ament_target_dependencies(my_target Eigen3)
  45. 或者使用
  46. find_package(Eigen3 REQUIRED)
  47. target_link_libraries(my_target Eigen3::Eigen)
  48. ###################################################
  49.  建立一个库
  50. ament_export_interfaces(export_my_library HAS_LIBRARY_TARGET)
  51. ament_export_dependencies(some_dependency)
  52. install(
  53.   DIRECTORY include/
  54.   DESTINATION include
  55. )
  56. install(
  57.   TARGETS my_library
  58.   EXPORT export_my_library
  59.   LIBRARY DESTINATION lib
  60.   ARCHIVE DESTINATION lib
  61.   RUNTIME DESTINATION bin
  62.   INCLUDES DESTINATION include
  63. )
  64. ament_export_include_directories(include)
  65. ament_export_libraries(my_library)
  66. 添加一个executable, 相同流程.
  67. ////////////////////////////////////////////////////////////////////////////////////////////
  68. ////////////////////////////////////////////////////////////////////////////////////////////
  69. ////////////////////////////////////////////////////////////////////////////////////////////
  70. 库的范例.
  71. ////////////////////////////////////////////////////////////////////////////////////////////
  72. cmake_minimum_required(VERSION 3.5)
  73. project(plugin_apcc_ctrl)
  74. # Default to C99
  75. if(NOT CMAKE_C_STANDARD)
  76.   set(CMAKE_C_STANDARD 99)
  77. endif()
  78. # Default to C++14
  79. if(NOT CMAKE_CXX_STANDARD)
  80.   set(CMAKE_CXX_STANDARD 14)
  81. endif()
  82. if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  83.   add_compile_options(-Wall -Wextra -Wpedantic)
  84. endif()
  85. ################################################################################
  86. # Find ament packages and libraries for ament and system dependencies
  87. ################################################################################
  88. find_package(ament_cmake REQUIRED)
  89. find_package(rclcpp REQUIRED)
  90. find_package(std_msgs REQUIRED)
  91. find_package(rcutils REQUIRED)
  92. find_package(ament_index_cpp REQUIRED)
  93. find_package(hr_msgs REQUIRED)
  94. ################################################################################
  95. # additional Include / Linked dependencies
  96. ################################################################################
  97. include_directories(
  98.   include
  99.   ${Boost_INCLUDE_DIRS}
  100.   ${std_msgs_INCLUDE_DIRS}
  101.   ${rclcpp_INCLUDE_DIRS}
  102. )
  103. link_directories(
  104.   /opt/ros/eloquent/lib
  105. )
  106. ################################################################################
  107. # Declare ROS executable and library
  108. ################################################################################
  109. set ( SRC
  110.     src/apcc_ctrl_plugin.cpp
  111. )
  112. set ( LIBS
  113.     rclcpp
  114.     rcutils
  115.     ament_index_cpp
  116.     std_msgs
  117.     hr_msgs
  118. )
  119. add_library(plugin_apcc_ctrl SHARED
  120.     ${SRC}
  121. )
  122. target_include_directories(
  123.   plugin_apcc_ctrl
  124.   PRIVATE
  125.     src
  126.   PUBLIC
  127.     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  128.     $<INSTALL_INTERFACE:include>
  129. )
  130. target_compile_definitions(
  131.   plugin_apcc_ctrl
  132.   PRIVATE
  133.      "COMPOSITION_BUILDING_DLL"
  134.   PUBLIC
  135.      USE_UDP_CONSOLE=1
  136. )
  137. target_compile_options(
  138.   plugin_apcc_ctrl
  139.   PRIVATE
  140.     -Werror -Wno-unused -Wno-missing-field-initializers -Wno-reorder
  141. )
  142. target_link_libraries(
  143.   plugin_apcc_ctrl
  144.   ${std_msgs_LIBRARIES}
  145.   rt pthread jsoncpp uuid curl mp3lame
  146. )
  147. ament_target_dependencies(plugin_apcc_ctrl ${LIBS} )
  148. ################################################################################
  149. install(
  150.   DIRECTORY include/
  151.   DESTINATION include
  152. )
  153. # lib
  154. install(
  155.   TARGETS plugin_apcc_ctrl
  156.   ARCHIVE DESTINATION lib
  157.   LIBRARY DESTINATION lib
  158.   RUNTIME DESTINATION bin
  159.   INCLUDES DESTINATION include
  160. )
  161. ################################################################################
  162. # Last. do make
  163. ################################################################################
  164. ament_export_libraries(plugin_apcc_ctrl)
  165. ament_export_include_directories(include)
  166. ament_package()
  167. ////////////////////////////////////////////////////////////////////////////////////////////
  168. 库的调用
  169. ////////////////////////////////////////////////////////////////////////////////////////////
  170. find_package(plugin_apcc_ctrl REQUIRED)
  171. set ( LIBS
  172.     rclcpp
  173.     rcutils
  174.     ament_index_cpp
  175.     std_msgs
  176.     hr_msgs
  177.     plugin_apcc_ctrl
  178. )
  179. ament_target_dependencies(hr_apcc_controller_demo ${LIBS} )
 





上一篇:ROS2 之 ros2doctor
下一篇:ROS2 之 使用 python Launch