ROS 2 패키지가 포함된 디렉터리를 워크스페이스라 한다.
워크스페이스를 사용하려면 먼저 소싱을 해야 한다. 소싱을 하면 ROS 2 패키지를 해당 워크스페이스에서 사용할 수 있다.
source /opt/ros/foxy/setup.bash
설치 위치와 플랫폼에 따라 정확한 명령어는 달라질 수 있다.
"development workspace"를 의미하는 dev_ws
디렉터리를 생성하자.
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
현재 디렉터리가 dev_ws
인지 확인하자.
추후에는 패키지를 직접 만들어 볼테지만, 지금은 이미 존재하는 패키지를 받아올 것이다. 패키지는 ros_tutorial
리포지토리에서 받아올 것이며 다음 주소에서 볼 수 있다.
옵션 -b
를 통해 자신의 ROS 2 배포판에 맞는 브랜치를 선택할 수 있다.
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
ros_tutorial
에는 turtlesim
패키지를 비롯한 다른 패키지들이 포함되어 있다. 하지만 다른 패키지들은 COLCON_IGNORE
파일이 포함되어 있어 빌드가 되지는 않는다.
워크스페이스를 빌드 하기에 먼저, 의존성을 해결해야 한다. 이미 모든 의존성을 가지고 있겠지만, 가장 좋은 방법은 리포지토리를 받을 때마다 의존성을 확인하는 것이다.
dev_ws
디렉터리에서 다음 명령을 수행하자.
rosdep install -i --from-path src --rosdistro foxy -y
모든 의존성을 가지고 있다면, 다음이 출력될 것이다.
#All required rosdeps installed successfully
의존성은 각 패키지들의 package.xml
파일에서 확인할 수 있다. 해당 명령은 이 파일을 살펴보고 누락된 부분을 설치한다.
dev_ws
디렉터리에서 다음 명령을 수행하자.
colcon build
colcon build
의 유용한 인자들
--packages-up-to
는 원하는 패키지와 모든 의존성을 빌드 하지만, 전체 워크스페이스를 빌드 하지는 않는다.(시간 절약)--symlink-install
를 사용하면 python 스크립트를 수정할 때 마다 다시 빌드 할 필요가 없다.--event-handlers console_direct+
는 빌드 하는 과정을 콘솔에 보여준다.
소싱 하기에 앞서, 빌드 한 터미널과는 다른 새로운 터미널을 열어야만 한다.
빌드 한 터미널에서 소싱을 하거나, 반대로 소싱을 한 터미널에서 빌드를 하는 것은 복잡한 이슈를 발생시킬 수 있다.
새 터미널을 열고 ROS 2 환경을 소싱하자.
source /opt/ros/foxy/setup.bash
cd ~/dev_ws
. install/local_setup.bash
패키지에 있는 turtlesim
을 실행해 보자.
ros2 run turtlesim turtlesim_node
하지만 이 방법을 통해서는 기존 ros 2에 있는 turtlesim
인지 오버레이의 turtlesim
인지 구분이 안된다.
다음을 볼 수 있도록 turtlesim
을 수정해 보자.
turtlesim
의 타이틀 바를 수정해 보자.
turtlesim
의 타이틀 바는 ~/dev_ws/src/ros_tutorials/turtlesim/src
에 있는 turtle_frame.cpp
에서 수정할 수 있다.
52 번째 줄에 있는 setWindowTitle("TurtleSim");
을 setWindowTitle("MyTurtleSim")
으로 수정한 후 저장하자.
이후 colcon build
를 수행한 터미널로 돌아가 다시 빌드 한다.
이후 turtlesim
을 재실행하자.
dev_ws
환경의 오버레이가 언더레이보다 우선하고 있음을 알 수 있다.
새 터미널을 열어 언더레이도 확인해 보자.
ros2 run turtlesim turtlesim_node
오버레이를 수정한들 언더레이에서는 영향을 끼치지 못한다.