ROS 2トピック通信の概要と実装手順

トピック通信とは

ROS 2において、トピック通信は最も一般的な通信方式の一つです。この方式は「パブリッシャ・サブスクライバモデル」に基づいており、あるノードがメッセージを送信(パブリッシュ)し、別のノードがそのメッセージを受信(サブスクライブ)します。

主な利用シーン

  • センサー情報の共有(例:LiDARデータの配信)
  • ロボット制御におけるリアルタイムデータのやり取り
  • 複数ノード間での継続的な状態更新

トピック通信の特徴

  • 1対N、N対1、N対Nの通信が可能
  • サブスクライバが存在しない場合、メッセージは破棄される
  • 頻繁に更新されるデータに最適(論理処理が少ない)

トピック通信の構成要素

  1. パブリッシャ:メッセージを送信するノード
  2. サブスクライバ:メッセージを受信するノード
  3. メッセージ型:送受信されるデータの形式

実装手順の流れ

  1. C++またはPythonによるノード作成
  2. パッケージ構成の設定
  3. ワークスペースの構築とコンパイル
  4. 通信の実行と確認

ワークスペースの準備

ROS 2では、プロジェクト全体を管理するためのワークスペースを作成します。基本的なコマンドは以下の通りです:


# ワークスペース作成
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build

ビルド後、buildinstalllogディレクトリが自動生成されます。

カスタムインターフェースの準備

独自のメッセージ形式を使用する場合は、専用のインターフェースパッケージを作成します。


# インターフェースパッケージ作成
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:独自メッセージ定義

タグ: ros2 C++ トピック通信 パブリッシャ サブスクライバ

7月7日 01:45 投稿