4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

4
Last updated at Posted at 2020-06-29

【ROS2関係トップページへ】

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

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

Jazzy以前はこちら: 詳しい内容はこちらを参照のこと.

準備

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

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
)
target_link_libraries(minimal_comp_user PUBLIC
  rclcpp::rclcpp
  minimal_comp::minimal_comp1
)

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

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/local_setup.bash

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

実行

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

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

ここでは共有ライブラリとROS2プログラムが異なるパッケージの場合を作成した.
同一パッケージでも同じようにする.
ただ,target_link_librariesの中でパッケージ名::ライブラリ名がライブラリ名(add_libraryの名前)だけでよし.

また共有ライブラリとROS2プログラムが同一パッケージの場合は,find_packageを書く必要がない.

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

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

4
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?