[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_node
はrclcpp
とstd_msgs
パッケージの2つに依存することとします.
これまでのament_cmakeを用いた方法ではpackage.xml
とCMakeLists.txt
に以下の追記が必要となります.
buildtool_depend
タグでament_cmake
を指定します.またdepend
タグで必要なROS2のパッケージを記述します.
<package format="3">
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>std_msgs</depend>
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
を用いてどのように記述することができるのかを見ていきましょう.
buildtool_depend
タグで指定していたament_cmake
をament_cmake_auto
に書き換えます.これだけです.
<package format="3">
<buildtool_depend>ament_cmake_auto</buildtool_depend>
<depend>rclcpp</depend>
<depend>std_msgs</depend>
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_package
でament_cmake_auto
を読み込みます.その後ament_auto_find_build_dependencies
を使用することで,package.xml
から依存関係を読み込み必要な各パッケージについてfind_package
を自動で行ってくれます.今回は依存パッケージがrclcpp
とstd_msgs
の2つだけなので行数の変化はあまりありませんが,依存パッケージが増えれば増えるほど,威力を発揮してきます.
そしてこれまでadd_executable
とament_target_dependencies
の2回に分けていた実行ファイルの生成が,ament_auto_add_executable
だけで済みます.
更にament_auto_package
ではこれまで手動で書いていたinstall
の部分を含めて自動で処理を行ってくれます.
ament_cmake_auto
を用いることで,より大規模なパッケージになるほど記述が完結になりビルド設定に費やす時間を省くことができます.
まだまだ開発途中であり,独自インターフェイスのヘッダファイル生成を自動で行ってくれるament_auto_generate_code
もまだ中身が実装されていません('23/3/8現在).
これを機にament_cmake_auto
に移行してみてはいかがでしょうか.
最後に今回記事を執筆するにあたり参考になった以下のサイトの筆者に感謝を述べさせていただきます.大変ありがとうございました.
下の中国語のサイトは上のサイトを元に執筆されたものですが,非常に参考になりましたのでここに掲載させていただきます.