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

ROS ネットワークへの接続

ROS ネットワークは、1 つの "ROS マスター" と複数の "ROS ノード" で構成されます。ROS マスターは、すべてのアクティブな ROS エンティティを追跡することにより、ROS ネットワーク内の通信を円滑にします。各ノードが残りのネットワークと通信できるようになるには、ROS マスターに登録する必要があります。MATLAB® が ROS マスターを起動することもできますが、マスターは MATLAB 以外 (別のコンピューター上など) から起動することもできます。すべての ROS ノードがマスターに登録し、接続可能なネットワーク アドレスを宣言します。

ROS を操作する場合、通常は以下の手順に従います。

  • "ROS ネットワークに接続"。ROS ネットワークに接続するには、MATLAB で ROS マスターを作成するか、既存の ROS マスターに接続します。どちらの場合も、MATLAB は独自の ROS ノード (MATLAB "グローバル ノード") も作成し、マスターに登録します。関数 rosinit がこの処理を管理します。

  • "データを交換"。接続後、MATLAB は、パブリッシャー、サブスクライバーおよびサービスを介して他の ROS ノードとデータを交換します。

  • "ROS ネットワークから切断"。関数 rosshutdown を呼び出すと、MATLAB が ROS ネットワークから切断されます。

この例では、次の手順を説明します。

  • MATLAB での ROS マスターの作成

  • 外部 ROS マスターへの接続

必要条件: ROS 入門

MATLAB での ROS マスターの作成

  • MATLAB 内で ROS マスターを作成するには、引数を何も指定せずに rosinit を呼び出します。これによって作成される "グローバル ノード" を使用して、MATLAB は ROS ネットワーク内の他のノードと通信します。

rosinit
Initializing ROS master on http://bat800212glnxa64:35017/.
Initializing global node /matlab_global_node_41939 with NodeURI http://bat800212glnxa64:38347/

この時点で、MATLAB の外部の ROS ノードが ROS ネットワークに参加できます。MATLAB ホスト コンピューターのホスト名または IP アドレスを使用して、MATLAB 内の ROS マスターに接続できます。

ROS マスターおよびグローバル ノードをシャットダウンするには、rosshutdown を呼び出します。

rosshutdown
Shutting down global node /matlab_global_node_41939 with NodeURI http://bat800212glnxa64:38347/
Shutting down ROS master on http://bat800212glnxa64:35017/.

外部 ROS マスターへの接続

rosinit コマンドを使用して外部の ROS マスター (ロボットまたは仮想マシンで実行中のものなど) に接続することもできます。マスターのアドレスの指定方法は 2 つあり、マスターを実行しているコンピューターの IP アドレスまたはホスト名を使用します。

rosinit の各呼び出しの後は、rosshutdown を別の構文で呼び出す前に、rosinit を呼び出さなければなりません。簡潔にするために、こうした rosshutdown の呼び出しは、以降の節では省略します。

この例では、外部 ROS マスターのホスト名の例として master_host を、IP アドレスの例として 192.168.1.1 を使用します。これらのアドレスは、ネットワーク内の外部マスターの場所に従って調整してください。指定したアドレスでマスターが見つからない場合は以下のコマンドが失敗する点に注意してください。

rosinit('192.168.1.1')
rosinit('master_host')

rosinit へのどちらの呼び出しでも、マスターが端子 11311 (標準の ROS マスター端子) でネットワーク接続を受け入れると仮定します。

マスターが別の端子で実行されている場合は、それを 2 番目の引数として指定できます。ホスト名 master_host、端子 12000 で実行している ROS マスターに接続するには、次のコマンドを使用します。

rosinit('master_host', 12000)

マスターの完全な URI (Uniform Resource Identifier) がわかっている場合は、グローバル ノードを作成し、次の構文を使用して、このマスターに接続できます。

rosinit('http://192.168.1.1:12000')

ノード ホストの指定

場合によっては、コンピューターが複数のネットワークに接続され、複数の IP アドレスをもっていることがあります。例として次の図を参照してください。

