https://cafe.naver.com/openrt/24086
토픽(topic)
-비동기(동시에 일어나지 않는)식 단방향(publisher에서 subscriber로 보내는 것만 가능) 메시지 송수신 방식
-Publisher & Subscriber 간 통신
-Publisher: msg 메시지 형태의 메시지를 발간
-Subscriber: 메시지를 구독
서비스(service)
-동기식 양방향 메시지 송수신 방식
-service client & server 간 통신
-service client: 특정 서비스를 요청(request)
-service server: 서비스의 응답(response)
-request & response: srv메시지(msg메시지의 변형)
액션(Action)
-비동기식+동기식 양방향 메시지 송수신 방식
-action client & server 간 통신
-action client: 액션 목표 Goal 지정
-action server: 액션 목표를 받아 특정 태스크를 수행하면서 액션 feedback(중간 결괏값)과 액션 result(최종 결과값)를 전송
-액션 목표/피드백/결과(Goal/Feedback/Result) 메시지: action 메시지(msg 메시지의 변형)
파라미터(parameter)
-몇 가지 점을 제외하고 서비스와 동일
-노드 내 매개변수/글로벌 매개변수를 쉽게 지정(Set) 하거나 변경할 수 있고, 쉽게 가져(Get)와서 사용 가능하다는 점이 다름
$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key
'turtlesim_node'는 노드 파일명이고, '/turtlesim' 이라는 노드명으로 표시된다.
'turtle_teleop_key'는 노드 파일명이고, '/teleop_turtle' 이라는 노드명으로 표시된다.
참고)
ros2 run: 하나의 노드 실행
ros2 launch: 여러개의 노드 실행
$ rqt_graph
2번의 turtlesim노드를 계속 실행한 상태에서 진행하자.
$ ros2 node list
: 동작 중인 노드 목록 보기
rqt_graph
는 rqt의 하나의 플러그인 형태로, rqt 플러그인 류의 툴은 노드 이름에 임의의 번호가 붙게 된다.
나의 경우 4441이란 랜덤 번호가 붙었다.
동일 노드를 다른 이름으로 실행하기
2번에서 실행했던 ros2 run turtlesim turtlesim_node 의 노드를 또 실행하고 싶다면 어떻게 해야 할까?
똑같은 명령어로 실행해도 돌아가긴 하지만, 이름을 바꿔 실행하는 것이 시스템적으로 바람직하다.
$ ros2 run turtlesim turtlesim_node __node:=new_turtle
노드 리스트를 확인하면 new_turtle이 추가된 것을 볼 수 있다.
$ ros2 node list
rqt_graph에서도 new_turtle이 추가된 것을 확인할 수 있다.
ros2 node info
명령어 뒤에 원하는 노드명을 지정해 해당 노드의 Publishers, Subscriber, Service, Action, Parameter 정보를 확인할 수 있다.
/turtlesim 노드의 정보를 보자.
$ ros2 node info /turtlesim
/teleop_turtle노드의 정보를 보자.
$ ros2 node info /teleop_turtle