관리 메뉴

데이터 과학

Windows 11 WSL2에서 Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, TurtleBot3 본문

인공지능/피지컬 AI

Windows 11 WSL2에서 Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, TurtleBot3

티에스윤 2026. 9. 21. 16:06

Windows 11 WSL2에서 Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, TurtleBot3 환경 구축하기

Windows 11에서는 WSL2(Windows Subsystem for Linux)를 이용하여 Windows를 그대로 사용하면서 Ubuntu Linux 환경을 동시에 사용할 수 있습니다. 최근 WSL에는 WSLg가 포함되어 있기 때문에 Linux의 GUI 프로그램도 별도의 X Server를 설치하지 않고 Windows 화면에 직접 실행할 수 있습니다.

 

이를 이용하면 Windows PC 한 대에서 Ubuntu, ROS 2, RViz2, Gazebo, TurtleBot3 등을 실행하는 로봇 시뮬레이션 환경을 구성할 수 있습니다.

이번 글에서는 다음 환경을 구축합니다.

Windows 11
    │
    └── WSL2
          │
          └── Ubuntu 24.04 LTS
                 │
                 ├── WSLg
                 │
                 ├── ROS 2 Jazzy
                 │      ├── Node
                 │      ├── Topic
                 │      ├── Service
                 │      └── Action
                 │
                 ├── RViz2
                 │
                 ├── Gazebo Harmonic
                 │
                 └── TurtleBot3
                        ├── Gazebo Simulation
                        ├── Teleoperation
                        ├── /cmd_vel
                        ├── /odom
                        ├── /tf
                        └── /scan

이 환경은 ROS 2의 기본 구조를 공부하거나 TurtleBot3를 이용한 로봇 프로그래밍, SLAM, Navigation2 등을 학습하기 위한 기본 환경으로 활용할 수 있습니다.


WSL2 설치

먼저 Windows에서 PowerShell 또는 Windows Terminal을 관리자 권한으로 실행합니다.

설치할 수 있는 Linux 배포판을 확인합니다.

wsl --list --online

간단하게 다음과 같이 입력해도 됩니다.

wsl -l -o

 

 

Ubuntu 24.04를 설치합니다.

wsl --install -d Ubuntu-24.04

설치가 진행되면 다음과 비슷한 메시지가 나타납니다.

다운로드 중: Ubuntu 24.04 LTS
설치 중: Ubuntu 24.04 LTS
배포가 설치되었습니다.

Ubuntu-24.04 시작하는 중...

Provisioning the new WSL instance Ubuntu-24.04
This might take a while...

Create a default Unix user account:

 

여기에서 Ubuntu에서 사용할 사용자 이름을 입력합니다.

예를 들어 사용자 이름을 tsy로 지정하면 다음과 같습니다.

Create a default Unix user account: tsy

Enter를 누르면 비밀번호를 설정합니다.

New password:
Retype new password:

Linux에서는 비밀번호를 입력할 때 화면에 문자나 *가 나타나지 않습니다. 입력이 되지 않는 것처럼 보여도 정상입니다.

이 계정은 Windows 계정과 별개의 Ubuntu Linux 사용자 계정입니다.


 

WSL2가 정상적으로 설치되었는지 확인

Ubuntu 설치가 끝났으면 Windows PowerShell에서 다음을 실행합니다.

wsl -l -v

정상적인 경우 다음과 같이 표시됩니다.

  NAME            STATE           VERSION
* Ubuntu-24.04    Running         2

 

여기에서 중요한 것은 VERSION입니다.

VERSION
2

가 되어 있어야 WSL2를 사용하고 있는 것입니다.

 

WSL 자체의 버전도 확인합니다.

wsl --version

 

실제 설치 환경에서는 다음과 같이 확인할 수 있었습니다.

WSL 버전: 2.7.14.0
커널 버전: 6.18.33.2-2
WSLg 버전: 1.0.73.2
MSRDC 버전: 1.2.7214
Direct3D 버전: 1.611.1-81528511
DXCore 버전: 10.0.26100.1-240331-1435.ge-release

 

