Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ROS 2 入門

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

この例では、以下を行う方法を説明します。

  • MATLAB 内での ROS 2 の設定

  • ROS 2 ネットワーク内の機能に関する情報の取得

  • ROS 2 メッセージに関する情報の取得

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 Standard (DDS) を基に構築されているため、分散ネットワーク全体で複数のノードを接続することができます。

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

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

詳細については、Robot Operating System2 (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 を再度使用して、3 つの新しいノード (node_1node_2node_3) があることを確認します。

ros2 node list
/node_1
/node_2
/node_3

ROS 2 ネットワークの現在の状態を視覚的に表現すると、以下のようになります。この例の残りの部分でこのサンプル ネットワークを確認する際には、この図を参照してください。

トピック

ros2 topic list を使用して、ROS 2 ネットワーク内の使用可能なトピックを確認します。/pose/parameter_events/scan の 3 つのアクティブなトピックがあることを確認します。トピック /parameter_events は、ROS 2 ネットワークに常に存在するグローバル トピックです。ネットワーク内でパラメーターを監視または変更するために、ノードによって使用されます。他の 2 つのトピック (/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'        }

メッセージ

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

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

次のステップ