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転送
- Windows Powershellを管理者権限で実行する。
- 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が必要。