| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 오류역전파
- 캐글
- 인공지능 수학
- ncbi
- 이항분포
- 로제타폴드
- AP
- 파이썬
- bioinformatics
- Kaggle
- 단백질 구조 예측
- BLaST
- Java
- 인공신경망
- 딥러닝
- 생물정보학
- 터틀봇
- COVID
- 생명정보학
- CNN
- 자바
- 결정트리
- 알파폴드
- AP Computer Science A
- ROS2
- 서열정렬
- 인공지능
- SVM
- 바이오인포매틱스
- 바이오파이썬
- Today
- Total
데이터 과학
Windows 11 WSL2에서 Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, TurtleBot3 본문
Windows 11 WSL2에서 Ubuntu 24.04, ROS 2 Jazzy, Gazebo Harmonic, TurtleBot3
티에스윤 2026. 9. 21. 16:06Windows 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 등의 기본 개념을 실습하기에 좋은 환경입니다.
'인공지능 > 피지컬 AI' 카테고리의 다른 글
| Ubuntu 24.04와 ROS 2 Jazzy에서 PuppyPi 4족 보행 로봇 (0) | 2026.09.21 |
|---|---|
| ROS 2 Jazzy와 Gazebo Harmonic에서 TurtleBot3 시뮬레이션 (0) | 2026.09.21 |
| Ubuntu 26.04 + ROS 2 Lyrical + Gazebo Jetty 설치 (0) | 2026.09.12 |
| PiDog에 프로그램을 넣는 방법 (0) | 2026.09.10 |
| TurtleBot3와 ROS 2 이해하기 (0) | 2026.09.07 |