여기에서 특히

WSL 버전
WSLg 버전

이 표시되는지 확인합니다.

 

WSLg가 설치되어 있다면 Linux GUI 프로그램을 Windows 화면에 직접 실행할 수 있습니다.


WSL 업데이트

WSL 자체를 업데이트하려면 Windows PowerShell에서 실행해야 합니다.

wsl --update

 

WSL 상태는 다음과 같이 확인합니다.

wsl --status

 

WSL을 완전히 종료하려면 다음을 사용합니다.

wsl --shutdown

 

다시 Ubuntu를 실행하려면 다음과 같이 합니다.

wsl -d Ubuntu-24.04

wsl --update에서 Unknown command가 나타나는 경우

 

Ubuntu 터미널에서 실수로 다음 명령을 실행할 수 있습니다.

wsl --update

 

이때 다음과 같은 메시지가 나타날 수 있습니다.

Unknown command: --update

WSL
Wsman Shell commandLine, version 0.2.1

이것은 Microsoft WSL 명령이 아닙니다.

 

Ubuntu에도 wsl이라는 이름을 사용하는 별도의 프로그램이 존재할 수 있기 때문에 발생하는 현상입니다.

 

WSL 관리 명령은 반드시 Windows PowerShell에서 실행해야 합니다.

Ubuntu에서 Windows로 돌아가려면 다음과 같이 입력합니다.

exit

 

Windows PowerShell은 일반적으로 다음과 같은 프롬프트를 사용합니다.

PS C:\WINDOWS\system32>

 

Ubuntu 터미널은 다음과 같습니다.

tsy@DESKTOP:~$

따라서 앞으로 명령을 입력할 때 Windows 명령인지 Linux 명령인지 구분하는 것이 중요합니다.


 

Ubuntu 기본 설정

PowerShell에서 Ubuntu를 실행합니다.

wsl -d Ubuntu-24.04

 

Ubuntu가 실행되면 먼저 홈 디렉터리로 이동합니다.

cd ~

 

현재 위치를 확인합니다.

pwd

 

사용자 이름이 tsy라면 다음과 같이 나타납니다.

/home/tsy

 

Ubuntu 패키지를 업데이트합니다.

sudo apt update
sudo apt upgrade -y

 

기본적인 개발 도구도 설치합니다.

sudo apt install -y \
  build-essential \
  git \
  curl \
  wget \
  unzip \
  zip \
  vim \
  nano \
  htop \
  tree \
  python3 \
  python3-pip \
  python3-venv \
  gnupg \
  lsb-release \
  software-properties-common

Windows 디렉터리와 Linux 디렉터리

WSL에서는 Windows C 드라이브를 다음과 같이 접근할 수 있습니다.

cd /mnt/c

 

D 드라이브는 다음과 같습니다.

cd /mnt/d

 

예를 들어 다음과 같은 프롬프트가 나타날 수도 있습니다.

tsy@DESKTOP:/mnt/c/WINDOWS/system32$

이 상태에서도 Linux 명령은 실행할 수 있지만 ROS 개발 작업을 Windows\System32에서 하는 것은 좋지 않습니다.

Linux 홈으로 이동합니다.

cd ~

 

ROS 작업공간은 Linux 파일시스템에 만드는 것이 좋습니다.

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

 

구조는 다음과 같습니다.

/home/tsy
    │
    └── ros2_ws
          └── src

WSL에서 Linux GUI 사용하기

Windows 11의 최신 WSL에서는 WSLg를 통해 Linux GUI 프로그램을 실행할 수 있습니다.

환경변수를 확인합니다.

echo $DISPLAY
echo $WAYLAND_DISPLAY

정상적인 환경이라면 다음과 비슷하게 나타납니다.

:0
wayland-0

X Window 테스트 프로그램을 설치합니다.

sudo apt install -y x11-apps

실행합니다.

xeyes

Windows 바탕화면에 눈 모양의 창이 나타나면 정상입니다.

