ROSCore를 중심으로 구성되는 다양한 노드간 네트워크에서 데이터를 주고 받는 방식은 목적에 따라서 3가지로 구분된다.
0. 주고받는 데이터?
- 어떤 통신 방식이든, 특정형태의 자료형으로 데이터를 주고 받고, 이를 메시지(또는 토픽)이라고 부르게 된다.
- stdMsgs 에서 정의한 기본 자료형(정수형, 문자열형, 실수형)으로 형선언을 하는 경우, 특별한 추가작업이 필요없다.
- 하지만, 사용자의 필요에 따라 추가로 자료형(결국 클래스)을 만드는 경우, 언어에 맞는 자료구조(=클래스)를 만들어 주는 작업이 필요한데, 이를 위해 아래 절차를 따른다.
-- msg 또는 srv, 또는 action (서비스에 따라 폴더를 '일반적'으로 구분한다.) 폴더안에 사용자가 만들 변수명을 지정한다.
-- 추가된 메시지는 catkin make를 통해 클래스가 자동으로 만들어지는데, 이를 위해 추가된 메시지를 cmakelist.txt 에 정의해 준다. 그리고 실행에서도 인지시킬 수 있도록 package.xml 에도 메시지 선언을 해준다.
-- 이후 catkin make를 실행하면, 사용자 정의 자료형(클래스)을 만들어, 실행 코드 작성시 참조 할 수 있도록 한다.
1. Topic
- 용도:지속적으로 데이터를 전달해야 하는 경우 (일반적으로 관측데이터) 사용한다.
- 시스템 구성: 메시지 계속 전달하는 Publish 노드와 이를 받아서 사용하는 (복수의)Subscribe 노드로 구성이 된다.
- 메시지 구성: 한 방향으로 전달되는 방식이기 때문에, Publish 노드에서 전달할 메시지 1 세트만 구성해주면 된다.
2. Service
- 용도:어떤 지시(정확히는 함수)를 기다리고 있다가, 지시가 생기면 이를 실행하고, 결과를 반환하는 방식이다.
- 시스템 구성; 지시를 기다리는 서비스 '서버'와 요청을 하는 서비스 '클라이언트'로 구성된다.
- 메시지 구성: 요청할 때 사용할 (=지시를 수행할 때 사용할) 메시지 1 세트와 지시를 모두 완료한 다음에 결과를 전달할 메시지 1세트, 총 2가지 메시지 세트를 정의해야 한다.
3. Action
- 용도: 서비스의 경우, 요청과 결과 반환으로만 구성되다보니, 결과를 반환이 지연되거나 여러 이유로 문제가 생기는 경우, 결과 반환없이 종료될 수 있다. 이런 경우, 중간 결과를 요청 이후, 결과 반환 전까지 상태(=feedback)를 '지속적으로' 전달 받을 수 있는 통신 방식이 액션이다.
- 시스템 구성: 서비스와 같이 지시를 기자디를 액션 '서버'와 요청을 하는 액션 '클라이언트'로 구성된다. 다만 내부적으로 feedback 전달을 받기 위한 콜백 함수가 추가로 선언된다.
- 메시지 구성: 요청할 때 사용할(=지시를 수행할 때 사용할) 메시지 1세트와 완료전에 진행 상태를 전달할 메시지 1세트, 그리고 완료된 결과를 전달할 메시지 1세트 총 3가지 메시지 세트로 구성된다.
'ROS' 카테고리의 다른 글
ROS1-07 본격적으로 코딩 하기 전에 기억할 순서! (0) | 2022.07.26 |
---|---|
ROS1-08 토픽 예제1 - 기본 자료형을 사용하는 경우 (0) | 2022.07.26 |
ROS1-05 노드 실행방법 (0) | 2022.07.19 |
ROS1-04 주요 개념 정의[3] - package.xml (0) | 2022.07.19 |
ROS1-03 주요 개념 정의[2] - CMakeLists.txt (0) | 2022.07.19 |