ROS
오픈소스
meta OS
: HW 위에 기존 OS가 있는 상태에서 그 위에 올라가는 OS.
이 기종 device 간의 통신 지원
Communication Infra
- Message Parsing 기능 : Sensor data protocol 제공
- Message 기록 및 재생 기능 : 같은 환경에서 반복 실험 가능
- 다양한 Programming Language 지원 : roscpp, rospy, roslisp, rosjava, ...
- 분산 매개 변수 system : 다시 빌드하지 않아도 외부에서 parameter를 조절 가능
로봇 관련 다양한 기능
- 로봇에 대한 표준 Message 정의 : camera, IMU, Lidar 등의 Sensor 표준 Message를 정의하여 모듈화, 협업 유도
- 로봇 기하학 Library : Robot, Sensor 등의 상대적 좌표를 트리화시키는 tf 제공
- 로봇 기술 언어 : 로봇의 물리적 특성 설명하는 XML 문서 기술(urdf 형식)
- 센싱 / 인식 : 센서 드라이버, 센싱/인식 레벨의 Library 제공
- Navigation : 로봇의 포즈 추정, 지도 내의 자기 위치 추정 제공 (SLAM, Navigation Library)
- Manipulation : 로봇 암에 사용되는 IK, FK를 포함한 다양한 Manipulation Library 제공
다양한 개발 도구
- Command-Line Tools : GUI 없이 명령어 만으로 거의 모든 ROS 기능 소화 가능
- RQT :
- Node와 그들 사이의 연결정보 표시,
- 시간이 지남에 따라 변화하는 숫자 plotting,
- data를 message 형태로 기록하고 재생
RViz
- 강력한 3D 시각화 Tool 제공
- Sensor data 시각화
Gazebo
- 물리 엔진 탑재, 3차원 Simulator
- ROS와 매우 높은 호환성
ROS 기본 용어
Node
Node
- 최소 단위의 실행 가능한 processor를 가리키는 용어.
하나의 실행 가능한 Program으로 생각하면 된다.
- ROS에서는 최소한의 실행단위로 Program으로 나누어 작업하게 된다.
- 각 node는 message communication으로 data를 주고 받는다.
Package
Package
: 하나 이상의 node, node 실행을 위한 정보 등을 묶어 놓은 것.
Message
Message
- Messsage를 통해 Node간의 data를 주고받게 된다.
- Message는 integer, floating point, boolean과 같은 변수 형태이다.
- Lidar data의 경우 PointClound2와 같은 규격화된 message type을 주고 받을 수 있다.
Topic, Publisher, Subscriber
Topic
- Message의 일종
- Publisher Node(=Talker)가 하나의 Topic을 Master에 등록한 후,
Topic에 대한 정보를 Message 형태로 발행한다.
이 Topic을 수신하기 원하는 Subscriber Node(=Listener)는
Master에 등록된 Topic의 이름에 해당되는
Publisher Node의 정보를 받고, 이 정보를 기반으로
Subscriber-Publisher가 직접 연결하여 Message를 송/수신하게 된다.
- 1:1 뿐만 아니라 broadband로 한 node가 topic을 Publish하면, 공개적으로 ROS 상에 topic이 떠다니게 된다. 따라서 1:N 통신도 가능하다.
Service, Service Server, Service Client
- Service
- 경우에 따라 요청과 응답이 함께 사용되는 동기 방식의 Message 교환 방식도 필요하다.
- Service는 Topic과 달리 1회성 Message 통신으로 Service의 요청과 응답이 완료되면,
연결된 두 Node의 접속은 끊긴다.
- Service Server : 요청을 입력으로 받고, 응답을 출력하는 Server 역할.
- Service Client : 요청을 출력으로 하고, 응답을 입력으로 받는 Client 역할.
➡️ Sensor data는 Real Time이 중요한데,
Service는 요청과 응답에서 발생하는 Time Delay가 치명적이기 때문에
Service보다는 Topic 형태의 Message를 사용한다.
실습