다른 프로그램도 실행해 볼 수 있습니다.

xclock

WSLg는 Ubuntu 전체 데스크톱을 띄우는 방식이라기보다는 Linux 프로그램 각각을 Windows 프로그램처럼 실행하는 방식입니다.

Windows 11 Desktop
      │
      ├── Chrome
      ├── PowerShell
      ├── Windows Explorer
      │
      ├── Linux xeyes
      ├── RViz2
      └── Gazebo

따라서 ROS 개발을 위해 별도로 Ubuntu GNOME Desktop이나 VcXsrv, Xming 등을 설치할 필요는 일반적으로 없습니다.


ROS 2 Jazzy 설치 준비

Ubuntu 24.04에는 ROS 2 Jazzy를 설치할 수 있습니다.

먼저 locale을 설정합니다.

sudo apt update
sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

현재 터미널에 적용합니다.

export LANG=en_US.UTF-8

확인합니다.

locale

Universe 저장소 활성화

다음을 실행합니다.

sudo apt install -y software-properties-common
sudo add-apt-repository universe

그리고 업데이트합니다.

sudo apt update

ROS 2 저장소 등록

여기에서 중요한 점이 있습니다.

Universe 저장소만 활성화한 상태에서 바로 다음 명령을 실행하면

sudo apt install ros-jazzy-desktop

다음 오류가 발생할 수 있습니다.

E: Unable to locate package ros-jazzy-desktop

이는 ROS 2 패키지가 존재하지 않는다는 의미라기보다 ROS 2 APT 저장소가 등록되지 않았기 때문일 가능성이 높습니다.

ROS 저장소 등록에 필요한 프로그램을 설치합니다.

sudo apt install -y curl gnupg

키 저장 디렉터리를 준비합니다.

sudo mkdir -p /usr/share/keyrings

ROS 공식 키를 가져옵니다.

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

ROS 2 저장소를 등록합니다.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" \
| sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

Ubuntu 24.04에서는 noble 저장소가 사용되어야 합니다.

확인합니다.

cat /etc/apt/sources.list.d/ros2.list

일반적인 AMD64 PC에서는 다음과 비슷하게 나타납니다.

deb [arch=amd64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu noble main

패키지 목록을 다시 가져옵니다.

sudo apt update

ROS 2 Jazzy Desktop 설치

패키지가 검색되는지 먼저 확인합니다.

apt-cache policy ros-jazzy-desktop

정상적으로 저장소가 등록되었다면 다음처럼 Candidate가 나타납니다.

ros-jazzy-desktop:
  Installed: (none)
  Candidate: 버전번호

이제 설치합니다.

sudo apt install -y ros-jazzy-desktop

설치가 완료된 후 다시 확인합니다.

apt-cache policy ros-jazzy-desktop

실제 설치 환경에서는 다음과 같이 확인되었습니다.

ros-jazzy-desktop:
  Installed: 0.11.0-1noble.20260905.070740
  Candidate: 0.11.0-1noble.20260905.070740

Installed와 Candidate에 버전이 나타나면 설치가 완료된 것입니다.


ROS 2 환경 설정

ROS 환경을 현재 터미널에 적용합니다.

source /opt/ros/jazzy/setup.bash

확인합니다.

echo $ROS_DISTRO

정상이라면 다음과 같이 나타납니다.

jazzy

ROS 명령도 확인합니다.

ros2 --help

매번 Ubuntu를 실행할 때 source 명령을 입력하지 않도록 .bashrc에 추가합니다.

echo 'source /opt/ros/jazzy/setup.bash' >> ~/.bashrc

적용합니다.

source ~/.bashrc

ROS 2 기본 통신 테스트

첫 번째 터미널에서 다음을 실행합니다.

ros2 run demo_nodes_cpp talker

다음과 같은 메시지가 계속 출력됩니다.

Publishing: 'Hello World: 1'
Publishing: 'Hello World: 2'
Publishing: 'Hello World: 3'

두 번째 Ubuntu 터미널을 열고 다음을 실행합니다.

ros2 run demo_nodes_py listener

다음처럼 메시지가 수신되면 정상입니다.

I heard: [Hello World: 1]
I heard: [Hello World: 2]
I heard: [Hello World: 3]

구조는 다음과 같습니다.

Talker Node
     │
     │ Publish
     ▼
 /chatter Topic
     │
     │ Subscribe
     ▼
Listener Node

이것이 ROS 2의 가장 기본적인 Publisher-Topic-Subscriber 구조입니다.


RViz2 실행

ROS 2 Desktop에는 RViz2가 포함되어 있습니다.

rviz2

WSLg가 정상이라면 Windows 화면에 RViz2 창이 나타납니다.

 

RViz2는 로봇의 물리 시뮬레이터가 아니라 ROS 데이터를 시각화하는 프로그램입니다.

TF, LiDAR, Camera, Odometry, Map, RobotModel 등을 확인하는 데 사용합니다.


Gazebo Harmonic 설치

ROS 2 Jazzy에서는 Gazebo Harmonic을 함께 사용하는 구성이 적합합니다.

필요한 프로그램을 설치합니다.

sudo apt update
sudo apt install -y curl lsb-release gnupg

Gazebo 저장소 키를 등록합니다.

sudo curl https://packages.osrfoundation.org/gazebo.gpg \
  --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg

 

Gazebo 저장소를 등록합니다.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] https://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null

 

