WSL2 + RViz GPUレンダリングによるロボットアーム

WSL2 + RViz GPUレンダリングによるロボットアームのトラブル回避ガイド:モデルが表示できない状態から完璧な表示に至るまでの道のり

要約:本記事では、Windows 11のWSL2環境においてRVizのGPUレンダリングを設定する全プロセスを記録しています。WSLgとVcXsrvの2つの手法における失敗体験に加え、最終的にロボットアームをスムーズにレンダリングするための解決策についても解説します。


? 目次

  • 問題の背景
  • 環境設定
  • 手法1:WSLgネイティブ手法
  • 手法2:VcXsrv手法
  • よくあるエラーと解決策
  • 環境変数の永続化設定
  • まとめと提言

問題の背景

Windows 10の時代、WSL2ではRViz内のロボットアームモデルをGPUで直接レンダリングすることができず、CPUによるソフトレンダリング(llvmpipe)に依存せざるを得なかったため、次のような問題が発生しました:

  • ❌ ロボットアームモデルの動作が著しくカクつく
  • ❌ 複雑なシーンをスムーズに表示できない
  • ❌ 画面が真っ暗になってクラッシュすることさえある

Windows 11にアップグレード後、マイクロソフトはWSLg(Windows Subsystem for Linux GUI)をネイティブに統合しており、理論上はGPUハードウェアアクセラレーションを実現できるはずですが、実際の設定過程では多くの困難に直面しました。


環境設定

ハードウェア環境

プロジェクト 設定
OS Windows 11 Pro
グラフィックカード NVIDIA GeForce GTX 1650
WSLバージョン WSL2
Linuxディストリビューション Ubuntu 20.04 / 22.04
ROSバージョン ROS Noetic

ソフトウェアの依存関係

# WSLに必要な依存関係をインストールする
sudo apt update
sudo apt install -y mesa-utils x11-apps
sudo apt install -y ros-noetic-rviz
sudo apt install -y ros-noetic-moveit
sudo apt install -y ros-noetic-ur-description

方法1:WSLgネイティブ方式

Windows 11のWSLgは、マイクロソフトが公式に提供するGUIサポートソリューションであり、理論上は最も簡単です。

設定手順

1. WSLが最新バージョンに更新されていることを確認します

# PowerShell(管理者)で実行
wsl --update
wsl --shutdown

2. WSLでDISPLAY環境変数を設定

# WSLgはデフォルトでこのDISPLAYを使用
export DISPLAY=:0

3. GPUレンダリングのテスト

# OpenGLレンダラーの確認
glxinfo | grep 「OpenGL renderer」

# RVizのテスト
rosrun rviz rviz

発生した問題

問題1:RViz起動後、ロボットアームのモデルが表示されない
  • 現象:RVizは正常に起動するが、ロボットアームのモデルが全く見えない
  • 原因:WSLgのD3D12バックエンドとOGREレンダリングエンジン(RVizの基盤)との間に互換性の問題がある

解決策:

# 一時的な対策としてソフトウェアレンダリングを強制的に使用
export LIBGL_ALWAYS_SOFTWARE=1
rosrun rviz rviz

# または、D3D12を無効にしてみる
export WSL_D3D12_DEFAULT_GPU_ADAPTER=none
問題2:Zinkドライバのメモリオーバーフロー
# エラーメッセージの例
zink: failed to create display - out of memory
  • 原因:ZinkがCPU上のソフトウェアVulkan実装(lavapipe)にフォールバックし、メモリ不足によりクラッシュした。

解決策:

# Zinkを無効化し、代わりにllvmpipeを使用する
export MESA_LOADER_DRIVER_OVERRIDE=zink
export GALLIUM_DRIVER=llvmpipe

# または、ハードウェアアクセラレーションを直接無効化する
export LIBGL_ALWAYS_SOFTWARE=1

解決策2:VcXsrvソリューション(最終的に採用)

WSLgソリューションで解決困難な互換性の問題が発生したため、サードパーティ製のX Serverソリューションに切り替えました。

インストールと設定

1. VcXsrvをダウンロードしてインストール

  • ? ダウンロード先:SourceForge - VcXsrv
  • インストール後、X Launch
  • を実行

2. X Launchの設定(重要な手順)

を起動

手順 設定
手順1 複数のウィンドウ、ディスプレイ番号:0
手順2 クライアントなしでの起動
ステップ3(最も重要!) 「Disable access control」(アクセス制御を無効化)にチェックを入れる ✅ 「Native opengl」(ネイティブOpenGLアクセラレーション)にチェックを入れる
ステップ4 設定を保存して

3. WindowsホストのIPアドレスを取得

# PowerShellで実行
ipconfig
# vEthernet (WSL) に対応するIPv4アドレスを確認します。例:172.xx.xx.1

4. WSLで環境変数を設定

# DISPLAYをWindowsホストのIPに設定
export DISPLAY= $ (cat /etc/resolv.conf | grep nameserver | awk 『{print $2}』):0

# またはIPを手動で指定(実際のIPに置き換えてください)
# export DISPLAY=172.xx.xx.1:0

