ROS2의 역사

ROS1의 한계와 ROS2 개발의 필요성

ROS2의 역사는 ROS1의 성공과 한계에서 시작된다. 2007년에 발표된 ROS1은 로봇 소프트웨어 개발을 위한 표준 프레임워크로서 큰 성공을 거두었으며, 연구와 산업 분야에서 광범위하게 사용되었다. 그러나 시간이 지나면서 ROS1의 기술적 한계가 점차 드러나기 시작하였다.

첫째, ROS1은 단일 스레드 기반의 노드 설계로 인해 멀티 스레딩을 지원하지 못하는 문제를 가지고 있었다. 이는 복잡한 로봇 시스템에서 성능 병목을 유발하였다. 둘째, ROS1은 분산 시스템에서의 확장성과 신뢰성이 부족하였다. ROS1의 마스터(roscore) 프로세스가 모든 통신을 관리하는 중앙 집중식 구조는, 단일 실패 지점(single point of failure)을 초래했고, 이는 대규모 분산 로봇 시스템에서의 안정성을 저해하였다.

셋째, ROS1은 실시간성(real-time performance)을 고려하지 않은 설계로 인해, 실시간 요구사항이 있는 응용에서는 적합하지 않았다. 이 외에도 ROS1은 윈도우(Windows)나 RTOS(Real-Time Operating System)와 같은 다양한 플랫폼을 지원하지 못하는 한계를 가지고 있었다. 이러한 이유로, 로봇 기술이 발전함에 따라 ROS1을 보완할 필요성이 커졌고, 이를 계기로 ROS2의 개발이 시작되었다.

ROS2의 초기 개발

ROS2의 개발은 2014년 Open Robotics(당시 OSRF, Open Source Robotics Foundation)에서 공식적으로 시작되었다. 초기 ROS2의 개발 목표는 ROS1의 한계를 극복하고, 보다 현대적이고 확장 가능한 로봇 운영 체제를 구축하는 것이었다.

ROS2는 처음부터 다음과 같은 몇 가지 주요 목표를 설정하였다:

  • 실시간 성능 지원: ROS2는 실시간 시스템에서 동작할 수 있도록 설계되었다. 이를 위해 DDS(Data Distribution Service)와 같은 실시간 통신 프로토콜을 채택하였고, 노드 간 통신에서 QoS(Quality of Service) 설정을 통해 실시간성을 확보할 수 있도록 하였다.

  • 멀티 플랫폼 지원: ROS2는 다양한 운영 체제에서 동작할 수 있도록 설계되었다. ROS2는 리눅스(Linux)뿐만 아니라 윈도우(Windows), 맥OS(macOS), 그리고 RTOS에서도 구동될 수 있도록 하여, 로봇 소프트웨어 개발 환경의 유연성을 극대화하였다.

  • 분산 시스템의 확장성: ROS2는 분산 시스템에서의 안정성과 확장성을 강화하였다. ROS1에서 중앙 집중식으로 관리되던 마스터 노드를 제거하고, 분산 시스템에 적합한 구조를 채택하여 노드 간의 자율적인 발견과 통신이 가능해졌다.

  • 보안성: ROS2는 보안성을 강화하여, 로봇 시스템의 안전한 운영을 보장할 수 있도록 설계되었다. DDS-Security와 같은 보안 확장 기능을 통해 데이터의 기밀성, 무결성, 그리고 인증을 보장한다.

ROS2의 주요 버전과 발전 과정

ROS2는 2015년에 첫 번째 알파 버전(Ardent Apalone)이 발표되었으며, 이후 여러 주요 버전을 통해 지속적으로 발전해왔다. 각 버전은 새로운 기능을 도입하고, 기존 기능의 성능과 안정성을 개선해왔다.

  • Ardent Apalone (2017): ROS2의 첫 번째 안정화 버전으로, 초기 실험적 기능들을 구현하였다. 이 버전에서는 ROS1과의 병행 사용이 권장되었으며, ROS1에서 ROS2로의 점진적인 전환을 지원하였다.

  • Bouncy Bolson (2018): 이 버전에서는 멀티 스레딩 지원이 강화되었으며, ROS2의 성능이 크게 개선되었다. 또한, ros2 CLI(Command Line Interface)가 도입되어 개발자들이 ROS2 시스템을 더 쉽게 관리할 수 있게 되었다.

  • Crystal Clemmys (2018): 이 버전에서는 윈도우 지원이 본격화되었으며, 멀티 플랫폼에서의 호환성이 더욱 강화되었다. 또한, 네트워크 통신의 안정성을 높이기 위한 추가적인 QoS 설정이 도입되었다.

  • Dashing Diademata (2019): 장기 지원(LTS, Long-Term Support) 버전으로, 산업적 응용을 위한 안정성과 성능이 크게 향상되었다. 이 버전부터는 ROS2의 사용이 더욱 보편화되기 시작하였다.

  • Foxy Fitzroy (2020): 또 다른 장기 지원(LTS) 버전으로, ROS2의 보안 기능이 강화되었으며, 새로운 개발 도구와 라이브러리가 추가되었다. Foxy 버전은 ROS1에서 ROS2로의 전환을 가속화하는 중요한 단계로 평가받고 있다.

  • Galactic Geochelone (2021): 최신 기술과 기능들이 도입되었으며, 실시간 성능과 보안성에서 추가적인 개선이 이루어졌다. 이 버전은 ROS2의 산업적 채택을 촉진하는 역할을 하였다.

ROS2와 ROS1의 공존과 ROS2의 현재

ROS2는 ROS1과 병행하여 개발되었으며, 초기에는 ROS1에서 ROS2로의 전환을 원활히 하기 위한 도구와 방법들이 제시되었다. 그러나 시간이 지남에 따라 ROS2는 ROS1을 완전히 대체할 수 있는 성숙한 프레임워크로 발전하였다. ROS2의 도입 초기에는 ROS1의 기능과 비교하여 일부 제한이 있었으나, 지속적인 업데이트와 커뮤니티의 기여로 인해 ROS2는 다양한 로봇 응용에서 안정적으로 사용될 수 있는 수준에 도달하였다.

현재, ROS2는 연구 및 산업 분야 모두에서 폭넓게 사용되고 있으며, ROS1의 기능을 대부분 지원하면서도 더욱 발전된 기능과 성능을 제공하고 있다. ROS2의 발전은 여전히 진행 중이며, 앞으로도 ROS2의 기능과 성능은 지속적으로 향상될 것이다.

Last updated