패키지 목록을 업데이트합니다.

sudo apt update

 

Gazebo Harmonic을 설치합니다.

sudo apt install -y gz-harmonic

Gazebo 실행

설치 상태를 확인합니다.

gz --version

Gazebo를 실행합니다.

gz sim

또는 예제 World를 실행할 수 있습니다.

gz sim shapes.sdf

WSLg가 정상적으로 작동하고 있다면 Windows 화면에 Gazebo GUI가 나타납니다.


ROS 2와 Gazebo 연결

ROS 2와 Gazebo는 서로 독립된 프로그램입니다.

ROS 2와 Gazebo 사이의 통신을 위해 ros_gz 계열 패키지를 사용합니다.

설치합니다.

sudo apt install -y ros-jazzy-ros-gz

 

ROS 환경을 적용합니다.

source /opt/ros/jazzy/setup.bash

 

설치된 패키지를 확인합니다.

ros2 pkg list | grep ros_gz

 

다음과 같은 패키지들을 확인할 수 있습니다.

ros_gz
ros_gz_bridge
ros_gz_image
ros_gz_interfaces
ros_gz_sim

 

전체적인 관계는 다음과 같습니다.

                 ROS 2 Jazzy
                      │
          Topic / Service / Action
                      │
                      ▼
                 ros_gz_bridge
                      │
                      ▼
               Gazebo Harmonic
                      │
             ┌────────┼────────┐
             │        │        │
           Robot    Sensor    World

Gazebo는 로봇과 주변 환경의 물리적인 움직임을 계산하고 ROS 2는 로봇의 제어 및 데이터 통신을 담당합니다.


 

TurtleBot3 설치

TurtleBot3 관련 패키지가 제공되는지 확인합니다.

apt search ros-jazzy-turtlebot3

 

필요한 패키지를 설치합니다.

sudo apt install -y \
  ros-jazzy-turtlebot3 \
  ros-jazzy-turtlebot3-msgs \
  ros-jazzy-turtlebot3-simulations

 

실제 설치 환경에서는 다음과 같은 주요 패키지가 확인되었습니다.

ros-jazzy-turtlebot3-msgs
ros-jazzy-turtlebot3-navigation2
ros-jazzy-turtlebot3-node
ros-jazzy-turtlebot3-simulations
ros-jazzy-turtlebot3-teleop

 

ROS에서 TurtleBot3 패키지를 확인합니다.

ros2 pkg list | grep turtlebot3

 

특히 Gazebo 시뮬레이션을 위해 다음 패키지가 존재하는지 확인합니다.

