안녕하세요 WeGo-Robotics의 양지혁 연구원입니다!

이전 게시물에서 ROS의 어린 시절에 대해 이야기 했었습니다. 이번 게시물에서는 ROS의 통신에 대해 자세하게 다뤄보도록 하겠습니다.

사실 ROS을 사용할 때 ROS 통신에 대한 전반적인 이해만으로도 기본적인 작업을 수행하는 데는 문제가 없을 수 있습니다.

그럼 ROS의 통신을 정확히 이해하는 것에는 어떤 장점이 있을까요?

먼저 통신 방식을 정확히 이해하고 있다면 ROS를 사용하면서 마주하는 다양한 통신 문제를 조금 더 효과적이고 빠르게 조치할 수 있으며 확장성 있는 사고와 응용이 가능할 것입니다.
많은 사람들이 ROS를 Web과 함께 사용하거나 ROS를 안드로이드와 사용하는 것과 같이 말이죠.

ROS 통신 구조

ROS의 기본적인 통신 구조는 위 그림과 같습니다. 이러한 구조는 ROS MASTER라는 존재가 각각의 노드를 중재하고 매개하는 역할을 수행하게 됩니다.

간단하게 표현하자면 마치 학교 수업을 예로 들 수 있습니다. 수업을 진행 할 때 선생님은 각각의 학생들의 이름과 위치를 알고있습니다. 선생님은 특정 학생에게 지시를 내리거나 필요한 정보를 전달할 수 있죠!

이와 유사하게 ROS에서도 ROS MASTER가 각 노드의 존재와 상태를 관리하여 필요한 통신을 중재합니다. 이를 통해 노드들은 필요한 데이터를 주고받고 서로 상호작용할 수 있습니다.

자세하게 이야기해보겠습니다.

ROS1에서는 XML-RPC 프로토콜을 통해 노드의 등록, 검색 및 마스터와의 상호작용을 처리합니다.

각 노드는 XML-RPC 서버를 사용하여 ROS 마스터에게 자신의 존재를 알리고, 필요한 서비스나 토픽에 대한 정보를 등록합니다. 이를 통해 ROS 마스터는 전체 시스템의 구성을 파악하고, 노드들 간의 통신을 중재합니다.

하지만 XML-RPC는 직접 데이터를 주고 받는 용도로는 사용되지 않습니다.
실제 데이터의 전송은 TCPROS(TCP/IP 기반의 통신 프로토콜) 프로토콜을 통해 노드 간에 메시지를 주고받으며, 실제 데이터의 전송과 처리가 이루어집니다.

정리하자면 XML-RPC는 ROS의 노드들과 마스터간의 통신을 중재만 해주는 것이고 노드들 간의 데이터 통신은 TCPROS가 담당한다는 것입니다!

XML-RPC

XML-RPC의 경우 마스터서버가 노드들이 어떤 것들을 발행하고 구독하는지에 대한 정보와 TCP서버에 대한 정보들을 다룰 수 있게 해줍니다(마치 저희가 친구에게 간접적으로 공식이 전공서적의 몇페이지에 있는지 알려주는 것 처럼요!)

XML-RPC(Extensible Markup Language - Remote Procedure Call)는 원격 프로시저 호출을 위한 간단한 프로토콜입니다. 이 프로토콜은 XML을 사용하여 데이터를 인코딩하고 HTTP를 통해 데이터를 전송합니다. XML-RPC는 클라이언트와 서버 간의 통신을 단순화하기 위해 설계되었습니다.

직관성: HTTP는 매우 간단하고 직관적인 프로토콜입니다. 이를 XMLRPC에 적용함으로써 XMLRPC도 단순하고 사용하기 쉬운 프로토콜이 되었습니다. 이는 개발자가 XMLRPC를 구현하고 이해하기 쉽도록 도와줍니다.

