[ROS2]ament_cmake_autoのすすめ - graspPlugin/wiki GitHub Wiki

巷にあふれているROS2のチュートリアルでは,ほとんどの場合パッケージのビルドにament_cmakeを使用していますが,ament_cmake_autoを使用することでCMakeLists.txtに依存パッケージなどを自分で記述する必要がなくなります.今回はそんな便利なament_cmake_autoについて簡単にですが使い方を説明します.

環境

- version
Ubuntu 20.04
ROS2 Foxy

使い方

前提条件

今回の例ではパッケージ名をmy_pkg,生成する実行ファイル名をtest_node,それに必要なソースファイル名をsrc/test_node.cppとします.

またtest_noderclcppstd_msgsパッケージの2つに依存することとします.

ament_cmake

これまでのament_cmakeを用いた方法ではpackage.xmlCMakeLists.txtに以下の追記が必要となります.

package.xml

buildtool_dependタグでament_cmakeを指定します.またdependタグで必要なROS2のパッケージを記述します.

<package format="3">
  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>std_msgs</depend>

CMakeLists.txt

find_packageで使用するすべてのパッケージを記述する必要があります.またadd_executableのあとにその実行ファイルが依存するパッケージをament_target_dependenciesで記述します.そして最後にinstallを行いament_packageを実行します.

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

add_executable(test_node src/test_node.cpp)
ament_target_dependencies(test_node rclcpp std_msgs)

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

ament_package()

ament_cmake_auto

それではament_cmake_autoを用いてどのように記述することができるのかを見ていきましょう.

package.xml

buildtool_dependタグで指定していたament_cmakeament_cmake_autoに書き換えます.これだけです.

<package format="3">
  <buildtool_depend>ament_cmake_auto</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>std_msgs</depend>

CMakeLists.txt

find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()

ament_auto_add_executable(test_node src/test_node.cpp)

ament_auto_package()

たったこれだけの記述で今までと同じようにビルドを行うことができます.

find_packageament_cmake_autoを読み込みます.その後ament_auto_find_build_dependenciesを使用することで,package.xmlから依存関係を読み込み必要な各パッケージについてfind_packageを自動で行ってくれます.今回は依存パッケージがrclcppstd_msgsの2つだけなので行数の変化はあまりありませんが,依存パッケージが増えれば増えるほど,威力を発揮してきます.

そしてこれまでadd_executableament_target_dependenciesの2回に分けていた実行ファイルの生成が,ament_auto_add_executableだけで済みます.

更にament_auto_packageではこれまで手動で書いていたinstallの部分を含めて自動で処理を行ってくれます.

最後に

ament_cmake_autoを用いることで,より大規模なパッケージになるほど記述が完結になりビルド設定に費やす時間を省くことができます. まだまだ開発途中であり,独自インターフェイスのヘッダファイル生成を自動で行ってくれるament_auto_generate_codeもまだ中身が実装されていません('23/3/8現在).

これを機にament_cmake_autoに移行してみてはいかがでしょうか.

最後に今回記事を執筆するにあたり参考になった以下のサイトの筆者に感謝を述べさせていただきます.大変ありがとうございました.

参考文献

下の中国語のサイトは上のサイトを元に執筆されたものですが,非常に参考になりましたのでここに掲載させていただきます.

⚠️ **GitHub.com Fallback** ⚠️