ROS2 の基礎とセットアップ

第 9 章 ROS2-Humble

名前オーナー修正日時作成日時
01 ROS2 の紹介Yujiang2026-01-09 14:032026-01-09 14:03
02 Humble のインストールYujiang2026-01-26 12:122026-01-09 14:03
03 統合開発環境Yujiang2026-01-26 14:552026-01-09 14:24
04 ワークスペースYujiang2026-01-12 12:222026-01-09 14:25
05 パッケージYujiang2026-01-12 12:222026-01-09 14:26
06 ノードYujiang2026-02-13 13:282026-01-09 14:26
07 トピック通信Yujiang2026-02-13 13:292026-01-09 14:27
08 サービス通信Yujiang2026-02-06 13:572026-01-09 14:27
09 アクション通信Yujiang2026-01-27 14:482026-01-09 14:27
10 TF2 座標変換Yujiang2026-01-27 14:552026-01-09 14:28

コンテンツメンテナンス中...

01 ROS2 の紹介

01 ROS2 プロファイル

1.1 ROS 2 とは

ROS 2(Robot Operation System 2)は、ロボットソフトウェアの開発のためのオープンソースの中間体フレームワークです。名前に「オペレーティングシステム」が含まれていますが、ROS 2 は実際には従来のオペレーティングシステムではなく、開発者がロボットアプリケーションを作成するのに役立つソフトウェアリポジトリとツールです。

1.1.1 ROS 2 の定義

ROS 2 はオペレーティングシステムのサービスを提供し、通常はプロセス間でメッセージを送信し、パッケージ管理を実行します。これは分散フレームワークで、アプリケーションがロボットハードウェアを制御し、センサーデータを処理し、アルゴリズムを実行し、他のアプリケーションやシステムと通信できるようにします。

1.1.2 ROS 2 の設計目標

目標重要性
リアルタイムフレンドリー低遅延ロボティクスワークロードのより良いサポート
分散デプロイ複数のノードを多くのプロセスやマシン間で実行できる
信頼性と保守性ROS 1 時代の前提よりも本番ロボティクスに適している
セキュリティ安全な通信とアクセス制御をサポート
クロスプラットフォームサポートLinux、組み込みターゲット、その他の最新環境で動作

1.1.3 ROS 2 のコア値

  1. モジュラー設計:メンテナンス、再利用、配布が容易な独立したパッケージにコードが整理されている

  2. 分散通信:マルチプロセッサ、マルチマシン分散コンピューティングアーキテクチャ

  3. 豊富なエコシステム:多数のオープンソース機能パッケージと開発ツールを含む

  4. アクティブなコミュニティ:グローバル開発者による継続的な貢献とビジネス企業からの活発なサポート

1.2 ROS 2 コア概念

1.2.1 ノード(Nodes)

ノードは ROS 2 における最も基本的な計算単位です。

1.2.2 トピック(Topics)

トピックはノード間の非同期通信のメカニズムで、パブリッシュ/サブスクライブ(Pub/Sub)を使用します。

機能説明
非同期パブリッシャーとサブスクライバーは互いにブロックしない
一対多複数のサブスクライバーが同じトピックを消費できる
疎結合ノードはトピック名とメッセージタイプにのみ合意
ストリームフレンドリーセンサーデータ、テレメトリ、継続的制御に適している

典型的なトピックの例:

トピック名メッセージタイプ用途
/cmd_velgeometry_msgs/msg/Twist速度制御コマンド
/odomnav_msgs/msg/Odometry走行距離データ
/scansensor_msgs/msg/LaserScanレーザーレーダーデータ
/camera/image_rawsensor_msgs/msg/Image元の画像データ

1.2.3 サービス(Services)

サービスはクライアント/サーバー(Client/Server)モデルを使用したノード間の同期通信のメカニズムです。

機能説明
リクエスト/レスポンスクライアントがリクエストを送信し、レスポンスを待つ
同期パターン明確な完了結果が必要な場合に有用
一対一インタラクション通常 1 つのクライアントが 1 つのサービスエンドポイントと通信
短いタスクに最適長時間実行されるジョブや継続的フィードバックには理想的でない

1.2.4 アクション(Actions)

アクションは長期割り当てを処理するために使用される通信メカニズムで、タスクのフィードバックとキャンセルをサポートします。

ストリーム用途
Goal実行するタスクを記述
Feedbackタスクが実行されている間に進行状況を報告
Resultタスクが終了したときに最終結果を返す

1.2.5 パラメータ(Parameters)

パラメータはノードの構成値で、ノードの起動時に設定するか、実行中に動的に変更できます。

Code
Plain Text
Node: camera_node
├── Parameter: frame_id = "camera_link"
├── Parameter: width = 640
├── Parameter: height = 480
├── Parameter: fps = 30
└── Parameter: exposure_mode = "auto"

