본문 바로가기

카테고리 없음

[ROS: Robot Operating System] 2-2. ROS Topic (토픽)의 이해

노드 (Node)에 이어서, ROS의 Topic 토픽에 대한 포스팅을 진행한다. 

 

1. Topic (토픽)의 개념

- 토픽은 ('토익스피킹'이 아니고, ㅎㅎ....) 노드들 간에 통신을 할 수 있는 채널이다. 프로세스 간의 어떤 통신이 발생하고, 어떤 메시지를 주고 받게 되는데 이 경로를 토픽이라고 한다. 

 

2. Topic (토픽)의 예제

- 본 포스팅에서는 turtlesim을 이용하여, 간단한 용어들에 대한 개념을 정리해본다. tutlesim은 우리가 기본적인 프로그래밍을 할 때 "hello world!"를 찾는 것처럼, ROS에서 가장 기본적인 예시로 사용되는 패키지이다. 

- 지난 포스팅에서 Node에 대한 공부를 할 때 예제를 이어서 사용한다. 

- 위의 그림과 같이, 각 노드 간에 전달되어지는 메시지의 경로를 토픽이라고 하는데, 위의 예시에서는 /teletop_turtle (publisher)이 /turtlesim (subscriber)에게 /turtle1/cmd_vel 이라는 토픽을 보내고 있다. 

- 그럼, 토픽에 관련된 정보를 알아보기 위해 새로운 command 창을 열고, rostopic을 입력해본다. 

rostopic

- 위의 화면처럼, rostopic에 대한 다양한 옵션키를 활용할 수 있다. 

- 현재 활성 중인 topic을 확인하기 위해 rostopic list를 입력해본다. 

- 위의 turtlesim의 화면에서 /teleop_turtle 노드가 /turtlesim에게 전달하는 /turtle1/cmd_vel (경로이동)에 대한 topic을 확인할 수 있다. 

- rostopic echo는 현재 화면에서 나타나는 메세지를 출력해준다. /turtle1/cmd_vel 의 토픽을 확인해본다. 

rostopic echo /turtle1/cmd_vel

- 위의 그림 command window 1의 화면과 같이, 키보드를 이용하여 터틀심을 움직이는 경로에 대한 정보가 command window 1에 나타난다. 

- 여기서 주의할 점은, 새로운 터미널을 열고 rostopic echo /turtle1/cmd_vel 을 입력한 후, 이전에 실행시킨 command window 2, 즉, rosrun turtlesim turtle_teleop_key 가 실행되고 있는 창에서 방향키를 움직여야 한다. 

- command window 1 화면, rostopic echo /turtle1/cmd_vel 은 단지 출력만 해주는 화면이다. 

 

 

- 다시 돌아와서, rostopic list를 보면, rosout, rosout_agg, statistics, turtle1/cmd_vel, turtle1/color_sensor, turtle1/pose 라는 토픽들이 존재한다. 

-  turtle1/color_sensor는 어떤 토픽들이 전달되고 있는지 확인해본다. 

rostopic echo /turtle1/color_sensor

- 아래와 같이, 화면에 RGB의 색상표가 전달되고 있다. 

- turtle1/pose 에는 어떤 토픽들이 전달되고 있는지 확인해본다. 

rostopic echo /turtle1/pose

- 아래와 같이, 화면에 x, y, theta 좌표 및 각속도의 값이 전달되고 있다. 

- 그래프를 확인하기 위해 rosrun rqt_graph rqt_graph 를 입력한다. 

- 아래 그림처럼, 현재 활성화 되고 있는 노드들에 대한 그래프가 나타난다. 

- /turtle1은 마스터가 되고, /turtlesim과 /teleop_turtle이 노드이다. /teleop_turtle은 /turtle1/cmd_vel 토픽을 /turtle_sim에게 전달한다.