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

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

ROS2関係トップページへ

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

準備

terminal
$ cd ~/ros2_studies_ws/
$ ros2 pkg create minimal_comp_user

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

作成物:github.com

  • 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="2">
  <build_depend>rclcpp</build_depend>
  <exec_depend>rclcpp</exec_depend>
  <test_depend>rclcpp</test_depend>

  <build_depend>minimal_comp</build_depend>
  <exec_depend>minimal_comp</exec_depend>
  <test_depend>minimal_comp</test_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-select minimal_comp_user
$ . install/setup.bash

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

実行

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の名前)を指定すればよい.

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

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
ユーザーは見つかりませんでした