左下のコンピューターは MATLAB を実行していて、2 つの異なるネットワークに接続されています。一方のサブネットでの IP アドレスは 73.195.120.50 で、もう一方での IP アドレスは 192.168.1.100 です。このコンピューターを、IP アドレス 192.168.1.1 の TurtleBot® コンピューター上の ROS マスターに接続するとします。マスターへの登録の一環として、MATLAB グローバル ノードでは、他の ROS ノードから接続可能な IP アドレスまたはホスト名を指定しなければなりません。TurtleBot 上のすべてのノードが、このアドレスを使用して MATLAB のグローバル ノードにデータを送信することになります。

マスターの IP アドレスで rosinit が呼び出されると、マスターとの接触に使用するネットワーク インターフェイスが検出され、それがグローバル ノードの IP アドレスとして使用されます。

この自動検出が失敗する場合は、 呼び出しで NodeHostrosinit の名前と値のペアを使用することにより、IP アドレスまたはホスト名を明示的に指定できます。rosinit の前述の呼び出し方法は、NodeHost の名前と値のペアを追加してもすべて引き続き使用できます。

次のコマンドでは、コンピューターの IP アドレスを ROS ネットワークに 192.168.1.100 としてアドバタイズすると仮定します。

rosinit('192.168.1.1', 'NodeHost', '192.168.1.100')
rosinit('http://192.168.1.1:11311', 'NodeHost', '192.168.1.100')
rosinit('master_host', 'NodeHost', '192.168.1.100')

ROS ネットワークにノードが登録されたら、コマンド rosnode info NODE を使用して、アドバタイズしているアドレスを確認できます。NODE は、ROS ネットワーク内のノードの名前です。登録されているすべてのノードの名前を確認するには、rosnode list を呼び出します。

ROS 環境変数

高度な使用例では、ROS マスターのアドレスおよびアドバタイズされたノード アドレスを、標準の ROS 環境変数を使用して指定する場合があります。大半の使用例では、これまでの節で説明した呼び出し構文で十分です。

rosinit に引数が指定されていない場合、関数は標準の ROS 環境変数の値もチェックします。これらの変数は、ROS_MASTER_URIROS_HOSTNAME および ROS_IP です。現在の値は、getenv コマンドを使用して確認できます。

getenv('ROS_MASTER_URI')
getenv('ROS_HOSTNAME')
getenv('ROS_IP')

これらの変数は、setenv コマンドを使用して設定できます。環境変数を設定した後、rosinit を引数なしで呼び出します。ROS マスターのアドレスは ROS_MASTER_URI によって指定され、グローバル ノードのアドバタイズされたアドレスは ROS_IP または ROS_HOSTNAME によって得られます。rosinit に追加の引数を指定した場合、その引数が環境変数内の値をオーバーライドします。

setenv('ROS_MASTER_URI','http://192.168.1.1:11311')
setenv('ROS_IP','192.168.1.100')
rosinit

ROS_HOSTNAMEROS_IP の両方を設定する必要はありません。両方を設定した場合は、ROS_HOSTNAME が優先されます。

接続の検証

ROS 接続を正常に機能させるには、すべてのノードが相互に、またマスターと通信できることを確認しなければなりません。個々のノードは、サブスクライバー、パブリッシャーおよびサービスを登録するために、マスターと通信しなければなりません。また、データを送受信するために、ノード間でも通信できなければなりません。

通信はこのように機能するため、ROS ネットワークが正常に設定されていない場合は、データを送信はできても受信できない (またはその逆) 可能性があります。

ここに、ROS ネットワークの通信構造の図を示します。ROS マスターが 1 つと、そのマスターに自身を登録している 2 つの異なるノードがあります。各ノードはマスターに接続し、ROS ネットワーク内のもう一方のノードのアドバタイズされたアドレスを見つけます。各ノードがもう一方のノードのアドレスを認識したら、マスターを介さずにデータ交換を確立できます。

次のステップ