rtshell(CUI툴)

서론

rtcshell은 네임서버 상에서 등록되어 있는 RT컴포넌트를 셸에서 관리할 수 있게 하는 툴입니다. 컴포넌트를 activate/deactivate/reset하거나, 포트의 접속을 할 수 있습니다. RT시스템 을 관리하는 것도 가능합니다.

이 툴은 리소스가 적은 시스템, GUI를 사용할 수 없는 환경(특히, 컴포넌트를 관리하는 다른 PC와 네트워크가 연결되어 있지 않은 환경등) 혹은 RTSystemEditor를 사용할 수 없는 경우 등에 유효합니다. 커멘드 라인 입력에 정통한 분에게 있어서는 특히 편리한 툴입니다.

이 소프트웨어는 NEDO(독립행정법인 신 에너지・산업기술 종합개발 기구) 의 차세대 로봇 지능화 기술 개발 프로젝트의 지원에 의해, 독립행정법인 산업기술 종합연구소에서 개발되고 있습니다. 관리번호 H23PRO-1214.

This software is licensed under the Eclipse Public License -v 1.0 (EPL). See LICENSE.txt.

필요 조건

  • rtctree 3.0 이상이 필요합니다.
  • rtsprofile-2.0가 필요합니다.
  • Python 2.5이하에서는 존재하지 않는 기능을 사용하므로, Python 2.6 이상을 필요로 합니다.
  • rtprint、rtinject 및 rtlog는 OpenRTM-Python-1.0.0 이상을 필요로 합니다.
  • Ubuntu 9.04를 사용한다면, 수동으로 Python 2.6을 인스톨 해야 합니다. Ubuntu 9.04 이상을 추천합니다.

인스톨

인스톨은 몇가지 방법이 있습니다.

  • 리포지터리 또는 소스 어카이브에서 다운로드 후, 적당한 디렉토리에 압축을 해제하고 그 디렉토리에서 커멘드를 실행한다.
  • 리포지터리 또는 소스 어카이브에서 다운로드 후, 적당한 디렉토리에 압측을 해제하고 인스톨합니다.
    1. 소스를 전개한다:

 $ cd /home/blurgle/src/
 $ tar -xvzf rtshell-3.0.0.tar.gz

    1. setup.py를 실행한다:

 $ python setup.py install

    1. 필요에 따라 환경변수를 설정합니다. 이것은 디폴트로 설정되어 있지만, 설정되어 있지 않은 경우는 직접 설정합니다. Windows상에서는 Python의 site-packages 디렉토리가 PYTHONPATH 환경변수에, Python스크립트의 디렉토리가 PATH 환경변수에 설정되어 있는 것을 확인해 주십시오. 통상, C:\Python26\Lib\site-packages\ 과 C:\Python26\Scripts\ 입니다(Python이 C:\Python26\에 인스톨된 경우).
  • Windows에서는 인스톨러 사용을 추천합니다. setup.py을 이용한다면 결과보다 용이하게 설정하는 것이 가능합니다. 단, 환경에 따라서는 더욱이 환경 변수의 설정이 필요한 경우가 있습니다.
  • Windows가 아닌 경우, 셸 스크립트를 인스톨 해야 합니다. ${prefix}/share/rtshell/shell_support(${prefix}는 rtcshell 이 인스톨 된 디렉토리)라는 파일을 source 커멘드로 로드해 주십시오(예는 rtshell 이 /usr/local에 인스톨 된 경우):

 source /usr/local/share/rtshell/shell_support

언제나 새로운 셸을 실행하기 위해 커멘드를 실행할 필요가 없도록 아래의 행을 .bashrc등의 파일에 추가해 주십시오 (rtshell 이 /usr/local에 인스톨 된 경우):

 source /usr/local/share/rtshell/shell_support

도큐먼트

도큐먼트는 MAN 페이지로서 제공합니다(Windows의 경우는 HTML로 제공합니다.). ${prefix}/share/man에 인스톨 됩니다. 이 경로를 $MANPATH라는 환경변수에 추가해야 합니다. 예를들어 rtshell이 /usr/local에 인스톨 된 경우, 이하의 행을 .bashrc에 추가해 주십시오:

 export MANPATH=/usr/local/share/man:${MANPATH}

스크린 캐스트

rtshell의 사용법의 데모를 소개하는 스크린 캐스트는 OpenRTM-aist의 Youtube채널 에 있습니다.

