ROS는 Robot Operating Systems의 약자로, 로봇 소프트웨어 플랫폼이다. 로봇 개발환경에 필요한 다양한 라이브러리 및 도구들을 제공한다.
ROS Master(로스 마스터)는 노드와 노드 사이의 연결과 메시지 통신을 위한 네임 서버와 같은 역할을 한다. roscore
가 command이며, 마스터를 실행하면 각 노드들의 이름을 등록하고 필요에 따른 정보를 주고 받을 수 있다. 마스터가 실행 안되면 메시지 통신이 불가하다.
Node(노드)는 ROS에서 실행되는 최소 단위의 프로세서를 지칭한다. 하나의 실행 가능한 프로그램으로서, ROS에서는 하나의 목적에 하나의 노드를 작성을 권장하며, 재사용이 쉬워야 한다.
노드들은 구동시에 노드 이름, Pulisher, Subscriber, Service server, service client서 사용하는 토픽 및 서비스 이름, 메시지 형태, URI address & port 를 등록한다. 이것을 기반하여 노드끼리 토픽과 서비스를 이용하여 메시지를 주고받는다.
노드들은 각각 compile, execute, manage할 수 있으며, package에 조직화 되어있다.
Package(패키지)는 ROS를 구성하는 기본 단위이다. ROS applications은 패키지 단위로 개발되며, 하나 이상의 노드를 포함하거나 다른 패키지 노드 실행을 위한 설정 파일을 포함한다. 공통된 목적을 가진 패키지들의 집합을 metapackage라고도 한다.
노드들은 메시지를 통해 데이터를 주고 받는다. int, float, bool과 같은 변수 형태이며, 배열과 같은 자료구조들도 사용할 수 있다. Message types들로 topic, service, action이 있다.
Publisher node가 하나의 '이야깃거리'에 대해서 토픽으로 마스터에 등록하고, 이야기를 message형태로 publish한다. Subscriber node는 마스터에 등록된 토픽의 이름에 해당하는 pulish node의 정보를 받게 된다. 직접 publisher node와 연결되어 메시지를 토픽으로 송수신 할 수 있게 된다.
publish는 토픽의 내용에 해당하는 메시지 형태의 데이터를 송신하는 것을 말한다. Publisher node는 publish를 위해 토픽을 포함한 자기 정보들을 마스터에 등록하고, subscriber node에 자신의 정보를 보낸다. 하나의 노드에서 복수의 publisher를 선언할 수 있다.
subscribe는 토픽의 내용에 해당하는 메시지 형태의 데이터를 수신하는 것을 말한다 Subscriber node는 subscribe를 위해 토픽을 포함한 자기 정보들을 마스터에 등록하고, 구독하고자 하는 publihser node의 토픽을 마스터로부터 받는다. Publisher node와 직접 연결된 이후, 데이터를 받는다.
Publish-Subscribe 방식의 토픽 통식 방식을 비동기 방식이라 한다. 필요에 따라서 주어진 데이터를 전송하고 받기에 훌륭한 방법이다. 또한 한 번의 접속으로 지속적인 메시지를 송수신하기 때문에, 지속하여 메시지를 발송해야 하는 센서 데이터에 적합하여 많이 사용된다.
반면에 요청과 응답이 함께 사용되는 동기 방식의 메시지 교환도 필요하다. ROS에서는 service라는 이름으로 메시지 동기 방식을 제공한다. 서비스는 요청이 있을 때 응답하는 서비스 서버와 요청하고 응답받는 서비스 클라이언트로 나뉜다. 서비스는 토픽과 달리 일회성 메시지 통신이다. 서비스의 요청과 응답이 완료되면 연결된 두 노드의 접속은 끊긴다.
Service 메시지 통신은 특정 목적의 작업에 해당되는 서비스를 요청하는 Service client와 서비스 응답을 담당하는 Service server 간의 동기적 양방향 서비스 메시지 통신을 말한다.
Service Server(서비스 서버)는 요청을 입력으로 받고, 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할을 말한다. 요청과 응답은 모두 메시지로 되어 있으며, 서비스 요청을 받으면 지정된 서비스를 수행한 다음에 그 결과를 서비스 클라이언트에 전달한다. 서비스 서버는 정해진 명령을 받아 수행하는 노드에 사용된다.
Service Client는 요청을 출력으로 하고, 응답을 입력으로 받는 서비스 메시지 통신의 클라이언트 역할을 말한다. 요청과 응답은 모두 메시지로 되어있으며, 서비스 요청을 서비스 서버에 전달하고 결과값을 받는다. 서비스 클라이언트는 정해진 명령을 지시하고, 결과값을 받는 노드에 사용된다.
Action은 서비스처럼 양방향을 요구하나 요청 처리 후 응답까지 오랜 시간이 걸리고 중간 결과값이 필요한 경우에 사용되는 메시지 통신 방식이다. 액션 파일은 서비스 파일과 유사하며, 요청과 응답에 대응되는 목표와 결과가 있다. 또한 중간 결과값에 해당되는 피드백이 추가되었다. 구성은 액션의 목표를 정하는 액션 클라이언트와 목표에 맞추어 정해진 일을 수행하고 액션 피드백과 결과를 전달하는 액션 서버로 구성되며, 비동기식 메시지 통신을 수행한다.