본문 바로가기

ROS2 무작정 따라하기

ROS 예제를 실행하고 소스 코드를 수정해 보자!

안녕하세요 이번차시에는 저번에 설치해둔 ROS를 사용해서 예제 프로그램을 돌려보겠습니다.

 

프로그램을 실행하기 전에 작업공간(working directory)을 미리 만들어줍니다.

Ubuntu를 실행하고 아래 코드를 입력해 주세요

(colcon_cd 명령어는 저번 차시에서 zshrc 수정을 통해 미리 단축 경로로 등록해 놓았습니다.)

저번차시 보고오기 --> [ROS2 무작정 따라하기] - Ubuntu에 ROS를 설치하자!

mkdir -p Project/ros2
colcon_cd

 

작업 디렉토리를 생성하고 작업 디렉토리로 이동합니다.

 

노드 발행 예제를 테스트하기 위해 아래 사진처럼 Ubuntu를 하나 더 열어줍니다.

테스트를 위해 Ubuntu 창을 두 개 열어줍니다.

위에는 다음과 같은 명령어를

ros2 run demo_nodes_py listener

 

아래에는 다음과 같은 명령어를 입력합니다.

ros2 run demo_nodes_py talker

아래 창에 명령어를 입력하면 1초에 한 번씩 메시지가 발생합니다.

 

talker, listener 실행

 

위 프로그램의 원리는 talker에서 메시지를 발행하면 listener에서 받아서 받은 내용을 출력하는 프로그램입니다.

그러면 원하는 메시지를 발행하고 받아볼 수 있을까요?

이제 그 내용을 변경해보도록 하겠습니다.

 

Ctrl + C를 입력해 두 프로그램을 모두 정지시키고 Ubuntu 창 하나를 내려둡니다.

다음과 같은 명령어를 입력해 작업 디렉토리로 이동 후 예제 소스를 내려받기 위한 src 폴더를 생성합니다.

앞으로 src 폴더에서 모든 코드를 작업하도록 하겠습니다.

colcon_cd
mkdir src
cd src

 

src 폴더를 생성하고 생성한 폴더로 이동

아래 명령어를 입력해서 예제 코드를 다운로드합니다.

 

git clone https://github.com/ros2/examples -b foxy

 

예제 코드 다운로드

다음 명령어를 입력해 publisher 패키지로 이동합니다.

colcon_cd examples_rclpy_minimal_publisher
cd examples_rclpy_minimal_publisher

 

publisher 패키지로 이동

 

이제 토픽을 발행하는 노드(파이썬 파일)를 편집하겠습니다.

code publisher_member_function.py

이전 포스팅에서 설명한 방법대로 잘 세팅을 했다면 아래처럼 윈도우에서 VSCode가 실행됩니다.

publisher_member_function.py 편집화면

코드를 간단하게 설명하고 넘어가면, 

25라인의 timer_period가 몇 초마다 타이머를 발생시킬지를 저장하는 변수입니다.

26라인에서 이를 활용해 일정 시간마다 timer_callback 메서드를 호출하도록 타이머를 등록합니다.

 

30~31라인은 발행할 메시지를 생성하는 부분입니다.

31라인의 'Hello World: %d' % self.i 부분을 원하는 코드로 수정해 줍니다.

저는 f"My message {self.i}" 로 변경해 주겠습니다.

 

32라인에서 위에서 생성한 메시지를 발행합니다. 

33라인에서는 발행한 메시지를 커맨드라인에 출력할 수 있도록 로그로 작성합니다.

 

우선 이렇게만 수정하고 저장해 줍니다.

37라인의 메인 부분의 코드는 나중에 별도의 포스팅으로 자세히 다루도록 하겠습니다.

수정한 코드

내용이 잘 수정되었는지 확인해 보겠습니다.

 

Ubuntu 창으로 넘어와 아래 명령어를 입력해 워크스페이스로 돌아갑니다.

(앞으로 워크스페이스에서 ~~라고 하는 내용은 모두 아래 명령어를 입력 후 실행합니다.)

colcon_cd

아래의 명령어로 수정한 패키지를 빌드합니다.

colcon build --packages-select examples_rclpy_minimal_publisher examples_rclpy_minimal_subscriber

패키지 빌드

다음 명령어를 사용해 빌드한 패키지를 소싱합니다.

(혹시 zsh를 설치하지 않으신 분들은 아래 명령어의 .zsh를 .bash로 변경해서 실행합니다.)

소싱이라는 과정은 기존의 코드(언더레이) 위에 사용자가 만들거나 수정한 패키지(오버레이)를 합치는 과정이라고 생각하면 됩니다. 기회가 된다면 나중에 오버레이와 언더레이에 대해서 별도의 포스팅으로 다루겠습니다.

source ./install/local_setup.zsh

아까 잠시 내려둔 다른 Ubuntu 창을 열어줍니다.

다른 Ubuntu 창도 마찬가지로 colcon_cd를 사용해 작업공간으로 들어가 줍니다.

 

둘 다 작업공간임을 확인

새로 연 창에서는 아직 소싱을 진행하지 않았기 때문에 아래의 명령어로 다시 소싱을 진행해 줍니다.

source ./install/local_setup.zsh

새로운 창에서도 소싱 진행

아까 예제와 마찬가지로 위에서는 subscriber(listener), 아래에서는 publisher(talker)를 실행해 줍니다.

각각 다음의 명령어를 입력합니다.

ros2 run examples_rclpy_minimal_subscriber subscriber_member_function
ros2 run examples_rclpy_minimal_publisher publisher_member_function

실행하면 다음과 같이 정상적으로 수정한 대로 작동하는 것을 볼 수 있습니다.

정상적으로 바뀐 메시지가 발행되고 구독되는 것을 확인할 수 있다.

 

오늘은 ROS의 예제를 실행해 보고,

예제 소스코드를 다운로드하여 수정하고 빌드 + 소싱을 통해 수정한 코드를 실행하는 것까지 해보았습니다.

 

다음 시간에는 직접 새로운 패키지를 만들어보는 시간을 갖겠습니다.

 

감사합니다.