범용성: HTTP는 웹에서 가장 흔히 사용되는 프로토콜 중 하나이며, 따라서 거의 모든 플랫폼과 언어에서 지원됩니다. 이는 XMLRPC를 사용하여 다양한 환경에서 통신을 구축할 수 있다는 것을 의미합니다.

상호 운용성: HTTP는 플랫폼 간 상호 운용성을 제공하며, 이를 XMLRPC에 적용하여 다른 플랫폼이나 언어로 작성된 시스템과 상호 작용할 수 있습니다. 이는 XMLRPC를 사용하여 다양한 시스템 간에 데이터를 교환할 수 있다는 것을 의미합니다.

이러한 XMLRPC는 ROS의 내부적인 통신 뿐만 아니라 외부적으로도 다양한 응용이 가능하게 합니다.

TCPROS

TCPROS의 경우 노드들 간의 메시지 통신에 직접적으로 사용됩니다. (마치 저희가 친구에게 직접적으로 수학공식을 알려주는 것 처럼요!)

TCPROS는 ROS에서 메시지와 서비스를 전송하기 위한 특별한 프로토콜이며, 이는 표준 TCP/IP 소켓 위에 구축됩니다. 이는 ROS 시스템에서 통신을 담당하고, 메시지 및 서비스 데이터를 안정적으로 전송하기 위해 사용됩니다.

호환성: TCPROS는 표준 TCP/IP 소켓을 사용하므로, 다양한 플랫폼과 언어에서 호환되며, ROS 시스템과 다른 시스템 간의 상호 운용성을 제공합니다.

신뢰성: TCPROS는 TCP/IP 소켓을 기반으로 하므로 데이터 전송에 있어서 신뢰성이 높습니다. TCP는 데이터의 손실이나 순서 변경 없이 안정적으로 전송되도록 보장하기 때문에, ROS 시스템에서 메시지와 서비스를 안정적으로 교환할 수 있습니다.

성능: TCPROS는 효율적인 데이터 전송을 위해 TCP/IP 프로토콜을 사용하므로, 데이터 전송이 빠르고 효율적입니다. 또한, TCPROS는 메시지 큐와 같은 추가적인 중간 계층 없이 노드 간 직접적인 통신을 가능하게 합니다.

이렇게 ROSTCP 또한 다양한 장점으로 ROS의 사용성과 성능 측면에서 많은 도움을줍니다.

단점

하지만 이런 ROS통신 구조에도 단점들이 있습니다..

복잡성: ROS는 강력한 통신 및 분산 컴퓨팅 기능을 제공하지만, 이로 인해 초기 설정 및 배포가 복잡할 수 있습니다. 특히 더 큰 시스템에서는 노드 간의 통신 및 동기화를 관리하는 것이 복잡해질 수 있습니다.

리소스 관리: ROS는 많은 메모리와 CPU 리소스를 사용할 수 있습니다. 특히 많은 수의 노드가 실행되거나 데이터가 높은 대역폭으로 교환되는 경우, 시스템 리소스 소모가 증가할 수 있습니다.

안정성: ROS의 통신은 네트워크를 기반으로 하기 때문에 네트워크 문제나 통신 오류에 의해 신뢰성이 저하될 수 있습니다. 또한, ROS Master의 단일 장애점으로 인해 시스템의 안정성에 영향을 줄 수 있습니다. (학생들이 있어도 선생님이 없으면 수업을 못하는 것 처럼요 ㅠㅠ)

보안성: ROS의 통신은 보안 측면에서 취약할 수 있습니다. 특히, 인증 및 데이터 암호화와 같은 보안 기능이 부족할 수 있습니다.

많은 센서들과 다양한 플랫폼의 데이터 교환이 일어나는 로봇의 특성상 이러한 상황은 쉽게 일어나며 동시에 꼭 해결해야하는 중요한 문제이기도합니다.




오늘은 ROS의 통신 구조와 통신에 사용되는 프로토콜들에 대해 살펴보았습니다.

감사합니다!

profile
자율주행, 협동로봇 플랫폼과 교육을 제공하는 기업

0개의 댓글