Dynamic update example:
$ ros2 param set camera_node exposure_mode "manual"

1.3 ROS 2 構造

1.3.2 クライアントライブラリ(Client Libraries)

ライブラリ言語典型的な用途
rclcppC++高性能本番ノード
rclpyPython高速プロトタイピングとスクリプト
rclcCMicro-ROS およびリソース制約のあるシステム
rcljavaJavaJVM ベースの ROS 2 統合
rclnodejsJavaScript / Node.jsWeb およびツール統合
cpp
// C++ publisher example (rclcpp)
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

class Publisher : public rclcpp::Node {
public:
  Publisher() : Node("publisher") {
  publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
  timer_ = this->create_wall_timer(
  std::chrono::milliseconds(500),
  [this]() { this->timer_callback(); });
  }
private:
  void timer_callback() {
  auto msg = std_msgs::msg::String();
  msg.data = "Hello ROS 2";
  publisher_->publish(msg);
  }
  rclcpp::TimerBase::SharedPtr timer_;
  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
};
python
# Python publisher example (rclpy)
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class Publisher(Node):
  def __init__(self):
  super().__init__('publisher')
  self.publisher_ = self.create_publisher(String, 'topic', 10)
  self.timer = self.create_timer(0.5, self.timer_callback)

  def timer_callback(self):
  msg = String()
  msg.data = 'Hello ROS 2'
  self.publisher_.publish(msg)

1.3.3 RMW と DDS

RMW 実装DDS バックエンドオープンソース/商用特性
rmw_cyclonedds_cppCycloneDDSオープンソースデフォルト選択、軽量効率的
rmw_fastrtps_cppFastDDSオープンソース機能豊富、高性能
rmw_connext_cppRTI Connext商用産業レベルのサポート、最も包括的

1.4 ROS 1 と ROS 2 の主な違い

1.4.2 詳細比較表

比較ディメンションROS 1ROS 2
通信中間体TCP/UDP カスタムプロトコルDDS 標準プロトコル
発見メカニズムROS Master(中央集権化)DDS 発見(分散化)
ビルドシステムCatkinColcon / Ament
Python バージョンPython 2/3Python 3 のみ
サポートされるオペレーティングシステム主に LinuxLinux / Windows / macOS / RTOS
リアルタイムサポートリアルタイム保証なしハードリアルタイムをサポート
複数のロボット通信追加の構成が必要ネイティブサポート(ROS_DOMAIN_ID)
セキュリティ暗号化や認証なし暗号化、認証、アクセス制御をサポート
リリースNoetic(最終バージョン)Humble、Iron、Jazzy...

1.5 ROS 2 リリース

1.5.1 バージョン履歴

バージョン名リリース時間サポートシステムサポート状況終了時間
Ardent2017.12Ubuntu 16.04終了2019.04
Bouncy2018.06Ubuntu 16.04/18.04終了2019.09
Crystal2018.12Ubuntu 16.04/18.04終了2020.12
Dashing2019.05Ubuntu 16.04/18.04終了2021.05
Eloquent2019.11Ubuntu 18.04終了2021.11
Foxy2020.06Ubuntu 18.04/20.04終了2023.05
Galactic2021.05Ubuntu 20.04終了2022.11
Humble2022.05Ubuntu 22.04LTS2027.05
Iron2023.05Ubuntu 22.04終了2024.11
Jazzy2024.05Ubuntu 24.04LTS2029.05

1.5.3 バージョン選択の提案

使用シーン推奨バージョン理由
本番環境Humble安定、長期サポート
新プロジェクト開発Jazzy最新 LTS、長期サポート
学習/実験最新版最新機能
古いシステムの保守Humble互換性が良い

03 統合開発環境

03 統合開発環境(IDE Setup)

3.1 一般

良好な開発環境設定により ROS 2 開発の効率を大幅に向上できます。本章では Visual Studio Code(VS Code)を ROS 2 メイン開発環境として設定する方法について、プラグインのインストール、スマートコード補完、デバッグ設定などの詳細情報を提供します。

3.2 Visual Studio Code のインストール

3.2.1 VS Code のインストール

bash
# Download and install VS Code
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install -y code
bash
sudo snap install --classic code
bash
code --version

3.3 必要なプラグイン

3.3.1 ROS 2 コアプラグイン

プラグイン名発行者用途
ROSMicrosoftROS サポート
C/C++MicrosoftC++ 言語サポート
PythonMicrosoftPython 言語サポート
CMake ToolsMicrosoftCMake サポート
bash
# Install the ROS extension
code --install-extension ms-iot.vscode-ros

# Install the C/C++ extension
code --install-extension ms-vscode.cpptools

# Install the Python extension
code --install-extension ms-python.python

# Install CMake Tools
code --install-extension ms-vscode.cmake-tools

