OpenRTM-aist이란

piping_rtm_logo2.png

OpenRTM-aist는 로봇 시스템을 컴포넌트 지향의 개발을 하기 위한 소프트웨어 플랫폼 입니다.

OpenRTM-aist 에서는 로봇 시스템을 만들 때에, 기능 요소 (이것을 RT컴포넌트: RTC라고 부른다) 마다 프로그램을 작성해, RT컴포넌트를 결합하는 방식으로 시스템을 구축합니다. RT컴포넌트는,C++, Python, Java언어로 개발할 수 있어 주요한 OS (Linux/Unix, Windows, Mac OS X)를 서포트하고 있습니다. 컴포넌트 개발이나 컴포넌트를 이용한 시스템 개발에는 Eclipse툴 및 커맨드라인 의 툴을 이용할 수 있습니다.

RT컴포넌트는 다른 컴포넌트와 데이터나 커멘드의 통신을 하기 위한 포트로 불리는 기능, 행동을 통일하기 위한 액티비티 로 불리는 기본적인 상태 천이 및 파라미터를 외부로부터 조작 가능한 컨피그레이션이라고 하는 기능이 갖춰져 있습니다. 이러한 기능을 이용하는 것으로 독립성이나 재사용성이 높은 모듈을 용이하게 작성할 수 있습니다. 그리고에 누군가가 만든 컴포넌트를 이용하는 것으로 최소한의 프로그래밍 으로 시스템을 구축할 수 있습니다.

OpenRTM-aist는 네트워크 투과성, OS비의존성, 프로그램 언어 비의존성을 중시해 분산 오브젝트 미들웨어인 CORBA를 이용해 구현 되어 있습니다. 현재, OpenRTM-aist는 C++언어 및 Python 언어용의 프레임 워크를 제공하고 있습니다.

RT미들웨어


RT미들웨어 (RTM)

RT미들웨어(RT-Middleware: RTM)란, 로봇 기능 요소(RT 기능 요소)의 소프트웨어 모듈을 복수 조합한 로봇 시스템(RT시스템)을 구성하기 위한 소프트웨어 플랫폼 일반을 가리키는 이름입니다. OpenRTM-aist는 RT미들웨어 구현의 하나인, Open-source and open architecture Robot Technology Middleware implemented by AIST(산업기술 종합연구소)의 약자입니다.

RT시스템을 구성하는 RT기능요소는 어떤 기능을 제공하는 로봇 구성요소로서 예를 들어 서브 모터나 센서, 카메라 등을 디바이스 단위로 움직인다던가, 혹은 이런 디바이스의 조합에 따라 실현된 이동로봇, 암 등도 RT기능요소 라고 부를 수 있습니다.

또한, 하드웨어 연결에 대한 것 뿐만 아니라 제어 알고리즘, 화상처리 알고리즘등의 소프트웨어만으로 구성된 것들도 RT기능요소라고 생각할 수 있습니다. 아래 그림에 표현한 것처럼 모듈화 된 RT기능요소를 계층적으로 조합하는 것으로 로봇 시스템 구축을 용이하게 하기위한 플랫폼이 RT미들웨어 입니다.

rtsystem_integration_ko.png
RT미들웨어에 의한 RT시스템 인테그레이션

RT컴포넌트 (RTC)

RT미들웨어에서는 RT기능요소를 소프트웨어 모듈화한 것을 RT컴포넌트 (RT-Component: RTC)라고 부릅니다. RT컴포넌트에는 다른 RT컴포넌트와 데이터를 통신하거나 주고 받기 위한 포트라고 불리는 인터페이스가 있습니다.

아래 그림은 RTC와 RTM의 관계를 표시하고 있습니다. 위에서 설명한 것처럼 RTC는 어떤 기능을 모듈화한 소프트웨어의 단편으로 그 실체는 RTM상에서 실행되는 공유 오브젝트(shared object), DLL(dynamic link library)입니다. RTC개발자는 자신이 가지고 있는 제어 알고리즘의 코드나 기존 라이브러리 코드등 (코어로직이라고 부름)을 RTCBuilder등의 툴에 의해서 자동생성된 RTC의 원형 코드에 넣어 컴파일(스크립트 언어에서는 불필요) 하는것으로 RTC를 작성합니다.

rtm_and_rtc_ko.png
RTC(RT컴포넌트)와 RTM(RT미들웨어)

모듈의 분할과 통합

RT시스템은 복수의 컴포넌트의 포트를 연결시켜서 각각의 RT컴포넌트 기능의 집합체로서 구축됩니다. 대화・인식 컴포넌트를 예로 생각해 봅시다. 대화・인식 컴포넌트는 유저의 목소리나 표정을 인식・관측하여 음성이나 몸짓・손짓등으로 유저와 대화하는 기능을 가지는 컴포넌트로 이하의 서브 컴포넌트로부터 구성되어 있습니다.

  • 카메라 컴포넌트
  • 스테레오 비젼 컴포넌트
  • 안면 인식 컴포넌트
  • 마이크 컴포넌트
  • 음성인식 컴포넌트
  • 대화 컴포넌트
  • 머리・팔 컴포넌트
  • 음성합성 컴포넌트
    rtcbased_hri_system_ko.png
    RTC로 구성된 대화 인식 시스템의 예

