Tnote

ROS, turtlesim을 활용한 데이터 이동 확인 본문

ROS

ROS, turtlesim을 활용한 데이터 이동 확인

jfl 2022. 2. 4. 20:29

# Subscriber과 Publisher

- 1단계

방향키 입력 -> 거북이 이동

 

1. ros를 사용하기 위해 빈 터미널(명령창)에 roscore 입력 후 실행

 

2. 새로운 터미널 창에 rosrun turtlesim turtlesim_node 입력 후 실행   // 파란 바탕 거북이 화면 창 뜬다.

* [ros 명령어] rosrun 패키지명 노드명 (ex. rosrun a b : a 패키지의 b프로그램 실행)

3. 새로운 터미널 창에 rosrun turtlesim turtle_teleop_key 입력 후 실행

 

4. 새로운 터미널 창에 rqt_graph 입력 후 실행

 * rqt_graph : 노드 사이의 데이터 이동을 시각화하여 쉽게 볼 수 있다.

- 그래프 설명

원 : node(노드 ; 일단 프로그램, 파일, 프로세스 등과 같은 것이라고 이해)

화살표 : 데이터 흐름 관계

화살표 위 글씨 : 데이터 이름(topic)

 

3번 터미널 창이 선택된 채로 방향 키를 입력하면 거북이가 이동하는데,

 

이것은 3번에서 실행한 프로그램이 방향키를 입력받으면

 

그 값이 '/turtle1/cmd_vel'라는 이름의 화살표를 타고 2번에서 실행했던 프로그램에

 

들어가 거북이가 최종적으로 움직이게 된다.

 

신기신기~

 

- 2단계

방향키 입력 -> 거북이 이동 -> 거북이 위치, 속도 데이터 가져오기.

 

5. 새 터미널에 rostopic echo /turtle1/pose 입력 후 실행

* [ros 명령어] : rostopic echo 토픽이름 : 해당 토픽값 확인

ros ~ : ros 프로그램 관련 명령어

rostopic ~ : ros의 토픽(이하 topic) 관련 명령어 

rosmsg ~ : ros의 메시지(이하 msg) 관련 명령어

* topic, msg 관련 정보는 xxx 참고

6. rqt_graph 왼쪽 위 하늘색 화살표 클릭 (새로고침)

1단계와 동일하게 방향키 -> 거북이 이동한 이후

 

5번의 명령어로 인해 거북이의 정보(위치, 속도 등)가

 

'/turtle1/pose' 라는 화살표를 타고 rostopic을 실행한 창으로 들어온다.

 

여기서 우리는 중요한 Subscriber와 Publisher에 대해서 알 수 있다.

-Subscriber : 구독자, Publisher : 발행자

- Publisher

우리가 방향키를 입력해 거북이에게 움직일 데이터를 준 것(1단계)를 "데이터를 줬다" 

(발행 ; 신문 발행)

- Subscriber

우리가 거북이의 위치나 속도 데이터를 받는다(2단계)를 "데이터를 받았다" 

(구독 ; 유튜브 구독)

 

# 데이터 활용

데이터를 주고 받을 수 있기 때문에, 우리는 방향키를 입력하는 대신 코드를 이용해

 

더 다양한 입력을 줄 수 있는 것. (단순한 좌우 x -> 얼마까지 이동 or 반듯한 사각형, 원을 그려라 .... )

 

다음은 데이터 이름을 찾겠다.

=> 많은 화살표 중 어떤 이름의 화살표를 줄 것인가, 위 실습에서는

     어떤 이름의 topic(화살표 이름)인지 알려주었지만 직접 찾아서 해야하기 때문

 

# 거북이가 주는 데이터 이름 찾기

(topic, msg, 데이터에 어떤 정보가 있는지 ...)

 

1. 모든 터미널 종료한 후 이 글 상단의 1단계 1~3번 실행

 

2. 새 터미널에 rostopic list 입력 후 실행

* [명령어] rostopic list : 현재 활성화 된 topic 목록 확인

3. 같은 터미널에 rostopic echo /turtle1/pose 입력 후 실행

rosrun turtlesim turtle_teleop_key 명령어 친 터미널을 선택하고(위 1단계 3번 터미널) 방향키를 움직이면

실시간으로 값이 변하는걸 알 수 있다. 

=> 거북이의 데이터값을 받아 볼 수 있다.

 

 4. 새 터미널에 rostopic info /turtle1/pose 입력 후 실행

* [명령어] rostopic info 토픽이름 : 해당 토픽 정보 확인

현재 노드(프로그램)간 관계를 살펴보면

"/teleop_turtle" 노드에 의해 방향키 입력한 것이 '/turtle1/cmd_vel' 라는 화살표를 따라 "/turtlesim" 프로그램으로 들어가 거북이가 움직이고 이 움직인 정보를 '/turtle1/pose' 라는 화살표를 따라 우리가 rostopic echo 실행한 노드로 이동.

 

결국 4번은 rostopic info는 해당 토픽의 정보를 볼 수 있는 명령어이고,

 

'/turtle1/pose' 라는 토픽은 "/turtlesim" 노드가 주고 "/rostopic" 노드가 받는다.

 

즉, Publishers(발행)에 "/turtlesim" 노드, Subscribers(구독)에 "/rostopic" 노드가 되는 것.

 

추가로, '/turtle1/cmd_vel' 토픽의 정보를 본다면 어떻게 되있는지 생각하고 확인해 보는 것도 좋다.

 

그리고, rostopic echo 를 끄고 '/turtle1/pose' 토픽 정보를 본다면?

 

+22.03.01 추가

rostopic info, rosmsg show .. 대신에 노드 자체의 정보를 검색해도 된다.(이게 더 편하더라)

터미널 1 : roscore

터미널 2 : rosrun turtlesim turtlesim_node

터미널 3 : rosnode info  /turtlesim

=> Publications 와 Subscriptions 의 정보에 topic 상태나 메시지타입등을 한번에 확인가능!

 

감사합니다.

'ROS' 카테고리의 다른 글

ROS, hector_slam  (0) 2022.02.21
ROS, launch 파일(.xml)  (0) 2022.02.20
ROS, turtlesim 활용해 python 기초 코딩  (0) 2022.02.06
ROS, 패키지 만들기, catkin 빌드하기  (0) 2022.02.05
ROS 설치 확인법  (0) 2022.02.04