3.4 ROS 2 ワークスペース設定

3.4.1 ROS 2 ワークスペースを開く

bash
# Open the workspace
code ~/ros2_ws

3.4.2 C/C++ スマートヒントを設定

json
{
  "configurations": [
  {
  "name": "Linux",
  "includePath": [
  "${workspaceFolder}/**",
  "/opt/ros/humble/include/**",
  "/usr/include/**"
  ],
  "defines": [],
  "compilerPath": "/usr/bin/gcc",
  "cStandard": "c17",
  "cppStandard": "c++17",
  "intelliSenseMode": "linux-gcc-x64",
  "compileCommands": "${workspaceFolder}/build/compile_commands.json"
  }
  ],
  "version": 4
}
bash
cd ~/ros2_ws
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -s build/compile_commands.json

3.4.4 Python 環境を構成

json
{
  "python.autoComplete.extraPaths": [
  "${workspaceFolder}/install/*/lib/python3.10/site-packages",
  "/opt/ros/humble/lib/python3.10/site-packages"
  ],
  "python.analysis.extraPaths": [
  "${workspaceFolder}/install/*/lib/python3.10/site-packages",
  "/opt/ros/humble/lib/python3.10/site-packages"
  ],
  "python.formatting.provider": "black",
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": true
}

3.5 VS Code ジョブ構成

json
{
  "version": "2.0.0",
  "tasks": [
  {
  "label": "colcon build",
  "type": "shell",
  "command": "colcon build --symlink-install",
  "group": {
  "kind": "build",
  "isDefault": true
  },
  "problemMatcher": []
  }
  ]
}

3.6 デバッグ設定

json
{
  "version": "0.2.0",
  "configurations": [
  {
  "name": "ROS2: C++ Node",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/install/${input:packageName}/lib/${input:packageName}/${input:executableName}",
  "args": [],
  "stopAtEntry": false,
  "cwd": "${workspaceFolder}",
  "environment": [
  { "name": "ROS_DOMAIN_ID", "value": "0" },
  { "name": "RMW_IMPLEMENTATION", "value": "rmw_cyclonedds_cpp" }
  ],
  "externalConsole": false,
  "MIMode": "gdb"
  }
  ]
}
ショートカット機能
F5デバッグ開始
Ctrl+Shift+F5デバッグ再起動
Shift+F5デバッグ停止
F9ブレークポイント設定/閉じる
F10ステップオーバー
F11ステップイン
Shift+F11ステップアウト

3.11 Terminator のインストール

bash
sudo apt install terminator

3.11.1 開始

ショートカット Ctrl+Alt+T

3.12 Git の使用

bash
sudo apt install git
bash
git init
git add .
git commit
コマンド用途
git init新しいローカルリポジトリを作成
git status現在のリポジトリ状態を確認
git add <file>次のコミットのためにファイルをステージ
git add .すべての現在の変更をステージ
git commit -m "message"メッセージ付きの新しいスナップショットを作成
git diffステージされていない変更を表示
git logコミット履歴を表示
git remote -v設定済みのリモートをリスト
git push -u origin mainプッシュおよびアップストリームブランチを設定
git pullリモート更新を取得してマージ

3.13 次のステップ

開発設定が完了したら:

04 ワークスペース - ワークスペース管理を学ぶ

05 機能パッケージ - 機能パッケージを作成

06 ノード - ノードコードを書く

04 ワークスペース

04 ワークスペース(Workspace)

4.1 ワークスペースの概要

4.1.1 ワークスペースとは

ワークスペースは、ROS 2 で機能パッケージを整理し管理するためのディレクトリ構造です。これは、ソースコード、コンパイル製品、インストールドキュメントを含むルートディレクトリで、ROS 2 開発の基本環境です。

4.1.2 ワークスペースカタログ構造

ディレクトリ用途バージョン管理
src/機能パッケージのソースを保管はい
build/中間製品をコンパイルいいえ
install/最終インストールファイルいいえ
log/コンパイルおよびテストログいいえ

4.1.3 ワークエリアのタイプ

タイプ例パス用途
システムワークスペース/opt/ros/humble/インストールされた ROS 2 ソフトウェア
ユーザーワークスペース~/ros2_ws/個人開発のワークスペース
カバーワークスペース~/overlay_ws/既存のパッケージを拡張または上書き

4.2 ワークスペースの作成

4.2.1 基本ワークスペースの作成

bash
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 2

4.3 Colcon コンパイルシステム

4.3.2 Colcon のインストール

bash
sudo apt install -y python3-colcon-common-extensions
colcon --help

4.3.3 Colcon の基本的な使い方

bash
cd ~/ros2_ws
colcon build
colcon build --packages-select <package_name>
colcon build --packages-select <pkg1> <pkg2> <pkg3>
colcon build --packages-skip <package_name>

