ROS2

[ROS2] Tutorial Beginner : Client libraries - Using colcon to build packages

씨주 2024. 10. 9. 23:12

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