Help us understand the problem. What is going on with this article?

ROS2におけるコンポーネントの作成

ROS2関係トップページへ

ROS2のコンポーネントを作成する.
Crystal以前と比べてDashingではとても簡単になっているので,互換性を捨ててDashing以降での話とする(このページを見ると一見長いように見えるが手間はクラスとあまり変わらない).

ここで,コンポーネントは共有ライブラリをベースに作成する.
まずはROS2における共有ライブラリを見て共有ライブラリの作成について理解しておく.
また,ROS2における共有ライブラリと同じようにminimal_comを例に説明し,ソースコードなど重複して載せる.

コンポーネント作成のポイント

おそらくヘッダに共有ライブラリと同じようにvisibilityの設定を,ソースの最後に

RCLCPP_COMPONENTS_REGISTER_NODE

を,更にpackage.xmlやCMakeLists.txtにrclcpp_componentsのパッケージを読み込む?

概要

簡単なメッセージを出力するだけのもの

package.xmlとCMakeLists.txt

以下は追加したところに関係する部分のみ抜粋.
詳しくはament_cmake User Documentationを参照.

package.xml

package.xml
<package format="2">
  <build_depend>rclcpp</build_depend>
  <exec_depend>rclcpp</exec_depend>
  <test_depend>rclcpp</test_depend>

  <build_depend>rclcpp_components</build_depend>
  <exec_depend>rclcpp_components</exec_depend>
  <test_depend>rclcpp_components</test_depend>

注意すべき点はrclcpp_components.共有ライブラリを作成するために必要なパッケージ.

CMakeLists.txt

CMakeLists.txt
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)

add_library(minimal_comp_node SHARED
  src/minimal_comp_node1.cpp
  src/minimal_comp_node2.cpp
)
target_compile_definitions(minimal_comp_node
  PRIVATE "MY_LIBRARY_BUILDING_LIBRARY"
)
target_compile_options(minimal_comp_node PUBLIC -Wall)
ament_target_dependencies(minimal_comp_node
  rclcpp
  rclcpp_components
)

target_include_directories(minimal_comp_node
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)

if(NOT WIN32)
  ament_environment_hooks(
    "${ament_cmake_package_templates_ENVIRONMENT_HOOK_LIBRARY_PATH}"
  )
endif()

ament_export_interfaces(export_minimal_comp_node HAS_LIBRARY_TARGET)
ament_export_dependencies(rclcpp rclcpp_components)
ament_export_libraries(minimal_comp_node)
ament_export_include_directories(include)

install(
  DIRECTORY include/
  DESTINATION include
)
install(TARGETS
  minimal_comp_node
  EXPORT export_minimal_comp_node
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin
  INCLUDES DESTINATION include
)

概要

詳しくは[ROS2における共有ライブラリ]を参考.
(https://qiita.com/NeK/items/fb5dac0158497c1ff77f)

説明:ament_export_*

ament_export_dependenciesは,ライブラリを作るのに必要なパッケージ名を.
共有ライブラリと異なり,rclcpp_componentsが入っていることに注意.

ビルド

$ cd ~/ros2_studies_ws/
$ colcon build --symlink-install --packages-select minimal_comp
$ . install/setup.bash

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした