colcon이란?
colcon은 ROS2 패키지의 빌드를 관리하는 도구로, ROS1에서 사용하던 catkin을 대체한다. colcon은 여러 패키지를 병렬로 빌드할 수 있으며, 각 패키지 간의 의존성을 자동으로 처리한다. 또한, 다양한 빌드 도구를 지원하며, 사용자 정의가 용이하다는 장점이 있다.
colcon 설치
colcon은 ROS2 환경을 설정할 때 자동으로 설치되기도 하지만, 수동으로 설치할 수도 있다. 다음은 colcon을 수동으로 설치하는 방법이다.
sudo apt install python3-colcon-common-extensions
이 명령어를 통해 colcon의 기본 확장 기능을 함께 설치할 수 있다.
기본 사용법
colcon을 사용하여 패키지를 빌드하려면 ROS2 워크스페이스의 루트 디렉토리에서 colcon build
명령어를 실행한다. 워크스페이스는 보통 src
디렉토리를 포함하는데, 이 디렉토리 안에 패키지들이 위치한다.
colcon build
이 명령어는 워크스페이스 내 모든 패키지를 빌드한다. 빌드 결과물은 기본적으로 install
디렉토리에 저장된다.
특정 패키지만 빌드하기
특정 패키지만 빌드하려면 --packages-select
옵션을 사용한다. 예를 들어, my_package
라는 패키지만 빌드하고 싶다면 다음과 같이 명령어를 입력한다.
colcon build --packages-select my_package
빌드 옵션
빌드 과정에서 다양한 옵션을 사용할 수 있다. 그중 중요한 옵션 몇 가지를 설명하겠다.
--symlink-install
: 빌드 시 심볼릭 링크를 사용하여 변경 사항을 즉시 반영한다. 개발 중인 패키지를 빠르게 테스트할 때 유용하다.
bash
colcon build --symlink-install
--packages-up-to
: 특정 패키지와 그 의존 패키지들만 빌드한다. 예를 들어,my_package
와 그 의존 패키지들만 빌드하려면 다음과 같이 명령어를 입력한다.
bash
colcon build --packages-up-to my_package
빌드 후 환경 설정
빌드가 완료된 후에는 install
디렉토리에서 환경 설정을 해야 한다. 이는 ROS2 노드를 실행하거나 ROS2 명령어를 사용하기 위해 필요한 단계이다.
source install/setup.bash
이 명령어는 현재 터미널 세션에서만 적용된다. 매번 새로운 터미널을 열 때마다 이 명령어를 실행해야 한다. 이를 자동화하기 위해서는 ~/.bashrc
파일에 이 명령어를 추가할 수 있다.
echo "source ~/your_workspace/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
패키지 의존성 관리
colcon은 패키지 간의 의존성을 자동으로 처리한다. 각 패키지의 package.xml
파일에서 의존성을 명시하면, colcon은 이를 기반으로 빌드 순서를 결정한다.
패키지 간의 의존성을 명시하는 방법은 다음과 같다.
<depend>example_interfaces</depend>
<build_depend>rclcpp</build_depend>
<exec_depend>rclpy</exec_depend>
위 예시에서 depend
는 빌드와 실행 모두에 필요한 의존성을, build_depend
는 빌드 시에만 필요한 의존성을, exec_depend
는 실행 시에만 필요한 의존성을 나타낸다.
의존성 해결
만약 의존 패키지가 설치되지 않았을 경우, colcon은 빌드 도중 오류를 발생시킨다. 이때는 다음과 같은 명령어로 의존성을 설치할 수 있다.
rosdep install --from-paths src --ignore-src -r -y
이 명령어는 src
디렉토리 안의 모든 패키지에 대한 의존성을 확인하고, 아직 설치되지 않은 패키지를 설치한다.
colcon 빌드 로그 및 오류 해결
빌드 도중 발생하는 오류나 경고를 확인하고 문제를 해결하는 것은 매우 중요하다. colcon은 기본적으로 빌드 로그를 출력하지 않지만, 옵션을 사용하여 빌드 로그를 확인할 수 있다.
빌드 로그 확인
빌드 도중 출력되는 모든 로그를 확인하고 싶다면 --event-handlers
옵션을 사용할 수 있다. 예를 들어, 다음과 같이 명령어를 입력하면 빌드 로그를 실시간으로 확인할 수 있다.
colcon build --event-handlers console_cohesion+
이 옵션을 사용하면 빌드 중 발생하는 모든 로그가 터미널에 출력된다.
빌드 오류 해결
빌드 도중 오류가 발생하면, colcon
은 관련된 패키지에서의 빌드를 중단하고 오류 메시지를 출력한다. 오류 메시지는 빌드 과정에서의 문제를 진단하는 데 매우 중요한 정보를 제공한다.
만약 빌드 오류를 해결하려면 오류 메시지를 확인하고, 문제의 원인을 분석해야 한다. 일반적인 빌드 오류는 다음과 같은 원인에서 발생한다.
- 패키지 의존성이 누락되었거나 올바르게 설정되지 않음
- CMakeLists.txt 파일이 잘못 구성됨
- 패키지 내의 코드에서 컴파일 오류 발생
이런 경우, colcon은 문제가 발생한 패키지를 명시하고, 그 패키지에 대한 상세한 로그 파일을 제공한다. 로그 파일은 기본적으로 워크스페이스 내의 log
디렉토리에 저장된다.
cat log/latest_build/my_package/stdout_stderr.log
위 명령어로 특정 패키지의 빌드 로그를 확인할 수 있다.
패키지 빌드 재시도
특정 패키지가 빌드에 실패했을 경우, 실패한 패키지부터 빌드를 다시 시도할 수 있다. 다음과 같은 명령어를 사용하여 실패한 패키지만 재빌드할 수 있다.
colcon build --packages-select my_package --continue-on-error
이 명령어는 오류를 무시하고 빌드를 계속하며, 실패한 패키지를 선택적으로 빌드할 수 있다.
빌드 시스템 최적화
대규모 ROS2 프로젝트에서는 빌드 시간을 최적화하는 것이 매우 중요하다. colcon은 다양한 빌드 최적화 옵션을 제공하여 빌드 시간을 줄일 수 있다.
병렬 빌드
colcon은 기본적으로 패키지를 병렬로 빌드한다. 하지만 시스템 리소스에 따라 병렬 빌드를 제어할 수 있다. --parallel-workers
옵션을 사용하여 빌드에 사용할 CPU 코어 수를 제한할 수 있다.
colcon build --parallel-workers 4
위 명령어는 4개의 CPU 코어만을 사용하여 병렬로 빌드를 수행한다. 이 옵션은 빌드 시간이 길거나 시스템 리소스를 절약해야 할 때 유용하다.
점진적 빌드
대규모 프로젝트에서 모든 패키지를 다시 빌드하는 것은 시간이 많이 걸린다. 이를 해결하기 위해 colcon은 점진적 빌드를 지원한다. --merge-install
옵션을 사용하면 설치 디렉토리를 병합하여 변경된 패키지만을 다시 빌드할 수 있다.
colcon build --merge-install
이 옵션을 사용하면 이전에 빌드된 패키지들을 다시 빌드하지 않고, 변경된 패키지만 빌드할 수 있다.
캐시 사용
빌드 속도를 더욱 향상시키기 위해 colcon은 빌드 캐시를 사용할 수 있다. colcon은 패키지 간의 의존성을 기반으로 캐시된 빌드 아티팩트를 재사용하여 빌드 시간을 줄일 수 있다.
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
이 명령어는 최적화된 Release
모드로 빌드를 수행하여 실행 속도와 빌드 속도를 모두 향상시킨다.