macからVmware fusionでポートフォワーディングしてUbuntu上のroscoreにアクセスする

(追記:2021/8/6)もっと簡単な方法があった。


VMware fusionのNetwork Adapterを選択肢、Bridged Networking>Autodetectを選択する。
f:id:seinzumtode:20210806230929p:plain
f:id:seinzumtode:20210806230911p:plain
そうすると、Macと同じLAN内にUbuntuが出現する。
今回はMac(192.168.1.252)、Ubuntu 20.04(192.168.1.246)
f:id:seinzumtode:20210806231157p:plain
普通にアドレスバーにUbuntuのURLを入れれば良い。
f:id:seinzumtode:20210806231251p:plain
Ubuntu上で特に環境変数を設定する必要はなかった(ROS_MASTER_URIなど)。
Android上のROSからもアクセスすることができた。Yeah!

MATLAB/SimulinkのROS toolboxを入れてみたが、roscoreが動いてないといけない。
ROSをMacで動かすのがめんどくさそうな印象があったので、VMUbuntuでroscoreを動かすことにする。
officeforest.org
/Library/Preferences/VMware Fusion/vmnet8/nat.conf

[incomingtcp]
# Use these with care - anyone can enter into your VM through these...
# The format and example are as follows:
#<external port number> = <VM's IP address>:<VM's port number>
#8080 = 172.16.3.128:80
11311 = 192.168.87.129:11311

VM's IPはUbuntuIPアドレスUbuntuに入ってifconfigで確認したら192.168.87.129だった。 
上記ファイルを編集したら、VM Networkを再起動する(https://apple.stackexchange.com/a/80343)。

sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop; sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start

Macからhttp://localhost:11311にアクセスしたらROS coreのレスポンス(GETアクセス不可)というメッセージが見える。
f:id:seinzumtode:20200217201003p:plain
UbuntuのROS_MASTER_URIとROS_HOSTNAMEも変更しておく
~/.bashrc

export ROS_MASTER_URI=http://192.168.87.129:11311
export ROS_HOSTNAME=192.168.87.129

上記の設定を読み込んだあと、roscoreをUbuntuで起動する。

そのあとMac上のMatlabで、rosを起動する。
https://www.mathworks.com/help/ros/ug/connect-to-a-ros-network.html

>> rosinit('192.168.87.129')

これでUbuntu上のROSマスターhttp://192.168.87.129:11311を見に行くようになる。

Matlab/Simulinkでデモを実行してみる。
https://www.mathworks.com/help/ros/ug/get-started-with-ros-in-simulink.html

>> open_system('robotROSGetStartedExample');

こんなのがでてきた
f:id:seinzumtode:20200216233842p:plain
上記ブロックを実行中にrqt_graphを使ってトピックを可視化すると、ちゃんとトピックが表示された。Cool.
f:id:seinzumtode:20200216234139p:plain
座標値をコンソールに表示してみる。

$ rostopic echo /location

してSimuinkを実行すると、座標値がコンソールに表示された。