📝
ROS2でノードを作成するときのCMakeLists.txtの書き方
ROS2でパッケージを作成するとき用の備忘録
今回はros2 run で実行するノードを作成する場合のCMakeLists.txtの書き方をまとめる
Ament CMakeの公式ドキュメントはこちら
公式ドキュメント
ROS2のパッケージ作成
はじめに、ROS2 ワークスペースを作成する
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
パッケージはros2 pkg create
コマンドで作成する
ros2 pkg create --build-type ament_cmake my_ros2_package
生成されたCMakeLists.txtの中身の確認
# プロジェクトの設定
cmake_minimum_required(VERSION 3.8)
project(my_ros2_package)
# ament_cmakeの使用を宣言
# これがないとcolconでビルドできない
find_package(ament_cmake REQUIRED)
# テストの設定は省略
# `ament_cmake` を使用するための設定
# ament_cmakeを使う場合、必ず最後に記述する
# ROS2のパッケージとして認識されるために必要
ament_package()
ソースコードの追加
src
ディレクトリにソースコードを追加する
ファイル名はhello.cpp
とする
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
auto node = std::make_shared<rclcpp::Node>("hello");
RCLCPP_INFO(node->get_logger(), "Hello ROS2");
rclcpp::spin_some(node);
rclcpp::shutdown();
return 0;
}
CMakeLists.txtの編集
ターゲットの作成
実行ファイルを作成する場合はadd_executable
を使う
hello
という実行ファイルを作成する場合は以下のように記述する
add_executable(hello src/hello.cpp)
依存関係の追加
rclcpp
を使う場合は以下のように記述する
find_package(rclcpp REQUIRED)
ament_target_dependencies(hello rclcpp)
出力先の指定
install
関数を使って出力先を指定する
install(TARGETS
hello
DESTINATION lib/${PROJECT_NAME}
)
完成したCMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(my_ros2_package)
add_executable(hello src/hello.cpp)
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
ament_target_dependencies(hello rclcpp)
install(TARGETS
hello
DESTINATION lib/${PROJECT_NAME}
)
ament_package()
package.xmlの編集
package.xml
にament_target_dependenciesで指定した依存関係を追加する
<depend>rclcpp</depend>
ビルドと実行
ビルドする
cd ~/ros2_ws
colcon build
sourceコマンドで環境変数を設定する
source install/setup.bash
実行する
ros2 run my_ros2_package hello
以下が出力されれば成功
[INFO] [xxxx.xxxx] [hello]: Hello ROS2
Discussion