
이 포스트는 WSL-우분투 환경에서 일부 GPU를 사용하는 App이 재대로 동작 안하는 상황 (RVIZ에서 STL mesh가 재대로 랜더링 되지 않는 현상)을 수정하기 위해 작성한다.
발생한 문제는 아래와 같다.

이 문제를 해결하는데 GPU가속 기능(CUDA)을 WSL2-우분투에서 사용될 수 있도록 활성화 과정을 수행해야 한다.
요구사항은 윈도우 10 - 21H2 이상이면 되는데
윈도우 11에서 개인설정 -> 시스템 -> 정보 탭으로 들어가면 윈도우 에디셧 및 버전을 확인 할 수 있다. 21H2 이상이면 된다.

참고로 포스트가 진행되는 PC는 윈도우 11에 22H2 버전이다.
그냥 윈도우 업데이트 뜨면 너무 미루지 말고 주기적으로 업데이트 해주면 된다...
다음으로 Nvidia 그래픽 드라이버를 설치한다


참고로 Nvidia 그래픽 드라이버의 경우 Gama Ready Driver(GRD)이랑
Studio Drivier(SD)두종류가 있는데 큰 차이는 없지만
다른 포스트 특히 GPU가속을 사용하는 App과 관련된 포스트에서 Nvidia드라이버 설치를 보면 대부분 GRD를 설치한다.
(참고로 Nvidia의 CUDA on Windows Subsystem for Linux(WSL) 포스트에서도 드라이버 설치 링크를 타고 넘어가면 GRD 설치 링크로 넘어가진다 https://developer.nvidia.com/cuda/wsl)
GRD나 SD 큰 차이는 없지만 업데이트 주기를 살펴보면 GRD가 좀 더 자주 업데이트가 된다.
위 Nvidia 드라이버 설치를 완료한 후에는 CUDA 드라이버도 설치한다.
https://developer.nvidia.com/cuda-toolkit


그래픽 카드 종류에 따라 최대 설치 가능한 CUDA Toolkit(쿠다 드라이버) 버전의 종류가 다르긴 하지만 필자의 경우 최신 버전인 12.2까지 설치가 가능하다.
설치가 재대로 됬는지 확인하는 방법은
PowerShell을 열고 아래 명령어를 쳐주면 된다.
nvcc --version

윈도우 환경에서 Nvidia & CUDA 드라이버를 설치했으면 WSL-우분투에
CUDA 툴킷 패키지를 설치해야 한다.
설치는 https://ubuntu.com/tutorials/enabling-gpu-acceleration-on-ubuntu-on-wsl2-with-the-nvidia-cuda-platform#3-install-nvidia-cuda-on-ubuntu
링크에 나와 있는 대로
명령어를 차례대로 입력해 주면 된다..
$ sudo apt-key del 7fa2af80
이 명령어는 WSL-우분투에 기본적으로 설치되어 있는 Nvidia 그래픽 드라이버를 제거하는 명령어란다. 정확히는 GPG를 제거한다는데 리눅스 Nvidia드라이버와 관련 있는 리포지토리(설치하고자 하는 패키지가 저장된 서버)랑 통신할 때 암호화 된 키가 발급되는데 그 키를 제거해서 드라이버를 삭제한다는.. 뭐 그런뜻 같다.
아래 부분은 윈도우에 설치된 새로운 Nvidia & CUDA 드라이버랑 연동되는 드라이버를 설치하는 패키지 명령어들이다.
$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
$ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pub
$ sudo add-apt-repository 'deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /'
$ sudo apt-get update
$ sudo apt-get -y install cuda

설치를 완료한 WSL-우분투 CUDA가 잘 동작하는지 확인하는 예제 패키지를 다운받고 실행시켜 본다.
명령어 세트는 아래와 같다
$ cd
$ mkdir Dev
위 명령어는 WSL-우분투에서 가장 최 상단 디렉토리인 home/사용자ID/ 디렉토리로 넘어감을 의미하는 cd와 해당 디렉토리에서 예제 패키지를 담을
임의의 폴더인 Dev 폴더를 생성하는 명령인 mkdir Dev이다.

위 명령어를 재대로 수행했다면 윈도우에서 WSL-우분투 폴더를 윈도우 탐색기로 열었을 시 위 사진처럼 home/사용자ID/ 폴더에 'Dev' 폴더가 재대로 생성되었을 것이다.
이렇게 간단한 폴더 만드는 것도 자세하게 설명하는 이유는
https://ubuntu.com/tutorials/enabling-gpu-acceleration-on-ubuntu-on-wsl2-with-the-nvidia-cuda-platform#4-compile-a-sample-application
WSL-우분투 CUDA 설치 가이드 포스터에 첫 명령어가
$ cd ~/Dev 이기 때문이다.
참고로 필자는 sudo 놓고 우분투도 모르는 비 숙련자이기에
여기서부터 잠깐 막혔다.
아무튼 폴더 생성 후 dev 폴더로 이동하여 다음 명령을 수행한다
$ cd ~/Dev
$ git clone https://github.com/nvidia/cuda-samples
이 명령어는 CUDA 설치가 재대로 됬는지 확인하는 예제 패키지를 인터넷에서 다운받아야 하는데 이게 git에 올라가 있고 해당 깃 페이지에서 예제 패키지를 다운(복제)받기 위한 명령어이다.
그 다음 다운(복제)한 패키지를 리눅스에 설치하는 과정을 수행한다.
$ cd ~/Dev/cuda-samples/Samples/1_Utilities/deviceQuery
$ make
리눅스에는 프로그램(패키지/리포지토리) 설치를 install이 아닌 make라 하는데 이거는 길게 설명하면 나도 잘 모르니
그냥 리눅스 make = 윈도우 install 이라 생각하고 넘어가자
설치를 완료한 후에는 아래 명령어를 수행한다
$ ./deviceQuery
위 명령어는 make가 완료되면 실행파일이 하나 발생하는데 해당 실행파일을 실행하는 명령어이다.
실행 후에는 아래와 같은 사진처럼 CUDA 버전이 나와야 정상이다

예제 패키지가 딱히 CUDA로 뭐 휘황찬란한 GPU가속기능이 있는 GUI를 실행시키는 건 아니고
그냥 단순하게 시스템 정보를 출력하고 끝난다...
WSL-CUDA 설정을 완료했으니 본 포스트의 목적인 rviz 그래픽 랜더링이 제대로 수행되는지 확인하고자 한다.
https://github.com/tbvjvsladla/rviz_tutorial

첨부한 git허브 저장소에는 rviz 랜더링이 잘 되는지 확인하기 용도로 제작한 패키지 파일이 있다
이를 작업공간 (ex : catkin_ws/src)에서
아래의 명령어를 통해 다운로드를 받는다
git clone https://github.com/tbvjvsladla/rviz_tutorial.git
이후 해당 패키지를 catkin_make를 진행하자
# catkin_make 예치
cd ~/catkin_ws
catkin_make
패키지 빌드를 완료한 후에는
아래 명령을 수행하길 바란다
roslaunch rviz_tutorial demo_car.launch
여기까지 수행했으면 rviz에서 아래의 화면이 출력되면 WSL-CUDA 기능이 정상적으로 동작함을 확인할 수 있다.

위 1~4과정을 모두 완수하였더라도 여전히 WSL2 Rviz STL Rendering not working.. 으로 영번역 할 수 있는 STL파일이 포함된 로봇 모델이 Rviz에서 랜더링이 안되는 문제을 겪고 있다면
Ubuntu 환경에서 구동되는 Mesa 그래픽 라이브러리의 버전업데이트를 수행해야 한다.
# kisak-mesa 버전 업데이트를 위한 비공식 저장소를 apt에 등록
sudo add-apt-repository ppa:kisak/kisak-mesa
# apt 리스트에 위 저장소가 등록되었으니 업데이트 수행
sudo apt update && sudo apt upgrade
이것에 대한 내용을 설명을 하자면 Rviz의 그래픽 랜더링 수행에는 OpenGL API를 활용하여 그래픽 랜더링 작업이 수행된다.
이때 당연히 설치된 그래픽카드의 드라이버를 최신 버전으로 업데이트하고 CUDA 라이브러리를 업데이트 해야 하지만
GPU가 OpenGL 명령어를 올바르게 수행할 수 있도록 OpenGL API 버전도 업데이트를 진행해야 한다.
이 OpenGL API 외에도 여러 GPU 작업용 라이브러리(API)를 Ubuntu에서는
kisak-mesa라는 라이브러리가 통합 관리를 하고 있으니
이를 업데이트 한다.. 이렇게 보면 된다.
뭐 아무튼 1~5번 과정을 충실히 수행하면

이렇게 gazebo 시뮬레이터에서는 랜더링이 잘 되던 로봇 모델을
Rviz 툴에서도 로봇의 랜더링을 올바르게 수행할 수 있을 것이다.
WSL-Ubuntu에서는 뭐 하나 쉽게 되는게 없으니 차근차근 해야한다...