Post

VSCode + Docker로 ROS 2 개발 환경 구축

ROS 2를 직접 설치하지 않고 개발하는 방법

개요

  • 2025년 기준으로 주로 사용하는 ROS2 LTS distro는 ros:foxy, ros:humble이 있음
  • 각 distro는 Ubuntu OS의 버전에 맞춰야하는 호환성 문제가 있음
  • 이러한 문제를 해결하기 위하여 Docker를 이용한 ROS 2 개발 환경을 구축방법을 기술

목적

  • 사용하는 OS에 ROS 2를 설치하지 않고 개발환경 구축
  • 깨끗하고 독립적인 개발 환경 유지 가능
  • 쉽게 공유 및 배포 가능
  • VSCode에서 자동완성(IntelliSense) 및 오류 감지 지원

repository

프로젝트 템플릿을 아래와 같이 구성함 (C++ 패키지 구성)

구성 방법

아래 예시는 humble을 기준으로 진행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
├── .devcontainer
│   ├── devcontainer.json  # VSCode Dev Containers 설정 파일
├── Dockerfile             # Docker container ROS2 환경 설정 파일
├── entrypoint.sh          # 컨테이너 실행 시 ROS2 환경 설정
├── talker_cpp             # 예제 ROS2 패키지
│   ├── CMakeLists.txt
│   ├── include
│   │   └── MinimalPublisher.hpp
│   ├── launch
│   │   └── talker.launch.py
│   ├── package.xml
│   └── src
│       └── MinimalPublisher.cc

1단계: 프로젝트 클론하기

1
2
git clone https://github.com/grade-e/ros2-humble-cpp-container-template
cd ros2-humble-cpp-container-template

2단계: 프로젝트 빌드하기

1
docker build --no-cache -t ros2-humble-dev .
  • ros:humble을 기반으로 ROS 2 패키지 및 개발 도구 설치
  • ROS 2 colcon workspace 생성 및 빌드

3단계: VSCode에서 Dev Containers 실행하기

VSCode GUI에서 실행

  1. 프로젝트 폴더를 VSCode에서 엽니다.
  2. 왼쪽 아래의 “Reopen in Container” 버튼을 클릭
  3. 컨테이너가 시작되면 자동으로 ROS 2 환경이 설정

4단계: ROS 2 환경 확인

컨테이너 내부에서 아래 명령어를 실행하여 ROS 2가 올바르게 설정되었는지 확인

1
2
3
source /opt/ros/humble/setup.bash
source /root/ros2_ws/install/setup.bash
ros2 launch talker_cpp talker.launch.py

실행 결과

1
2
3
4
5
6
7
8
[INFO] [launch]: All log files can be found below /root/.ros/log/2025-03-16-07-57-08-527471-385bf91d03e5-73
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [talker-1]: process started with pid [74]
[talker-1] [INFO] [1742111829.364038141] [talker]: Publishing: 'Hello, world! 0'
[talker-1] [INFO] [1742111829.864286914] [talker]: Publishing: 'Hello, world! 1'
[talker-1] [INFO] [1742111830.364569685] [talker]: Publishing: 'Hello, world! 2'
[talker-1] [INFO] [1742111830.864718566] [talker]: Publishing: 'Hello, world! 3'
[talker-1] [INFO] [1742111831.365098585] [talker]: Publishing: 'Hello, world! 4'
This post is licensed under CC BY 4.0 by the author.