Using colcon to build packages
Background
colcon은 ROS build tool로, CMake 기반 빌드 시스템인 ROS2 패키지의 빌드, 테스트를 한다.
Install colcon
sudo apt install python3-colcon-common-extensions
Basics
ROS workspace는 특정 구조를 가지는데, 보통 src라는 ROS 패키지의 source code가 있는 subdirectory가 있다.
그 후 colcon build를 실행하면 src와 동일 위치에 아래의 directory가 생성된다.
- build : intermediate 파일 저장
- install : package 설치
- log : logging information 저장
Create a workspace
ros2_ws라는 workspace를 만들고 src를 생성한다.
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
.
└── src
1 directory, 0 files
Add some sources
src에 source들을 추가한다.
git clone https://github.com/ros2/examples src/examples -b humble
.
└── src
└── examples
├── CONTRIBUTING.md
├── LICENSE
├── rclcpp
├── rclpy
└── README.md
4 directories, 3 files
Source an underlay
다른 colcon workspace의 setup script를 sourcing하는 것을 'underlay'라고 한다.
ros2_ws처럼 소규모의 package의 기본 환경을 sourcing 하는 경우에는 'overlay'라고 한다.
Build the workspace
이제 colcon build를 실행해보자.
아래와 같이 build, install, log directory가 생성된 것을 확인할 수 있다.
이 때 --symlink-install 옵션을 사용하는데, python file이나 compile 되지 않는 파일들이 source 파일에 적용될 수 있도록 해주는 옵션이다.
colcon build --symlink-install
.
├── build
├── install
├── log
└── src
4 directories, 0 files
Run tests
colcon test
Source the environment
설치된 실행파일이나 라이브러리를 사용하려면 경로지정을 해야 한다.
이를 위해 colcon은 환경설정 bash/bat을 install에 생성하는데, 이는 경로 설정 뿐만 아니라 package와 관련된 명령들도 저장된다.
source install/setup.bash
Try a demo
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
Create your own package
# ros2 pkg create <package_name>
ros2 pkg create my_package
Setup colcon_cd
colcon_cd를 활용하면 package direcotry로 빠르게 이동할 수 있다.
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/humble/" >> ~/.bashrc
Tips
- 특정 package를 사용하지 않으려면 해당 direcotry에 COLCON_IGNORE라는 빈 파일을 추가하면 된다.
- CMake package에서 test를 building, configuring하고 싶지 않다면 --cmake-args -DBUILD_TESTING=0 를 사용하면 된다.
- 특정 package만 test하고 싶다면 아래의 코드를 참고하면 된다.
colcon test --packages-select YOUR_PKG_NAME --ctest-args -R YOUR_TEST_IN_PKG
ROS2_Humble Documentation : https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries.html