wifiの代わりにVPNのHusarnetを設定した。このおかげで、ホストPCとjetson nano遠隔通信がほぼどこでも行えるようになった。
OpenVPN、WireGuardとかSoftEther VPNでもいいけど、HusarnetがROSをターゲットにしててかなり相性がいい。
VPNネットワーク図
注意:HusarnetではROS MASTER側(roscoreを実行するデバイス側)からしか、データ送信できないので注意。
今までのネットワーク図
環境
ホストPC: ubuntu 20.04
Jetson Nano (JetPack 4.3)
目次
1. ホストPCとJetsonにHusarnetのインストール
2. ホストPCからjetsonにデータ送信
3. JetsonからホストPCにデータ送信
4. Husarnetの作成したネットワークをリセット
1. ホストPCとJetsonにHusarnetのインストール
Husarnetにサインインする。
月額いくらか決められる。今回は実験なので月額10ドルのコースにした。
サインインしたら、デバイスやPCにHusarnetをインストール。x86とかarmとかアーキテクチャに関係なく、このサイトの通りのコマンドで簡単にインストールできる。
Husarnetは個人のネットワークを作り、その中に対象デバイスを登録して通信する仕組み。
Husarnetのインストール
# Husarnetのインストール $ curl https://install.husarnet.com/install.sh| sudo bash # Husarnetの自分のネットワークにデバイスを登録 $ sudo husarnet websetup
ネットワークを作り、デバイスを登録する。
Husarnetではroscoreを実行する側からデータ送信できないので注意。
# デバイスでHusarnetのネットワーク初期化 # roscoreがうまく実行できない時の初期化コマンド export ROS_MASTER_URI=http://localhost:11311 export ROS_HOSTNAME=localhost
2. ホストPCからJetsonにデータ送信
ホストPCをROS MASTER側にして、Jetson nanoにデータを送信。
# ホストPCの設定 export ROS_MASTER_URI=http://192.168.10.111:11311 export ROS_IP=192.168.10.111 export ROS_HOSTNAME=192.168.10.111 export ROS_IPV6=on # Husarnetにネットワークを作成 & デバイスを登録 $ sudo husarnet websetup >>> #### Go to https://app.husarnet.com/husarnet/************************50eacb8a to manage your network from web browser. $ sudo husarnet join fc94:b01d:1803:8dd8:***********************************66i mydevice >>> #### [154127] joining... #### [156128] done.
hostcore
という名前のネットワークを作って、ホストPCを登録。
roscoreを実行するデバイスにはROS MASTER
にチェックを入れる。
# Jetson nanoの設定 export ROS_MASTER_URI=http://192.168.10.111:11311 export ROS_IP=192.168.10.102 export ROS_HOSTNAME=192.168.10.102 export ROS_IPV6=on
Jetson nanoも同じように登録。
$ sudo husarnet websetup $ sudo husarnet join fc94:****************************************************66i mydevice #### [945407] joining... #### [947408] done.
あとはホストPCからjetson nanoにデータ送信。
使うスクリプトは過去記事を参照。
trafalbad.hatenadiary.jp
# host PCからデータを送信 $ roscore $ rosrun ros_start velocity_client.py 1.0 2.0 >>> #### [INFO] [1645278553.788376]: set [1.000000, 2.000000] success # Jetson nano側で受信 $ rosrun ros_start velocity_server.py >>> # linear: # x: 1.0 # y: 0.0 # z: 0.0 # angular: # x: 0.0 # y: 0.0 # z: 2.0
ちゃんとJetson nanoに座標情報が届いた。
3. JetsonからホストPCにデータ送信
Jetson nanoをROS MASTER側にして、ホストPCにデータを送る。
Jetson nanoからUSBカメラの画像を圧縮して、ホストPCに送ってみる。
今度はjetcore
というネットワークを作り、Jetson nanoとホストPCを登録。
やりかたは前と同じ。
使うスクリプトは過去記事を参照。
trafalbad.hatenadiary.jp
# Jetson nanoの設定 $ sudo husarnet websetup $ sudo husarnet join fc94:b01d:******************************************Jq5 mydevice #### [1610145] joining... #### [1612146] done. export ROS_MASTER_URI=http://192.168.10.102:11311 export ROS_IP=192.168.10.102 export ROS_HOSTNAME=192.168.10.102 export ROS_IPV6=on
# ホストPCの設定 export ROS_MASTER_URI=http://192.168.10.102:11311 export ROS_IP=192.168.10.111 export ROS_HOSTNAME=192.168.10.111 export ROS_IPV6=on $ sudo husarnet websetup $ sudo husarnet join fc94:b〜 #### [1610145] joining... #### [1612146] done.
# jetson nano側でUSBカメラ画像を圧縮送信 $ roscore $ roslaunch ros_start usb_cam.launch $ roslaunch ros_start image_republish.launch use_compressed:=true # ホストPC側でUSBカメラ画像を受信 $ rosrun ros_start color_vel.py >>> ### cost time is 0.7035732269287109 [ms] ### cost time is 2.7604103088378906 [ms] ### avg time is 55.704593658447266
VPNを介してるせいか画像30枚の合計時間が自宅のwifiと比べて遅いのがわかる。
結果
ネットワーク環境別:30枚の合計処理時間 | Latency |
同一wifi内(近距離) | 15.2616 [ms] |
VPN環境(遠距離) | 55.7045 [ms] |
4. Husarnetの作成したネットワークをリセット
Husarnetで作ったネットワークを削除する場合はここの上の「Dashboard」から削除やデバイスの登録などの操作ができる。
ネットワークが増えたら掃除したほうがいい。
WireGuardでもルーティングを設定すればVPNとして使えるけど、圧倒的にhusarnetの方が使いやすかった。