ROS2 の基礎とセットアップ
第 9 章 ROS2-Humble
| 名前 | オーナー | 修正日時 | 作成日時 |
|---|---|---|---|
| 01 ROS2 の紹介 | Yujiang | 2026-01-09 14:03 | 2026-01-09 14:03 |
| 02 Humble のインストール | Yujiang | 2026-01-26 12:12 | 2026-01-09 14:03 |
| 03 統合開発環境 | Yujiang | 2026-01-26 14:55 | 2026-01-09 14:24 |
| 04 ワークスペース | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:25 |
| 05 パッケージ | Yujiang | 2026-01-12 12:22 | 2026-01-09 14:26 |
| 06 ノード | Yujiang | 2026-02-13 13:28 | 2026-01-09 14:26 |
| 07 トピック通信 | Yujiang | 2026-02-13 13:29 | 2026-01-09 14:27 |
| 08 サービス通信 | Yujiang | 2026-02-06 13:57 | 2026-01-09 14:27 |
| 09 アクション通信 | Yujiang | 2026-01-27 14:48 | 2026-01-09 14:27 |
| 10 TF2 座標変換 | Yujiang | 2026-01-27 14:55 | 2026-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 ROS 2 コア概念
1.2.1 ノード(Nodes)
ノードは ROS 2 における最も基本的な計算単位です。
1.2.2 トピック(Topics)
トピックはノード間の非同期通信のメカニズムで、パブリッシュ/サブスクライブ(Pub/Sub)を使用します。
| 機能 | 説明 |
|---|---|
| 非同期 | パブリッシャーとサブスクライバーは互いにブロックしない |
| 一対多 | 複数のサブスクライバーが同じトピックを消費できる |
| 疎結合 | ノードはトピック名とメッセージタイプにのみ合意 |
| ストリームフレンドリー | センサーデータ、テレメトリ、継続的制御に適している |
典型的なトピックの例:
| トピック名 | メッセージタイプ | 用途 |
|---|---|---|
| /cmd_vel | geometry_msgs/msg/Twist | 速度制御コマンド |
| /odom | nav_msgs/msg/Odometry | 走行距離データ |
| /scan | sensor_msgs/msg/LaserScan | レーザーレーダーデータ |
| /camera/image_raw | sensor_msgs/msg/Image | 元の画像データ |
1.2.3 サービス(Services)
サービスはクライアント/サーバー(Client/Server)モデルを使用したノード間の同期通信のメカニズムです。
| 機能 | 説明 |
|---|---|
| リクエスト/レスポンス | クライアントがリクエストを送信し、レスポンスを待つ |
| 同期パターン | 明確な完了結果が必要な場合に有用 |
| 一対一インタラクション | 通常 1 つのクライアントが 1 つのサービスエンドポイントと通信 |
| 短いタスクに最適 | 長時間実行されるジョブや継続的フィードバックには理想的でない |
1.2.4 アクション(Actions)
アクションは長期割り当てを処理するために使用される通信メカニズムで、タスクのフィードバックとキャンセルをサポートします。
| ストリーム | 用途 |
|---|---|
| Goal | 実行するタスクを記述 |
| Feedback | タスクが実行されている間に進行状況を報告 |
| Result | タスクが終了したときに最終結果を返す |
1.2.5 パラメータ(Parameters)
パラメータはノードの構成値で、ノードの起動時に設定するか、実行中に動的に変更できます。
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)
| ライブラリ | 言語 | 典型的な用途 |
|---|---|---|
rclcpp | C++ | 高性能本番ノード |
rclpy | Python | 高速プロトタイピングとスクリプト |
rclc | C | Micro-ROS およびリソース制約のあるシステム |
rcljava | Java | JVM ベースの ROS 2 統合 |
rclnodejs | JavaScript / Node.js | Web およびツール統合 |
// 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 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_cpp | CycloneDDS | オープンソース | デフォルト選択、軽量効率的 |
| rmw_fastrtps_cpp | FastDDS | オープンソース | 機能豊富、高性能 |
| rmw_connext_cpp | RTI Connext | 商用 | 産業レベルのサポート、最も包括的 |
1.4 ROS 1 と ROS 2 の主な違い
1.4.2 詳細比較表
| 比較ディメンション | ROS 1 | ROS 2 |
|---|---|---|
| 通信中間体 | TCP/UDP カスタムプロトコル | DDS 標準プロトコル |
| 発見メカニズム | ROS Master(中央集権化) | DDS 発見(分散化) |
| ビルドシステム | Catkin | Colcon / Ament |
| Python バージョン | Python 2/3 | Python 3 のみ |
| サポートされるオペレーティングシステム | 主に Linux | Linux / Windows / macOS / RTOS |
| リアルタイムサポート | リアルタイム保証なし | ハードリアルタイムをサポート |
| 複数のロボット通信 | 追加の構成が必要 | ネイティブサポート(ROS_DOMAIN_ID) |
| セキュリティ | 暗号化や認証なし | 暗号化、認証、アクセス制御をサポート |
| リリース | Noetic(最終バージョン) | Humble、Iron、Jazzy... |
1.5 ROS 2 リリース
1.5.1 バージョン履歴
| バージョン名 | リリース時間 | サポートシステム | サポート状況 | 終了時間 |
|---|---|---|---|---|
| Ardent | 2017.12 | Ubuntu 16.04 | 終了 | 2019.04 |
| Bouncy | 2018.06 | Ubuntu 16.04/18.04 | 終了 | 2019.09 |
| Crystal | 2018.12 | Ubuntu 16.04/18.04 | 終了 | 2020.12 |
| Dashing | 2019.05 | Ubuntu 16.04/18.04 | 終了 | 2021.05 |
| Eloquent | 2019.11 | Ubuntu 18.04 | 終了 | 2021.11 |
| Foxy | 2020.06 | Ubuntu 18.04/20.04 | 終了 | 2023.05 |
| Galactic | 2021.05 | Ubuntu 20.04 | 終了 | 2022.11 |
| Humble | 2022.05 | Ubuntu 22.04 | LTS | 2027.05 |
| Iron | 2023.05 | Ubuntu 22.04 | 終了 | 2024.11 |
| Jazzy | 2024.05 | Ubuntu 24.04 | LTS | 2029.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 のインストール
# 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 codesudo snap install --classic codecode --version3.3 必要なプラグイン
3.3.1 ROS 2 コアプラグイン
| プラグイン名 | 発行者 | 用途 |
|---|---|---|
| ROS | Microsoft | ROS サポート |
| C/C++ | Microsoft | C++ 言語サポート |
| Python | Microsoft | Python 言語サポート |
| CMake Tools | Microsoft | CMake サポート |
# 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-tools3.4 ROS 2 ワークスペース設定
3.4.1 ROS 2 ワークスペースを開く
# Open the workspace
code ~/ros2_ws3.4.2 C/C++ スマートヒントを設定
{
"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
}cd ~/ros2_ws
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -s build/compile_commands.json3.4.4 Python 環境を構成
{
"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 ジョブ構成
{
"version": "2.0.0",
"tasks": [
{
"label": "colcon build",
"type": "shell",
"command": "colcon build --symlink-install",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}3.6 デバッグ設定
{
"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 のインストール
sudo apt install terminator3.11.1 開始
ショートカット Ctrl+Alt+T
3.12 Git の使用
sudo apt install gitgit 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 基本ワークスペースの作成
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
tree -L 24.3 Colcon コンパイルシステム
4.3.2 Colcon のインストール
sudo apt install -y python3-colcon-common-extensions
colcon --help4.3.3 Colcon の基本的な使い方
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 一般的なコンパイルオプション
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)
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
source ~/overlay_ws/install/setup.bash4.5 詳細な環境設定
source install/setup.bash
echo $ROS_DOMAIN_ID
echo $AMENT_PREFIX_PATH
echo $LD_LIBRARY_PATHecho "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc4.6 パッケージ管理
ros2 pkg list
ros2 pkg prefix <package_name>
find src -maxdepth 2 -name package.xml -exec dirname {} \;ros2 pkg xml <package_name>
ros2 pkg dependencies <package_name>
ros2 pkg list > packages_list.txt4.7 増分コンパイル
colcon build
colcon build --packages-select <modified_package>colcon build --packages-select <package_name> --cmake-force-configure
rm -rf build install log
colcon build4.8 テストと認証
colcon test
colcon test --packages-select <package_name>
colcon test-result --all
colcon test-result --verbose4.12 次のステップ
1.05 パッケージ - 機能パッケージの作成と管理を学ぶ
2.06 ノード - 最初のノードを準備
05 パッケージ
05 機能パッケージ(Packages)
5.1 機能パッケージの概要
5.1.1 機能パッケージとは
パッケージは、ROS 2 における組織コードの基本単位です。特定の機能のためのソースコード、構成ファイル、データファイル、構築スクリプト、ドキュメントが含まれています。
5.1.2 機能パッケージの命名規則
小文字、数字、アンダースコアのみ
文字で始まる必要があります
説明的な名前を推奨
ROS 2 予約名の使用を避ける
5.1.3 機能パッケージのタイプ
| タイプ | ビルドシステム | 主な言語 | 用途 |
|---|---|---|---|
| ament_cmake | CMake | C++ | C++ ノード、混合アイテム |
| ament_python | Setuptools | Python | 純粋な Python プロジェクト |
| ament_cmake_python | CMake + Python | 混合 | C++ と Python の混合アイテム |
5.2 機能パッケージの作成
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_pkgcd ~/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_pkg5.3 package.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><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)
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',
],
},
)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 パッケージのコンパイルとインストール
cd ~/ros2_ws
colcon build --packages-select my_cpp_pkg
colcon build --packages-select my_cpp_pkg --event-handlers console_direct+colcon build --packages-select pkg1 pkg2 pkg3
colcon build --packages-skip pkg_to_skipcolcon 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=ON5.7 依存関係への依存
ros2 pkg dependencies my_package
ros2 pkg dependencies my_package --all
ros2 pkg dependents my_package
ros2 pkg xml my_package