【ROS2】WSL2上のUbuntuにROS2 Foxyを入れたら快適だった

スポンサーリンク

Windows上で手軽にROS2を使いたかったので、WSL2上のUbuntuにROS2をインストールしたときのメモです。

WSL2のおかげで、思った以上にすんなりROS2が動いている。GUIも動く。DockerとかUbuntuを入れたPCを用意した方がトラブルが少ないんだろうけど、気軽にサクッと動かしたかったのでその目的は達成。軽く動かした限りではとても快適。

書籍「ROS2とPythonで作って学ぶAIロボット入門」に合わせてROS2 Foxyをインストールしているけど、もうすぐサポートが終わるので注意。

環境

Windows 11 バージョン22H2 (OSビルド 22621.1105)
WSL2で、Ubuntu 20.04インストール済み

セットアップ

WSL2上にUbuntu 20.04のセットアップは終わっている前提。

ROS2のセットアップ方法は、基本的には公式セットアップ方法でOK
https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html
なんだけど、途中のsudo apt updateで、GPGエラーになった

$ sudo apt update
省略
Reading package lists... Done
W: GPG error: http://packages.ros.org/ros2/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
E: The repository 'http://packages.ros.org/ros2/ubuntu focal InRelease' is not signed.


こちらを参考に、修正して無事インストール完了

$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg


「.bashrcの最後にROSのアンダーレイ設定を追加」するためのコマンドを実行

$ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc


これで別ターミナルを立ち上げてwslで切り替えれば、簡単にros2が使える。

> wsl
$ ros2
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
省略


ros2のコマンドを試す

それぞれ別ターミナルでtalkerとlistenerを実行

$ ros2 run demo_nodes_cpp talker
[INFO] [1673743375.176243923] [talker]: Publishing: 'Hello World: 1'
[INFO] [1673743376.176115401] [talker]: Publishing: 'Hello World: 2'
$ ros2 run demo_nodes_py listener
[INFO] [1673743314.915376650] [listener]: I heard: [Hello World: 115]
[INFO] [1673743315.138655164] [listener]: I heard: [Hello World: 210]
[INFO] [1673743315.909535684] [listener]: I heard: [Hello World: 116]

順調順調

亀で遊ぶ

$ ros2 run turtlesim turtlesim_node

別ターミナルで下記も実行

$ ros2 run turtlesim turtle_teleop_key


あまりにもあっけないぐらい、すんなり動いた。。。
Windowsで何か設定した記憶は無いけど、もしかしたらコレはやったかも。それともWindows11 だから?

rviz2の起動確認

とりあえず起動は確認

$ rviz2


こちらもすんなり動作

gazeboの起動確認

適当にgazeboをインストール

$ sudo apt -y  install ros-foxy-gazebo-* 


gazebo起動

$ gazebo


こちらもすんなり(略)

Turtlebot3 シミュレーション

初回セットアップ

.bashrcの最下行に次の2つを追加。
(他の人と同じネットワークで使う場合はROS_DOMAIN_IDの値に注意が必要)

export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=burger

必要なパッケージをインストール

$ sudo apt-get install ros-foxy-gazebo-* ros-foxy-cartographer ros-foxy-cartographer-ros ros-foxy-navigation2 ros-foxy-nav2-bringup ros-foxy-dynamixel-sdk ros-foxy-turtlebot3-msgs ros-foxy-turtlebot3

TurtleBot3シミュレーション パッケージのインストール

$ mkdir -p ~/turtlebot3_ws/src/
$ cd ~/turtlebot3_ws/src/
$ git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/turtlebot3_ws && colcon build --symlink-install
$ source ~/turtlebot3_ws/install/setup.bash

起動

シミュレータ起動

$ ros2 launch turtlebot3_gazebo empty_world.launch.py

turtlebot3_world.launch.py の代わりに empty_world.launch.py や turtlebot3_house.launch.py といったものもある。


キーボード操作を起動(別ターミナルで実行)

$ ros2 run turtlebot3_teleop teleop_keyboard


自動操作を起動(別ターミナルで実行)

$ ros2 run turtlebot3_gazebo turtlebot3_drive


rvizでセンサー等のデータを表示(別ターミナルで実行)

$ ros2 launch turtlebot3_bringup rviz2.launch.py



高解像度環境だと、GUIの描画が小さい問題の対処法

WSLによるGUI表示は便利だけど、高解像度環境ではGUIの描画が小さすぎた。

こちらで紹介されていた方法で解決できた。

内容は管理者権限のあるプログラムで、C:\ProgramData\Microsoft\WSLに.wslgconfigを追加。
ファイルの中身は下記の通り

[system-distro-env]
;hi-dpi
WESTON_RDP_DISABLE_HI_DPI_SCALING=false
WESTON_RDP_DISABLE_FRACTIONAL_HI_DPI_SCALING=false
;100 to 500
WESTON_RDP_DEBUG_DESKTOP_SCALING_FACTOR=150


上記ファイルを置いたあと、wslを再起動

> wsl --shutdown
> wsl

これでGUIの表示が小さすぎる問題も解決。

補足:別の解決方法に「 export QT_SCALE_FACTOR=1.5」を設定するという方法もあるけど、rviz2やgazeboの表示が一部おかしくなった。

リンク

MS公式:Linux GUI アプリのインストール サポート
GPUによる表示もサポートしているようなので、必要になったらインストール

ROBOTIS e-Manual TB3 シミュレーション

Windows 11の標準機能でLinuxを動かす、GUIアプリもサクサク
Windows 11のWSLでは、Linuxコマンドラインアプリだけでなく、WSLgという仕組みでGUIアプリも動かせるようになったとのこと。知らなかった。

WSLgアーキテクチャー
GitHub WSLg