Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@NeK

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

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の名前)を指定すればよい. 共有ライブラリ分だけ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が参考になる.

0
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?