最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ROS 入門

Robot Operating System (ROS) は、ロボット システムのさまざまな部分でのデータの検出、送信および受信を可能にする通信インターフェイスです。ROS 向けの MATLAB® サポートである関数のライブラリを使用すると、ROS 対応の物理的ロボット、または Gazebo® などのロボット シミュレーターとデータを交換できます。

この例では、次の手順を紹介します。

  • MATLAB での ROS の設定

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

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

ROS の用語

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

  • "ROS マスター" は、ROS ネットワークのさまざまな部分の取りまとめを行います。これは、マスターを実行しているマシンのホスト名または IP アドレスを指定する "マスター URI" (Uniform Resource Identifier) によって識別されます。

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

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

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

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

ROS ネットワークの初期化

rosinit を使用して ROS を初期化します。既定では、rosinit は MATLAB 内で ROS マスターを作成し、マスターに接続されている "グローバル ノード" を起動します。"グローバル ノード" は、他の ROS 関数で自動的に使用されます。

rosinit
Initializing ROS master on http://bat6310glnxa64:41769/.
Initializing global node /matlab_global_node_68278 with NodeURI http://bat6310glnxa64:45341/

rosnode list を使用して、ROS ネットワーク内のすべてのノードを表示します。使用可能なノードは、rosinit によって作成されたグローバル ノードのみであることに注目してください。

rosnode list
/matlab_global_node_68278

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

exampleHelperROSCreateSampleNetwork

再度 rosnode list を使用して、3 つの新しいノード (node_1node_2 および node_3) があることを確認します。

rosnode list
/matlab_global_node_68278
/node_1
/node_2
/node_3

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

MATLAB グローバル ノードは、現時点ではパブリッシャー、サブスクライバーまたはサービスをもたないため、切断されています。

トピック

rostopic list を使用して、ROS ネットワーク内の使用可能なトピックを表示します。/pose/rosout および /scan の 3 つのアクティブなトピックがあることを確認します。rosout は、ROS ネットワーク内に常に存在する既定のログ トピックです。他の 2 つのトピックは、サンプル ネットワークの一部として作成されました。

rostopic list
/pose  
/rosout
/scan  

rostopic info を使用して、特定のトピックに関する特定の情報を取得します。以下のコマンドは、/node_1/pose トピックにパブリッシュ (メッセージを送信) し、/node_2 がそのトピックをサブスクライブ (そのトピックからメッセージを受信) することを示しています (詳細についてはROS のパブリッシャーおよびサブスクライバーとのデータ交換を参照)。

rostopic info /pose
Type: geometry_msgs/Twist
 
Publishers:
* /node_1 (http://bat6310glnxa64:35895/)
 
Subscribers:
* /node_2 (http://bat6310glnxa64:41369/)

rosnode info を使用して、特定のノードに関する情報を取得します。以下のコマンドは、node_1/pose トピックおよび /rosout トピックにパブリッシュし、/scan トピックにサブスクライブすることを示しています。

rosnode info /node_1
Node: [/node_1]
URI: [http://bat6310glnxa64:35895/]
 
Publications (2 Active Topics): 
 * /pose
 * /rosout
 
Subscriptions (1 Active Topics): 
 * /scan
 
Services (0 Active): 

サービス

ROS サービスは、ROS ネットワーク全体で "プロシージャ呼び出し" のためのメカニズムを提供します。"サービス クライアント" が "サービス サーバー" に対して要求メッセージを送信し、サービス サーバーが要求に含まれる情報を処理して応答メッセージを返します (ROS サービスの呼び出しと提供を参照)。

rosservice list を使用して、ROS ネットワーク内で使用可能なすべてのサービス サーバーを表示します。以下のコマンドは、2 つのサービス (/add および /reply) が使用可能であることを示しています。

rosservice list
/add
/reply

rosservice info を使用して、特定のサービスに関する情報を取得します。

rosservice info /add
Node: /node_3
URI: rosrpc://bat6310glnxa64:46795/
Type: roscpp_tutorials/TwoInts
Args: A B

メッセージ

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

rostopic type を使用して、トピックで使用されるメッセージ タイプを表示します。以下のコマンドは、/pose トピックが geometry_msgs/Twist タイプのメッセージを使用することを示しています。

rostopic type /pose
geometry_msgs/Twist

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

rosmsg show geometry_msgs/Twist
% This expresses velocity in free space broken into its Linear and Angular parts.
Vector3  Linear
Vector3  Angular
rosmsg show geometry_msgs/Vector3
% This represents a vector in free space. 

double X
double Y
double Z

rosmsg list を使用して、MATLAB で使用可能なメッセージ タイプの完全なリストを表示します。

ROS ネットワークのシャットダウン

exampleHelperROSShutDownSampleNetwork を使用して、サンプル ノード、パブリッシャーおよびサブスクライバーを ROS ネットワークから削除します。このコマンドは、exampleHelperROSStartSampleNetwork を使用してサンプル ネットワークを作成していた場合にのみ必要です。

exampleHelperROSShutDownSampleNetwork

rosshutdown を使用して、MATLAB で ROS ネットワークをシャットダウンします。これにより、rosinit で起動した ROS マスターがシャットダウンされ、グローバル ノードが削除されます。ROS ネットワークでの作業が完了したら、rosshutdown を使用することを推奨します。

rosshutdown
Shutting down global node /matlab_global_node_68278 with NodeURI http://bat6310glnxa64:45341/
Shutting down ROS master on http://bat6310glnxa64:41769/.

次のステップ