📝

ROS2でノードを作成するときのCMakeLists.txtの書き方

2025/02/10に公開

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