Node
👉🏼 Processes that perform computation
- 뭔가 동작을 하기 위한 프로세스
- 실행파일을 실행하면 생성되는 인스턴스라고 생각하는 것이 편함
- 다른 노드와 topic, service, action 등을 통해 통신할 수 있고, Parameter Server에 데이터를 저장하거나 읽어올 수 있음
- 다양한 프로그램 언어를 이용해 개발 가능:
- 지원언어: C++, Python3
- 3rd Party 지원언어: Lisp, Java, Lua 등등
- 모듈형 설계
- 각각 컴파일 가능
- 각각 실행가능
- 개별 관리 가능
Master
👉🏼 Provides name registration and lookup to the rest of the Computation Graph
- 노드 관리
- 노드간의 중재 기능 (Naming and registration services)
- 마스터가 없다면 노드는 무용지물 (어떤 노드가 있는지, 데이터 교환, 서비스 콜 등 전혀 안됨)
- 실행중엔 반드시 하나의 마스터가 실행되어 있어야야 함 (멀티마스터 기능도 있지만, 지금은 생각하지 않는걸로)
- 마스터의 위치는 ROS_MASTER_URI 환경변수 사용
- roscore는 마스터, 파라미터 서버, 로그 기능을 통합해 놓은 command tool
Messages
👉🏼 Simply a data structure, comprising typed fields
- Topic, Service, Action 등에서 사용하기 위한 데이터 타입
- 여러가지 Primitive types을 포함할 수 있고, Arrays of primitives도 가능. 물론 상수(Constants)도 가능
- 로봇 관련 메시지들이 이미 많이 만들어져 사용 가능 (표준처럼)
- 굳이 새로운 메시지를 만들기보단, 만들어져 있는 메시지를 활용하자. 어쩔수 없는 경우에만 만들어서 사용
- 통상적으로 패키지의 이름이 _msgs로 끝나는 것들은 메시지를 모아놓은 것
std_msgs에 있는 메시지의 리스트
Parameter Server
👉🏼 It allows data to be stored by key in a central location
- 마스터를 통해 각종 데이터를 읽거나 쓸 수 있는 중앙 집중형 저장 공간
- 노드들이 해당 API를 이용해 읽거나 쓸 수 있음
- 데이터 타입: integers, floats, boolean, dictionaries, and lists
- 파일 형태로 쓰는 경우 YAML markup language for syntax를 사용