ROS 통신 1
ROS 내에서는 노드 사이의 데이터 통신을 메세지를 이용하며, 통신 방식으로는 Topic, Service, Action등이 있다.
메세지는 필드타입과 필드네임으로 구성된다.
1. Topic
- 단방향 통신으로 연속적으로 데이터를 송수신하는 경우에 사용한다.(ex. 센서 데이터)
- 한 번 접속 시, 지속적으로 데이터를 송수신할 수 있으며, Publisher는 데이터의 송신 시점을 지정할 수 있다.
- 하나의 Topic에 대해, 여러 개의 Publisher와 Subscriber가 존재할 수 있으나, 권장하지는 않는다.
- *.msg 라는 확장자를 사용한다.
# geometry_msgs/Twist.msg
Vector3 linear
Vector3 angular
2. Service
- 양방향 통신으로 노드 간의 통신 요청과 동시에 응답 및 처리가 필요한 경우 사용한다.
- 토픽과 달리 한 번 통신 후, 연결이 종료되므로 재 통신이 필요하면 접속부터 다시 수행해야한다.
- 장기적으로 실행되는 프로세스 또는 예외가 발생할 수 있는 프로세스에서는 권장하지 않는다.
- *.srv 라는 확장자를 사용한다.
- msg 파일과의 차이점은 --- 이 구분자 역할을 하여 상위 메세지가 서비스 요청 메세지, 하위 메세지가 서비스 응답 메세지로 사용된다.
sensor_msgs/CameraInfo camera_info
---
bool success
string status_message
3. Action
- Service와 비슷하지만, 장기적으로 수행되는 프로세스에서 피드백을 제공하는 양방향 통신을 할 경우 사용한다.
- 요청 후, 최종 응답까지 시간이 오래 걸리는 경우 사용되며, 메세지는 비동기식으로 전송된다.
- *.action 라는 확장자를 사용한다.
- ---이 구분자 역할로 두군데 사용되어 첫번째가 goal 메세지, 두번째가 result 메세지, 세번째가 feedback 메시지로 사용된다. 가장 큰 차이점은 action 파일의 feedback 메시지이다. action 파일의 goal 메시지와 result 메시지의 역할이 위에서 언급한 srv 파일의 요청과 응답 메시지의 역할과 같지만, feedback메시지는 지정된 프로세스가 수행되면서 중간 결과값 전송 목적으로 이용한다는 것에 차이가 있다
# 출발지점 start_pose와 목표 지점 goal_pose의 위치와 자세를 요청값으로 전송하게 되면 로봇은 정해진 목표지점으로 이동하여 최종적으로 도달된 result_pose의 위치 자세값으로 전달한다.
# 주기적으로 중간 결과값으로 percent_complete 메시지로 목표 지점까지의 도달 정도를 퍼센트로 전달하게 된다.
geometry_msgs/PoseStamped start_pose
geometry_msgs/PoseStamped goal_pose
---
geometry_msgs/PoseStamped result_pose
---
float32 percent_complete