ros2 pkg prefix turtlebot3_gazebo

정상이라면 설치 경로가 나타납니다.


 

TurtleBot3 모델 설정

TurtleBot3는 여러 모델을 제공하기 때문에 사용할 모델을 환경변수로 지정합니다.

가장 기본적인 Burger 모델을 사용합니다.

export TURTLEBOT3_MODEL=burger

확인합니다.

echo $TURTLEBOT3_MODEL

결과는 다음과 같습니다.

burger

매번 입력하지 않으려면 .bashrc에 추가합니다.

echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc

적용합니다.

source ~/.bashrc

TurtleBot3 Gazebo Launch 파일 확인

인터넷에 있는 예전 TurtleBot3 자료에는 Gazebo Classic용 명령이 많이 포함되어 있습니다.

ROS 2 Jazzy와 최신 Gazebo를 사용하는 경우 설치된 패키지가 제공하는 launch 파일을 직접 확인하는 것이 안전합니다.

ls -l /opt/ros/jazzy/share/turtlebot3_gazebo/launch/

또는 다음과 같이 전체 파일을 확인할 수 있습니다.

find /opt/ros/jazzy/share/turtlebot3_gazebo \
  -maxdepth 2 -type f | sort

여기에서 실제 설치된 .launch.py 파일을 확인합니다.

예를 들어 다음 파일이 존재한다면

turtlebot3_world.launch.py

다음과 같이 실행합니다.

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

Launch 파일이 Gazebo까지 시작하도록 구성되어 있다면 별도의 gz sim을 먼저 실행할 필요는 없습니다.

구조는 다음과 같습니다.

ros2 launch
     │
     ├── Gazebo Harmonic
     │
     ├── World
     │
     ├── TurtleBot3
     │
     └── ROS ↔ Gazebo 통신

Gazebo 화면에 TurtleBot3 Burger가 나타나면 기본 시뮬레이션 환경 구성이 완료된 것입니다.


 

TurtleBot3 ROS Topic 확인

Gazebo가 실행되고 있는 터미널은 그대로 둡니다.

새 Ubuntu 터미널을 하나 더 엽니다.

ROS 환경을 확인합니다.

source /opt/ros/jazzy/setup.bash
export TURTLEBOT3_MODEL=burger

 

실행 중인 ROS Node를 확인합니다.

ros2 node list

 

Topic을 확인합니다.

ros2 topic list

 

시뮬레이션 구성에 따라 차이가 있지만 다음과 같은 Topic들을 확인할 수 있습니다.

/cmd_vel
/odom
/tf
/tf_static
/scan

 

각각은 대략 다음 역할을 합니다.

/cmd_vel    로봇 이동 명령
/odom       로봇의 이동 거리 및 자세
/tf         좌표계 변환 정보
/tf_static  고정 좌표계 정보
/scan       LiDAR 거리 데이터

 

TurtleBot3 키보드 조종

새 Ubuntu 터미널에서 다음을 실행합니다.

ros2 run turtlebot3_teleop teleop_keyboard

키보드 조작 안내가 나타납니다.

키 입력은 다음과 같은 구조로 전달됩니다.

Keyboard
    │
    ▼
turtlebot3_teleop
    │
    │ geometry_msgs/msg/Twist
    ▼
 /cmd_vel
    │
    ▼
Gazebo
    │
    ▼
TurtleBot3

즉, 키보드를 직접 Gazebo가 읽는 것이 아니라 turtlebot3_teleop이라는 ROS Node가 키보드 입력을 받아 /cmd_vel Topic으로 이동 명령을 발행합니다.


/cmd_vel 확인

다른 Ubuntu 터미널을 하나 더 열어 다음을 실행합니다.

ros2 topic echo /cmd_vel

Teleop 터미널에서 이동 키를 누르면 /cmd_vel 메시지를 확인할 수 있습니다.

TurtleBot3의 이동에는 일반적으로 다음 메시지 타입을 사용합니다.

ros2 topic type /cmd_vel

다음과 같이 나타납니다.

