colcon build는 ROS 2(로봇 운영 체제)에서 패키지를 빌드하는 명령어입니다.
colcon은 ROS 2에서 기본적으로 사용되는 빌드 시스템이며, catkin을 대체하는 도구입니다.
colcon build 개요
colcon build 명령어는 현재 작업 디렉터리(보통 ros2_ws와 같은 워크스페이스) 내에 있는 ROS 2 패키지를 빌드합니다. 이 과정에서 CMake, Python setuptools, ament 등의 빌드 시스템을 자동으로 감지하여 적절한 방법으로 빌드합니다.
✅ 빌드 후 생성되는 주요 디렉터리
colcon build를 실행하면 워크스페이스 루트에 다음 폴더들이 생성됩니다.
디렉터리설명
build/ |
패키지별 빌드 결과 (임시 파일) |
install/ |
실행 가능한 바이너리, 라이브러리, 설정 파일이 설치됨 |
log/ |
빌드 과정의 로그 파일 |
gedit ~/.bashrc 열어서 아래 내용 가장 아래에 넣기
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
source /usr/share/vcstool-completion/vcs.bash
source /usr/share/colcon_cd/function/colcon_cd.sh
export _colcon_cd_root=~/ros2_ws
# argcomplete for ros2 & colcon
eval "$(register-python-argcomplete3 ros2)"
eval "$(register-python-argcomplete3 colcon)"
# export ROS_NAMESPACE=robot1
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# export RMW_IMPLEMENTATION=rmw_connext_cpp
# export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# export RMW_IMPLEMENTATION=rmw_gurumdds_cpp
# export RCUTILS_CONSOLE_OUTPUT_FORMAT='[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})'
export RCUTILS_CONSOLE_OUTPUT_FORMAT='[{severity}]: {message}'
export RCUTILS_COLORIZED_OUTPUT=1
export RCUTILS_LOGGING_USE_STDOUT=0
export RCUTILS_LOGGING_BUFFERED_STREAM=1
alias sb="source ~/.bashrc; echo \"bashrc is reloaded\""
alias humble="source /opt/ros/humble/setup.bash; echo \"ROS2 Humble is activated!\""
alias isaacsim_ros2ws="humble; source ~/IsaacSim-ros_workspaces/humble_ws/install/setup.bash; echo \"IsaacSim ROS2 workspaces!\""
alias ros2ws="humble; source ~/ros2_ws/install/local_setup.bash; echo \"Basic ROS2 workspaces!\""
alias cw='cd ~/ros2_ws'
alias cs='cd ~/ros2_ws/src'
alias ccd='colcon_cd'
alias cb='cd ~/ros2_ws && colcon build --symlink-install'
alias cbs='colcon build --symlink-install'
alias cbp='colcon build --symlink-install --packages-select'
alias cbu='colcon build --symlink-install --packages-up-to'
alias ct='colcon test'
alias ctp='colcon test --packages-select'
alias ctr='colcon test-result'
alias tl='ros2 topic list'
alias te='ros2 topic echo'
alias nl='ros2 node list'
alias killgazebo='killall -9 gazebo & killall -9 gzserver & killall -9 gzclient'
alias af='ament_flake8'
alias ac='ament_cpplint'
alias testpub='ros2 run demo_nodes_cpp talker'
alias testsub='ros2 run demo_nodes_cpp listener'
alias testpubimg='ros2 run image_tools cam2image'
alias testsubimg='ros2 run image_tools showimage'
alias di='rosdep install --from-paths src -y --ignore-src --os=ubuntu:jammy'
ROS2 실습을 위한 workspace 생성하기
cd # home 디렉토리로 이동
mkdir -p ros2_ws/src
cd ros2_ws
colcon build --symlink-install
# 빌드 완료 확인 후 ros2_ws에 install, build, log 디렉토리 생성됐는지 확인
꼭 workspace의 루트 디렉토리에서 colcon build 해주어야 한다.
로봇 시뮬레이션 환경 구성
1. 시뮬레이션 환경 구성을 위해 아래 명령어로 패키지를 설치해줍니다.
sudo apt install ros-humble-tiago-gazebo
2. 의존성 등을 포함한 설치가 완료된 후 시뮬레이션 환경을 열어줍니다.
먼저 터미널에서 ros2를 활성화 해줍니다.
humble
ros2 launch tiago_gazebo tiago_gazebo.launch.py is_public_sim:=True
3. 아래 명령어를 통해 로봇을 제어해 볼 수 있습니다.
다른 터미널을 하나 열고 아래 명령어 입력
humble
ros2 run teleop_twist_keyboard teleop_twist_keyboard
패키지 생성 실습
1. 먼저 ROS2 작업 공간을 생성해줍니다.
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
2. 다음으로 ros2 pkg create 명령을 사용하여 새 패키지를 생성합니다.
ros2 pkg create --build-type ament_python my_package --dependencies rclpy
ros2 pkg create --build-type <빌드타입> <패키지이름> --dependencies <해당 패키지를 실행하는데 있어서 필요한 라이브러리>
python 패키지를 사용하기 위해 --build-type ament_python 으로 설정
패키지 이름으로 my_package로 지정
3. 생성된 패키지의 구조를 아래 명령어로 확인할 수 있습니다.
cd my_package
tree
# tree 설치가 안 되었을 경우
sudo apt install tree
my_package/
├── my_package
│ └── __init__.py
├── package.xml
├── setup.cfg
├── setup.py
└── test
├── test_copyright.py
├── test_flake8.py
└── test_pep257.py
4. 워크스페이스의 루트 디렉토리로 이동하여 패키지를 빌드합니다.
cd ~/ros2_ws
colcon build
5. 새로 빌드한 패키지를 사용할 수 있도록 아래 명령어를 입력하거나 새로운 터미널을 열어줍니다.
source ~/ros2_ws/install/local_setup.bash
# 또는
source ~/ros2_ws/install/local_setup.zsh
6. 아래 명령어를 통해 패키지가 잘 설치되었는지 확인합니다.
ros2 pkg list # 모든 ROS 시스템 패키지 목록을 제공
ros2 pkg list | grep my_package # my_package인 패키지를 필터링
[부록] 특정 패키지만 빌드하는 방법
때로는 (대규모 프로젝트의 경우) 모든 패키지를 컴파일하고 싶지 않을 수도 있습니다. 이렇게 하면 시간이 오래 걸립니다.
대신 아래 명령어을 사용하여 변경한 패키지만 컴파일할 수 있습니다
colcon build --symlink-install --packages-select <package_name>
# 또는 cbp <package_name>