https://ropiens.tistory.com/41?category=828450
ROS2 foxy 튜토리얼3 - ROS2 노드(node) 이해하기
그동안은 ROS2의 학습용 패키지인 turtlesim 패키지만을 돌려봤습니다. 이번 차 부터는 그 것들이 어떻게 돌아가는 지 내부를 알아보면서 다시 한 번 학습을 해 보겠습니다. 오늘은 노드(node)에 대해
ropiens.tistory.com
이 블로그를 보고 따라해보다가 뒷부분을 이어서 써본다.
Topic이란?
- node가 메시지를 교환하는 버스 역할
- 여러 topic에 데이터를 게시 및 구독할 수 있음.
- 데이터가 node 간에 이동하는 주요 방법 중 하나

실습
1. 설정
터미널 2개를 열고 다음과 같은 명령어를 실행한다.
(참고 : ros2 run <package_name> <executable_name>)
- 터미널 1
ros2 run turtlesim turtlesim_node
- 터미널 2
ros2 run turtlesim turtle_teleop_key
2. rqt_graph
또 다른 터미널을 열고 rqt_graph를 실행한다.
- 터미널 3
rqt_graph

위와 같은 창을 볼 수 있다.
이 그래프는 방금 실행시킨 /turtlesim 노드와 /teleop_turtle 노드가 topic에 대해 서로 통신하는 모습을 보여준다.
/teleop_turtle node는 키 데이터를 /turtle1/cmd_vel topic에 pub하고 /turtlesim node는 그 topic을 sub해서 데이터를 받아온다.
3. ros2 topic list
새로운 터미널에서 다음과 같은 명령어를 입력해 현재 활성화된 topic list를 확인한다.
- 터미널 4
ros2 topic list
그러면 다음과 같은 list가 반환된다.
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
참고로 $ ros2 node info /turtlesim 을 입력했을 때도
Subscribers와 Publishers에 같은 topic이 출력된다.
4. ros2 topic echo
pub되는 data를 확인하려면 다음과 같은 명령어를 사용한다.
- ros2 topic echo <topic_name>

위 그림의 /turtle1/cmd_vel topic을 확인해볼 것이다.
- 터미널 4
ros2 topic echo /turtle1/cmd_vel
터미널 4가 실행되는 채로 놔두고 터미널 2를 클릭해서 활성화 시킨 후 turtle을 방향키로 조작해본다.
그러면 터미널 4에 다음과 같이 출력될 것이다.

다시 rqt_graph로 가서 Debug의 체크를 해제한 후 왼쪽 상단의 새로고침을 누른다.
그러면 창이 아래와 같이 바뀌는데 /turtle1/cmd_vel topic을 다른 node가 sub하고 있는 것을 알 수 있다.
아래의 /_ros2cil_17865 가 터미널 4에서 실행한 노드이다.

5. ros2 topic info
topic의 정보를 보고 싶다면 다음과 같은 명령어를 사용하면 된다.
- ros2 topic info <topic_name>
- 터미널 5
ros2 topic info /turtle1/cmd_vel
그러면 아래와 같이 Topic Type과 Publisher, Subscription count가 출력된다.

6. ros2 interface show
ros2 topic list -t 라는 명령어를 사용하면 현재 topic의 message type을 알려준다.
- 터미널 5
ros2 topic list -t
아래의 사진에서 확인할 수 있듯이 /turtle1/cmd_vel은 geometry_msgs/msg/Twist를 사용한다.
이것은 geometry_msgs 안에 Twist라고 불리는 msg가 있다는 걸 의미한다.

이 메시지 구조에 대해 자세히 알고 싶다면 다음과 같은 명령어를 이용한다.
- 터미널 5
ros2 interface show geometry_msgs/msg/Twist
다음과 같이 출력된다.

4번째 과정에서 확인한 것과 같은 형식으로 구성되어 있는 것을 확인할 수 있다.
7. ros2 topic pub
6번째 과정에서 메시지 구조를 알 수 있었다.
메시지 형식만 맞춘다면 터미널에서 직접 데이터를 게시하는 것이 가능하다.
ros2 topic pub <topic_name> <msg_type> <args> 꼴로 작성하면 된다.
-터미널 5
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
거북이가 호를 그리는 것을 확인할 수 있다.
여기서 --once 는 하나의 메시지를 게시한 후 종료하는 옵션이다. 만약 이 옵션을 추가하지 않는다면 ^C를 누르기 전까지 계속해서 거북이가 빙글빙글 돈다.
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
이 명령어는 --once를 제거한 후 --rate 1 옵션을 추가한 명령어인데 1Hz로 메시지를 게시하는 것이다.
8. ros2 topic hz
아래와 같은 명령어를 사용해서 topic이 게시되는 hz를 볼 수 있다.
ros2 topic hz <topic_name>

'프로젝트 > ros2' 카테고리의 다른 글
ROS2 foxy 튜토리얼10 - Recording and playing back data (9는 건너뜀) (0) | 2022.03.04 |
---|---|
ROS2 foxy 튜토리얼8 - Using rqt_console (0) | 2022.03.03 |
ROS2 foxy 튜토리얼7 - Understanding ROS2 actions (0) | 2022.02.24 |
ROS2 foxy 튜토리얼6 - Understanding ROS2 parameters (0) | 2022.02.24 |
ROS2 foxy 튜토리얼5 - Understanding ROS2 services (0) | 2022.02.24 |