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_1
、node_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 つがあります。既定のトピック (rosout
、tf
) は 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
メッセージ タイプには、Linear
と Angular
の 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.