Repository : ROS 에서 사용하는 다양한 패키지를 저장하는 저장소(가장 넓은 개념), ROS를 설치하는 설치 파일도 포함된 저장소
Meta Pakage : 특수화된 패키지, 관련된 패키지들을 모아둔 것
(ex) 자율주행 메타패키지 -> 인지, 판단, 제어 패키지 포함
(ex) 튜토리얼 메타 패키지 -> topic Pub/Sub, Service Server/Client, Tutlesim
ROS Package의 일반적인 구조
include : 패키지에서 사용하는 헤더파일이 있는 폴더 (.h file)
msg : 새로운 메세지를 정의할 때, 메시지 유형이 포합된 폴더 (.msg file)
src/package_name : 소스 코드를 포함하는 폴더 (.c .cpp file)
srv : 새로운 서비스를 정의할 때, 서비스 유형이 포함된 폴더 (.srv file)
script : 실행 가능한 python 스크립트를 포함하는 폴더 (.py .bash. sh file)
CMakeLists.txt : Cmake 빌드 설정 파일
package.xml : 패키지 매니페스트 파일
Ros Computation Graph Level
Master : Parameter Server, Topic, Service, Message, Node에 대한 관리를 모두 수행. (roscore)
노드이름 등록, 검색, 정보 획득.
Topic : node 간 통신을 하기 위한 수단
Node : 최소 단위의 기본 프로세스, 실제 하나의 역할만 하도록 권장.
Node 간 통신 : 메시지, 서비스, 파라미터를 통해 통신
Parameter Server : Master에 값을 전달하여, 코드 실행 중 값 변경 가능.
Message : 노드간 송수신하는 데이터
Bag : ROS에서 데이터(topic)를 저장/불러오기 때 사용
Topic : 메세지 식별을 위한 이름
Publish : Topic을 보내는 것, Subscribe : Topic을 받는 것.
Services : 입력이 있을때만 동작하는 형태의 데이터 송수신
<노드간 통신 방법>
통신 방향 | 통신 방법 | 통신 유형 | |
Topic | 일방향 | 비동기 | 지속적 |
Service | 양방향 | 동기 | 일시적 |
Action | 양방향 | 비동기 | 지속/일시적 |
Topic :
- 단방향 통신으로 연속적으로 데이터를 송수신하는 경우 사용 (센서 데이터)
- 한번 접속시, 지속적 데이터 송수신가능, Publisher는 데이터 송신 시점 지정 가능
- 장기적으로 실행되는 프로세스 또는 예외가 발생할 수 있는 프로세스에서는 사용을 권장하지 않음. (그래도 많이 사용)
Service :
- 양방향 통신으로 노드 간 통신 요청과 동시에 응답하여 처리가 필요한 경우 사용
- Topic과 달리 한번 통신 후 연결이 종료 됨. 다시 통신해야할 경우 접속부터 새롭게 수행해야함.
- 장기적으로 실행되는 프로세스 또는 예외가 발생할 수 있는 프로세스에는 사용을 권장하지 않음.
Action
- Service와 유사, 장기적으로 수행되는 프로세스에서 피드백을 제공하는 양방향 통신
- 최종 응답까지 시간이 오래 걸리는 경우 사용, 메시지 자체는 비동기식으로 전송됨.
- 중간에 취소가 가능하고 상태, 피드백, 결과를 모두 수신 가능.