このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ROS ネットワークへの接続
ROS ネットワークは、1 つの "ROS マスター" と複数の "ROS ノード" で構成されます。ROS マスターは、すべてのアクティブな ROS エンティティを追跡することにより、ROS ネットワーク内の通信を円滑にします。各ノードが残りのネットワークと通信できるようになるには、ROS マスターに登録する必要があります。MATLAB® で ROS マスターを起動することもできますが、マスターは MATLAB 以外 (別のコンピューター上など) から起動することもできます。
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
Launching ROS Core... Done in 1.0269 seconds. Initializing ROS master on http://172.30.102.182:60521. Initializing global node /matlab_global_node_37410 with NodeURI http://dcc797901glnxa64:35835/ and MasterURI http://localhost:60521.
この時点で、MATLAB の外部の ROS ノードが ROS ネットワークに参加できます。MATLAB ホスト コンピューターのホスト名または IP アドレスを使用して、MATLAB 内の ROS マスターに接続できます。
ROS マスターおよびグローバル ノードをシャットダウンするには、rosshutdown
を呼び出します。
rosshutdown
Shutting down global node /matlab_global_node_37410 with NodeURI http://dcc797901glnxa64:35835/ and MasterURI http://localhost:60521. Shutting down ROS master on http://172.30.102.182:60521.
外部 ROS マスターへの接続
rosinit
コマンドを使用して外部の ROS マスター (ロボットまたはバーチャル マシンで実行中のものなど) に接続することもできます。マスターのアドレスの指定方法は 2 つあり、マスターを実行しているコンピューターの IP アドレスまたはホスト名を使用します。
rosinit
の各呼び出しの後は、別の構文で rosinit
を呼び出す前にrosshutdown
を呼び出さなければなりません。簡潔にするために、これらの例ではこのような rosshutdown
の呼び出しを省略します。
外部 ROS マスターで、'master_host'
はホスト名の例で、'192.168.1.1'
は IP アドレスの例です。これらのアドレスは、ネットワーク内の外部マスターの場所に従って調整してください。指定したアドレスにマスターが見つからない場合、これらのコマンドは失敗します。
rosinit('192.168.1.1') rosinit('master_host')
rosinit
へのいずれの呼び出しでも、マスターがポート 11311 (標準の ROS マスター ポート) でネットワーク接続を受け入れると仮定します。マスターが別のポートで実行されている場合は、それを 2 番目の引数として指定できます。ホスト名 master_host
、ポート 12000 で実行している ROS マスターに接続するには、次のコマンドを使用します。
rosinit('master_host',12000)
マスターの完全な Uniform Resource Identifier (URI) がわかっている場合は、グローバル ノードを作成し、次の構文を使用して、このマスターに接続できます。
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 アドレスとして使用されます。この自動検出が失敗する場合は、rosinit
の呼び出しで NodeHost
の名前と値のペアを使用することにより、IP アドレスまたはホスト名を明示的に指定できます。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
<nodename>
を使用して、アドバタイズしているアドレスを確認できます。登録されているすべてのノードの名前を確認するには、rosnode list
を呼び出します。
ROS 環境変数
高度な使用例では、ROS マスターのアドレスおよびアドバタイズされたノード アドレスを、標準の ROS 環境変数を使用して指定する場合があります。大半の使用例では、これまでの節で説明した構文で十分です。
rosinit
に引数が指定されていない場合、関数は標準の ROS 環境変数の値もチェックします。これらの変数は、ROS_MASTER_URI
、ROS_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_HOSTNAME
と ROS_IP
の両方を設定する必要はありません。両方を設定した場合は、ROS_HOSTNAME
が優先されます。
接続の検証
ROS 接続を正常に機能させるには、すべてのノードがマスターと通信でき、相互にも通信できることを確認しなければなりません。個々のノードは、サブスクライバー、パブリッシャーおよびサービスを登録するために、マスターと通信しなければなりません。また、データを送受信するために、ノード間でも通信できなければなりません。ROS ネットワークが正しく設定されていない場合は、データを送信できても受信できない (またはその逆) 可能性があります。
次の図は、1 つの ROS マスターとそのマスターに自身を登録している 2 つの異なるノードを備えた ROS ネットワークを示しています。各ノードはマスターに接続し、ROS ネットワーク内のもう一方のノードのアドバタイズされたアドレスを見つけます。各ノードがもう一方のノードのアドレスを認識したら、マスターを介さずにデータ交換を確立できます。
次のステップ
ROS のパブリッシャーおよびサブスクライバーとのデータ交換を参照して、ROS 内のパブリッシャーとサブスクライバーを調べます。