WSL2 portforwarding - eiichiromomma/CVMLAB GitHub Wiki

(WSL2) port forwarding

ROS on docker on WSL2 で,Jetson nanoと通信

これが結構面倒で,通常ROSで外部デバイスを使う場合に加えて

  • Windows Defender Firewallでport 11311へのアクセスを許可する(受信の規則に追加する)
  • netshで11311へのアクセスをWSL2のUbuntuへ転送する
  • dockerは--net=hostでrunしておいてWSL2のUbuntuと同じIPにしておく(docker runするときしか設定できないので注意(image書き出しが必要になる))

という作業が必要になる。

port転送

  1. Windows Powershellを管理者権限で実行する。
  2. WSL2上でifconfigと打って出てきたIPをconnectaddressに設定できるようコピーしておく

Powershell上で

netsh interface portproxy add v4tov4 listenport=11311 connectaddress=172.x.xx.xxx

(172.x.xx.xxxがIPに置き換わる)

動きがおかしかったら取り敢えず

netsh interface portproxy delete v4tov4 listenport=11311

で設定は消せる。

↑の後でここ にあるように

sc start iphlpsvc

の実行が必要らしい。

Firewall

Windows Defender Firewallを開き,「受信の規則」で新規作成してポートの11311を許可するよう加える。名前は何でも良い。

こうすると,Jetson nanoからはWindowsマシンのIPを指定すれば,WSL2上のroscoreに繋がる。

Jetson nano

WSL2のwindowsマシン のIPが172.16.80.119,Jetson nanoが172.16.80.59の場合を例にすると,Jetson nanoではターミナルを開くたびに

export ROS_MASTER_URI="http://172.16.80.119:11311"
export ROS_IP="172.16.80.59"

としておく必要がある。

例えばjetbot_cameraがある場合

export ROS_MASTER_URI="http://172.16.80.119:11311"
export ROS_IP="172.16.80.59"
rosrun jetbot_ros jetbot_camera

ちなみにOpenVSLAMは/camera/image_rawしか見ないので,例えばjetbot_ros場合

rosrun image_transport republish raw in:=/jetbot_camera/raw out:=/camera/image_raw

のようにtransportが必要。