トピック通信とは
ROS 2において、トピック通信は最も一般的な通信方式の一つです。この方式は「パブリッシャ・サブスクライバモデル」に基づいており、あるノードがメッセージを送信(パブリッシュ)し、別のノードがそのメッセージを受信(サブスクライブ)します。
主な利用シーン
- センサー情報の共有(例:LiDARデータの配信)
- ロボット制御におけるリアルタイムデータのやり取り
- 複数ノード間での継続的な状態更新
トピック通信の特徴
- 1対N、N対1、N対Nの通信が可能
- サブスクライバが存在しない場合、メッセージは破棄される
- 頻繁に更新されるデータに最適(論理処理が少ない)
トピック通信の構成要素
- パブリッシャ:メッセージを送信するノード
- サブスクライバ:メッセージを受信するノード
- メッセージ型:送受信されるデータの形式
実装手順の流れ
- C++またはPythonによるノード作成
- パッケージ構成の設定
- ワークスペースの構築とコンパイル
- 通信の実行と確認
ワークスペースの準備
ROS 2では、プロジェクト全体を管理するためのワークスペースを作成します。基本的なコマンドは以下の通りです:
# ワークスペース作成
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
ビルド後、build、install、logディレクトリが自動生成されます。
カスタムインターフェースの準備
独自のメッセージ形式を使用する場合は、専用のインターフェースパッケージを作成します。
# インターフェースパッケージ作成
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake custom_interfaces
トピック通信用パッケージの作成
次に、トピック通信を実装するためのパッケージを生成します。
ros2 pkg create topic_demo \
--build-type ament_cmake \
--dependencies rclcpp std_msgs custom_interfaces
このコマンドで作成されたパッケージは以下の依存関係を持ちます:
rclcpp:ROS 2 C++クライアントライブラリstd_msgs:標準メッセージ型custom_interfaces:独自メッセージ定義