Main Content

ROS 2 入門

この例では、MATLAB 内で ROS 2 を設定し、ROS 2 ネットワークおよび ROS 2 メッセージに関する情報を取得する方法について説明します。

Robot Operating System 2 (ROS 2) は ROS の 2 番目のバージョンであり、ロボット システムのさまざまな部分によるデータの検出や送受信を可能にする通信インターフェイスです。ROS 2 に対する MATLAB® のサポートは、ROS 2 対応の物理的ロボット、または Gazebo® などのロボット シミュレーターとデータを交換できる関数のライブラリです。ROS 2 は検出、シリアル化、転送などの機能を備えたエンドツーエンドのミドルウェアである Data Distribution Service (DDS) を基に構築されています。これらの機能は "分散検出" などの ROS 2 の設計原則に沿ったものであり、転送の各種 "サービス品質" オプションを制御します。DDS は、UDP など信頼性の低いネットワーク プロトコル経由での通信を提供する Real Time Publish-Subscribe (RTPS) プロトコルを使用します。詳細については、RTPS を参照してください。

ROS の詳細については、ROS 入門を参照してください。

ROS 2 の用語

  • "ROS 2 ネットワーク" は、ROS 2 ネットワーク経由で通信するロボット システムのさまざまな部分 (プランナーやカメラ インターフェイスなど) で構成されます。ネットワークは複数のマシンに分散させることができます。

  • "ROS 2 ノード" は、関連する ROS 2 機能 (パブリッシャーとサブスクライバーなど) のコレクションを含むエンティティです。1 つの ROS 2 ネットワークに複数の ROS 2 ノードを含めることができます。

  • "パブリッシャー" および "サブスクライバー" は、データを処理する異なった種類の ROS 2 エンティティです。これらは "メッセージ" を使用してデータを交換します。

  • パブリッシャーが特定の "トピック" ("odometry" など) にメッセージを送信し、そのトピックのサブスクライバーがメッセージを受信します。複数のパブリッシャーとサブスクライバーを単一のトピックに関連付けることができます。

  • "ドメイン" は、ネットワークの物理的セグメンテーションです。"ドメイン ID" という一意の整数値によって識別されます。既定では、"ドメイン ID"0 です。

  • ROS 2 ネットワークの各ノードは、作成時に同じ "ドメイン ID" の他のノードのみに自身の存在をアドバタイズします。

  • "ROS 2" ネットワークは、Data Distribution Service (DDS) を基に構築されているため、分散ネットワーク全体で複数のノードを接続できます。詳細については、Switching Between ROS Middleware Implementationsを参照してください。

  • "RTPS" (Real Time publisher-subscriber) プロトコルは、信頼性の低いネットワーク条件でメッセージを送信する機能をもつ ROS 2 ネットワークを提供します。

  • ROS 2 では、さまざまな "サービス品質 (QoS)" ポリシーが提供されており、ノード間の通信を調整できます。詳細については、Manage Quality of Service Policies in ROS 2を参照してください。

詳細については、Robot Operating System (ROS 2) および ROS 2 Web サイトの Concepts のセクションを参照してください。

ROS 2 ネットワークの初期化

ROS とは異なり、ROS 2 には MATLAB での初期化は不要です。ノードを作成すると、ROS 2 ネットワークは自動的に起動します。

ros2node を使用してノードを作成します。

test1 = ros2node("/test1")
test1 = 
  ros2node with properties:

    Name: '/test1'
      ID: 0

ros2 node list を使用して ROS 2 ネットワーク内のすべてのノードを確認します。

ros2 node list
/test1

clear を使用して ROS 2 ネットワーク内のノードをシャットダウンします。

clear test1

exampleHelperROS2CreateSampleNetwork を使用して、ROS ネットワークに、サンプルのパブリッシャーとサブスクライバーをもつ 3 つの追加ノードを作成します。

exampleHelperROS2CreateSampleNetwork

ros2 node list を再度使用して、新しいノードを確認します。

ros2 node list
/node_1
/node_2
/node_3

これは、サンプル ノードの作成後の ROS 2 ネットワークを視覚的に表現したものです。この図を参照して、例の残りの部分で ROS 2 ネットワークを確認してください。

トピックとサービス品質ポリシー

コマンド ros2 topic list を実行して、ROS 2 ネットワーク内の使用可能なトピックを確認します。このコマンドでは、/pose/parameter_events,/scan の 3 つのアクティブなトピックが返されます。トピック /parameter_events は、ROS 2 ネットワークに常に存在するグローバル トピックです。ノードは /paramater_events トピックを使用して、ネットワーク内でパラメーターを監視または変更します。/scan トピックと /pose トピックは、サンプル ネットワークの一部として作成したものです。