geometry_msgs/msg/Twist

Twist 메시지는 크게 두 부분으로 구성됩니다.

Twist
 ├── linear
 │     ├── x
 │     ├── y
 │     └── z
 │
 └── angular
       ├── x
       ├── y
       └── z

차동구동 방식의 TurtleBot3에서는 주로

linear.x
angular.z

를 사용합니다.

linear.x는 전진과 후진 속도를 나타내고 angular.z는 좌우 회전 속도를 나타냅니다.


 

명령어로 TurtleBot3 직접 전진시키기

Teleop 프로그램 없이 ROS 명령으로 직접 /cmd_vel 메시지를 발행할 수도 있습니다.

전진 명령은 다음과 같습니다.

ros2 topic pub --rate 10 \
/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.2}, angular: {z: 0.0}}"

이 명령은 초당 10회 이동 명령을 계속 발행합니다.

구조는 다음과 같습니다.

ROS CLI
   │
   │ Twist
   ▼
/cmd_vel
   │
   ▼
TurtleBot3
   │
   ▼
전진

중지하려면 Ctrl + C를 누릅니다.


TurtleBot3 정지

정지 명령을 한 번 발행합니다.

ros2 topic pub --once \
/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.0}, angular: {z: 0.0}}"

선속도와 각속도를 모두 0으로 설정했기 때문에 로봇이 정지합니다.


TurtleBot3 회전

제자리에서 회전시키려면 선속도를 0으로 하고 angular.z 값을 지정합니다.

ros2 topic pub --rate 10 \
/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.0}, angular: {z: 0.5}}"

반대 방향으로 회전하려면 음수 값을 사용합니다.

ros2 topic pub --rate 10 \
/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 0.0}, angular: {z: -0.5}}"

RViz2와 Gazebo의 차이

ROS 2를 처음 접하면 Gazebo와 RViz2의 역할을 혼동하기 쉽습니다.

Gazebo는 로봇과 주변 환경을 물리적으로 시뮬레이션하는 프로그램입니다.

RViz2는 ROS 2에서 전달되는 데이터를 시각화하는 프로그램입니다.

구조를 단순화하면 다음과 같습니다.

                    ROS 2
                      │
          ┌───────────┴───────────┐
          │                       │
          ▼                       ▼
       Gazebo                   RViz2
          │                       │
     물리 시뮬레이션           데이터 시각화
          │                       │
     ┌────┼────┐           ┌──────┼──────┐
     │    │    │           │      │      │
   Robot World Sensor      TF    Map   LiDAR

예를 들어 Gazebo 안에서 LiDAR 센서를 장착한 TurtleBot3를 움직이면 Gazebo가 가상의 레이저 거리 데이터를 생성합니다.

이 데이터가 ROS 2의 /scan Topic으로 전달되고 RViz2에서는 이를 그래픽으로 표시할 수 있습니다.


ROS 2와 TurtleBot3 전체 동작 구조

지금까지 설치한 환경을 전체적으로 연결하면 다음과 같습니다.

Windows 11
    │
    │
    └── WSL2
          │
          └── Ubuntu 24.04
                  │
                  ├── WSLg
                  │
                  └── ROS 2 Jazzy
                         │
              ┌──────────┼──────────┐
              │          │          │
              ▼          ▼          ▼
           Teleop       RViz2    ros_gz_bridge
              │                     │
              │ /cmd_vel            ▼
              │               Gazebo Harmonic
              │                     │
              └────────────────────►│
                                    │
                              TurtleBot3
                                    │
                     ┌──────────────┼─────────────┐
                     │              │             │
                   /odom           /tf          /scan
                     │              │             │
                     └──────────────┼─────────────┘
                                    ▼
                                  RViz2

사용자가 키보드를 누르면 turtlebot3_teleop Node가 geometry_msgs/msg/Twist 메시지를 생성합니다.

이 메시지가 /cmd_vel Topic을 통해 전달되고 Gazebo 속 TurtleBot3가 움직입니다.

