Windows 10에서 WSL2로 ROS2 Jazzy 설치하기 (실수까지 포함한 완벽 가이드)
로보틱스 회사 지원을 준비하면서 ROS2를 처음 설치해봤습니다. Windows 환경에서 WSL2로 ROS2를 깐 과정을 — 중간에 만난 실수와 해결 방법까지 포함해서 — 정리했습니다. 이 글 따라 하면 누구나 깔 수 있습니다.
목차
- ROS2를 왜 WSL2에 깔아야 하나
- 사전 환경 확인
- WSL2 + Ubuntu 설치
- 첫 번째 함정: Ubuntu 22.04 vs 24.04
- 시스템 기본 설정 (Locale)
- ROS2 저장소 등록 — 각 단계가 뭘 하는지
- ROS2 Jazzy 본체 설치
- 환경변수 설정 + rosdep 초기화
- 동작 테스트 (Talker / Listener)
- 개발에 필요한 추가 패키지
- 자주 만나는 문제와 해결
1. ROS2를 왜 WSL2에 깔아야 하나
ROS2는 공식적으로 Windows·macOS도 지원하지만, 사실상 Linux(Ubuntu) 전용입니다.
| OS | 지원 등급 | 현실 |
|---|---|---|
| Ubuntu Linux | Tier 1 (공식) | 자율주행 회사 100% 사용 |
| Windows 네이티브 | Tier 3 | 일부 패키지만 동작 |
| macOS | Tier 3 | 데모·학습용 |
| WSL2 Ubuntu | Tier 1 (Ubuntu와 동일) | Windows에서 Linux 그대로 사용 ⭐ |
특히 iceoryx, ros2_tracing(LTTng), Real-time(PREEMPT_RT) 같은 핵심 도구는 Linux에서만 제대로 동작합니다.
WSL2는 진짜 Linux 커널을 Windows에서 돌리는 것 입니다. 가상머신과 달리 매우 가볍고, 네이티브 Ubuntu와 거의 동일하게 동작합니다.
결론: Windows 10/11 사용자라면 WSL2 + Ubuntu가 정답.
2. 사전 환경 확인
PowerShell(관리자)에서 다음 명령으로 현재 상태 확인합니다.
wsl --status
wsl --list --verbose
wsl --version
확인할 것:
- WSL 기본 버전이
2인지 - Ubuntu 배포판이 이미 깔려있는지
저는 Docker Desktop 때문에 docker-desktop 배포판만 보였고, 개발용 Ubuntu는 없는 상태였습니다.
디스크 공간도 확인합니다. Ubuntu + ROS2 풀 설치에 약 15GB 필요합니다.
Get-PSDrive C | Select-Object Used, Free
3. WSL2 + Ubuntu 설치
Microsoft Store에서 설치 (권장)
- Win 키 → "Microsoft Store" 검색해서 열기
- 검색창에 "Ubuntu" 입력
- "Ubuntu 22.04.x LTS" 또는 "Ubuntu" (최신 LTS) 설치
- 설치 완료 후 [열기] 클릭
명령어로 설치 (대안)
# 관리자 PowerShell
wsl --install -d Ubuntu
첫 실행 — 사용자 계정 생성
검은 창이 뜨면서:
Enter new UNIX username:
- Username: 영문 소문자만 (예:
myname) — 띄어쓰기·특수문자 불가 - Password: 비밀번호 입력 (화면에 안 보이는 게 정상, 두 번 입력)
이 비밀번호는 매번 sudo 쓸 때 필요하니 꼭 기억하세요.
4. 첫 번째 함정: Ubuntu 22.04 vs 24.04
여기서 제가 한 실수를 공유합니다.
처음에 wsl --install -d Ubuntu-22.04 명령으로 22.04를 깔려고 했더니 다음 에러가 났습니다.
배포 이름이 잘못되었습니다. 'Ubuntu-22.04'.
유효한 배포 목록을 보려면 'wsl.exe --list --online'를 사용하세요.
오류 코드: Wsl/InstallDistro/WSL_E_DISTRO_NOT_FOUND
wsl --list --online 으로 확인해보니 그냥 Ubuntu만 있고 버전 명시된 항목이 없었습니다. 그래서 Microsoft Store에서 깔았더니 Ubuntu 24.04 (Noble) 가 설치됐습니다.
$ lsb_release -a
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
ROS2 버전 선택
Ubuntu 버전에 따라 ROS2 버전이 정해집니다.
| Ubuntu | ROS2 LTS | 지원 종료 |
|---|---|---|
| 22.04 (Jammy) | Humble | 2027.05 |
| 24.04 (Noble) | Jazzy ⭐ | 2029.05 |
저는 24.04가 깔린 김에 Jazzy로 진행했습니다. 핵심 기능(iceoryx, SROS2, ros2_tracing 등)은 두 버전 모두 지원하고, 회사 자격요건에는 특정 ROS2 버전 명시가 없으니 그대로 진행해도 됩니다.
만약 Humble이 꼭 필요하면 Microsoft Store에서 "Ubuntu 22.04.x LTS"를 명시적으로 설치하면 됩니다.
5. 시스템 기본 설정 (Locale)
이제부터는 Ubuntu 터미널에서 작업합니다.
시스템 업데이트
sudo apt update && sudo apt upgrade -y
5분 정도 걸립니다. 처음 sudo 사용 시 비밀번호 물어봅니다.
필수 도구 설치
sudo apt install -y curl gnupg lsb-release software-properties-common locales
Locale을 UTF-8로
ROS2는 UTF-8 locale을 필요로 합니다.
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
마지막 locale 출력에 LANG=en_US.UTF-8이 보이면 OK입니다.
6. ROS2 저장소 등록 — 각 단계가 뭘 하는지
명령어를 그냥 복붙하기 전에, 각 단계가 무슨 일을 하는지 알면 다른 패키지 설치할 때도 응용 가능합니다.
Linux의 apt는 앱스토어라고 생각하면 쉽습니다. apt가 패키지를 받아오려면:
- 저장소 주소 등록
- 그 저장소가 진짜인지 검증할 인증키 등록
- 새 저장소의 패키지 목록 갱신
ROS2는 Ubuntu 기본 저장소에 없어서 직접 추가해야 합니다.
Step 1. Universe 저장소 활성화
sudo add-apt-repository universe -y
Ubuntu 저장소는 4종류로 나뉩니다.
| 저장소 | 설명 |
|---|---|
main |
캐노니컬 공식 지원 (기본 활성) |
universe |
커뮤니티 유지보수 오픈소스 ← 이걸 켬 |
restricted |
독점 드라이버 |
multiverse |
라이선스 제약 |
ROS2 의존성 일부가 universe에 있어서 활성화해야 합니다. 앱스토어에 "커뮤니티 앱 표시" 옵션 ON 같은 개념입니다.
Step 2. ROS2 GPG 키 등록
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
ROS2 공식 서명키를 다운로드해서 /usr/share/keyrings/ 폴더에 저장합니다.
왜 필요? — 패키지가 진짜 ROS2 공식인지 검증하기 위함입니다. 가짜 서버가 있어도 서명키가 다르면 apt가 거부합니다. 보안 핵심입니다.
비유하자면 새 출판사 인감을 등록하는 것입니다.
확인:
ls -lh /usr/share/keyrings/ros-archive-keyring.gpg
Step 3. ROS2 저장소 주소 등록
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
긴 명령이지만 분해하면 단순합니다.
| 부분 | 의미 |
|---|---|
deb [...] |
deb 패키지 저장소 |
arch=$(dpkg --print-architecture) |
CPU 아키텍처 자동 입력 (amd64/arm64) |
signed-by=... |
Step 2에서 등록한 키로 검증 |
http://packages.ros.org/ros2/ubuntu |
저장소 서버 |
$(. /etc/os-release && echo $UBUNTU_CODENAME) |
Ubuntu 코드명 자동 입력 (noble) |
| sudo tee /etc/apt/sources.list.d/ros2.list |
ros2.list 파일로 저장 |
확인:
cat /etc/apt/sources.list.d/ros2.list
다음과 비슷하게 보이면 OK:
deb [arch=amd64 signed-by=...] http://packages.ros.org/ros2/ubuntu noble main
Step 4. 패키지 목록 갱신
sudo apt update
새 저장소가 인식되면서 ROS2 패키지 목록이 받아집니다. 도서관 신간 카탈로그 갱신과 비슷합니다.
확인 — 출력에 packages.ros.org 가 보여야 합니다.
7. ROS2 Jazzy 본체 설치
이제 본격 설치입니다. 약 1GB 다운로드, 설치 후 약 3GB를 차지합니다.
sudo apt install -y \
ros-jazzy-desktop \
python3-colcon-common-extensions \
python3-rosdep \
python3-pip \
python3-argcomplete
💡 Ubuntu 22.04를 쓰신다면
ros-jazzy-desktop→ros-humble-desktop으로 바꾸시면 됩니다.
10~15분 정도 걸립니다. 메시지 폭포처럼 쏟아지는 게 정상입니다.
설치 확인
ls /opt/ros/jazzy/
bin, lib, share, setup.bash 등이 보이면 성공입니다.
8. 환경변수 설정 + rosdep 초기화
rosdep 초기화
rosdep는 ROS2 패키지의 시스템 의존성을 자동 설치해주는 도구입니다.
sudo rosdep init
rosdep update
updated cache 메시지까지 보이면 OK.
자동 source 설정
매번 터미널 열 때마다 ROS2 환경이 자동 로드되게 ~/.bashrc에 추가합니다.
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc
확인
echo $ROS_DISTRO
출력이 jazzy이면 ROS2 설치 완료입니다.
9. 동작 테스트 (Talker / Listener)
ROS2가 정상 동작하는지 테스트합니다. 터미널 2개가 필요합니다.
터미널 1 (지금 창)
ros2 run demo_nodes_cpp talker
출력:
[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
...
터미널 2 (새 창)
새 Ubuntu 창을 여는 방법:
- Windows Terminal: 위쪽
+또는Ctrl+Shift+T - 시작메뉴에서 Ubuntu 다시 클릭
- PowerShell에서
wsl입력
새 터미널에서:
ros2 run demo_nodes_py listener
출력:
[INFO] [listener]: I heard: [Hello World: 5]
[INFO] [listener]: I heard: [Hello World: 6]
...
두 터미널이 통신하면 🎉 ROS2 정상 동작입니다. 종료는 각 터미널에서 Ctrl+C.
10. 개발에 필요한 추가 패키지
기본 설치만으로도 학습은 가능하지만, 실습 프로젝트엔 다음이 추가로 필요합니다.
빌드 도구
sudo apt install -y python3-colcon-mixin python3-vcstool git build-essential cmake
MQTT 관련 (IoT 연동)
sudo apt install -y mosquitto mosquitto-clients
pip3 install paho-mqtt --break-system-packages
ros2_tracing (성능 분석)
sudo apt install -y ros-jazzy-tracetools ros-jazzy-ros2trace
SROS2 (보안 통신)
sudo apt install -y ros-jazzy-sros2
💡 위 4개는 나중에 필요할 때 깔아도 됩니다. 우선 ROS2 기본만으로 학습 시작 가능합니다.
11. 자주 만나는 문제와 해결
문제 1. WSL에서 복사·붙여넣기가 안 됨
Linux 터미널은 Ctrl+C/Ctrl+V가 안 통합니다. (Ctrl+C는 명령 중단용)
해결:
- 마우스 우클릭 — 자동 붙여넣기
- Ctrl + Shift + V — 키보드 붙여넣기
- 마우스 휠 클릭 — 가운데 버튼 붙여넣기
문제 2. wsl --install -d Ubuntu-22.04 안 됨
WSL 온라인 목록에 22.04가 없을 수 있습니다.
해결:
- Microsoft Store에서 "Ubuntu 22.04.x LTS" 검색해서 설치
- 또는 Ubuntu 24.04 + ROS2 Jazzy로 진행
문제 3. sudo apt update 시 GPG 에러
Step 2 키 등록 실패 가능성. 다시 시도:
sudo rm /usr/share/keyrings/ros-archive-keyring.gpg
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
sudo apt update
문제 4. ros2: command not found
source 안 됐을 때 발생.
해결:
source /opt/ros/jazzy/setup.bash
매번 치기 귀찮으면 Step 8의 echo "source ..." >> ~/.bashrc 다시 실행.
문제 5. pip install 시 externally-managed-environment 에러
Ubuntu 24.04부터 시스템 Python에 직접 pip 설치를 막습니다.
해결:
- 임시:
pip install <pkg> --break-system-packages - 권장:
python3 -m venv ~/myenv && source ~/myenv/bin/activate후 pip 사용
마치며
여기까지 따라오셨다면:
- WSL2 위에 Ubuntu 24.04(또는 22.04)
- ROS2 Jazzy(또는 Humble)
- 첫 Pub/Sub 노드 동작 확인
까지 끝낸 셈입니다. 디스크 사용량은 약 7~10GB.
다음 단계:
- ROS2 공식 튜토리얼: https://docs.ros.org/en/jazzy/Tutorials.html
- Python rclpy 첫 노드 작성
- Custom 메시지 정의
저는 12일 학습 계획으로 Zero-Copy IPC 벤치마크와 SROS2 보안 적용까지 진행하고 있습니다. 결과는 추후 글로 정리하겠습니다.
질문이나 막힌 부분 있으면 댓글 남겨주세요.
참고 자료
태그: #ROS2 #Jazzy #WSL2 #Ubuntu #로보틱스 #자율주행 #개발환경 #Linux