리포지터리

최신판의 소스는 github에 Git의 리포지터리에 있습니다(URL: http://github.com/gbiggs/rtshell ). 「Download source」를 클릭해 다운로드를 할 수 있습니다. 「git clone」을 사용할 수도 있습니다. 패치를 보내고 싶다면, 이 방법을 추천합니다:

 $ git clone git://github.com/gbiggs/rtshell.git

테스트 실행

커멘드의 테스트는 소스 디렉토리에서 실행하는 것이 가능합니다:

 ~/src/rtshell $ ./test/test_cmds.py ~/share/OpenRTM-aist/examples/rtcs/

변수는 RTC의 모듈을 갖는 디렉토리입니다. Motor, Controller 및 Sensor의 모듈이 필요합니다.

하나의 커멘드의 테스트 만을 실행하는 경우, 그 테스트 명을 변수에 추가해 주십시오:

 $ ./test/test_cmds.py ~/share/OpenRTM-aist/examples/rtcs/ rtactTests

Changelog

3.0

  • rtcshell과 rtsshell을 통합하였습니다.
  • 커멘드의 도큐먼트를 작성했습니다.
  • 새 커멘드:rtdoc(컴포넌트의 도큐먼트를 표시 - 松坂씨 제공)
  • 새 커멘드:rtexit(컴포넌트를 종료)
  • 새 커멘드:rtlog(로그의 기록, 재생)
  • 새 커멘드:rtcheck(기동중의 RT시스템과 저장된 RTSProfile을 비교)
  • 새 커멘드:rtcomp(컴포지트 컴포넌트를 작성)
  • 새 커멘드:rtstodot(기동중의 RT시스템을 그래프에 표시 - 松坂씨 제공)
  • 새 커멘드:rtvis(기동중의 RT시스템을 그래프에 표시)
  • rtconf의 세트명, 파라메터명 등 값의 변경시 bash보간 기능을 사용할 수 있도록 대응하였습니다.
  • 셸 서포트 파일을 합쳤습니다.
  • rtconf의 커멘드 라인을 수정했습니다.
  • 좀비 오브젝트를 대응했습니다.
  • rtls로 좀비를 표시하도록 했습니다.
  • rtdel로 모든 좀비를 삭제하도록 했습니다.
  • rtctree에서의 트리 구조를 빠르게 작성하기 위해 패스 필터를 서포트 하였습니다.
  • rtcat:한개의 포트 정보만을 표시하는 오브젝트를 추가하였습니다.
  • rtcat:--ll을 -ll로 변경하였습니다.
  • rtcat:컴포지트 컴포넌트의 정보를 표시합니다.
  • rtcryo:RtsProfile를 표준출력에 출력합니다.
  • rtdis:ID에 의해 커넥션을 삭제하는 옵션을 추가했습니다.
  • rtinject/rtprint:유저 정의 데이터 형을 대응했습니다.
  • rtprint:데이터를 한번 받아 종료하는 옵션을 추가했습니다.
  • rtprint:유저 정의의 데이터 포매터를 대응했습니다.
  • rtprint:Python의 데이터를 표시하는 옵션을 추가했습니다.
  • rtinject:표준입력으로 Python의 데이터를 사용할 수 있도록 하였습니다.
  • rtresurrect:기존 존재하는 접속을 재작성하지 않도록 하였습니다.
  • rtteardown:커넥터ID가 맞지 않는 경우 에러를 출력하고 종료합니다.
  • rtresurrect/rtstart/rtstop/rtteardown:표준 입력으로 입력을 받습니다.
  • rtsshell에서의 커멘드를 라이브러리로서 사용할 수 있도록 했습니다.
  • 테스트를 추가하였습니다.

rtcshell-2.0

  • Windows 대응을 위한 조정.
  • 부모 디렉토리를 나타내는 패스의 취급 방법을 수정했습니다.
  • 새로운 커멘드:rtdel
  • 새로운 커멘드:rtinject
  • 새로운 커멘드:rtprint
  • rtcat:알수없는 접속의 수를 표시합니다.
  • 리팩터링:모든 커멘드를 Python의 스크립트로부터도 간단하게 사용할 수 있도록 했습니다.
  • 셸 보완 기능의 추가(鈴木 圭介씨 제공)
  • rtcwd를 csh계의 셸로 사용할 수 있도록 했습니다.
  • rtcat:rtctree로부터 취득할 수 있게 된 실행 컨텍스트에 관한 새로운 정보를 표시합니다.
  • rtls:ls와 일치하도록 재귀 옵션을 -r에서 -R로 변경했습니다.
  • rtls:알수없는 오브젝트를 죽은 파일로서 표시합니다.

rtsshell-2.0

  • 셸 보완 기능의 추가(鈴木 圭介씨 제공)
  • 플래닝 기능의 추가

rtctree 모듈

rtctree는 Python으로 RT컴포넌트를 관리하기 위한 라이브러리입니다.

개요

rtctree는 간단한 API로 RT컴포넌트의 관리를하기 위한 Python용 라이브러리입니다. 개발자는 CORBA의 API를 몰라도 다른 프로그램으로부터, RT컴포넌트의 시스템을 관리할 수 있습니다. 컴포넌트를 activate 하거나 deactivate 하거나 컴포넌트의 사이의 접속을 실시하는 것 등이 가능합니다.

이 소프트웨어는 NEDO (독립 행정법인 신 에너지·산업기술 종합 개발 기구)의 차세대 로봇 지능화 기술개발 프로젝트의 지원에 의해, 독립 행정법인 산업기술 종합 연구소에 의해서 개발되고 있습니다.

필요 조건

  • ominorb-py 및 omniidl와 omniidl용의 Python 모듈이 필요합니다.
  • Python 2.5 이하에서는 존재하지 않는 기능을 사용하므로 Python 2.6 이상이 필요합니다.
  • Ubuntu 9.04를 사용하고 있으면, 수동으로 Python 2.6을 인스톨 하는 것이 필요합니다. Ubuntu 9.04이상을 추천합니다.

인스톨

인스톨은 몇가지의 방법이 있습니다.

  • 리포지터리(참조:이하의리포지터리) 또는 소스 어카이브(archive)로부터 다운로드 후, 적당한 디렉토리에서 압축을 해제하고 인스톨 합니다:
    1. 소스를 전개한다.
       $ cd /home/blurgle/src/
       $ tar -xvzf rtctree-2.0.0.tar.gz
    2. setup.py를 실행한다.
       $ python setup.py install
    3. 필요에 따라서, 환경 변수를 설정합니다. 이것은 디폴트로 설정되어 있습니다만, 설정되어 있지 않은 경우는 스스로 설정할 필요가 있습니다. Windows상에서는 Python의 site-packages디렉토리가 PYTHONPATH환경 변수에, Python 스크립트의 디렉토리가 PATH환경 변수로 설정되어 있는 것을 확인해 주십시오. 통상, 이것들은 C:Python26Libsite-packages\와 C:Python26Scripts\입니다(Python가C:Python26\에 인스톨 되었을 경우).
  • Windows에서는 인스톨러의 사용을 추천 합니다. setup.py를 이용하면 결과보다 용이하게 설정할 수 있습니다. 다만, 환경에 따라서는 한층 더 환경 변수의 설정이 필요한 경우가 있습니다.

환경 변수

이하의 환경 변수가 사용됩니다.

RTCTREE_ORB_ARGS ORB 작성시에게 입력하는 세미콜론으로 구분지어진 인수의 리스트. 설정은 필요하지 않습니다.
RTCTREE_NAMESERVERS 세미콜론으로 구분하는 RTC 트리를 위한 네임서버의 주소의 리스트. 이 변수에 쓴 서버는 트리에 추가합니다. 설정은 필요하지 않습니다.

보통의 경우 RTCTREE_ORB_ARGS를 설정하는 것은 필요하지 않습니다. RTCTREE_NAMESERVERS를 설정하면, rtctree를 사용할 때에 더 편리합니다. 예를 들면, Bash 셸이라면:

 $ export RTCTREE_NAMESERVERS=localhost;192.168.0.1:65346;example.com

RTC 트리

라이브러리의 주요 부분은 RTC 트리입니다.

 import rtctree.tree
 tree = rtctree.tree.RTCTree()
이것은 네이밍 컨텍스트, 컴포넌트 및 매니저를 취득하기 위해서 네임 서버를 검색해 작성한 파일 시스템과 같은 트리입니다. 통상의 파일 시스템을 취급하는 경우와 완전히 똑같이 취급할 수 있습니다. 트리는 모든 기존의 네임 서버에 등록된 네이밍 컨텍스트, 매니저 및 컴포넌트를 트리 구조로 나타냅니다.

  |-+localhost
 | |-+naming_context
 | | |--ConsoleIn0.rtc
 | | |--ConsoleOut0.rtc
 | |
 | |--another_naming_context
 | |--Sensor0.rtc
 |
 |-+192.168.0.5
   |--Motor0.rtc
   |--Controller0.rtc

트리내의 각 디렉토리는, 통상의 네이밍 컨텍스트 또는 네임 서버의 루트 컨텍스트입니다. 네임 서버의 루트 컨텍스트는 NameServer클래스에서 나타냅니다. 또, 네이밍 컨텍스트는 Directory클래스에서 매니저는Manager클래스에서 나타냅니다.

네임 서버는 루트 디렉토리로부터의 디렉토리로서 다루어집니다. 그 아래는 파일과 서브 디렉토리입니다. 서브 디렉토리는 루트 컨텍스트아래의 네이밍 컨텍스트 및 매니저를 나타냅니다.

파일은 컴포넌트와 매니저입니다. 컴포넌트는 Component클래스에서 보여집니다.

컴포넌트 오브젝트가 나타내고 있는 컴포넌트에 관한 다양한 정보를 저장합니다. 컴포넌트의 activate, deactivate 컴포넌트의 포트 관리, 연결, 구성을 설정할 수 있습니다.

매니저로 새로운 컴포넌트 인스턴스를 만들거나 컴포넌트를 지울 수 있습니다.

트리내의 모든 노드에도 그것들이 나타내는 오브젝트에는 CORBA 오브젝트의 참조를 저장합니다. 이 오브젝트에 액세스 하는 것으로 IDL의 메소드를 호출할 수 있습니다. 만약 현재 rtctree로 실현 불가능한 기능이 있었다 해도, 이 CORBA 오브젝트를 이용해 IDL 메소드를 직접적으로 호출할 수 있습니다.

트리의 구축

트리의 팩토리 함수의 인수(create_tree())는 트리를 구축하기 위한 해석 대상이 되는 네임 서버를 지정합니다. 자세한 것은 해당 함수의 문서를 참조해 주십시오. 일반적으로, 네임 서버의 주소 리스트 또는 패스의 리스트를 건네주어 트리를 구축할 수 있습니다. 환경 변수 RTCTREE_NAMESERVERS도 체크됩니다.

패스

트리내의 노드는 패스로 지정됩니다. 패스는 스트링의 리스트입니다. 하나 오른쪽의 레벨은 왼쪽의 것보다 1 레벨 깊어집니다. 절대 패스는 트리 오브젝트를 지정하기 위해서 필요합니다. 만약 패스가 노드 이하에 존재하는 경우, 노드로부터의 상대 패스 지정도 가능합니다.

이러한 패스 문자열은 파일 시스템 패스 지정과 비슷합니다. 트리의 루트는/로 나타냅니다.(Windows의 경우는\). 최초의 레벨은 네임 서버의 주소입니다. 그 아래의 레벨은 컴포넌트, 매니저 및 네이밍 컨텍스트(디렉토리로서 나타냄)입니다.parse_path라고 하는 함수는 문자열의 패스를 RTC 트리용의 패스로 변경합니다.

예를 들면, 이하의 패스:

 /localhost/naming_context/ConsoleIn0.rtc
는localhost위에서 기동하고 있는 네임 서버의naming_context의 아래에 등록된ConsoleIn0.rtc라고 하는 컴포넌트를 나타냅니다.트리로부터 그 컴포넌트의 오브젝트를 취득하고 싶을 때, 패스를parse_path로 Python의 리스트로 변경할 필요가 있습니다.
 ['/', 'localhost', 'naming_context', 'ConsoleIn0.rtc']

헬퍼 함수

이하는 RTCTree 클래스 및 다양한 노드 클래스를 위한 헬퍼 함수입니다. 여기서 설명하는 것이 모든 API를 나타내고 있는 것은 아닙니다. Doxygen로 기술된 API의 문서를 참조해 주십시오. 예는 rtcshell의 소스를 참조해 주십시오.

RTCTree.has_path 트리의 패스가 있는지를 체크합니다. 컴포넌트의 존재를 체크하려면 이 함수를 사용하면 편리합니다.
RTCTree.get_node 트리로부터 노드를 취득합니다. 컴포넌트, 디렉토리 등을 취득하기 위해서는 이 함수를 사용해 주십시오.
RTCTree.is_component 패스가 컴포넌트를 가리키고 있는지를 조사합니다. 노드 클래스는 is_component라고 하는 같은 기능의 프로퍼티를 갖고 있습니다. is_directory, is_manager 및 is_nameserver라고 하는 함수 및 프로퍼티도 있습니다.
RTCTree.iterate() 트리의 모든 노드에 같은 함수를 실행합니다 .모든 결과는 리스트로서 반환됩니다. 예는 rtcshell의rtls를 참조해 주십시오.
Node.children 노드의 모든 자식(子) 노드. 예:디렉토리 아래의 컴포넌트의 리스트를 취득하기 위해서 이용할 수 있습니다.
Node.full_path 트리의 루트로부터 이 노드까지의 패스.
Node.name 노드의 이름. 예:디렉토리의 이름.
Node.parent_name 노드의 부모의 이름.
Node.root 이 노드의 트리의 루트 노드. 반환된 오브젝트로 트리의 거의 모든 기능을 할 수 있습니다.
Component.activate_in_ec() 컴포넌트를 activate 합니다. 통상은 ec_index는 0으로 상관없습니다.
Component.deactivate_in_ec() 컴포넌트를 deactivate 합니다.
Component.reset_in_ec() 컴포넌트를 reset 합니다.
Component.state_in_ec() 어떤 execution context로 컴포넌트의 스테이트를 얻습니다.
Component.alive 컴포넌트가 alive인지를 체크합니다.
Component.owned_ecs 컴포넌트가 가지고 있는 execution context의 리스트입니다.
Component.participating_ecs 컴포넌트가 사용하고 있는 execution context의 리스트입니다.
Component.state 컴포넌트의 스테이트입니다.
Component.state_string 문자열로 한 컴포넌트의 스테이트입니다.
Component.disconnect_all() 컴포넌트의 모든 포트의 접속을 끊습니다.
Component.get_port_by_name() 컴포넌트의 포트를 이름으로 찾는다.
Component.ports 컴포넌트 포트의 리스트입니다. 입력 포트, 출력 포트 및 서비스 포트의 리스트가 포함된 한편 현재 접속 상태의 포트의 리스트도 취득할 수 있습니다.
Component.object 컴포넌트의 CORBA의 LightweightRTObject 오브젝트입니다.
Component.activate_conf_set configuration 세트를 activate 합니다.
Component.set_conf_set_value configuration 세트의 변수를 설정합니다.
Component.active_conf_set 현재의 active configuration 세트입니다.
Component.active_conf_set_name 현재의 active configuration 세트의 이름입니다.
Component.conf_sets configuration 세트의 리스트입니다.
Port.connect() 이 포트를 다른 포트에 접속합니다.
Port.disconnect_all() 이 포트의 모든 연결을 끊습니다.
Port.get_connection_by_dest() 이 포트의 연결을 다른 포트로 찾습니다.
Port.get_connection_by_name() 이 포트의 연결을 이름으로 찾습니다.
Port.connections 이 포트의 연결 리스트입니다.
Port.is_connected 이 포트가 연결 상태인지 어떤지를 체크합니다.
Port.name 포트의 이름입니다.
Port.object 이 포트의 CORBA의 PortService 오브젝트입니다.
Port.name 포트의 오너(통상은Component오브젝트)입니다.
Port.porttype 포트의 종류(DataInPort,DataOutPort및CorbaPort).
Connection.disconnect() 이 연결을 끊습니다.
Connection.ports 이 연결의 소스나 목적 포트의 리스트입니다.
ConfigurationSet.has_param() 이 세트에 변수가 있는가를 체크합니다.
ConfigurationSet.set_param() 이 세트의 변수를 설정합니다.
ExecutionContext.activate_component() 이 execution context로 컴포넌트를 activate 합니다.
ExecutionContext.deactivate_component() 이 execution context로 컴포넌트를 deactivate 합니다.
ExecutionContext.reset_component() 이 execution context로 컴포넌트를 reset 합니다.
ExecutionContext.get_component_state() 이 execution context안의 컴포넌트의 스테이트를 가져옵니다.
ExecutionContext.running 이 execution context가 기동하고 있는지를 체크합니다.
Manager.create_component() 새로운 컴포넌트 인스턴스를 만듭니다.
Manager.delete_component() 컴포넌트 인스턴스를 삭제합니다.
dict_to_nvlist() Python의 dict를 CORBA의 namevalue 리스트로 변경합니다.
nvlist_to_dict() CORBA의 namevalue 리스트를 Python의 dict로 변경합니다.

API의 스타일

rtctree는 Python의 표준 스타일에 따릅니다. PEP8을 참조해 주세요.

가장 중요한 점은 Private한 내부 API 함수는 언더 바(「_」)로 시작되는 것입니다. 언더 바로 시작되는 함수는 클래스 외부로부터 증명해야 하는 것이 아닙니다. 만약 사용했을 경우에는 미정의된 행동을 일으킬 가능성이 있습니다. 언더 바로 시작되지 않고 docstring가 있는 함수만을 사용해 주십시오.

리포지터리

최신판의 소스는github로 Git의 리포지터리(repository)에 있습니다.「Download source」를 클릭해 다운로드 할 수 있습니다.「git clone」를 사용할 수도 있습니다. 패치를 보내고 싶다면, 이 방법을 추천합니다.

 $ git clone git://github.com/gbiggs/rtctree.git

보다 상세한 문서와 샘플

보다 상세한 문서는 Doxygen로 기술된 문서를 참조해 주십시오.

샘플은rtcshell의 소스를 참조해 주십시오. 이것들은 RTSystemEditor로 실현 가능한 것을 rtctree로 실시하는 방법의 거의 모두를 보이고 있습니다.

Changelog

3.0

  • 예외를 경고로 하였습니다.
  • 좀비의 취급을 개선하였습니다.
  • 좀비 검출 매니저
  • 컴포지트 컴포넌트의 정보를 얻는 API를 추가하였습니다.
  • 포트에서 ID에의해 커넥션을 얻는 API를 추가하였습니다.
  • ORB를 건네는 API를 추가하였습니다.
  • 패스 포매터를 추가하였습니다.
  • 예외를 읽기 쉽게 표시하도록 하였습니다.
  • 퍼포먼스의 향상
  • 해석하는 경로를 제한하는 기능을 추가하였습니다.
  • 좀비 노드를 추가하였습니다.
  • 컴포넌트를 종료하는 API를 추가하였습니다.
  • create_rtctree()함수를 삭제했습니다. RTCTree()를 사용해주십시오.
  • remove_node()API를 추가하였습니다.
  • node.full_path 를 리스트로 변경하고, node.full_path_str을 추가하였습니다.

2.0

  • 실행 컨텍스트에 관해서보다 많은 정보를 해석하도록 했습니다.
  • ORB오브젝트를 외부로부터 주어지도록 했습니다.
  • reparse_connections() 함수를 public으로 했습니다.
  • 노드로 사용되고 있는 ORB를 취득하기 위한 새로운 API를 추가했습니다.
  • 컨텍스트에서 이름을 언바인드하기 위한 새로운 API를 추가했습니다.
  • 보다 많은 CORBA 오브젝트에의 액세스를 가능하게 했습니다.
  • 좀비 컴포넌트의 인식 효율이 향상되었습니다.
  • 알수 없는 CORBA 오브젝트의 취급 방법을 수정했습니다.
  • 오너가 알수 없는 포트의 취급 방법을 수정했습니다.
  • rtctree오브젝트를 Thread-safe하기 위한 락을 추가했습니다.
  • 트리의 오브젝트를 재로드하기 위한 API를 추가했습니다.
  • 적절한 inheritence 취급을 위해서init함수를 수정했습니다.
  • 특정의 EC안의 컴포넌트 상태를 얻기 위한 새로운 API를 추가했습니다.
  • 특정의 EC안의 컴포넌트 상태를 갱신하기 위한 새로운 API를 추가했습니다.

rtsprofile 모듈

rtsprofile은 Python으로 RTSProfile사양을 이용하기 위한 라이브러리입니다.

개요

rtsprofile은 RT시스템 프로파일(RTSProfile)의 사양의 인터페이스 라이브러리입니다. 이 사양은 완전한 RT시스템을 기술해, 시스템을 복원하는 것이나 관리할 수 있습니다. XML도 YAML를 이용 가능합니다.

이 소프트웨어는 NEDO (독립 행정법인 신 에너지·산업기술 종합 개발 기구)의 차세대 로봇 지능화 기술개발 프로젝트의 지원에 의해, 독립 행정법인 산업기술 종합 연구소에 의해서 개발되고 있습니다.

필요 조건

  • Python 2.5 이하에서는 존재하지 않는 기능을 사용하므로, Python 2.6 이상이 필요합니다.
  • Ubuntu 9.04를 사용하고 있으면, 수동으로 Python 2.6을 인스톨 하는 것이 필요합니다. Ubuntu 9.04이상을 추천합니다.

인스톨

인스톨은 몇개의 방법이 이용 가능합니다.

  • 리포지터리(참조:이하의리포지터리(repository)) 또는 소스 어카이브로부터 다운로드 후, 적당한 디렉토리에서 압축을 해제하고 인스톨 합니다:
    1. 소스를 전개한다.
       $ cd /home/blurgle/src/
       $ tar -xvzf rtsprofile-2.0.0-tar.gz
    2. setup.py를 실행한다.
       $ python setup.py install
    3. 필요에 따라서, 환경 변수를 설정합니다. 이것은 디폴트로 설정되어 있습니다만, 설정되어 있지 않은 경우는 스스로 설정할 필요가 있습니다. Windows상에서는, Python 의 site-packages디렉토리가 PYTHONPATH환경 변수에, Python 스크립트의 디렉토리가 PATH환경 변수로 설정되어 있는 것을 확인해 주십시오. 통상, 이것들은 C:Python26Libsite-packages\와 C:Python26Scripts\입니다(Python가C:Python26\에 인스톨 되었을 경우).
  • Windows에서는 인스톨러의 사용을 추천 합니다. setup.py 를 이용하면 결과보다 용이하게 설정할 수 있습니다. 다만, 환경에 따라서는 한층 더 환경 변수의 설정이 필요한 경우가 있습니다.

사용법

라이브러리는RtsProfle의 클래스를 제공합니다. 이 클래스의 인스턴스를 만든 후, RTSProfile의 파일을 건네주는 것으로 완전한 RT시스템 프로파일이 만들어집니다. 혹은 수동으로 기존의 RT시스템의 RT시스템 프로파일을 작성해 파일명을 입력해 그 파일에 RTSProfile를 저장합니다.

클래스의 정보는 Python의 property로 액세스 합니다. 메소드가 아닙니다.

API의 자세한 것은 Doxygen로 구성된 문서를 참조해 주십시오.

테스트의 실행

소스에 샘플 파일과 테스트의 스크립트를 포함하고 있습니다. 이하와 같은 커멘드로 실행이 가능합니다.

 $ python test/test.py ./test/rtsystem.xml
 $ python test/test.py ./test/rtsystem.yaml

PYTHONPATH의 값에 의해서, 테스트는 인스톨 된 rtsprofile를 사용할 가능성이 있습니다.

API naming conventions

rtsprofile는 Python의 표준 스타일에 따릅니다. PEP8에 참조해 주십시오.

가장 중요한 점은, Private한 내부 API 함수는 언더 바(「_」)로 시작되는 것입니다. 언더 바로 시작되는 함수는 클래스 외부로부터 증명해야 하는 것이 아닙니다. 만약 사용했을 경우에는 미정의된 행동을 일으킬 가능성이 있습니다. 언더 바로 시작되지 않고 docstring가 있는 함수만을 사용해 주십시오.

보다 상세한 문서와 샘플

보다 상세한 문서는 Doxygen로 기술된 문서를 참조해 주십시오.

샘플은 rtsshell의 소스를 참조해 주십시오.

리포지터리

최신판의 소스는github로 Git의 리포지터리에 있습니다.「Download source」를 클릭해 다운로드를 할 수 있습니다.「git clone」를 사용할 수도 있습니다. 패치를 보내고 싶다면, 이 방법을 추천합니다.

 $ git clone git://github.com/gbiggs/rtsprofile.git

Changelog

2.0

  • Message Sending 정보의 해석을 수정했습니다.
  • PrecedingCondition의 타임 아웃의 데이터형을 정수로 했습니다.
  • YAML 포맷을 사용할 수 있도록 했습니다.
  • 테스트를 추가했습니다.
  • Preceding Conditions의 디폴트를"SYNC"로 변경했습니다.
  • 버그의 수정