[Micro-ROS] 특징
Micro-ROS를 사용하고 있지만, 이에 대한 특징을 제대로 이해하지 못하는 것처럼 느껴져서 이를 공부하며 정리해보았습니다.
Micro-ROS의 특징
ROS 주요 컨셉을 담고 있는 마이크로컨트롤러 최적용 클라이언트 API
ROS2에서 지원하는 노드, 토픽, 클라이언트와 서버, 라이프사이클 등의 개념을 차용하였습니다.
마이크로로스의 클라이언트 API는 rcl과 rclc 기반으로 생성되었습니다.
ROS2와 자연스러운 연동
MicroROS 에이전트는 MicroROS로 작성된 MCU를 노드로 만들어 ROS2시스템에 연결을 자연스럽게 만들어줍니다.
이를 통해 사용자는 마치 마이크로컨트롤러의 기능들을 일반 노드처럼 다룰 수 있고 다른 ROS2 도구들을 활용할 수 있게 해줍니다.
리소스가 제한된 환경에서도 사용할 수 있는 미들웨어
MicroROS는 eProsima에서 제작한 Micro XRCE-DDS를 사용합니다.
이를 통해 마이크로로스는 극도로 리소스가 제한된 상황 Extremely Resource Constrained Environments (XRCE)에서 사용할 수 있게 되었습니다.
이렇게 만들어진 미들웨어는 여러 통신방식(Transport), 예를 들면 Serial 통신, UDP, Wi-Fi, 6LWoPAN, 블루투스 등을 지원할 수 있게 되었습니다.
다양한 RTOS를 지원하는 빌드 시스템
임베디드 환경에서는 여러 RTOS가 존재합니다. 마이크로로스는 Zephyr, NuttX, FreeRTOS를 지원하며, POSIX 인터페이스를 사용하는 모든 RTOS에 포팅될 수 있습니다.
당연히 OS를 사용하지 않는 베어메탈도 지원합니다.
사용 허용된 라이센스
ROS2와 동일한 Apache License 2.0을 사용하여 라이센스 때문에 활용에 생길 수 있는 곤란한 문제가 없습니다.
계층화 & 모듈화 아키텍처
마이크로로스는 전체적으로 ROS2 아키텍처를 따르며, 마이크로컨트롤러에 최적화하기 위해 DDS-XRCE를 사용합니다.
위 그림에서 짙은 파랑은 micro-ROS를 위해 제작된 부분이며, 밝은 파랑은 표준 ROS2 스택을 나타냅니다.
Micro-ROS의 메모리 제약사항
임베디드 플랫폼에서 마이크로 로스의 최소 요구사항은 메모리 크기입니다.
Micro-ROS의 메모리를 약간 복합적으로 사용하기 때문에, 사용하고자 하는 MCU는 최소 수십 KB 이상의 램 메모리를 탑재하고 있어야합니다.
많이 사용하는 Arduino UNO는 ATmega328P를 사용하는데, 이는 램의 크기가 2KB이므로 사용이 불가능합니다.
Arduino DUE(AT91SAM3X8E 사용)의 96KB 정도가 되야 사용이 가능합니다.
ROSSerial와의 차이점
ROSSerial
ROSSerial은 ROS1에서 마이크로컨트롤러와의 통신을 만들어주는 패키지입니다.
RCLC기반으로 제작된 Micro-ROS와는 달리 C++로 제작된 클라이언트 라이브러리를 사용하며,
ROS2용 패키지는가 없어 ROS2에서는 사용할 수 없습니다.
마이크로로스와 ROSSerial의 차이는 아래 표와 같습니다.
ROSSerial | MicroROS | |
OS | bare-metal | NuttX, FreeRTOS and Zephyr |
통신 아키텍처 | 브릿지 방식 | 브릿지 방식 |
메시지 포맷 | ROS1기반 | CDR기반 (from DDS) |
통신 방식 | UART | UART, SPI, IP (UDP), 6LowPAN, 블루투스,WiFI 등 |
통신 프로토콜 | Custom | XRCE-DDS (혹은 다른 RMW 사용가능) |
기반 코드 | 독립적으로 생성됨 | RCL기반 |
Node API | Custom rosserial API | RCL기반 |
Callback execution | Sequential, in order of messages | ROS 2 executors 및 MCU에 최적화된 executors 중 선택가능 |
Timers | 지원X | 기본 ROS 2 timers |
호스트와 Time Sync방식 | Custom | NTP/PTP |
라이프사이클 | 지원X | Partial, full coming |