Skip to content
Eiichiro Momma edited this page Feb 12, 2021 · 3 revisions

WSL2

X Window System(VcXsrv)

ここベースに設定(日本語入力は使わなかったのでUIM関係は入れない)。 VcXsrv をWSL2のUbuntuと共に入れておく。 XLaunchを起動して,大きいウィンドウ1つの(Full screenじゃないやつ)にしておくとややこしくない。設定はとりあえずAccess Controlもチェックを入れておく。 WSL2のUbuntu上で

sudo apt install icewm mlterm fonts-vlgothic

としてWindow Managerを入れておく。

X Window SystemはWSL2とは独立しているので,どこに表示するのかをWSL2上のDISPLAY環境変数に設定する必要がある。

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

これは毎回Ubuntu(WSL)の起動後に実行するか.bashrcに書いておく

xinitrc.shというファイルに

#!/bin/sh
mlterm &
icewm &

だけ書いて

chmod 755 xinitrc.sh

で実行出来るようにしたうえで,

./xinitrc.sh

とするとXLaunchで起動したXの画面にターミナルが出てくる。

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が必要。

Clone this wiki locally