ROS란?
Robot Operating System의 줄임말
오픈소스로 공개되어있는 로봇 운영체제이다.
로봇 소프트웨어를 개발하는 데에 필요한 소프트웨어의 집합체!
하지만 OS는 아니다.
운영체제 위에서 Robot Library를 사용할 수 있도록 환경을 깔아주는 것( -> 메타 운영체제)
소프트웨어 모듈 + 라이브러리 집합 + 도구 집합
ROS는 자동차(로봇) 제어를 위한 미들웨어이다.
각종 센서와 모터를 프로그래머가 편하게 사용할 수 있도록 지원해준다. (스마트폰의 안드로이드와 같은 역할!)
Linux와 MacOS에서 가장 잘 동작한다.
ROS가 쉽고 빠르게 개발을 하는 데에 큰 도움을 주기 때문에 프로토타입을 만들 때 사용하기에는 정말 좋다.
하지만 개발에 필요없는데 공간만 차지하는 부분들을 끊어내기가 매우 어렵기 때문에 실 제품을 만들 때는 잘 사용하지 않는다.
ROS의 특징
로봇 소프트웨어를 만들기 위한 코드의 재사용이 용이한 환경이다.
- 다양한 프로그래밍 언어 지원
- 표준화된 ROS 인터페이스를 따르는 HW와 SW를 편하게 엮을 수 있다.
- HW 부품과 SW 부품을 조립하여 여러 응용 구성이 가능하다.
- 대규모 실행 시스템 및 프로세스에도 적용 가능
다양한 도구 제공
- RVIZ 센서데이터를 비롯한 주변 환경을 시각화하여 보여준다.
- RQT 노드 연결 정보를 그래프로 표현해준다.
- Gazebo 물리 엔진 기반의 3차원 시뮬레이터, 시뮬레이터 제작 및 모델링에 이용된다.
다양한 OS 환경에서 통일된 방법으로 상호작용을 구현하는 것이 가능하다.
- Linux, OS X, Windows, Raspbian,,,
- 표준화된 통신 프로토콜을 따르는 이기종간의 메시지 교환이 가능하다.
ROS에서의 통신
-> 토픽의 publish & subscribe 기반의 메시지 교환
노드 간의 통신을 기반으로 전체 시스템을 구동시킨다. (HW 부품이나 SW 모듈에 노드가 하나씩 할당된다.)
노드는 OS의 도움을 받아 HW 장치들을 제어한다.
노드들은 마스터의 도움을 받아서 서로 메시지를 주고 받는다.
서로 분리된 HW 장치 안에 있는 노드들이 네트워크 연결을 통해 서로 통신하면서 하나의 단일 시스템으로서 동작하는 것이 가능하다.
ROS 용어
Master
- 서로 다른 노드들 사이의 통신을 총괄 관리한다.
- 'ROS Core'
- 노드는 아니다.
Node
- 최소 단위의 실행 가능한 프로세서 (하나의 실행 가능한 프로그램이라고 생각)
- ROS에서는 최소한의 실행단위로 프로그램을 나누어 작업하게 된다.
- 각 노드는 메시지 통신으로 데이터를 주고 받는다.
- HW 장치와 SW 모듈에 대해 노드를 하나씩 할당한다.
Topic
- 연속성을 가지고 있는 단방향 메시지 통신 방법 (ROS에서 주로 사용된다.)
- 일방적인 데이터를 계속 보낼 때 주로 사용한다. (센서 데이터 -> 처리해야 하는 데이터들)
- 이 안에 들어있는 실제 데이터를 message라고 부른다.
- 메시지를 보내는 것이 Publisher node, 메시지를 받는 것이 Subscriber node
- 목적에 따라 1:N, N:1, N:N 통신도 가능하다.
- 계속 프로세싱을 처리하기 때문에 네트워크, CPU 사용량이 많다.
Service
- 양방향 통신, 일회성 (다시 하려면 재접속해야함)
- 클라이언트가 서비스를 요청하면 서버는 클라이언트에게 서비스를 응답한다.
- (로봇 이동이나 움직임을 지시하면 로봇 동작이나 관련 프로세싱을 처리하고 요청이 완료되었음을 알려준다.)
Message
- message를 통해 노드간의 데이터를 주고 받는다.
- 메시지는 integer, floating point, boolean과 같은 변수 형태다.
- 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.
Publisher
- 특정 topic에 메시지를 담아 외부로 송신하는 노드
- 카메라, 센서, 모터제어 알고리즘 등
Subscriber
- 특정 topic에 담겨진 메시지를 수신하는 노드
- 액츄에이터 제어기, 데이터 시각화 도구 등
Package
- 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어놓은 것 (패키지의 묶음은 메타패키지)
- 노드, 라이브러리, 데이터, 파라미터 등을 포함한다.
ROS 노드간 통신 기본 과정
ROS 노드간 통신 시나리오
1. Master 실행 ($roscore)
2. Subscriber node 실행 ($rosrun package_name node_name) (특정 토픽에 발행되는 메시지 수신하기를 요청)
3. Publisher node 실행 ($rosrun package_name node_name) (특정 토픽 메시지를 발행하겠다는 의사를 전달)
4. Publisher 정보 전송 (Master가 새 Publisher node의 정보를 Subscriber node에게 전송한다.)
5. Subscriber node가 Publisher node에게 TCPROS 연결 요청
6. Publisher node가 자신의 TCPROS URI를 Subscriber node에게 전송하여 연결 응답
7. TCPROS 연결 (socket연결이 이루어짐)
8. Message 전송
9. Service 요청 및 응답 (메시지 전송 반복-접속이 한번 이루어진 뒤에는 별도 절차 없이 지속적으로 메시지 송수신)
'ROS' 카테고리의 다른 글
ROS - 노드 통신을 위한 패키지 만들기 (0) | 2022.03.01 |
---|---|
ROS - roslaunch (0) | 2022.03.01 |
ROS - turtlesim, publisher, subscriber (0) | 2022.03.01 |
ROS 설치 및 환경설정 (0) | 2022.02.28 |
ROS 명령어 (0) | 2022.02.28 |