4.3.4 一般的なコンパイルオプション

bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Debug
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --symlink-install --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
colcon build --event-handlers console_direct+

4.4 ワークスペースカバー(Overlaying)

bash
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash

4.5 詳細な環境設定

bash
source install/setup.bash
echo $ROS_DOMAIN_ID
echo $AMENT_PREFIX_PATH
echo $LD_LIBRARY_PATH
bash
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

4.6 パッケージ管理

bash
ros2 pkg list
ros2 pkg prefix <package_name>
find src -maxdepth 2 -name package.xml -exec dirname {} \;
bash
ros2 pkg xml <package_name>
ros2 pkg dependencies <package_name>
ros2 pkg list > packages_list.txt

4.7 増分コンパイル

bash
colcon build
colcon build --packages-select <modified_package>
bash
colcon build --packages-select <package_name> --cmake-force-configure
rm -rf build install log
colcon build

4.8 テストと認証

bash
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose

4.12 次のステップ

1.05 パッケージ - 機能パッケージの作成と管理を学ぶ

2.06 ノード - 最初のノードを準備

05 パッケージ

05 機能パッケージ(Packages)

5.1 機能パッケージの概要

5.1.1 機能パッケージとは

パッケージは、ROS 2 における組織コードの基本単位です。特定の機能のためのソースコード、構成ファイル、データファイル、構築スクリプト、ドキュメントが含まれています。

5.1.2 機能パッケージの命名規則

小文字、数字、アンダースコアのみ

文字で始まる必要があります

説明的な名前を推奨

ROS 2 予約名の使用を避ける

5.1.3 機能パッケージのタイプ

タイプビルドシステム主な言語用途
ament_cmakeCMakeC++C++ ノード、混合アイテム
ament_pythonSetuptoolsPython純粋な Python プロジェクト
ament_cmake_pythonCMake + Python混合C++ と Python の混合アイテム

5.2 機能パッケージの作成

bash
cd ~/ros2_ws/src

ros2 pkg create --build-type ament_cmake my_cpp_pkg

ros2 pkg create --build-type ament_cmake \
  --dependencies rclcpp std_msgs \
  my_robot_controller

ros2 pkg create --build-type ament_cmake \
  --dependencies rclcpp std_msgs geometry_msgs \
  --node-name my_node \
  --library-name my_library \
  my_cpp_pkg
bash
cd ~/ros2_ws/src

ros2 pkg create --build-type ament_python my_py_pkg

ros2 pkg create --build-type ament_python \
  --dependencies rclpy std_msgs \
  my_python_package

ros2 pkg create --build-type ament_python \
  --dependencies rclpy \
  --node-name my_node \
  my_py_pkg

5.3 package.xml 設定

xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>my_package</name>
  <version>1.0.0</version>
  <description>My ROS 2 package description</description>
  <maintainer email="user@example.com">Your Name</maintainer>
  <license>Apache-2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

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

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
  <build_type>ament_cmake</build_type>
  </export>
</package>
xml
<depend>rclcpp</depend>
<depend>rclpy</depend>
<depend>std_msgs</depend>
<depend>geometry_msgs</depend>
<depend>sensor_msgs</depend>
<depend>nav_msgs</depend>
<depend>tf2</depend>
<depend>tf2_ros</depend>
<depend>tf2_geometry_msgs</depend>

5.5 setup.py 設定(Python)

python
from setuptools import setup

package_name = 'my_py_pkg'

setup(
  name=package_name,
  version='1.0.0',
  packages=[package_name],
  data_files=[
  ('share/ament_index/resource_index/packages',
  ['resource/' + package_name]),
  ('share/' + package_name, ['package.xml']),
  ('share/' + package_name + '/launch', ['launch/my_launch.py']),
  ('share/' + package_name + '/config', ['config/params.yaml']),
  ],
  install_requires=['setuptools'],
  zip_safe=True,
  maintainer='Your Name',
  maintainer_email='user@example.com',
  description='My ROS 2 Python package',
  license='Apache-2.0',
  tests_require=['pytest'],
  entry_points={
  'console_scripts': [
  'my_node = my_py_pkg.my_node:main',
  ],
  },
)
python
entry_points={
  'console_scripts': [
  'talker = my_py_pkg.talker:main',
  'listener = my_py_pkg.listener:main',
  'camera_node = my_py_pkg.camera:main',
  ],
}

5.6 パッケージのコンパイルとインストール

bash
cd ~/ros2_ws
colcon build --packages-select my_cpp_pkg
colcon build --packages-select my_cpp_pkg --event-handlers console_direct+
bash
colcon build --packages-select pkg1 pkg2 pkg3
colcon build --packages-skip pkg_to_skip
bash
colcon build --symlink-install
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

5.7 依存関係への依存

bash
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package