Gazebo에서는 로봇의 이동과 센서를 시뮬레이션하고 Odometry, TF, LiDAR 등의 데이터가 ROS 2로 전달됩니다.

RViz2에서는 이 데이터를 시각적으로 확인할 수 있습니다.


WSL에서 Gazebo나 RViz2가 느린 경우

간단한 X Window 프로그램은 정상인데 Gazebo나 RViz2가 매우 느리다면 그래픽 가속 상태를 확인합니다.

먼저 OpenGL 도구를 설치합니다.

sudo apt install -y mesa-utils

확인합니다.

glxinfo -B

다음 항목을 살펴봅니다.

OpenGL vendor string
OpenGL renderer string
OpenGL version string

NVIDIA GPU가 장착된 시스템이라면 다음 명령도 실행해 봅니다.

nvidia-smi

WSL에서 NVIDIA GPU 정보가 정상적으로 나타나는지 확인합니다.

WSL에서는 Windows의 GPU 드라이버와 연동하는 구조이므로 Linux용 NVIDIA 그래픽 드라이버를 Ubuntu 내부에 무작정 다시 설치하지 않는 것이 중요합니다.


자주 사용하는 명령

Windows PowerShell에서 Ubuntu를 시작합니다.

wsl -d Ubuntu-24.04

WSL을 완전히 종료합니다.

wsl --shutdown

Ubuntu에서 홈 디렉터리로 이동합니다.

cd ~

ROS 버전을 확인합니다.

echo $ROS_DISTRO

ROS Node를 확인합니다.

ros2 node list

ROS Topic을 확인합니다.

ros2 topic list

Topic의 메시지 타입을 확인합니다.

ros2 topic type /cmd_vel

Topic 데이터를 실시간으로 확인합니다.

ros2 topic echo /cmd_vel

Gazebo를 실행합니다.

gz sim

RViz2를 실행합니다.

rviz2

TurtleBot3 모델을 설정합니다.

export TURTLEBOT3_MODEL=burger

TurtleBot3 Gazebo 환경을 실행합니다.

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

키보드로 TurtleBot3를 조종합니다.

ros2 run turtlebot3_teleop teleop_keyboard

정리

Windows 11에서 WSL2를 이용하면 별도의 Linux PC나 듀얼부팅 환경을 만들지 않고도 상당히 완전한 Ubuntu 개발 환경을 구성할 수 있습니다.

특히 WSLg를 이용하면 RViz2와 Gazebo 같은 Linux GUI 프로그램도 Windows 화면에 직접 실행할 수 있습니다.

이번 과정에서 구성한 환경은 다음과 같습니다.

Windows 11
     ↓
WSL2
     ↓
Ubuntu 24.04
     ↓
WSLg
     ↓
ROS 2 Jazzy
     ↓
Gazebo Harmonic
     ↓
TurtleBot3
     ↓
Teleoperation

 

여기에서 중요한 것은 단순히 TurtleBot3를 움직이는 것이 아니라 ROS 2의 데이터 흐름을 이해하는 것입니다.

Node
 ↓
Publisher
 ↓
Topic
 ↓
Message
 ↓
Subscriber
 ↓
Robot

 

TurtleBot3에서는 이를 구체적으로 다음과 같이 확인할 수 있습니다.

Keyboard
 ↓
turtlebot3_teleop Node
 ↓
geometry_msgs/msg/Twist
 ↓
/cmd_vel
 ↓
Gazebo
 ↓
TurtleBot3

 

그리고 로봇이 움직이면 반대 방향으로 센서와 상태 데이터가 생성됩니다.

TurtleBot3
 ↓
Gazebo
 ↓
/odom   /tf   /scan
 ↓
ROS 2
 ↓
RViz2

 

WSL2 + Ubuntu 24.04 + ROS 2 Jazzy + Gazebo Harmonic + TurtleBot3 환경은 ROS 2의 Node, Topic, Message, TF, Odometry, LiDAR 등의 기본 개념을 실습하기에 좋은 환경입니다.