前回はRaspberry Pi 3B+でUbuntu Mate 18.04を起動してROSをインストールする方法を解説しました。
今回はRaspberry Pi 3B+のUbuntu Mate 18.04で実行したROSノード(プログラム)とVMware Workstation PlayerのUbuntu 18.04で実行したROSノードをトピック通信する方法を説明します。
<Raspberry PiへのUbuntuのインストールとROSのインストール>

1. 前提条件

・PCとRaspberry Piが同一ネットワークに接続されていること
・PCにVMware Workstation Playerがインストールされており、仮想マシンとしてUbuntu 18.04がインストールされていること
 ※VMware Workstation PlayerとUbuntu 18.04のインストール方法は以下を参照ください。
  VMwareでUbuntuを仮想化:https://rtc-fukushima.jp/technical/5025/
・Ubuntu 18.04にROSがインストールされていること

2. VMware Workstation Playerのネットワークアダプタの設定をブリッジに変更

VMware Workstation Playerのネットワークの設定を変更します。
基本的にVMware Workstation Playerのネットワークアダプタの設定はNATに設定されています。
NATの状態では、ホストと仮想マシンでIPアドレスのセグメントが異なります。
すると、Raspberry PiのIPアドレスも異なりトピック通信ができなくなります。
例)
ホスト :192.168.21.101
仮想マシン :192.168.13.102
Raspberry Pi :192.168.21.102
仮想マシンとRaspberry Piで通信を行いたいのでIPアドレスのセグメントを合わせる必要があります。
そのため、ネットワークアダプタの設定をブリッジに変更します。
変更したい仮想マシンの[仮想マシン設定の編集]から、「ハードウェア設定」のタブの「ネットワークアダプタ」を選択してください。
その後、ネットワーク接続の[ブリッジ]を選択して、最後にOKボタンを押してください。 
これでホストと仮想マシンのIPアドレスのセグメントは同じになり、トピック通信ができるようになります。


図1 仮想マシンのネットワークの設定

3. roscore(master)の設定

仮想マシンとRaspberry PiのIPアドレスのセグメントを合わせましたので、次はROSに設定を追加します。
ROSのノードを実行するにはroscoreを起動する必要があります。roscoreは実行したノードを管理する役割を持ちます。
通常roscoreは起動された端末内のノードを管理しますが、他の端末と通信する場合は個別にroscoreを起動するのではなく、一つの端末で起動されたroscoreと通信をするように設定します。
その方法としてROS_MASTER_URLとROS_IPの設定を追加します。

・ROS_MASTER_URL
masterがアクセスするIPアドレスの設定になります。起動するmasterのIPアドレスを設定します。

・ROS_IP
自分のIPアドレスを設定します。


図2 roscoreの通信

 
例えば以下の様にIPアドレスが振られていたとします。
・PC(Ubuntu)のIPアドレス:192.168.22.110
・Raspberry PiのIPアドレス:192.168.22.111
そしてPCとRaspberry Pi間でROSのサンプルであるbeginner_tutorialsのtaker(ノード)とlistener(ノード)を通信する場合は以下の様に起動します。
・PC(Ubuntu)
 -ターミナル1

export ROS_MASTER_URI=http:// 192.168.22.110:11311
export ROS_IP=192.168.22.110
roscore

 -ターミナル2

export ROS_MASTER_URI=http:// 192.168.22.110:11311
export ROS_IP=192.168.22.110
rosrun beginner_tutorials listener 

・Raspberry Pi
 -ターミナル1

export ROS_MASTER_URI=http:// 192.168.22.110:11311
export ROS_IP=192.168.22.111
rosrun beginner_tutorials talker

これでRaspberry Pi 3B+のUbuntu Mate 18.04で実行したROSノードとVMware Workstation PlayerのUbuntu 18.04で実行したROSノードがトピック通信できるようになります。
通常ではターミナルを起動する毎にROS_MASTER_URLとROS_IPが必要になります。
ターミナルを起動する毎に自動で設定されるようにするには、.bashrcにROS_MASTER_URLとROS_IPの設定を追加してください。
 
 
いかがでしたでしょうか。
仮想環境から他端末と通信をするにはいろいろ手順が必要なので記載してみました。皆様のお役に立てばと思います。