[ROS] 기본적인 개념 정리

HY K·2024년 8월 7일
0

ROS1

목록 보기
7/34

이번에는 용어 정리에 이어서 ROS가 어떻게 구동되는지에 대해서 관련된 개념들을 정리해보자.

참고한 링크는 다음과 같다.
https://cafe.naver.com/openrt/2468

1. 메시지 통신

이번 포스팅에서는 ROS의 작동 방식과 핵심 기능, 개념에 대해서 다루어볼 것이다. 기존 용어 정리를 참고하면 더 쉽게 확인 가능하다.

ROS의 가장 큰 핵심 개념은 노드 간의 메시지 통신으로, 목적에 따라 세분화 된 최소 단위 실행 프로세스인 노드(node)들 사이에서 데이터를 주고 받음으로써 복잡한 프로그램을 구현하게 된다. 이를 위해 단방향 비동기식 통신인 토픽(topic)과, 양방향 동기식 통신인 서비스(service)가 ROS에 구현되어 있다.

노드들 사이에서의 통신을 위해서는 노드 간의 접속이 필요한데, 이런 접속을 돕기 위해 사용하는 것이 바로 ROS 마스터(Master)이다. 마스터는 노드의 이름, 토픽 및 서비스의 이름, URI 주소와 포트, 파라미터 등을 모두 포괄하는 네임 서버 역할을 한다. 좀 더 자세하게 다루면, 노드는 생성과 동시에 마스터에 자신의 정보를 등록하며, 다른 노드가 마스터를 통해 접속하려는 노드의 정보를 얻게 된다. 그 이후 노드들끼리 직접적으로 연결되어 메시지 통신을 수행한다.

1.1 마스터 구동

ROS 프로그래밍을 하고, 응용 프로그램을 실행하기 위해서 가장 먼저 해야할 것은 ROS 마스터를 실행하는 것이다. ROS 마스터는 다음 명령어로 실행 가능하다.

$ roscore

위 명령어가 실행되면 ROS 마스터는 XMLRPC로 서버를 구동하며, 노드 정보 관리를 시작한다.

1.2 구독자(subscriber) 노드 구동

구독자 노드는 여타 노드들과 마찬가지로 rosrun, roslaunch 명령어를 통해서 구동된다. 구동됨과 동시에 마스터와 XMLRPC를 통해서 통신하며, 자신의 정보를 등록하게 된다.

$ rosrun <package_name> <node_name>
$ roslaunch <package_name> <launch_file_name>

1.3 발행자(publisher) 노드 구동

발행자 노드 역시 구독자 노드와 완전히 동일하게 구동하며, 작동 방식도 동일하다.

$ rosrun <package_name> <node_name>
$ roslaunch <package_name> <launch_file_name>

1.4 발행자 정보 알림 및 접속 요청 → 응답

ROS 마스터는 구독자 노드에게 새로운 발행자 노드가 구동되었음을 알리며, 구독자 노드는 이를 통해 얻은 발행자 노드의 정보를 기반으로 발행자 노드에게 직접 접속 요청을 송신한다. 이때 전송하는 정보로는 구독자 노드 이름(자기 이름), 토픽 이름, 메시지 방식(TCPROS 혹은 UDPROS) 등이 있다. 통신 방식은 XMLRPC를 사용한다. 발행자 노드는 구독자 노드에게 접속 응답에 해당되는 TCP 서버 정보(URI 주소 및 포트)를 전송한다.

밑에 내용은 TCPROS를 사용한다고 가정하자(대체적으로 ROS1에서는 UDPROS보단 TCPROS를 사용한다. ROS2의 경우에는 DDS의 도입으로 인해서 TCP / UDP 선택을 포함해 통신의 QoS(Quality of Service)를 사용자가 지정할 수 있게 되었다).

1.5 TCP 접속 및 메시지 전송

구독자 노드는 TCPROS를 이용해서 발행자 노드에 대한 클라이언트를 만들고, 발행자 노드와 직접 연결한다(TCPROS 사용). 그리고 발행자 노드는 구독자 노드에게 정해진 메시지를 전송한다. 여기까지만 수행하면 토픽이라고 할 수 있다.

1.6 서비스 요청 및 응답

토픽은 발행자 및 구독자, 둘 중 하나 이상이 중지하지 않는 이상 메시지를 계속 연속적으로 발행하고 구독하게 된다. 서비스의 경우, 서비스를 요청하는 서비스 클라이언트와, 요청에 대한 프로세스를 수행 및 응답하는 서비스 서버로 구분된다. 서비스는 토픽과 달리 1회에 한해 접속, 서비스 요청, 서비스 응답이 이루어지고 바로 연결이 끊긴다. 다시 서비스 요청 및 응답이 필요하다면 접속부터 다시 진행해야 한다.

1.7 예제(오로카)

다음 그림은 마스터와 turtlesim 노드, turtle_teleop_key 노드 간의 통신을 도식화 한 이미지이다.

profile
로봇, 드론, SLAM, 제어 공학 초보

0개의 댓글