워크스페이스

평범한컴공생·2022년 8월 8일
0

[ROS2]

목록 보기
13/19
post-thumbnail

배경

ROS 2 패키지가 포함된 디렉터리를 워크스페이스라 한다.

워크스페이스를 사용하려면 먼저 소싱을 해야 한다. 소싱을 하면 ROS 2 패키지를 해당 워크스페이스에서 사용할 수 있다.

작업

1. 환경 소싱

source /opt/ros/foxy/setup.bash

설치 위치와 플랫폼에 따라 정확한 명령어는 달라질 수 있다.

2. 디렉터리 생성

"development workspace"를 의미하는 dev_ws 디렉터리를 생성하자.

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

3. 예제 리포지토리 가져오기

현재 디렉터리가 dev_ws인지 확인하자.

추후에는 패키지를 직접 만들어 볼테지만, 지금은 이미 존재하는 패키지를 받아올 것이다. 패키지는 ros_tutorial 리포지토리에서 받아올 것이며 다음 주소에서 볼 수 있다.

on GitHub

옵션 -b를 통해 자신의 ROS 2 배포판에 맞는 브랜치를 선택할 수 있다.

git clone https://github.com/ros/ros_tutorials.git -b foxy-devel

ros_tutorial에는 turtlesim 패키지를 비롯한 다른 패키지들이 포함되어 있다. 하지만 다른 패키지들은 COLCON_IGNORE파일이 포함되어 있어 빌드가 되지는 않는다.

4. 의존성 해결

워크스페이스를 빌드 하기에 먼저, 의존성을 해결해야 한다. 이미 모든 의존성을 가지고 있겠지만, 가장 좋은 방법은 리포지토리를 받을 때마다 의존성을 확인하는 것이다.

dev_ws디렉터리에서 다음 명령을 수행하자.

rosdep install -i --from-path src --rosdistro foxy -y

모든 의존성을 가지고 있다면, 다음이 출력될 것이다.

#All required rosdeps installed successfully

의존성은 각 패키지들의 package.xml 파일에서 확인할 수 있다. 해당 명령은 이 파일을 살펴보고 누락된 부분을 설치한다.

5. 빌드

dev_ws디렉터리에서 다음 명령을 수행하자.

colcon build

colcon build의 유용한 인자들

  • --packages-up-to는 원하는 패키지와 모든 의존성을 빌드 하지만, 전체 워크스페이스를 빌드 하지는 않는다.(시간 절약)
  • --symlink-install를 사용하면 python 스크립트를 수정할 때 마다 다시 빌드 할 필요가 없다.
  • --event-handlers console_direct+는 빌드 하는 과정을 콘솔에 보여준다.

6. 오버레이 소싱

소싱 하기에 앞서, 빌드 한 터미널과는 다른 새로운 터미널을 열어야만 한다.

빌드 한 터미널에서 소싱을 하거나, 반대로 소싱을 한 터미널에서 빌드를 하는 것은 복잡한 이슈를 발생시킬 수 있다.

새 터미널을 열고 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을 수정해 보자.

  • 언더레이와 별도로 오버레이에서 패키지를 수정하고, 빌드 할 수 있다.
  • 오버레이는 언더레이보다 우선한다.

7. 오버레이 수정하기

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

오버레이를 수정한들 언더레이에서는 영향을 끼치지 못한다.

참고

ROS 2 Documentation: Foxy

profile
학부 연구생(220627~)

0개의 댓글