[ROS] ROS의 핵심 용어

HY K·2024년 8월 7일
0

ROS1

목록 보기
6/34

이번 용어들을 공부하면서 보고 배운 링크는 다음과 같다.
https://cafe.naver.com/openrt/2466

🚀 ROS
로봇 응용 프로그램 개발을 위한 운영체제와 같은 로봇 플랫폼이다.

🚀 마스터(master)

  • 마스터는 노드와 노드 사이의 연결 및 메시지 통신을 위한 네임 서버와 같은 역할을 수행한다. roscore가 실행 명령어이며, 마스터를 실행하게 되면 각 노드들의 이름들을 등록하고 필요에 따라 정보를 받을 수 있다. 마스터 없이는 노드 간의 접속, 토픽과 서비스와 같은 메시지 통신이 불가능하다.
  • 마스터는 마스터에 접속하는 슬레이브들과의 접속 상태를 유지하지 않는 HTTP 기반의 통신 프로토콜인 XMLRPC를 이용해서 통신하게 된다. 필요할 때만 접속해서 자신의 정보를 등록하거나 다른 노드들의 정보를 요청하여 수신받는 식으로 작동하고, 평상시에는 서로 간의 접속 상태를 체크하지 않는다.

🚀 노드(node)

  • 노드는 ROS에서 최소 단위의 실행 가능한 프로그램, 프로세서를 의미한다. ROS에서는 하나의 목적에 하나의 노드를 보통 작성하며, 재사용이 쉽도록 설계하도록 권고하고 있다.
  • 노드는 생성과 함께 마스터에 노드 이름, 발행자(publisher) 이름, 구독자(subscriber) 이름, 토픽 이름, 서비스 이름, 메시지 형태, URI 주소 및 포트를 등록하며, 이 정보들을 바탕으로 각 노드들끼리 토픽 및 서비스를 이용하여 메시지를 주고받을 수 있다.

🚀 패키지와 메타패키지
패키지는 ROS를 구성하는 기본 단위로써 노드를 포함하고 있다. ROS에서는 패키지를 단위로 각각의 응용 프로그램들이 개발되고 있다. 메타 패키지는 공통된 목적을 가진 패키지들을 모아둔 패키지들의 집합이라고 할 수 있다. 복수의 패키지들을 포함하고 있다.

🚀 메시지
노드는 메시지를 통해 노드 간의 데이터를 주고받게 된다. 메시지는 변수 형태, 혹은 간단한 자료구조 및 배열과 같은 구조를 사용한다. 이러한 메시지를 이용한 통신방법으로는 TCPROS, UDPROS 방식 등이 있으며, 단방향 메시지 송/수신 방식의 토픽과 양방향 메시지 요청/응답 방식의 서비스를 이용하고 있다.

🚀 토픽(topic)
발행자(publisher) 노드가 하나의 내용을 토픽 이름으로 마스터에 등록한 후, 메시지 형태로 발행하게 되는 것 중 하나를 토픽이라고 한다. 이 토픽을 수신하길 원하는 구독자(subscriber) 노드는 마스터에 등록된 토픽의 이름에 대항되는 발행자 노드의 정보를 받아서, 발행자-구독자 노드 간 직접적 연결을 통해 메시지를 송/수신 또는 요청/응답하게 된다.

🚀 발행자(퍼블리셔), 구독자(서브스크라이버)

  • 발행: 토픽의 내용에 해당되는 메시지 형태의 데이터 송신
  • 발행자: 노드 내에서 발행을 수행하기 위해 선언하는 존재, 복수로 선언이 가능하다.
  • 구독: 토픽의 내용에 해당되는 메시지 형태의 데이터를 수신
  • 구독자: 노드 내에서 구독을 수행하기 위해서 선언하는 존재, 복수로 선언이 가능하다.

🚀 서비스

  • 토픽은 비동기 방식이라 필요에 따라서 주어진 데이터를 전송하고 받는데 사용한다. 하지만 요청과 응답이 사용되는 동기 방식의 메시지 교환 방식도 필요하기 때문에, 서비스가 그 역할을 담당하고 있다.
  • 서비스는 요청이 있을 경우에 응답을 하는 서비스 서버와, 요청을 하고 응답을 받는 서비스 클라이언트로 구성된다.
  • 토픽과 다르게 1회성 메시지 통신이며, 요청과 응답이 종료됨과 동시에 노드의 접속 역시 끊긴다.

