안정적이고 기능적인 개발 환경을 구축하는 것은 성공적인 ROS 2 프로젝트의 초석입니다. 이 섹션에서는 환경 소싱이라는 가장 기본적인 요구사항부터 필수 확장 프로그램으로 완벽하게 구성된 작업 공간에 이르기까지, 중요한 전제 조건들을 체계적으로 다룹니다.
환경 소싱은 초보 개발자들이 가장 흔하게 겪는 실패 지점입니다. 이는 단순히 실행해야 할 명령어가 아니라, VS Code와 그 자식 프로세스(터미널, 디버거 등)가 상속받아야 하는 전체 셸 환경(PATH, LD_LIBRARY_PATH, AMENT_PREFIX_PATH 등)을 설정하는 핵심적인 과정이기 때문입니다.
ROS 2 Humble을 위한 기본 소싱 명령어는 다음과 같습니다.1
source /opt/ros/humble/setup.bash
하지만 이것만으로는 충분하지 않습니다. 개발 중인 패키지들이 포함된 작업 공간의 오버레이(overlay) 환경 또한 소싱해야 합니다.2
source ~/ros2_ws/install/setup.bash
가장 중요하고 올바른 절차는 터미널을 열고, ROS 2 기본 환경과 작업 공간 환경을 순서대로 소싱한 후, 바로 그 터미널에서 VS Code를 실행하는 것입니다.3
# 1. 새 터미널 열기
# 2. ROS 2 기본 환경 소싱
source /opt/ros/humble/setup.bash
# 3. 작업 공간(workspace) 환경 소싱
cd ~/ros2_ws
source./install/setup.bash
# 4. 현재 터미널에서 VS Code 실행
code.
이 절차를 따르면 VS Code 인스턴스가 완벽하게 구성된 환경 변수들을 상속받아, ROS 2 관련 명령어나 라이브러리를 문제없이 찾을 수 있습니다. 만약 이 과정을 제대로 따르지 않으면, librclcpp.so: cannot open shared object file과 같은 공유 라이브러리 로딩 오류가 발생하게 됩니다.5 이는 디버거 실행 시 preLaunchTask를 통해 환경을 소싱하려는 시도에서도 흔히 나타나는 문제인데, 해당 태스크의 셸 환경이 디버그 프로세스에 지속적으로 적용되지 않기 때문입니다.5
ROS 2 환경을 VS Code에 적용하는 데에는 편의성과 안정성 측면에서 서로 다른 장단점을 가진 세 가지 접근 방식이 존재합니다.
preLaunchTask를 이용한 소싱. 이 방법은 태스크 셸의 환경이 지속되지 않아 디버그 세션에서 공유 라이브러리 오류를 일으키는 경우가 많아 권장되지 않습니다.5code.). 이 방법은 간단하고 효과적이지만, VS Code를 시작할 때마다 반복해야 하는 수동적인 단계입니다.3devcontainer.json과 Dockerfile을 통해 개발 환경 자체를 코드로 정의하여, 환경 설정 과정을 완벽하게 자동화하고 재현성을 보장합니다. 컨테이너의 .bashrc를 수정하거나 postAttachCommand를 사용하는 것은 이러한 자동화의 정점이라 할 수 있습니다.7이 보고서는 이 세 가지 방법을 결함이 있는 접근법에서부터 간단한 해결책, 그리고 전문가 수준의 자동화된 표준으로 이어지는 발전 과정으로 제시하여, 사용자가 명확한 학습 경로를 따라갈 수 있도록 안내할 것입니다.
전문적인 ROS 2 개발 환경의 근간을 이루는 엄선된 확장 프로그램 목록입니다.
핵심은 Microsoft ROS 확장 프로그램입니다.9 이 확장 프로그램은 자동 환경 구성, 빌드 태스크 생성, 런치 디버깅, URDF 프리뷰, 상태 모니터링 등 ROS 개발에 필수적인 기능들을 통합 제공합니다. 또한, C/C++와 Python 같은 필수 의존성 확장 프로그램들을 자동으로 설치해줍니다.8 이 외에도 CMake Tools, Dev Containers, 그리고 생산성을 높여주는 Colcon Tasks, Error Lens 등이 강력하게 권장됩니다.8 Docker 기반 환경 관리를 전문적으로 돕는 ros2env 확장 프로그램도 있지만, 이는 보다 범용적인 Dev Container 접근 방식과 비교하여 선택할 수 있습니다.13
표 1: ROS 2 Humble을 위한 필수 및 권장 VS Code 확장 프로그램
| 카테고리 | 확장 프로그램 이름 | 게시자 | 핵심 기능 및 역할 |
|---|---|---|---|
| 필수 | ROS | Microsoft | ROS 1/2 통합, 디버깅, 빌드 태스크, URDF 프리뷰 등 핵심 기능 제공 9 |
| C/C++ | Microsoft | C++ 언어 지원, IntelliSense, 디버깅 12 | |
| Python | Microsoft | Python 언어 지원, IntelliSense, 디버깅 12 | |
| Pylance | Microsoft | 고성능 Python 언어 서버, 타입 체킹, 자동 완성 8 | |
| Dev Containers | Microsoft | Docker 컨테이너를 완전한 개발 환경으로 사용하도록 지원 7 | |
| 생산성 향상 | CMake Tools | Microsoft | CMake 프로젝트 관리 및 빌드, IntelliSense 연동 10 |
| Colcon Tasks | Decent Engineering | Colcon 빌드, 테스트, 클린 태스크를 VS Code UI에 통합 12 | |
| Ruff | Astral Software | 극도로 빠른 Python 린터 및 포맷터 8 | |
| Black Formatter | Microsoft | 일관된 Python 코드 스타일을 위한 포맷터 8 | |
| Error Lens | Alexander | 코드 내 오류와 경고를 인라인으로 강조 표시 8 | |
| GitLens | GitKraken | 코드 라인별 Git 기록(blame) 및 히스토리 시각화 | |
| Markdown All in One | Yu Zhang | 마크다운 문서 작성 편의성 향상 (TOC, 프리뷰 등) 8 |
작업 공간의 루트 디렉터리에 위치하는 .vscode 폴더는 VS Code의 동작을 제어하는 네 가지 핵심 설정 파일(settings.json, c_cpp_properties.json, tasks.json, launch.json)을 담고 있습니다.12 많은 사용자들이 이 폴더를 src 디렉터리나 홈 디렉터리에 만드는 실수를 범하는데, 반드시 작업 공간의 최상위 루트(예: ~/ros2_ws/)에 생성해야 합니다.12 각 파일의 상세한 역할은 이어지는 섹션에서 깊이 있게 다룰 것입니다.
VS Code 설정은 사용자 전역 설정(~/.config/Code/User/settings.json)과 작업 공간별 설정(<ws>/.vscode/settings.json)으로 나뉩니다.12 가장 효과적인 전략은 테마나 폰트 크기처럼 기기나 사용자 개인의 취향에 따른 설정은 전역 파일에, 프로젝트 자체에 특화된 설정(예: Python 경로, 린터 구성, ROS 배포판 지정)은 작업 공간의 .vscode/settings.json에 배치하는 것입니다.
이러한 관심사의 분리는 프로젝트의 이식성과 재현성을 극대화합니다. 예를 들어, 다른 개발자가 Git 저장소를 복제하여 VS Code에서 열었을 때, 작업 공간에 포함된 .vscode 설정 덕분에 별도의 구성 없이도 즉시 올바른 IntelliSense와 빌드 환경이 적용됩니다. 이는 개인의 전역 설정을 오염시키지 않으면서 팀 협업을 원활하게 만드는 핵심적인 모범 사례입니다.
이 섹션에서는 완벽한 코드 인텔리전스와 자동화된 빌드 환경을 구축하여, 원활한 C++ 개발 경험을 위한 VS Code 설정 방법을 심도 있게 다룹니다.
C++ IntelliSense를 설정하는 두 가지 주요 방법이 있습니다.
방법 1: 수동 includePath 구성 (기본 접근법)
가장 기본적인 방법은 c_cpp_properties.json 파일에 필요한 헤더 파일 경로를 직접 명시하는 것입니다. 아래는 ROS 2 Humble 설치 경로와 현재 작업 공간의 헤더를 포함하는 기본적인 설정 예시입니다.8
{
"configurations":,
"defines":,
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
다만 ${workspaceFolder}/**처럼 작업 공간 전체를 재귀적으로 포함하면, 수많은 헤더 파일로 인해 IntelliSense가 혼란을 겪을 수 있으므로 필요한 경우 더 구체적인 하위 폴더 경로(예: ${workspaceFolder}/src/my_package/include)를 추가하는 것이 좋습니다.8
방법 2: compile_commands.json 활용 (전문가 표준)
이 방법은 C++ IntelliSense를 위한 가장 정확하고 강력한 전문가 표준입니다.8
compile_commands.json 파일은 빌드 시스템이 각 소스 파일을 컴파일할 때 사용하는 정확한 플래그와 정의, 포함 경로의 전체 맵을 담고 있는 JSON 데이터베이스입니다. colcon 빌드 시 특정 인자를 추가하여 이 파일을 생성할 수 있습니다.
colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
이 명령을 실행하면 작업 공간의 build 디렉터리에 compile_commands.json 파일이 생성됩니다. 이제 c_cpp_properties.json 파일을 다음과 같이 수정하여 IntelliSense가 이 파일을 직접 참조하도록 설정합니다.
{
"configurations":,
"version": 4
}
이 방식은 단순한 설정 팁을 넘어 개발 워크플로우의 패러다임을 바꿉니다. 성공적인 빌드가 편집기의 지능을 직접적으로 향상시키는 공생 관계가 형성되기 때문입니다. 개발자가 코드를 작성하면, compile_commands.json을 통해 컴파일러와 동일한 시각을 갖게 된 IntelliSense가 완벽한 자동 완성 및 오류 검사를 제공합니다. 이후 colcon build를 실행하면 실행 파일이 생성될 뿐만 아니라 compile_commands.json이 최신 상태로 갱신되어, 새로 추가된 파일이나 의존성에 대한 정보가 즉시 편집기에 반영됩니다. 따라서 colcon build는 단순한 컴파일 단계를 넘어, ‘스마트한’ 편집 환경을 유지하는 핵심적인 과정이 됩니다.
VS Code의 태스크 기능을 사용하면 colcon 빌드, 테스트, 클린 명령을 자동화하여 개발 효율을 극대화할 수 있습니다. .vscode/tasks.json 파일을 생성하고 아래와 같이 구성합니다.8
{
"version": "2.0.0",
"tasks":
},
{
"label": "colcon build package",
"type": "shell",
"command": "colcon build --symlink-install --packages-select ${input:packageName} --cmake-args -DCMAKE_BUILD_TYPE=Debug",
"problemMatcher": ["$gcc"]
},
{
"label": "colcon test",
"type": "shell",
"command": "colcon test --packages-select ${input:packageName}",
"problemMatcher":
},
{
"label": "clean workspace",
"type": "shell",
"command": "rm -rf build/ install/ log/",
"problemMatcher":
}
],
"inputs":
}
이 설정은 다음과 같은 태스크들을 제공합니다:
colcon build (debug): 작업 공간 전체를 디버그 모드로 빌드합니다. --symlink-install은 빌드 시간을 단축시키는 모범 사례이며 17,
-DCMAKE_BUILD_TYPE=Debug는 디버깅에 필요한 심볼을 포함시킵니다.15 이 태스크는
Ctrl+Shift+B 단축키로 실행되도록 기본 빌드 태스크로 지정되었습니다.8
colcon build package: 사용자에게 패키지 이름을 입력받아 해당 패키지만 개별적으로 빌드합니다.15
colcon test: 선택된 패키지의 테스트를 실행합니다.8
clean workspace: build, install, log 디렉터리를 삭제하여 작업 공간을 정리합니다.8
이 태스크들은 Ctrl+Shift+P를 눌러 명령 팔레트를 열고 “Run Task”를 입력하여 실행할 수 있습니다.
VS Code 환경은 핵심적인 ROS 2 개발 프로세스와 긴밀하게 연결됩니다. 새로운 C++ 패키지는 작업 공간의 src 디렉터리 내에서 다음 명령어로 생성합니다.19
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake --license Apache-2.0 my_cpp_package
이렇게 생성된 패키지는 CMakeLists.txt, package.xml, src/, include/ 등의 기본 구조를 가집니다.20
CMakeLists.txt 파일에서는 add_executable로 노드를 정의하고, ament_target_dependencies로 의존성을 연결하며, install 규칙을 통해 실행 파일과 런치 파일을 설치 위치에 복사하도록 지정하는 것이 중요합니다.19 VS Code는 작업 공간의 루트에서 열어야 이 모든 과정을 원활하게 관리할 수 있습니다.4
이 섹션은 C++ 섹션과 마찬가지로, 생산성 높은 Python 개발 환경을 구축하는 데 초점을 맞춥니다.
VS Code에서 ROS 2 Python 모듈을 찾지 못하는 것은 매우 흔한 문제입니다. 이 문제는 작업 공간의 .vscode/settings.json 파일에 Python 분석기가 참조할 추가 경로를 지정하여 해결할 수 있습니다.8
{
"python.autoComplete.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages",
"${workspaceFolder}/install/my_python_package/lib/python3.10/site-packages"
],
"python.analysis.extraPaths": [
"/opt/ros/humble/lib/python3.10/site-packages",
"/opt/ros/humble/local/lib/python3.10/dist-packages",
"${workspaceFolder}/install/my_python_package/lib/python3.10/site-packages"
]
}
위 설정은 ROS 2 설치 경로와 빌드된 작업 공간 패키지의 경로를 포함합니다. 모든 경로를 수동으로 찾아 추가하는 것은 번거롭기 때문에, 아래의 강력한 셸 명령어를 사용하면 현재 환경의 PYTHONPATH에 포함된 모든 경로를 settings.json에 바로 복사-붙여넣기 할 수 있는 형식으로 출력해 줍니다.8
# 환경 소싱 후 이 명령 실행
IFS=:; for path in $PYTHONPATH; do echo "\"$path\","; done
최신 도구를 활용하여 코드 품질을 일관되게 유지하는 것은 ROS 2 개발 가이드라인에서도 강조하는 중요한 부분입니다.22 고성능 언어 서버인 Pylance, 극도로 빠른 린터인 Ruff, 그리고 일관된 코드 스타일을 강제하는 Black Formatter를 사용하는 것이 좋습니다.8
.vscode/settings.json에 다음 설정을 추가하여 이 도구들을 활성화하고, 저장 시 자동으로 코드가 포맷되도록 할 수 있습니다.15
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"ruff.lint.args":,
"python.testing.pytestEnabled": true
}
Python 패키지는 다음 명령어로 생성합니다.19
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 my_python_package
Python 패키지의 핵심 구성 파일은 setup.py, setup.cfg, package.xml입니다.20
setup.py 파일에서는 data_files 항목을 통해 런치 파일을 설치 경로에 복사하고, entry_points 항목의 console_scripts에 ‘실행파일명 = 패키지명.모듈명:main’ 형식으로 노드를 실행 가능하게 등록합니다.19
Python 개발에서는 특히 colcon build --symlink-install 명령어가 매우 강력한 효과를 발휘합니다.17 이 옵션을 사용하면 소스 파일이 설치 공간에 심볼릭 링크로 연결되므로, Python 코드(.py)를 수정한 후에 다시 빌드할 필요 없이 변경 사항이 즉시 반영됩니다.
디버깅은 많은 개발자에게 큰 장벽으로 느껴지지만, 올바른 도구와 절차를 따르면 복잡한 ROS 2 시스템의 문제를 효과적으로 해결할 수 있습니다. 이 섹션에서는 launch.json을 활용한 디버깅 방법을 상세히 설명합니다.
.vscode/launch.json 파일은 VS Code의 ‘실행 및 디버그’ 보기에서 사용할 디버깅 구성을 정의합니다.9 ROS 확장 프로그램을 설치하면 명령 팔레트에서 “Debug: Add Configuration…“을 선택하고 ‘ROS’를 선택하여 기본적인 launch.json 파일을 자동 생성할 수 있습니다.14
디버깅 구성에는 두 가지 주요 request 타입이 있습니다:
launch: 디버거와 함께 새로운 프로세스를 시작합니다.attach: 이미 실행 중인 프로세스에 디버거를 연결합니다.9이 방법은 가장 안정적이고 강력한 C++ 노드 디버깅 방법입니다. 아래 단계를 순서대로 따릅니다.18
1단계: 디버그 심볼과 함께 컴파일하기
디버거가 소스 코드와 실행 코드를 매핑하려면 디버그 심볼(-g 플래그)이 필요합니다. colcon으로 빌드할 때 Debug 또는 RelWithDebInfo 빌드 타입을 지정하여 심볼을 포함시킵니다.15
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Debug
2단계: GDB 서버와 함께 노드 실행하기
환경이 소싱된 터미널에서 ros2 run 명령어에 –prefix 인자를 추가하여 노드를 실행합니다. 이 명령어는 노드를 시작하지만, GDB 서버 내에서 즉시 실행을 멈추고 디버거 클라이언트의 연결을 기다립니다.18
ros2 run --prefix 'gdbserver localhost:3000' <package_name> <executable_name>
3단계: launch.json에 Attach 구성 추가하기
VS Code가 GDB 서버에 연결할 수 있도록 .vscode/launch.json에 다음 구성을 추가합니다. request 타입이 launch이지만, miDebuggerServerAddress가 지정되어 실제로는 attach 모드로 동작합니다.18
{
"version": "0.2.0",
"configurations":
}
program 경로는 디버그 심볼을 로드하기 위해 필요하며, 실제 실행 파일의 경로와 일치해야 합니다.
4단계: 디버깅 시작하기
C++ 소스 코드에 중단점(breakpoint)을 설정한 후, VS Code의 ‘실행 및 디버그’ 패널에서 “Attach to GDB Server (C++)” 구성을 선택하고 디버깅을 시작(F5)합니다. 디버거가 성공적으로 연결되면 중단점에서 실행이 멈추고 변수 확인, 스택 추적 등 모든 디버깅 기능을 사용할 수 있습니다.
런치 파일로 시작되는 복잡한 시스템의 노드를 디버깅하는 두 가지 방법이 있습니다.
방법 1: ROS 확장 프로그램 활용
ROS 확장 프로그램이 제공하는 “type”: “ros” 디버그 구성을 사용하면 런치 파일을 직접 타겟으로 지정하여 디버깅할 수 있습니다.9
{
"name": "ROS: Launch C++ Node",
"type": "ros",
"request": "launch",
"target": "/path/to/your/launch_file.py"
}
이 방법은 간단하지만, 디버깅하려는 노드와 Gazebo나 Rviz 같은 GUI 도구를 같은 런치 파일에서 동시에 실행하는 것은 지원되지 않으므로 별도의 런치 파일로 분리해야 합니다.9
방법 2: 런치 파일 내 GDB 서버 Prefix 사용
더 유연하고 강력한 방법은 Python 런치 파일 내에서 디버깅할 Node 선언에 prefix 인자를 추가하는 것입니다.18
# In your launch_file.py
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='my_cpp_package',
executable='my_cpp_node',
name='my_node',
prefix=['gdbserver localhost:3000'], # Add this line
output='screen'
)
])
이 런치 파일을 ros2 launch로 실행하면 해당 노드는 GDB 서버 내에서 대기 상태가 됩니다. 그 후, 섹션 4.2에서 사용한 것과 동일한 launch.json 구성으로 디버거를 연결할 수 있습니다.
Python 노드 디버깅은 비교적 간단합니다. 먼저 섹션 1.1에서 설명한 대로 환경을 올바르게 소싱하고, 섹션 3.1에 따라 settings.json에 Python 경로가 정확히 설정되어 있는지 확인해야 합니다.
단일 Python 스크립트(노드)를 직접 실행하고 디버깅하려면 launch.json에 다음과 같은 표준 Python 디버그 구성을 추가합니다.8
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
이미 실행 중인 Python 노드에 연결하려면 ROS 확장 프로그램의 attach 기능을 사용할 수 있습니다. 이 구성은 실행 시 현재 실행 중인 ROS 노드 목록을 보여주며, 사용자가 디버깅할 노드를 선택할 수 있게 해줍니다.8
{
"name": "ROS: Attach to Python Node",
"type": "ros",
"request": "attach"
}
서로 통신하는 C++ 노드와 Python 노드로 구성된 복잡한 시스템을 디버깅하는 고급 사례도 있습니다.27 하나의 VS Code 창과 디버그 세션에서 두 가지 다른 언어의 노드를 동시에 디버깅하는 것은 일반적으로 불가능합니다.18
가장 효과적인 해결책은 두 개의 VS Code 창을 사용하는 것입니다.
code. 명령으로 새 창을 하나 더 엽니다.이 방법을 통해 두 노드를 독립적으로 동시에 디버깅하며 상호작용을 추적할 수 있습니다.
Docker는 단순히 부가적인 기술이 아니라, 격리되고 재현 가능하며 이식성 높은 ROS 2 개발 환경을 구축하기 위한 전문가 표준입니다.
VS Code의 Dev Containers 확장 프로그램은 Docker 컨테이너를 완벽한 기능을 갖춘 개발 환경으로 탈바꿈시킵니다. 이 접근법은 Dockerfile을 사용하여 운영체제와 ROS 2 설치를 정의하고, .devcontainer/devcontainer.json 파일을 통해 컨테이너 내부의 VS Code 환경을 구성합니다.7
예시 Dockerfile:
# Start from the official ROS 2 Humble base image
FROM osrf/ros:humble-desktop
# Install common tools
RUN apt-get update && apt-get install -y \
python3-pip \
gdb \
gdbserver \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
RUN pip3 install colcon-common-extensions
예시 .devcontainer/devcontainer.json:
{
"name": "ROS 2 Humble Dev Container",
"build": {
"dockerfile": "Dockerfile"
},
"runArgs": ["--privileged", "--net=host"],
"workspaceMount": "source=${localWorkspaceFolder},target=/home/ros/ros2_ws,type=bind",
"workspaceFolder": "/home/ros/ros2_ws",
"customizations": {
"vscode": {
"extensions": [
"ms-iot.vscode-ros",
"ms-python.python",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"charliermarsh.ruff"
]
}
},
"remoteUser": "ros"
}
이 설정은 Dockerfile을 기반으로 컨테이너를 빌드하고, 로컬 작업 공간 폴더를 컨테이너 내부의 /home/ros/ros2_ws로 마운트하며, 컨테이너에 연결될 때 지정된 확장 프로그램들을 자동으로 설치합니다.
컨테이너 환경에서도 환경 소싱 문제는 여전히 중요합니다. Dev Container 접근법은 이 문제를 매우 우아하게 해결합니다. devcontainer.json에 postAttachCommand를 추가하면 컨테이너에 연결될 때마다 지정된 명령어가 자동으로 실행되어, ROS 2와 작업 공간 환경을 완벽하게 소싱할 수 있습니다.8
{
...
"postAttachCommand": "source /opt/ros/humble/setup.bash && source /home/ros/ros2_ws/install/setup.bash"
}
이 설정 하나로 섹션 1.1에서 다룬 가장 기본적인 수동 단계를 완벽하게 자동화할 수 있습니다.
Docker 컨테이너 내부에서 Rviz나 Gazebo 같은 GUI 도구를 실행하는 것도 가능합니다. 이를 위해서는 호스트 시스템의 X 서버에 컨테이너의 GUI 출력을 전달하는 X11 포워딩(X11 forwarding)과 같은 기술을 사용하거나, VNC 또는 웹 기반 스트리밍 도구를 활용할 수 있습니다.
이 마지막 섹션에서는 개발자의 워크플로우를 기능적인 수준에서 고도로 효율적인 수준으로 끌어올릴 수 있는 유용한 팁, 트릭, 그리고 규약들을 소개합니다.
ROS 확장 프로그램은 단순한 빌드 및 디버깅 지원을 넘어 다양한 생산성 향상 기능을 제공합니다.
rqt처럼 작동합니다.9.vscode 설정 파일 작성을 돕습니다.11숙련된 개발자들의 실용적인 조언들은 개발 효율을 크게 높여줍니다. 다음은 커뮤니티에서 강력하게 추천하는 팁들입니다.17
ROS 데몬 재시작 별칭: ROS 2 데몬이 오래된 노드 정보를 캐싱하여 문제를 일으킬 때, 간단한 명령어로 데몬을 재시작할 수 있습니다.
alias ros_restart='ros2 daemon stop && ros2 daemon start'
Symlink 빌드 별칭: 항상 --symlink-install 옵션을 사용하여 빌드하도록 별칭을 설정하면 개발 시간을 단축할 수 있습니다.
alias colcon_make='colcon build --symlink-install'
안정적인 RMW 구현체로 전환: 기본 RMW 구현체인 FastDDS에서 불안정한 동작이 관찰될 경우, 더 안정적인 것으로 평가받는 CycloneDDS로 전환할 수 있습니다.
# CycloneDDS 설치
sudo apt install ros-humble-rmw-cyclonedds-cpp
# 환경 변수 설정
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
ROS_DOMAIN_ID를 이용한 네트워크 격리: 여러 로봇이나 시스템이 동일 네트워크에 있을 때, ROS_DOMAIN_ID 환경 변수를 설정하여 서로 다른 ROS 시스템 간의 통신 충돌을 방지할 수 있습니다.
일관된 코드 스타일은 협업과 유지보수의 핵심입니다. ROS 2는 C++에 대한 공식 스타일 가이드를 제공하며, 주요 내용은 라인 길이 제한, 네이밍 컨벤션(타입은 CamelCase, 변수/함수는 snake_case), 2칸 공백 들여쓰기 등입니다.2
VS Code에서 clang-format(C++)과 black(Python) 같은 포맷터를 설정하고 저장 시 자동 포맷 기능을 활성화하면 이러한 스타일을 손쉽게 준수할 수 있습니다.15 또한 ament_cpplint, ament_cppcheck와 같은 린터를 개발 과정에 통합하여 코드 품질을 지속적으로 관리하는 것이 좋습니다.2
ROS에 특화되지는 않았지만 로보틱스 개발 생산성을 크게 향상시키는 몇 가지 추가 확장 프로그램이 있습니다.8
| Exploration of VS Code extensions for a ROS Developer | by …, accessed July 26, 2025, https://medium.com/@theroboticsspace/exploration-of-vs-code-extensions-for-a-ros-developer-44969c101798 |