はじめに
本記事では、Windows11 環境で Docker を使って ROS2 の最新バージョン「Jazzy」を動かす手順を解説します。GUIを使った turtlesim のチュートリアルも動作確認済みです。
記事の対象者
- ROS2ってLinuxでしか動かないんじゃないの?っていう人
- WindowsにDockerを入れたけどGUI表示の仕方がわからない人
1. 前提条件
以下の環境が準備されている必要があります:
- Windows 10/11
- Docker Desktop インストール済
- WSL2 有効化済
2. X Server の準備(VcXsrv)
Windows 上で GUI アプリケーションを表示するために、X Server を起動します。
VcXsrvのダウンロード
以下のリンクからVcXsrvをダウンロードできます。
VcXsrv の設定手順
- スタートメニューから「XLaunch」を起動
-
Display settings
→ Multiple windows を選択し「Next」 -
Client startup
→ Start no client を選択し「Next」 -
Extra settings
→ Disable access control にチェックを入れて「Next」 - 最後に「Finish」で起動
X Server はバックグラウンドで動作します。エラーが出なければ準備完了です。
3. Docker コンテナの起動
【操作する場所】
PowerShell または Windows ターミナル
以下のコマンドで ROS2 Jazzy
環境を持つ Docker コンテナを起動します:
docker run -d --rm \
--name ros_jazzy \
-e DISPLAY=host.docker.internal:0.0 \
osrf/ros:jazzy-desktop \
sleep infinity
sleep infinity を指定することで、コンテナが即終了せず常駐します。
4. コンテナ内で turtlesim を実行する
ここからは複数のターミナルを使用します。
GUI ノードを起動
まずはコンテナに入ります:
docker exec -it ros_jazzy bash
次にROS2環境を有効化:
source /opt/ros/jazzy/setup.bash
turtlesim の GUI ノードを起動:
ros2 run turtlesim turtlesim_node
亀が起動
キー入力の受付
GUIノードとは異なるターミナルを立ち上げ以下のコマンドで再度コンテナに入ります:
docker exec -it ros_jazzy bash
同様にセットアップして、キーボード操作用ノードを起動:
source /opt/ros/jazzy/setup.bash
ros2 run turtlesim turtle_teleop_key
ターミナル上で矢印キーを押すと、turtlesim のウィンドウでカメが動きます!
5. トラブルシューティング
カメが表示されるが動かない
対象のターミナルをクリックしてから矢印キーを押さないと入力が反映されません。
GUI が表示されない
- VcXsrv が起動しているか確認
- Windows ファイアウォールのアクセス許可を確認
おまけ
カメの初期位置を変更したい
turtlesim_node 起動後に別ターミナルで以下を実行:
ros2 service call /kill turtlesim/srv/Kill "{name: 'turtle1'}"
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 8.0, theta: 1.57, name: 'turtle1'}"
まとめ
- Docker + Windows でも ROS2 Jazzy の GUI アプリが動作可能
- VcXsrv を使えば turtlesim もスムーズに操作可能
- docker exec を活用して複数ターミナルを使おう
ここまででWindows*Dockerでturtlesimを利用することでできました。
あとは公式ドキュメントを参考にチュートリアルを進めてください。