Ros2는 복잡한 시스템을 여러 모듈형 노드로 나눕니다.
토픽은 노드가 메시지를 교환하는 버스 역할을 합니다.
ROS Topic의 정의 한 줄로 설명:
토픽은 노드간, 그리고 시스템의 여러 부분간에 데이터를 이동하는 주요 방법 중 하나입니다.
토픽은 노드들 간에 통신을 할 수 있는 채널이며, 프로세스간의 통신과 메시지를 주고 받는 경로입니다.
토픽은 데이터가 지속적으로 전달되어지는 데이터 스트림에 적합한 비동기식 통신 방법입니다.
노드는 아무리 많은 주제에 데이터를 게시할 수 있으며, 동시에 아무리 많은 주제라도 구독할 수 있습니다.
topic list
그럼 이제 turtlesim의 topic이 무엇이 있는지 알아보자.
topic list -t
turtlesim의 topic의 리스트들의 각각 type이 무엇인지 알아보자
topic type
하나의 topic에 대해서 type을 알아봅시다.
topic info
발행된 하나의 topic의 info를 알아봅시다.
topic list -v
ros2 topic list -v를 통해 topic list에서 type과 info를 같이 봐보자
topic 역시 service처럼 interface show로 확인해볼 수 있다.
topic echo
turtlesim으 발행한 pose topic을 구독해서 보고 싶다.
ros2 topic echo /turtle1/pose
터미널 하나를 더 열어서 rqt_graph를 열어본다.
rqt graph gui에서 Node/Topics (all)로 바꿔주고 Debug 체크박스를 풀어준다.
이것을 통해 /turtlesim이 /turtl1/pose를 터미널인 /_ros2cli_13589로 보내주고 있음을 시각적으로 확인할 수 있다.
이제 turtle의 주행 명령을 찾아보자
topic list -t를 해본다.
여기에 cmd_vel을 볼 수 있다.
cmd_vel은 command of velocity의 약자이다.
그렇다면 cmd_vel topic의 type인 geometry_msgs/msg/Twist를 알아보자.
이제 topic을 터미널에서 발행해보자.
topic을 구독해서 보는 것은 ros2 topic echo 였다.
topic을 발행하는 것은 ros2 topic pub 이다. (publication)
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: 0.0}}"
이동 했다.
이번에는 회전시켜 보자.
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: 2}}"
원을 그리며 계속 돌게 하자
--once 대신에 --rate를 하면 된다. 여기서 1 숫자는 Hz를 의미하며 1초당 1번을 의미한다. 즉, 1초당 해당 명령이 수행되는것이다.
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: 2}}"
2개의 터미널에 2개의 토픽을 발행해보자.
그리고 또 다른 터미널에서 rqt_graph를 확인해본다.
2개의 터미널에서 turtlesim에서 turtl1/cmd_vel을 동시에 보내고 있음을 알 수 있다.