LoginSignup
3
2

More than 1 year has passed since last update.

ROS2の共有ライブラリを使用したプログラムの作成

Last updated at Posted at 2020-06-29

ROS2関係トップページへ

【前:ROS2における共有ライブラリ
【次:ROS2におけるコンポーネント

ROS2における共有ライブラリで作成した共有ライブラリを使用する方法について.
他のROS2プログラムとの違いは,CMakeLists.txtでtarget_include_directoriesを使うことのみ.

準備

terminal
$ cd ~/ros2_studies_ws/
$ ros2 pkg create minimal_comp_user --build-type ament_cmake --dependencies rclcpp minimal_comp

ROS2における共有ライブラリで作成したパッケージ:minimal_compを使用するため,dependenciesに追加.

共有ライブラリを使用したプログラム

  • src/minimal_comp_user_main.cpp

プログラム

minimal_comp_user_main.cpp
#include <rclcpp/rclcpp.hpp>
#include "minimal_comp/minimal_comp_node2.hpp"

int main(int argc, char * argv[]){
  rclcpp::init(argc,argv);
  rclcpp::spin(std::make_shared<minimal_comp::MinimalCompNode2>());
  rclcpp::shutdown();
  return 0;
}

概要

共有ライブラリのMinimalCompNode2を呼び出している.
パッケージ名をnamespaceにしていたので呼び出しは6行目のようにminimal_comp::MinimalCompNode2となる.

package.xmlとCMakeLists.txt

関係する部分のみ抜粋.

package.xml

package.xml
<package format="3">
  <depend>rclcpp</depend>
  <depend>minimal_comp</depend>

説明

rclcppパッケージとともに共有ライブラリのパッケージ(minimal_comp)を記述.

CMakeLists.txt

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

add_executable(minimal_comp_user
  src/minimal_comp_user_main.cpp
)
ament_target_dependencies(minimal_comp_user
  rclcpp
  minimal_comp
)

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

install(TARGETS
  minimal_comp_user
  DESTINATION lib/${PROJECT_NAME}
)

概要

他のROS2と基本的に同じで,パッケージを見つけるfind_packageやターゲットと必要となるソースファイルの指定,インストール先などを記述.
共有ライブラリを使用する上で必要となるものがtarget_include_directoriesとなる.

説明

共有ライブラリなど自分のパッケージディレクトリにない外部のヘッダファイルにアクセスするために12~16行目が必要となる.
12行目に今回作成するターゲット名を書く.13~16行目は他でも同じ書き方になるのでコピペ.

ビルド・実行

ビルド

terminal
$ cd ~/ros2_studies_ws/
$ colcon build --symlink-install --packages-up-to minimal_comp_user
$ . install/setup.bash

共有ライブラリがビルドしてあるものとする.まだしていなければ,--packages-up-toに共有ライブラリのパッケージも一緒にしていしてやる.

実行

terminal
$ cd ~/ros2_studies_ws/
$ . install/setup.bash
$ ros2 run minimal_comp_user minimal_comp_user

共有ライブラリと作成プログラムが同一パッケージの場合

ここでは共有ライブラリとROS2プログラムが異なるパッケージの場合を作成した.
この時,共有ライブラリのパッケージ(minimal_comp)をfind_packageで指定し,ament_target_dependenciesでminimal_compを指定した.

共有ライブラリとROS2プログラムが同一パッケージの場合は,find_packageを書く必要がなく(自身のパッケージ名だから書けない),ament_target_dependenciesではライブラリ名(add_libraryの名前)を指定すればよい. 共有ライブラリ分だけtarget_link_librariesに書く(その他のrclcppなどはament_target_dependenciesに書く).例えば以下の通り.

CMakeList.txt
target_link_libraries(hoge
  fuge # 同一パッケージの共有ライブラリ名(add_libraryの名前)
)
ament_target_dependencies(hoge
  rclcpp
)

公式githubの共有ライブラリにかかわるexmapleのCMakeLists.txtが参考になる.

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2