ros2 topic list
/parameter_events
/pose
/rosout
/scan

トピックは、それぞれ 1 つの "メッセージ タイプ" に関連付けられています。コマンド ros2 topic list -t を実行して、各トピックのメッセージ タイプを確認します。

ros2 topic list -t
            Topic                       MessageType           
    _____________________    _________________________________

    {'/parameter_events'}    {'rcl_interfaces/ParameterEvent'}
    {'/pose'            }    {'geometry_msgs/Twist'          }
    {'/rosout'          }    {'rcl_interfaces/Log'           }
    {'/scan'            }    {'sensor_msgs/LaserScan'        }

サービス品質 (QoS) ポリシー オプションでは、パブリッシャーとサブスクライバーがメッセージを処理して交換する方法を変更します。

1. History および Depth QoS ポリシーを使用して、処理キューへのメッセージの配置方法に基づいて通信オブジェクトの動作を決定します。History は次のオプションのいずれかとして指定します。

  • "keeplast" — メッセージを破棄し、最新の情報のみを保持します。

  • "keepall" — 処理されるまですべてのメッセージをキューで受信したまま保持します。

2. Reliability QoS ポリシーを使用して、メッセージがサブスクライバーに確実に配信されるようにします。Reliability は次のオプションのいずれかとして指定します。

  • "reliable" — サブスクライバーがメッセージの受信を確認するまで、パブリッシャーがサブスクライバーにメッセージを確実に送信し続けるようにします。

  • "besteffort" — パブリッシャーがメッセージを 1 回だけ送信できるようにします。

3. Depth 入力を指定した Durability QoS ポリシーを使用して、遅れて参加した接続のためのメッセージの持続性を制御します。Durability は次のオプションのいずれかとして指定します。

  • "transientlocal" — パブリッシャーが最初にメッセージを送信した後にサブスクライバーがネットワークに参加した場合、パブリッシャーはサブスクライバーに持続メッセージを送信します。

  • "volatile" — パブリッシャーは、メッセージの送信後にそのメッセージを保持しません。サブスクライバーはパブリッシャーに持続メッセージを要求しません。

メッセージ

パブリッシャーとサブスクライバーは、ROS 2 メッセージを使用して情報を交換します。ROS 2 メッセージにはそれぞれ、メッセージ内の情報のデータ型とレイアウトを定義するメッセージ タイプが関連付けられています。詳細については、基本的な ROS 2 メッセージの操作を参照してください。

ros2 msg show を使用して、メッセージ タイプのプロパティを表示します。geometry_msgs/Twist メッセージ タイプには、LinearAngular の 2 つのプロパティがあります。各プロパティは geometry_msgs/Vector3 タイプのメッセージであり、これには double 型の 3 つのプロパティがあります。

ros2 msg show geometry_msgs/Twist
# This expresses velocity in free space broken into its linear and angular parts.

Vector3  linear
Vector3  angular
ros2 msg show geometry_msgs/Vector3
# This represents a vector in free space.

# This is semantically different than a point.
# A vector is always anchored at the origin.
# When a transform is applied to a vector, only the rotational component is applied.

float64 x
float64 y
float64 z

MATLAB で使用可能なメッセージ タイプの完全なリストを確認するには、 ros2 msg list を使用します。

ROS 2 ネットワークからの切断

exampleHelperROS2ShutDownSampleNetwork を使用して、サンプル ノード、パブリッシャー、およびサブスクライバーを ROS 2 ネットワークから削除します。独自のノードを削除するには、ノード、パブリッシャー、サブスクライバーのいずれかのオブジェクトを指定して、clear を使用します。

exampleHelperROS2ShutDownSampleNetwork

DDS と RMW 実装

MATLAB® および Simulink® で ROS 2 を操作する場合、Data Distribution Service (DDS) を使用するために RMW 実装を切り替えることができます。必要な RMW 実装を構成するには、以下の手順に従います。

1. MATLAB ツールストリップの [ホーム] タブの [環境] セクションで、[基本設定] を開きます。

2. [ROS Toolbox 基本設定] ダイアログ ボックスで Python™ 環境を構成し、[ROS ミドルウェア (RMW) 実装] ドロップダウン リストから実装を選択します。既定の実装は rmw_fastrtps_cpp です。

3. [カスタム RMW 実装を構成しそれに切り替える] をクリックしてカスタム RMW 実装に切り替えます。[ROS ミドルウェア構成] ダイアログ ボックスが起動します。

4. カスタム RMW 実装パッケージをインストールしてビルドし、選択したカスタム RMW 実装をもつ ROS 2 ノードの作成を検証します。

次のステップ