위의 그림처럼 분할 컴포넌트는 각각 포트로 불리는 다른 컴포넌트와 통신하는 인터페이스를 가져, 데이터나 커맨드의 통신을 실행하여 전체적으로 하나의 기능을 실현합니다. 모듈화하는 것으로 모듈단위에서의 병렬개발, 재이용, 변환・갱신, 분산 등이 가능하기 때문에 복잡정도의 경감, 개발비율의 향상이나 시스템의 유연성・확장성・안정성의 향상이 기대 됩니다.

개발의 경위

RT-Middleware는 독립법인 신 에너지 산업기술총합개발기구(NEDO)의 21세기 로봇 챌린지 프로그램(2002년도 - 2004년도)의 프로젝트의 일환으로 그 컨셉이 제창되어 독립법인 산업기술 종합연구소(이하 산소켄), 松下電工 (현 파나소닉 주식회사), 일본 로봇 공업회에 의해서 연구・개발・표준화가 진행되었습니다.

프로젝트의 성과로서 RT미들웨어의 참조 구현으로 OpenRTM-aist-0.2 및 인터페이스 사양이 공개되었습니다. 그 이후 국제표준화 단체 OMG(Object Manegement Group: http://www.omg.org)에 의해 RTC인터페이스 사양의 표준화가 진행되어, 2008년 4월에 OMG공식 표준사양으로 지정 되었습니다. 이 표준에 준거한 RT미들웨어 구현의 하나가 2010년 1월에 공개된 OpenRTM-aist-1.0입니다.

RTC OMG표준

OpenRTM-aist의 큰 특징으로써 컴포넌트 모델과 그 인터페이스가 OMG 국제 표준화 단체에서 표준화 되어있는 것을 들 수 있습니다.

OMG(Object Management Group) 는 1989년에 설립된 소프트웨어 표준화 단체이고 분산 오프젝트 미들웨어 : CORBA (Common Object Request Broker Architecture), 소프트 웨어 모델링 언어 UML(Unified Modeling Language)를 시작으로 다양한 분야의 소프트웨어 표준을 책정・관리하고 있는 조직으로 알려져 있습니다.

RTC의 인터페이스 사양도 CORBA와 같이 OMG에 의해 산소켄과 미국 미들웨어 벤더 RTI (Real Time Innovations)에 의해 표준화 되어, RTC(Robotic Technology Component) Specification ( http://www.omg.org/spec/RTC/1.0/)로써 2008년 4월에 공개 릴리스 되었습니다.

표준화의 메리트로서 표준을 기본으로 한 많은 벤더, 개발자들이 자유롭게 미들웨어를 구현하는 것이 가능하다는 점을 들 수 있습니다. 현재 OMG RTC사양에 준거 혹은 일부 준거하여 미들웨어로써 아래 표에 표시한 7종류(OpenRTM-aist의 3종류의 언어를 포함) 가 존재합니다.

OMG RTC준거 미들웨어 일람

명칭 벤더 명 개요
OpenRTM-aist 산소켄 C++, Python, Java の3언어 대응
OpenRTM.NET (주)세크 .NET 에 따른 구현, OpenRTM-aist과 호환성 있음
OPRoS Project 한국 ETRI 독립 미들웨어상의 구현
PALRO(파르로) 후지 소프트 주식회사 소형인형 로봇PARLO(파르로)의 제어 소프트웨어가 C++언어 레벨로 호환
GostaiRTC GOSTAI/Thales OMG RTC Local PSM에 준거


이 가운데 통신을 개입시켜 호환성이 있는 것은 OpenRTM-aist와 OpenRTM.NET뿐입니다만, 다른 것과의 내부 모델이 동일하기 때문에 브릿지 등을 제휴 시켰을 때에도 전체적으로의 정합성에 모순이 생기는 것은 적게 됩니다. 또, 복수의 조직에 의한 다양한 실장이 존재하는 것으로, 용도에 따라 적절한 언어 나 라이센스를 선택하는 것도 가능하고, 미들웨어 그 자체의 영속성도 높아집니다.

라이센스

OpenRTM-aist는 각 언어버전(C++, Java, Python)의 미들웨어 라이브러리와 RTCBuilder, RTSystemEditor 등의 툴로 구성되어 있으며 EPL와 개별 계약의 듀얼 라이센스의 방식으로 오픈 소스 형식으로 배포 하고 있습니다.

EPL(Eclipse Public License)는 Free Software Foundation(FSF)가 인정하고 있는 「프리 소프트웨어 라이센스」의 하나이며, CPL(일부는 LGPL) 등과 닮은 라이센스 형태이며 보다 상업 이용을 촉진하는 것이 되어 있습니다.

이 라이센스는 (i) 각 모듈로서 배포되는 소프트웨어나, (ii) 프로그램의 파생물이 아닌 것에는 미치지 않습니다. 또 EPL 라이센스는 특허에 관한 조항이 포함되어 있어 작성자가 갖는 특허가 해당 소프트웨어에 영향을 주지 않는(사용자에는 무료의 특허 라이센스가 부여) 형태로 되어 있습니다.

덧붙여 EPL 라이센스의 상세한 것에 대해서는,

이하, 구체적 이용예에 근거하는 라이센스와 제약 조건을 설명합니다.

RT컴포넌트 개발·배포

OpenRTM-ais의 라이센스는 각각의 RT컴포넌트에는 미치지 않습니다. 따라서 RT컴포넌트의 작성자는 자유로운 라이센스로 배포·판매하는 것이 가능합니다.

RT컴포넌트는 OpenRTM-aist의 libRTC.so(또는 RTC.DLL)와 동적 링크되어 있고, 또 RT컴포넌트 자체도 공유 오브젝트(또는 다이나믹 라이브러리)로서 배포 가능합니다. 따라서, RT컴포넌트 자체는 라이센스가 정하는 파생물이라고는 볼 수 없고, EPL 라이센스는 적용되지 않습니다.

license_for_rtcs_ko.png
RT컴포넌트의 라이센스

RT컴포넌트를 작성해 배포하는 분은 임의의 라이센스로 RT컴포넌트를 배포 또는 판매할 수 있고 소스를의 오픈・클로즈 여부를 자유롭게 선택할 수 있습니다.

EPL에 근거하는 OpenRTM-aist의 개편과 재배포

산업기술 종합연구소가 공개하는 OpenRTM-aist를 EPL에 근거해 사용하는 경우, 산업기술 종합연구소는 사용자에 대해서 OpenRTM-aist를 실행, 개편, 재배포, 무료 사용 라이센스를 부여합니다. 다만, EPL에서는 재배포하는 경우에 재배포하는 프로그램에 대해서 EPL와 모순되지 않는 것을 요구하고 있어, 그 중에는 개편된 소스 코드를 제3자가 입수 가능하게 한것도 포함되어 있습니다. 따라서, EPL의 아래에 OpenRTM-aist를 개편해 재배포하거나 판매하는 경우, 소스 코드를 개시 하는 것이 요구됩니다.

임베디드 시스템 등에 있어서는 소스 코드를 개편하지 않고 타겟에 적용하는 것이 곤란한 경우가 많아, 이것은 로봇을 사업화하고 싶은 회사 등에게 있어서는 곤란한 경우가 있습니다. 이러한 경우를 고려하여 OpenRTM-aist는 다음에서 설명하는 개별 계약에 근거하는 라이센스 부여의 형태도 취할 수 있도록 듀얼라이센스 형식을 취하고 있습니다.

개별 계약에 근거하는 OpenRTM-aist의 개편과 재배포

상기의 경우와 같이 로봇 시스템을 상업화할 때에, 소스 코드를 개편 한 후 기술의 유출을 막기 위해서 소스 코드를 클로즈로 하고 싶은 경우, EPL이 아니고 개별 계약의 라이센스로 할 수 있습니다.

개별 계약에 의해 OpenRTM-aist를 개편, 재배포하는 경우 산업기술 종합연구소의 지적 재산 부문과 협의 한 후 이용 형태, 소스 코드의 개편의 정도나 양자의 지적 재산의 비율 등에 대응하여, 산업기술 종합연구소로부터 이용자에 대해서 비EPL의 라이센스를 부여하는 것이 가능합니다. 소스 코드의 이용료나 허가하는 범위 등에 대해서는 개별적으로 협의 후 상세를 결정합니다. 단, 산업기술 종합연구소는 산업진흥 목적의 비영리 법인이며, 저렴한 가격으로 이용할 수 있습니다.

license_for_rtms_ko.png
RT미들웨어의 라이센스

이미 RtcLink, RtcTemplate (RTSystemEditor, RTCBuilder의 이전 버전) 및 OpenRTM-aist(Java버전)에 대해서는 소스 코드의 개시 및 실시 (제품에의 이용)에 대해 개별 계약에 의한 라이센스를 실시한 실적이 있습니다.

OpenRTM-aist 제원

OpenRTM-aist는, RT컴포넌트 프레임 워크, RT미들웨어, 기본 RT 컴포넌트군, 라이브러리, 기본 서비스군, 기본 툴군 등으로부터 구성되어 있습니다. RT컴포넌트 프레임 워크는 RT컴포넌트를 작성하기 위한 기본 클래스이며, 모든 RT컴포넌트는 이 기본 클래스의 서브 클래스 로서 작성됩니다. RT미들웨어는 프레임 워크에 근거해 작성 된 RT컴포넌트의 모듈의 로드나, 인스턴스의 생성·해체 등의 라이프 사이클의 관리, 컴포넌트의 네임 서비스에의 등록 등을 행하는 부분입니다.

현재로서는, OpenRTM-aist는 C++, Python, Java의 각 언어를 지원하고 있고 Windows, UNIX계 OS, μITRON(C++만 대응)계열의 각 OS상에서 동작 가능합니다. 게다가 주식회사 세크가 OpenRTM-aist호환의 미들웨어: OpenRTM.NET을 공개하고 있어, C# 를 시작으로 하는 .NET 환경에서 RTC를 작성·실행 할 수 있습니다. 다른 언어로 작성되거나 다른 OS상에서 동작하는 RTC끼리는 서로 접속·제휴가 가능합니다.

이 외에 유저의 편리성을 향상시키는 라이브러리, RT컴포넌트의 등록검색등의 기본적 서비스(현재는 CORBA 의 Naming Service 를 이용), RT컴포넌트의 모형 코드를 생성하는 RTCBuilder, RT컴포넌트의 접속·제어등 을 실시하는 RTSystemEditor 등의 툴군으로 구성되어 있습니다.

인터페이스 사양

참고

구성

OpenRTM-aist 는 이하의 각 언어 버전의 미들웨어 라이브러리 및 툴군으로 구성되어 있습니다.

OpenRTM-aist의 구성

이름 개요
OpenRTM-aist (C++버전) C++언어로 RT컴포넌트를 작성하기 위한 컴포넌트 프레임 워크와 미들웨어 라이브러리 및 커멘드군
OpenRTM-aist (Python버전) Python언어로 RT컴포넌트를 작성하기 위한 컴포넌트 프레임 워크와 미들웨어 라이브러리 및 커멘드군
OpenRTM-aist (Java버전) Java언어로 RT컴포넌트를 작성하기 위한 컴포넌트 프레임 워크와 미들웨어 라이브러리 및 커멘드군
RTCBuilder RT컴포넌트의 설계, 코드 생성을 행하기 위한 Eclipse 플러그 인
RTSystemEditor RT컴포넌트의 조작 및 RT시스템의 설계·조작을 행하기 위한 Eclipse 플러그 인
rtcshell/rtsshell RT컴포넌트, RT시스템의 조작을 CUI로부터 실시하기 위한 커멘드군

이러한 배포물은 각각 EPL 와 개별 계약의 듀얼 라이센스의 원배포 되어 있습니다.

동작 조건

OpenRTM-aist (C++버전)

컴파일러 gcc 3.x 이상, Visual C++ 2005, 2008
OS Linux, FreeBSD, Windows, Mac OS X, TOPPERS ASP
CPU i386, x86_64, ppc, arm
의존 라이브러리 omniORB 4.0 이상, libuuid (Linux)

OpenRTM-aist (Python버전)

Python Python 2.3 이상
의존 라이브러리 omniORBpy-2.3이상

OpenRTM-aist (Java버전)

Java JDK5 이상
의존 라이브러리 JDK 에 포함되는 Java IDL

RTCBuilder/RTSystemEditor

Eclipse 3.4 이상
Java JDK6 이상
의존 라이브러리 Eclipse EMF 2.2이상(SDO,XSD 포함),
Eclipse GEF 3.2이상(Draw2D 포함)

rtcshell/rtsshell

Python Python 2.6 이상
의존 라이브러리 omniORBpy-2.3 이상

RTC개발의 흐름

이 페이지에서는 RT미들웨어:OpenRTM-aist를 이용한, RT컴포넌트의 개발 방법에 대해 설명합니다.

개발의 흐름

OpenRTM-aist는 컴포넌트화를 위한 프레임 워크와 컴포넌트를 관리·실행하기 위한 미들웨어로 구성되어 있습니다.

OpenRTM-aist는 컴포넌트를 개발하고 싶은 유저(컴포넌트 디벨로퍼)가 갖는 기존의 소프트웨어 자산 혹은 새롭게 작성한 소프트웨어를 용이하게 RTC화하기 위한 프레임 워크를 제공합니다. 컴포넌트 작성의 흐름은 은 아래와 같습니다.

rtc_devel_flow_ko.png
RTC 및 RT시스템 개발의 흐름

위에서 설명한 처럼, RT컴포넌트가 갖는 공통 인터페이스에 관한 코드 및 다른 컴포넌트와의 데이터의 교환의 처리 등은 RT컴포넌트 프레임 워크에 의해 은폐 되고 있습니다. 이러한 처리는 공통이기 때문에 많은 부분은 라이브러리화나 자동 생성이 가능합니다. OpenRTM-aist에서는 RTC의 모형을 생성하기 위한 툴로서 RTCBuilder를 제공하고 있습니다.

RTC 개발자는 자신이 개발한 기존의 프로그램을 컴포넌트 프레임 워크에 짜넣는 것으로 RT컴포넌트를 작성하여 복수의 RTC를 조합해 로봇 시스템을 구축합니다. 기존의 소프트웨어 자원을 소프트웨어 부품인 RT 컴포넌트로서 작성해 두면, 여러가지 상황에서 재사용이 용이하게 됩니다. 작성된 RTC는 네트워크상의 적당한 장소에 배치해, 임의의 장소로부터 이용 할 수 있습니다.

RTC프레임 워크에 준거해 작성된 RTC는 크게 나누어 2 종류의 형태가 있습니다. 스탠드얼론 RTC(Standalone RT-Component)는 단일의 실행 형식의 바이너리, loadable module RTC(Loadable Module RT-Component)는 동적으로 로드 가능한 바이너리 파일이며, 하나의 프로세스로 복수 종류의 RTC를 동시기동 할 때 등에 이용됩니다.

RTCBuilder에 의한 형태 코드의 작성

RTCBuilder는 RT컴포넌트의 형태 코드를 자동 생성하는 개발툴입니다. RTC의 기본 프로파일이나 데이터포트, 서비스 포트, 컨피그레이션에 관한 정보를 입력하는 것으로 대부분의 코드를 자동 생성합니다. 대응하고 있는 언어는 C++, Java, Python, C#입니다. 컴포넌트를 작성하기 전에, 대략 이하를 결정해야 합니다.

  • 프로파일(이름, 카테고리명, 버젼등)
  • 데이터포트(InPort·OutPort, 포트명, 데이터형)
  • 서비스 포트(포트명, 서비스 인터페이스)
  • 컨피그레이션(변수의 이름, 변수의 형태)

Eclipse 메뉴의 「파일」-「신규」로 다이얼로그를 열어, 「그 외」에서 「RTCBUilder」프로젝트를 선택해 프로젝트명을 입력하면, 아래 그림의 화면이 나타납니다. RTCBuilder에는 「기본」 「액티비티」 「데이터 포트」 「서비스 포트」 「컨피그레이션」 「문서 생성」 「언어· 환경」 「RTC.xml」의 탭이 있어, 「기본」으로부터 「언어·환경」까지의 탭으로 순서로 필요에 따라서 항목을 묻고 있으며, 마지막으로 「기본」탭에 있는 Output Project로 방금전 입력한 프로젝트명을 선택해, 「Code Generation」버튼을 클릭함으로 형태 코드가 생성됩니다. 생성된 코드는 Eclipse 기동시에 지정한 워크 스페이스내의 프로젝트명 디렉토리에 보존됩니다.

rtcbuilder_ja.png
RTCBuilder의 개발 화면

RTC의 구현

RT컴포넌트의 프로그램에는 통상의 프로그램과는 달리 main함수에 직접 처리를 구현할 것은 없습니다. 여기서는 예로 C++버전의 구현에 대해서 설명합니다.

RT컴포넌트는 어느 base class를 계승한 하나의 클래스로서 구현되어 있습니다. RT컴포넌트에 있어 로직이 실시하는 처리는 그 base class의 멤버 함수(메소드)를 오버라이드(override) 하는 형태로 기술합니다. 예를 들면 초기화시에 하는 처리는onInitialize함수안에, RTC가 액티브시에 주기적으로 처리 하고 싶은 내용은 onExecute함수에 기술합니다.

 class MyComponent
  : public DataflowComponentBase
 {
 public:
   // 초기화시에 실행하고 싶은 처리
   virtual ReturnCode_t onInitialize()
   {
     if (mylogic.init())
       return RTC::RTC_OK;
     return RTC::RTC_ERROR;
   }
 
   // 주기적으로 실행하고 싶은 처리
   virtual ReturnCode_t onExecute(RTC::UniqueId ec_id)
   {
     if (mylogic.do_someting())
       return RTC::RTC_OK;
     RTC::RTC_ERROR;
   }
 
 private:
   MyLogic mylogic;
   // 포트 등의 선언
   //   :
 };

위의 소스 코드는 C++로의 구현 예입니다. 이 예는 클래스 선언과 구현이 일체가 되고 있지만, 실제로는 헤더 파일(.h)과 구현 파일(.cpp)에 분할되어 코드가 생성됩니다. MyLogic 클래스의 오브젝트 mylogic은 이 컴포넌트가 실제로 실시하는 코어 로직이 구현된 클래스입니다. 예에서는 매우 간단하게 mylogic의 함수를 부르는 것으로 RTC가 구현되고 있습니다만, 실제의 구현에서는 코어 로직을 미리 이 정도 간단하게 이용할 수 있도록 클래스화해 두어 RTC내에서의 호출은 최저로 하는 것이 좋습니다.

RTCBuilder에 의해 동시에 생성되는 Makefile이나 프로젝트 파일로 이 코드를 컴파일 하는 것으로, 실행 파일과 공유 오브젝트(또는 DLL)가 생성됩니다.

RTC 라이프 사이클

위에서 설명한 것처럼 RTC의 구현에서는, 미리 정해놓은 함수(콜백 함수)에 처리를 기술하는 것으로 컴포넌트를 작성합니다. 어떤 함수가 어떤 타이밍에 불리는지를 알기 위해서는, RTC 상태 천이 즉 라이프 사이클을 이해할 필요가 있습니다. 아래 그림은 RTC 상태 천이도입니다.

rtc_state_machine_ko.png
RTC 라이프 사이클 (UML 상태 천이도)

컴포넌트는 기본적으로 이하 상태를 가진다.

  • 생성 상태(Created)
  • 활동 상태(Alive)
    • 비액티브 상태 (Inactive)
    • 액티브 상태 (Active)
    • 에러 상태 (Error)
  • 종료 상태

이러한 각 상태나 천이시에는 미리 정해놓은 함수 (콜백 함수)가 EC 에 의해서 불려집니다. 표는 콜백 함수와 각각이 불리는 타이밍을 나타냅니다.

함수명 개요
onInitialize 라이프 사이클 초기화시에 한번만 불린다.
onActivated 액티브화할 때에 1회불린다.
onDeactivated 비액티브화할 때에 1회불린다.
onExecute 액티브 상태에 있을 때 주기적으로 불린다.
onStateUpdate onExecute 의 뒤에 매회 불린다.
onAborting 에러 상태로 이행할 때에 1회불린다.
onError 에러 상태에 있을 때 주기적으로 불린다.
onReset 에러 상태로부터 복귀할 때에 1회불린다.
onShutdown EC의 구동이 정지할 때에 1회불린다.
onStartup EC의 구동이 개시할 때에 1회불린다.
onFinalize 라이프 사이클 종료시에 한번만 불린다.

RT시스템 개발의 흐름

이 페이지에서는 작성한 RTC를 조합해 시스템을 구축하는 방법에 대해 설명합니다.

네임 서비스

분산 오브젝트 미들웨어는 임의의 장소의 계산기상의 오브젝트에 대해 참조를 보관 유지하는 대리 오브젝트를 개입시켜 투과적 액세스를 제공합니다. 이 참조는 CORBA에서는 IOR(Interoperable Object Reference)로 불려 실체는 오브젝트가 존재하는 계산기의 어드레스나 포트, 오브젝트 고유의 키 등이 encode 된 것입니다. 어느 오브젝트의 IOR를 다른 계산기상의 프 로그램으로부터 이용하는 방법으로서는 네트워크상의 서버상에 등록하는 방법이 있습니다. 이 참조를 등록하거나 취득하거나 하는 서비스가 네임서비 스입니다. 네임 서비스는 CORBA로 표준적으로 정의되고 있는 서비스의 하나로, OpenRTM-aist에서는 rtm-naming이라고 하는 랩퍼 커멘드가 제공되고 있습니다.

시스템을 기동하기 전에 RTC를 등록하는 네임서버를 기동시킬 필요가 있습니다. 또, 각 RTC에 대해서는 미리 네임서버의 장소를 설정 파일 rtc.conf에 기재할 필요가 있습니다. 예를 들면 네임서버를 호스트명 openrtm.mydomain.net위에서 기동했을 경우, 모든 RTC에는 이하 와 같이 기재한 rtc.conf파일을 줄 필요가 있습니다.

 corba.nameservers: openrtm.mydomain.net

또, 네임서버는 IP주소를 등록하는 것도 가능하며 ,로 단락짓는 것으로 복수의 서버에 동시에 RTC를 등록할 수 있습니다. 네임서버는 통상 장시간 기동한 채로 시스템에 대해 고정적이기에 설정 파일을 빈번히 고쳐 쓸 필요는 없습니다.

RTSystemEditor에 의한 시스템 구축

작성된 몇개의 RTC를 실행해 그것들의 포트를 접속해 액티브화하는 것으로 시스템이 동작합니다. RTC끼리의 접속이나 RTC에 대해서 액티브화나 비 액티브화의 커멘드를 보내 시스템을 기동하기 위한 툴로서 RTSystemEditor가 제공되고 있습니다.

rtse_ko.png
RTSystemEditor에 의한 시스템 구축

RTC는 기동되면 그림 왼쪽의 네임서비스 뷰에 나타납니다. 네임서비스뷰 상의 RTC를 중앙의 에디터에 드래그 앤드 드롭 하면 RTC가 에디터 내에 아이콘으로 표시됩니다. 세로방향의 쪽에 돌출된 것이 포트를 나타내고 있으며, 이 RTC간의 포트를 접속하는 것으로 시스템을 구축할 수 있습니다. 또, 화면 중앙 하부에는 RTC의 컨피그레이션 뷰가 표시되는데, 여기서 임의의 RTC의 파라미터를 편집할 수 있습니다.

시스템을 구축하면, 에디터상에서 오른쪽 마우스를 클릭해 All Activate를 선택 하는 것으로 모든 RTC를 액티브화하는 것이 가능합니다. 또, 에디터상에서 오른쪽 마우스를 클릭해, Save as를 선택하는 것으로 시스템의 구성 정보를 저장 할 수 있습니다. 저장한 시스템 구성 정보는 재차 호출하는 것으로 시스템의 접속 정보, 컨피그레이션의 정보등을 복원하는 것이 가능합니다.

현재는 시스템 구성 정보를 복원할 때 미리 RTC를 기동해 둘 필요가 있습니다만, 이후에는 RTC의 기동으로부터 접속 복원까지가 자동으로 실시할 수 있도록 할 예정입니다.

연구・개발

개발의 경위

RT-Middleware는, (독립행정법인)신 에너지·산업기술 종합 개발 기구(NEDO)의 21세기 로봇 챌린지 프로그램(2002년도~2004년도)의 프로젝트에 의해서 그 컨셉이 제창되어 (독립행정법인)산업기술 종합 연구소, 마츠시타 전공 (현 파나소닉 전공 주식회사), 일본 로봇 공업회에 의해 연구·개발·표준화 되었습니다.

프로젝트의 성과로서 RT미들웨어의 참조 구현:OpenRTM-aist-0.2 및 그 인터페이스 사양이 공개되었습니다. 그 후, 국제 표준화 단체 OMG(Object Manegement Group: http://www.omg.org )에 대해 RTC 인터 페이스 사양의 표준화가 진행되어 2008년 4월에 OMG 공식 표준 사양이 되었습니다. 이 표준에 준거한 RT미들웨어 실장의 하나가 2010년 1월에 공개된 OpenRTM-aist-1.0 입니다.

아래 그림은 현재의 연구·개발·표준화 프레임 워크를 나타냅니다.

rtm_randd_ko.png
OpenRTM-aist의 연구·개발·표준화 프레임 워크

RT미들웨어에 관한 연구 개발은 2002년의 RT미들웨어 프로젝트에 시작해, 여러가지 프로젝트로 주변 기술의 수집하면서, 2007년부터의 NEDO 지능화 프로젝트까지 계속적으로 행해져 왔습니다(아래 그림).

rtm_projects_ko.png
OpenRTM-aist에 관련한 여러가지 프로젝트

이하에서는 지금까지의 주된 프로젝트의 개요를 설명합니다.

RT미들웨어 관련 프로젝트

RT미들웨어 프로젝트

독립 행정법인 신 에너지·산업기술 통합 개발 기구(NEDO) 21세기 로봇 챌린지 프로그램(2002년도~2004년도)에의해 「로봇 기능 발현을 위해 에 필요한 요소 기술개발」프로젝트 (통칭:RT미들웨어 프로젝트) 를 행하였습니다. 이 프로젝트에서는, 로봇용 분산 미들웨어 (RT미들웨어)의 연구 개발을 하였습니다. 그 성과로서 미들웨어의 인터페이스 사양이 책정되어 그 사양에 근거한 실장 OpenRTM-aist-0.2.0가 릴리즈 되었습니다.

분산 컴포넌트형 로봇 시뮬레이터

과학 진흥 조정비에 의해 2005~2007년도에 걸쳐 행해진 이 프로젝트는, 로봇 소프트웨어의 축적에 적절한 만큼 컴포넌트 프레임 워크와 이 위에 구축된 로봇 월드 시뮬레이터를 개발하는 것으로써, 기반 소프트웨어의 재사용을 촉진해, 차세대 로봇의 개발을 효율화하는 것을 목적으로 하고 있습니다.

openhrp_openrtm_ko.png
분산 컴포넌트형 로봇 시뮬레이터

이 프로젝트에 의해 지금까지 산업기술 종합연구소에서 따로 따로 개발되고 있던, 로봇용 동역학 시뮬레이터인 OpenHRP3와 OpenRTM-aist가 통합되었습니다.

시뮬레이터내의 대상 시스템 및 외부의 콘트롤러 모듈 등을 RT컴포넌트로서 개발하는 한편, 콘트롤러 컴포넌트를 시뮬레이터가 실기 모두 재컴파일 하는 것 없이 재사용할 수 있도록 RT컴포넌트의 로직 구동 주체인 실행 컨텍스트가 확장되었습니다.

산업기술 종합연구소 산업 변혁 연구 주도권

산업기술 종합연구소는 독자적인 프로젝트로서 2006년부터 2008년도에 걸쳐, 「산업기술 종합연구소 산업 변혁 연구 주도권」이라고 불리는 산학관 제휴 프로젝트를 실시했습니다.

복수의 차세대형 로봇의 프로토 타입 개발을 통해서 로봇 요소 기술을 RT 미들웨어로 재사용 가능한 로봇 기능 부품으로서 모듈화해, 이것들 의 구성에 의해서 새로운 로봇 제품이 효율 좋게 개발할 수 있는 환경을 구축하는것을 목표로 했습니다.

지금까지 산업기술 종합연구소에 대해 개발되어 온 로봇용 전력 절약 고성능 프로세서, 실시간 Linux, 분산 컴포넌트형 시뮬레이터, 액티브 RF-ID, 3차원시각, 잡음하에서의 음성인식, 2족 보행 기술 등의 로봇 요소 기술을 RT미들웨어를 이용해 모듈화해, 그것을 조합하는 것으로 다른 차세대 로 보트의 프로토 타입을 개발한였습니다. 본 연구로 개발된 RT미들웨어를 기반 의 로봇 시스템 아키텍쳐를 유저 지향 로봇 아키텍쳐 UCROA(User Centered Robot Open Architecture) 로 칭합니다.

ucroa_ko.png
UCROA (User Centered Robot Open Architecture)

이 연구·개발 프로젝트에서는 이하 세가지 타입의 로봇 시스템의 개발을 목표로 해, 최종적으로 이하와 같은 성과를 올렸습니다.

차세대 로봇 지능화 기술개발 프로젝트

경제 산업성 및 NEDO에 의한 「차세대 로봇 지능화 기술개발 프로젝트」 (2007년도~2011년도)는 5년간 총액 70억(예상)의 대규모 프로젝트입니다. 차세대 로봇 시스템을 위한 요소 기술을 RT컴포넌트로서 작성· 축적해, 재사용의 방법이나 인터페이스의 공통화에 관한 논의를 통하여 차세대 로봇의 설계·구현을 하기 위한 방법론을 확립하는 것과 동시에 실제로 사용하고 있는 많은 RT컴포넌트군을 축적하는 것을 목적으로 하고 있습니다.

또, 로봇 시스템 개발의 여러가지 국면으로 이용할 수 있는 각종 툴, 미들웨어, 라이브러리를 포함한 RT시스템 개발을 위한 플랫폼 (OpenRT 플랫폼 (OpenRTP)이라고 부른다)을 OpenRTM-aist위에 구축 하였습니다. 개발툴군은 Eclipse의 플러그 인으로서 구현되어 일련의 작업을 동일 개발 환경에서 행할 수 있는 툴 체인으로 되고 있습니다.

openrtp_ko.png
OpenRT 플랫폼 (OpenRTP)

툴 체인간의 데이터는 RT컴포넌트를 기반으로 한 모듈 사양 기술 방식이나 시스템 사양 기술 방식(UML 모델과 XML schema로부터 완성)에 기반한 포맷으로 기술되어, 툴간의 제휴를 보다 확실하게 하여 장래적으로는 표준화도 목표로 하고 있습니다. 프로젝트의 최종 성과로서 작성한 많은 RT컴포넌트군이나 툴군을 소스 코드 공개 후 오픈화 혹은 사업화에 대해서도 검토되고 있습니다.

오픈 이노베이션(innovation) 촉진 프로젝트

NEDO에 의해 2008년부터 3년간 실시된 「기반 로봇 기술 활용형 오픈 이노베이션 촉진 프로젝트」입니다. 이 프로젝트에서는 기존의 요소 부품 을 용이하게 RT컴포넌트화하기 위해 저가로 소형 기반 통신 모듈을 개 발하는 것을 목표로 하고 있습니다. 게다가 이 기반 통신 모듈을 이용하고, 실제로 주택의 여러 부분에 센서나 액츄에이터를 배치해, 다양한 디바이스가 연계하여 안심·안전·쾌적한 거주 공간을 만들어 내는 지능화 주택을 실증 시스템으로서 구축했습니다.

그 외

프로젝트 이외에도 OpenRTM-aist의 연구·개발·보급을 위한 활동 을 실시하고 있습니다.

강연회

정기적이지는 않지만 한 해에 몇차례의 페이스로 실습 형식의 강연회를 여러 장소에서 실시하고 있습니다. 특히, 기계 학회 로봇틱스·메카트로닉스 강연회에 대해서는 튜토리얼로써 매년 강연회를 실시하고 있습니다.

RTM 콘테스트

로봇 비즈니스 추진 협의회의 주최, SICE 시스템 인테그레이션 부문강 연회의 병설 행사로서 RT미들웨어나 RT컴포넌트의 작품을 모집해 컨벤션을 실시하는 RT미들웨어 콘테스트를 실시하고 있습니다.