# OpenGLのハードウェアアクセラレーションを有効にする
export LIBGL_ALWAYS_INDIRECT=1
export LIBGL_ALWAYS_SOFTWARE=0

# 接続テスト
xclock

よくあるエラー

エラー1:Authorization required
# エラーメッセージ
Authorization required, but no authorization protocols specified
  • 原因:VcXsrvでアクセス制御が無効化されていない。
  • 解決方法 :X Launchを再実行し、手順3で 「Disable access control」 にチェックが入っていることを確認してください。
エラー2:llvmpipeによるソフトレンダリング
# 確認の結果、GPUではなくllvmpipeが使用されていることが判明
OpenGL renderer string: llvmpipe (LLVM 12.0.0, 256 bits)

  • 原因:OpenGLアクセラレーションが正しく設定されていません。
  • 解決策LIBGL_ALWAYS_INDIRECT=1 および LIBGL_ALWAYS_SOFTWARE=0 が設定されていることを確認してください。

よくあるエラーと解決策

エラー1:RVizが起動しない

# エラーメッセージ
QStandardPaths: XDG_RUNTIME_DIR が設定されていません。デフォルトの 『/tmp/runtime-user』 を使用します
rviz: Xサーバーに接続できません

トラブルシューティング手順:

  1. VcXsrvが実行中かどうかを確認してください(タスクバーの右下にあるアイコン)
  2. DISPLAY環境変数を確認してください:echo $DISPLAY
  3. 接続テスト:xclock(インストールされている場合)

エラー2:MoveItシーンのインジェクションに失敗

# エラー例
move_group.add_world_object(「box」, box_pose) # エラーが発生
  • 原因:MoveItのPython APIの使用方法が間違っている。

正しい使用方法:

from moveit_commander import PlanningSceneInterface

scene = PlanningSceneInterface()
scene.add_box(「box」, box_pose, (0.1, 0.1, 0.1))
# シーンの更新を待つ必要があります
rospy.sleep(1.0)

エラー3:モデルファイルが見つかりません

# エラーメッセージ
FileNotFoundError: [Errno 2] No such file or directory: 『/home/user/catkin_ws/src/...』
  • 原因:ハードコーディングされた絶対パスを使用しています。

解決策:

import os
from rospkg import RosPack

rospack = RosPack()
pkg_path = rospack.get_path(『your_package_name』)
model_path = os.path.join(pkg_path, 『meshes』, 『model.stl』)

環境変数の永続的な設定

ターミナルを開くたびにexportコマンドを入力する手間を省くため、.bashrcに以下を追加します:

# bashrc設定ファイルを開く
nano ~/.bashrc

# ファイルの末尾に以下の内容を追加する
export DISPLAY= $ (cat /etc/resolv.conf | grep nameserver | awk 『{print $2}』):0
export LIBGL_ALWAYS_INDIRECT=1
export LIBGL_ALWAYS_SOFTWARE=0

# 保存して適用
source ~/.bashrc

⚠️ 注意 :Windowsを再起動すると、WSLの仮想ネットワークアダプタのIPアドレスが変更される可能性があります。その場合は、ipconfigを再度確認する必要があります。


まとめと推奨事項

2つの手法の比較

機能 WSLg手法 VcXsrv手法
設定の難易度 ⭐⭐ 簡単 ⭐⭐⭐ 中程度
GPUアクセラレーション ⭐⭐⭐ ネイティブD3D12 ⭐⭐⭐ ネイティブOpenGL
互換性 ⭐⭐ 旧バージョンのOGREにはバグあり ⭐⭐⭐⭐ 安定・信頼性が高い
IP設定 不要 必要(変更される可能性あり)
推奨度 ⭐⭐⭐ シンプルなシーンに適している ⭐⭐⭐⭐⭐ 複雑なシーンに適している

最終的な推奨

  1. まずはWSLgを試す :Windows 11ユーザーはまずWSLgを使用してください。設定は簡単で、export DISPLAY=:0 とするだけで済みます。
  2. 互換性の問題が発生した場合はVcXsrvを使用:RVizの表示が異常だったり、モデルが表示されない場合は、迷わずVcXsrvソリューションに切り替えてください。
  3. 必須の設定
    • VcXsrvの手順3:「Disable access control」「Native opengl」 にチェックを入れる
    • WSL環境変数:LIBGL_ALWAYS_INDIRECT=1
  4. デバッグのコツ
    • glxinfo | grep 「OpenGL renderer」 を使用して、GPUが有効になっているか確認する
    • xclock を使用して、X Serverへの接続をテストする

参考資料

  • WSLg GitHub
  • VcXsrv SourceForge
  • ROS Noetic RViz ドキュメント

著者 :Vodka

日付 :2026年

タグWSL2 RViz GPUレンダリング ROS MoveIt ロボットアーム Windows 11


? このブログ記事が、同じくWSL2環境でRVizを設定しようとしている皆さんの参考になれば幸いです!ご質問などがあれば、コメント欄でぜひご意見をお聞かせください。?