Main Content

ROS 入門

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

Robot Operating System (ROS) は、ロボット システムのさまざまな部分が相互に検出し、これらの間でデータを送受信できるようにする通信インターフェイスです。MATLAB® は、ROS 対応の物理的ロボット、または Gazebo® などのロボット シミュレーターとデータを交換できる関数のライブラリで ROS をサポートします。

ROS の用語

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

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

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

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

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

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

ROS ネットワークの初期化

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

rosinit
Launching ROS Core...
.....Done in 5.7786 seconds.
Initializing ROS master on http://172.21.16.85:51063.
Initializing global node /matlab_global_node_13423 with NodeURI http://ah-avijayar:52604/ and MasterURI http://localhost:51063.

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

rosnode list
/matlab_global_node_13423

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

exampleHelperROSCreateSampleNetwork

再度 rosnode list を使用して、3 つの新しいノード (node_1node_2 および node_3) を表示します。

rosnode list
/matlab_global_node_13423
/node_1
/node_2
/node_3

ROS ネットワークの現在の状態は次の図のようになります。MATLAB グローバル ノードは、現時点ではパブリッシャー、サブスクライバーまたはサービスをもたないため、切断されています。

トピック

rostopic list を使用して、ROS ネットワーク内の使用可能なトピックを表示します。アクティブなトピックには、/pose/rosout/scan/tf の 4 つがあります。既定のトピック (rosouttf) は ROS ネットワーク内に常に存在します。他の 2 つのトピックは、サンプル ネットワークの一部として作成されました。

rostopic list
/pose  
/rosout
/scan  
/tf    

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

rostopic info /pose
Type: geometry_msgs/Twist
 
Publishers:
* /node_1 (http://ah-avijayar:52609/)
 
Subscribers:
* /node_2 (http://ah-avijayar:52614/)

rosnode info <nodename> を使用して、特定のノードに関する情報を取得します。以下のコマンドは、node_1/pose/rosout および /tf トピックにパブリッシュし、/scan トピックをサブスクライブし、/node_1/get_loggers および /node_1/set_logger_level のサービスを提供することを示します。既定のログ サービス (get_loggers および set_logger_level) は、ROS ネットワークで作成されたすべてのノードによって提供されています。

rosnode info /node_1
Node: [/node_1]
URI: [http://ah-avijayar:52609/]
 
Publications (3 Active Topics): 
 * /pose
 * /rosout
 * /tf
 
Subscriptions (1 Active Topics): 
 * /scan
 
Services (2 Active): 
 * /node_1/get_loggers
 * /node_1/set_logger_level

サービス

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

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

rosservice list
/add
/matlab_global_node_13423/get_loggers
/matlab_global_node_13423/set_logger_level
/node_1/get_loggers
/node_1/set_logger_level
/node_2/get_loggers
/node_2/set_logger_level
/node_3/get_loggers
/node_3/set_logger_level
/reply

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

rosservice info /add
Node: /node_3
URI: rosrpc://ah-avijayar:52618
Type: roscpp_tutorials/TwoInts
Args: MessageType A B

メッセージ

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

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

rostopic type /pose
geometry_msgs/Twist

rosmsg show <messagetype> を使用して、メッセージ タイプのプロパティを表示します。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. 
% It is only meant to represent a direction. Therefore, it does not
% make sense to apply a translation to it (e.g., when applying a 
% generic rigid transformation to a Vector3, tf2 will only apply the
% rotation). If you want your data to be translatable too, use the
% geometry_msgs/Point message instead.

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_13423 with NodeURI http://ah-avijayar:52604/ and MasterURI http://localhost:51063.
Shutting down ROS master on http://172.21.16.85:51063.

次のステップ