🚀 서비스 서버와 서비스 클라이언트

  • 서비스 서버는 요청을 입력으로 받고, 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할을 한다. 모두 메시지를 사용한다.
  • 서비스 클라이언트는 요청을 출력으로 하고 응답을 입력으로 하는 클라이언트 역할을 맡는다. 마찬가지로 응답과 요청 모두 메시지로 이루어진다.

🚀 roscore
ROS 마스터를 구동하는 명령이다. 같은 네트워크를 사용하고 있다면 다른 컴퓨터에서 실행해도 된다. ROS를 구동하게 되면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재되어 있는 URI 주소 및 포트를 가지며, 디폴트 값으로는 로컬IP와 11311 포트를 사용하게 된다.

🚀 파라미터와 파라미터 서버

  • 노드에서 사용하는 파라미터를 말한다. 디폴트로 설정 값들이 지정되어 있으며 필요에 의해서 외부에서 이 파라미터들을 읽고 수정할 수 있다. 실시간으로 가능하기 때문에 매우 유용하게 사용되고 있다.
  • 파라미터 서버는 패키지에서 파라미터를 사용할 때 각 파라미터를 등록하는 서버를 의미한다. 마스터의 일부분이다.

🚀 rosrun, roslaunch

  • rosrun은 하나의 노드를 실행하기 위해서 실행하는 명령어이다.
  • roslaunch는 복수의 노드를 한번에 실행할 수 있는 명령어이다. 그 외에 패키지의 파라미터 변경, 노드 이름 변경, 노드 네임스페이스 설정, 환경변수 설정 등 많은 옵션을 갖추고 있다.
  • roslaunch를 위해선 *.launch 라는 ROS launch 파일을 사용하여 실행한다. XML 기반으로 작성한다.

🚀 bag
ROS에서 주고받는 메시지의 데이터를 저장할 수 있는 기능을 bag이라고 한다. 이를 통해서 추후 확인 혹은 검증해보고 싶은 환경 및 상황을 그대로 저장할 수 있다. 복잡한 프로그램을 개발할 때 특히 유용하다.

🚀 그래프
노드, 토픽, 발행자, 구독자 관계를 그래프를 통해서 표현할 수 있으며 ROS에서는 시각적으로 보기 편리하도록 rqt_graph 패키지를 통해서 지원하고 있다. rqt_graph 혹은 rosrun rqt_graph rqt_graph 명령어를 사용하면 된다.

🚀 이름
노드, 매개변수, 토픽, 서비스 모두 고유한 이름을 가지고 있다. 이들은 이름을 마스터에 등록하고 각 노드의 파라미터, 토픽, 서비스를 이용할 때 이 이름을 기반으로 상호적으로 동작하게 되어있다. 그리고 이름은 실행시에 변경 가능하기 때문에 유연하게 사용 가능하고, 같은 요소라고 해도 다른 이름으로 중복 실행이 가능하다.

🚀 클라이언트 라이브러리
ROS는 언어 의존성을 낮추기 위해서 클라이언트 라이브러리라는 이름으로 각종 언어의 개발환경을 제공하고 있다. 주요 라이브러리는 C++,파이썬 등이 있다.

🚀 URI(Uniform Resource Identifier)
URI는 인터넷에 있는 자원을 나타내는 유일한 주소이다. 인터넷 프로토콜에서 식별자로서 사용된다.

🚀 XML(Extensible Markup Language)
XML은 특수한 마크업 언어의 한 분류이다.

🚀 XMLRPC
XMLRPC는 RPC 프로토콜의 일종으로 인코딩 형식으로 XML을 채택하고, 전송 방식에서는 접속 상태를 유지하지 않고 체크하지 않는 요청/응답 방식의 HTTP 프로토콜을 사용한다. 매우 가볍고, 다양한 프로그래밍 언어를 지원하고 있다.

🚀 TCP/IP(Transmission Control Protocol / Internet Protocol)
TCP는 전송 제어 프로토콜이고, IP는 인터넷 프로토콜이다. IP를 기반으로 TCP를 사용해서 데이터의 전달을 보증하고, 보낸 순서대로 송/수신하게 되는 통신 프로토콜이라고 보면 된다. ROS에서는 TCPROS라는 이름으로 구현이 되어있다. 다른 프로토콜인 UDP를 사용해서 UDPROS도 구현되어 있으나 잘 사용하진 않는다.

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

0개의 댓글