OpenRTM-aist (Python버전) 0.4계열 인스톨

여기에서는 OpenRTM-aist(Python)의 Windows에의 인스톨 방법을 설명합니다. ※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해서 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

UNIX/Linux에서의 인스톨

여기에서는 OpenRTM-aist(Python)의 UNIX에의 인스톨 방법을 설명합니다. ※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

Unix로의 인스톨

대응 OS 및 배포

 OpenRTM-aist-Python-1.0.0은 아래와 같은 OS로 동작하는 것이 확인되고 있습니다.
  • Vine Linux
  • Fedora Linux
  • Ubuntu Linux
  • Debian Linux

rpm 패키지에 의한 인스톨

 VineLinux3.2, VineLinux4.0용의 rpm 패키지와 Ubuntu7.10용의 deb 패키지가 준비되어 있습니다.

인스톨 환경의 준비

 rpm 패키지나 deb 패키지의 작성을 실시한 환경에서는, 이하에 표에 있는 버전의 Python, omniORB, omniORBpy를 사용하고 있습니다.

Vine 3.2 Vine 4.0 Ubuntu 7.10
omniORB 4.0.5* 4.0.7 4.0.7
omniORBpy 2.3-1* 2.7-1 2.7
Python 2.3.4 2.4.4 2.5.1
* Vine 3.2:omniORB4.0.7 + omniORBpy2.7-1 위에서도 동작합니다


 OpenRTM-aist-Python 의 인스톨에 대비해 사전에 이러한 패키지를 인스톨 해 둡니다.
참고:

 → 각 패키지를 인스톨하기 위한 팁

패키지로의 인스톨

 rpm 패키지, deb 패키지를 여기로부터 다운로드합니다. 인스톨을 하는 경우, 각각 이하와 같이 해주십시오.

 [Vine의 경우]
 > su
 # rpm -ivh OpenRTM-aist-Python-0.4.1-RC2.vl32.i386.rpm
 # rpm -ivh OpenRTM-aist-Python-example-0.4.1-RC2.vl32.i386.rpm
 또는,
 # rpm -ivh OpenRTM-aist-Python-0.4.1-RC2.vl40.i386.rpm
 # rpm -ivh OpenRTM-aist-Python-example-0.4.1-RC2.vl40.i386.rpm
 
 [Ubuntu7.10의 경우]
 > sudo dpkg -i openrtm-aist-python_0.4.1-RC2_i386_Ubuntu710.deb
 > sudo dpkg -i openrtm-aist-python-example_0.4.1-RC2_i386_Ubuntu710.deb


환경 변수의 설정

 환경 변수 PYTHONPATH가 설정되어 있는지를 확인해 주십시오.

 PYTHONPATH가 설정되어 있지 않은 경우, 이하와 같이 환경 변수의 설정을 해주십시오.

 [bash]
 > vi ~/.bashrc
 export PYTHONPATH=/usr/lib/python2.x/site-packages 
 > source ~/.bashrc
 
 [csh]
 > vi ~/.cshrc
 setenv PYTHONPATH /usr/lib/python2.x/site-packages 
 > source ~/.cshrc

※ python2.x의 2.x는 Python 버전(2.3, 2.4, 2.5)입니다. 또, "/usr/lib/python2.x"는 Python이 인스톨 되고 있는 경로를 지정해 주십시오.

◆계속해서 동작 확인으로 진행해 주십시오.

소스로부터의 빌드와 인스톨

대응 OS 및 배포버전

OpenRTM-aist-Python-0.4.1은 아래와 같은 OS 및 Linux 배포버전에서 동작 하는 것이 확인되고 있습니다.

  • Vine Linux 3.2
  • Vine Linux 4.0
  • Ubuntu Linux 7.1

동작 조건

OpenRTM-aist-Python-0.4.1의 인스톨에는 아래와 같은 패키지가 필요합니다.


  1. ORB
    • 현재로서는 대응 ORB 실장은 omniORB-4.0 이상만되고 있습니다.
    • omniORBpy는 버전 2.3 또는 2.7이 추천됩니다.
  2. Python
    • 버전 2.3, 2.4, 2.5으로 동작 확인을 실시하고 있습니다.
  3. Tkinter
    • GUI 관계의 컴포넌트에서 필요합니다.

참고:

 → 각 패키지를 인스톨하기 위한 팁

  •  이것들 이외의 OS에 대해서는, 각각의 패키지의 문서에 따라 인스톨을 실시해 주십시오.

소스 코드의 전개

 우선 소스 코드 OpenRTM-aist-Python-0.4.1-RC2.tar.gz를 여기로부터 다운로드해, 적당한 디렉토리에 전개합니다.

 > tar xvzf OpenRTM-aist-Python-0.4.1-RC2.tar.gz
 > cd OpenRTM-aist-Python-0.4.1


빌드

OpenRTM-aist는 패키지의 빌드에 Python의 Distutils 모듈을 사용하고 있습니다. 이하의 방법으로 빌드해 주십시오.

 > python setup.py build

인스톨

빌드가 정상적으로 종료하면 OpenRTM 모듈, 유틸리티 커멘드군을 인스톨 합니다.

 > su
 # python setup.py install


환경 변수의 설정

 환경 변수 PYTHONPATH가 설정되어 있는지 확인해 주십시오.

 PYTHONPATH가 설정되어 있지 않은 경우, 이하와 같이 하여 환경 변수를 설정해 주십시오.

 [bash]
 > vi ~/.bashrc
 export PYTHONPATH=/usr/lib/python2.x/site-packages 
 > source ~/.bashrc
 
 [csh]
 > vi ~/.cshrc
 setenv PYTHONPATH /usr/lib/python2.x/site-packages 
 > source ~/.cshrc

※ python 2.x의 2.x는 Python의 버전(2.3, 2.4, 2.5)입니다. 또, "/usr/lib/python2.x"의 부분은 Python이 인스톨 되고 있는 패스를 지정해 주십시오.



◆계속해서 동작 확인으로 진행해 주십시오.

Windows에서의 인스톨

 이하의 작업은 관리자 권한을 가진 상태로 진행해 주십시오.

대응 OS 및 디스트리뷰션

 OpenRTM-aist-Python-0.4.1은 아래와 같은 OS에서 동작하는 것이 확인되고 있습니다.

  • Windows XP Professional SP2 및 SP3

동작 조건

 OpenRTM-aist-0.4.1의 인스톨에는 아래와 같은 패키지가 필요합니다.

  1. Python은 버전 2.3, 2.4, 2.5로 동작 확인을 실시하고 있습니다.
  2. ORB
    • 현재로서는 대응 ORB 실장은 omniORBpy-2.3 이상만되고 있습니다.
    • omniORBpy는 버전 2.3,2.7,3.1으로 동작 확인을 실시하고 있습니다.

환경 변수의 설정

PYTHONPATH의 설정

 작업을 실시하기 전에 유저 환경 변수(이하, 환경 변수라고 기술합니다.) PYTHONPATH의 설정을 확인해 주십시오. PYTHONPATH가 설정되어 있지 않은 경우, 이하와 같이 하여 환경 변수를 설정해 주십시오.

1. "내 컴퓨터"를 마우스 오른쪽 버튼 클릭

2. [상세 설정]탭을 클릭

3. 환경 변수 다이얼로그의 "환경 변수(N)"를 클릭

4. "유저 환경 변수(U)"항목의 "신규(N)"를 클릭

5. "변수명(N):"에 "PYTHONPATH"를 "변수치(V)"에 "C:\Python24\Lib\site-packages"를 각각 입력해 "OK"를 클릭

※ "변수치(V)"에는 자신의 환경에서의 Python의 site-packages 폴더의 패스를 지정해 주십시오. PYTHONPATH에는 복수의 패스 설정은 하지 않고 site-packages(C:\python24\Lib\site-packages)까지의 패스만의 설정으로 해주십시오.

6. 환경 변수 다이얼로그의 "OK"를 클릭

이상은 Python2.4를 사용하는 경우의 예입니다. Python2.5를 사용하는 경우는 위에서 "Python24"를 "Python25"로 변경하여 설정해 주십시오.

Path의 갱신

 이 시점에서, 환경 변수 Path의 설정도 갱신합니다. 순서는 위의 「PYTHONPATH의 설정」과 같습니다만, 순서 4.와 5.에서 조금 다릅니다.

4. "시스템 환경 변수(S)" *로부터 변수 Path를 찾아, 그것을 더블 클릭 합니다. * 이것은 유저 환경 변수에서도 괜찮습니다. 그 경우는, 「신규」로의 작성이 될지도 모릅니다.

5. "변수치(V)"로 설정되어 있는 문자열의 마지막에 ";C:\Python24"를 추가 기입하고 "OK"를 클릭

이상은, Python2.4를 사용하는 경우의 예입니다. Python2.5를 사용하는 경우는 위에서 "Python24"를 "Python25"로 변경하여 설정해 주십시오.

패키지로의 인스톨

 WindowsXp용의 패키지 인스톨러가 준비되어 있습니다. 소스 코드로부터의 인스톨이 필요한 경우는 본 페이지 마지막 장에 있는 Windows 시스템으로의 빌드를 참조해 주십시오.

  • 인스톨러로 인스톨하는 방법:

 인스톨러를 인터넷상에서 열거나, 데스크탑 등에 저장하여 더블 클릭 해 실행합니다. 그리고 인스톨러에 따라서 인스톨을 해주십시오.

◆ Python → omniORBpy → OpenRTM-aist-Python의 순서로 인스톨 하여 주십시오.

◆ 패키지 작성을 실시한 환경에서 사용된 Python, omniORBpy의 버전을 이하에 일람 합니다.

◆ WINDOWS\system32 폴더를 검색해, msvcp71.dll와 msvcr71.dll가 있는 것을 확인해 주십시오. 이것들이 없는 경우는 여기 에서 다운로드 해주십시오.

→ ''FAQ'': 「MSVCP71.dll를 찾을 수 없습니다.…」라고 하는 에러로 종료하는 경우

Windows에서의 빌드

 이하의 작업은 관리자 권한을 가진 상태로 실행해 주십시오.

대응 OS 및 디스트리뷰션

 OpenRTM-aist-Python-0.4.1은 아래와 같은 OS에서 동작하는 것이 확인되고 있습니다.

  • Windows XP Professional SP2 및 SP3

    동작 조건

 OpenRTM-aist-0.4.1의 인스톨에는 다음에 표시되는 패키지의 조합이 필요합니다.

  • Python2.4 와 omniORBpy2.7
  • Python2.5 와 omniORBpy3.1

 이것들 패키지의 인스톨러가 준비되어 있습니다. 자세한 것은 여기를 참조해 주십시오.

환경 변수의 설정

 여기 를 참조해 주십시오.

소스 코드의 전개

 소스 코드 OpenRTM-aist-Python24-0.4.1-RC2.zip(Python2.4를 사용할 경우) 혹은 OpenRTM-aist-Python25-0.4.1-RC2.zip(Python2.5를 사용할 경우)를 여기로부터 다운로드해 적당한 폴더에 전개합니다.

빌드

OpenRTM-aist는 패키지의 빌드에 Python의 Distutils 모듈을 사용하고 있습니다. 커멘드 prompt에서 이하와 같이 입력해 빌드하여 주십시오.

 > cd <OpenRTM-aist-Python전개 폴더>
 > python setup.py build

인스톨

빌드가 정상적으로 종료하면 OpenRTM 모듈, 유틸리티 커멘드군을 인스톨 합니다. 커멘드 prompt에서 이하와 같이 입력해 인스톨을 해 주십시오.

 > python setup.py install



◆ WINDOWS\system32 폴더를 검색하여 msvcp71.dll와 msvcr71.dll가 있는 것을 확인해 주십시오. 이것들이 없는 경우, 여기 로부터 다운로드해 주십시오.

UNIX/Linux에서의 동작확인

샘플의 테스트

 인스톨이 정상적으로 종료되면, 부속의 샘플로 동작 테스트를 합니다. 여기에서는 샘플 컴포넌트 세트 SimpleIO를 사용하고 샘플 컴포넌트와 OpenRTM-aist-Python의 동작을 확인합니다.

샘플 컴포넌트 세트 SimpleIO:
 RT컴포넌트 ConsoleIn.py, ConsoleOut.py와 이것들의 통신을 접속하는 Connector.py로 구성되는 샘플 세트입니다. 이 세트는 ConsoleIn.py에 준 수치를 ConsoleOut.py에 표시하는 「가장 Simple한 I/O 데몬스트레이션」을 목적으로 한 샘플입니다. ConsoleInComp로부터 ConsoleOutComp에 접속해, 그 통신을 개시시키는 것이 ConnectorComp의 역할입니다.


샘플의 실행

  • rpm 패키지 혹은 deb 패키지로부터 인스톨 했을 경우
     샘플은 {prefix}* /share/OpenRTM-aist/examples/python에 있습니다. 실행하고 싶은 샘플 컴포넌트 세트를 유저의 작업 디렉토리(다음의 코드예에서는 RTCexamples)에 복사해 사용합니다.
     {prefix}*: 통상 Linux라면 /usr 그 이외에서는 /usr/local 가 되는 경우가 대부분입니다.
     > mkdir RTCexamples
     > cd RTCexamples
     > cp -r /usr/share/OpenRTM-aist/examples/python ./
     > cd python/SimpleIO
     > python run.py

  • 소스로부터 빌드·인스톨 했을 경우
     스스로 빌드·인스톨 했을 경우는 소스를 전개한 디렉토리 이하의 OpenRTM/examples/<샘플 컴포넌트 세트명>에 있습니다.
     > cd OpenRTM-aist-Python-0.4.1/OpenRTM/examples/SimpleIO/
     > python run.py


 실행하면 신규의 터미널이 2개 열립니다. "Please input number:"라고 표시되고 있는 터미널에 숫자를 입력합니다. 입력하는 숫자는 long int에 들어가는 범위의 수치를 입력해 주십시오. 숫자를 입력하면, 다른 한쪽의 터미널에 입력한 것과 같은 숫자가 나타납니다. 여기까지 할 수 있으면, OpenRTM-aist-Python가 정상적으로 인스톨 되고 있는 것을 확인할 수 있습니다.


컴포넌트 템플릿의 테스트

준비

 우선, rtc-template를 사용하기 위한 준비를 합니다.


 $PYTHONPATH/OpenRTM/rtc-template/rtc-template.py에 실행권한을 주어/usr/bin등의 패스가 참조하는 곳에 rtc-template.py에의 심볼릭 링크를 연결합니다.

 > su
 # cd $PYTHONPATH/OpenRTM/rtc-template
 # chmod +x rtc-template.py
 # ln -s $PYTHONPATH/OpenRTM/rtc-template/rtc-template.py /usr/bin/rtc-template

테스트

다음으로 컴포넌트의 템플릿 제네레이터를 사용하고, 간단한 컴포넌트를 작성하는 테스트를 실시합니다. 템플릿 제네레이터 (rtc-template)를 사용합니다. 컴포넌트를 작성하는 디렉토리(임의의 디렉토리)를 작성하고 그 디렉토리에서 컴포넌트를 작성해 보겠습니다.

 > cd 
 > mkdir SampleComponent
 > cd SampleComponent

우선은 help를 보겠습니다.

 > rtc-template --help
 
 Usage: rtc-template [OPTIONS]
 
 Options:
 
     [-h]                                  Print short help.
     [--help]                              Print details help.
     [--backend[=backend] or -b]           Specify template code  generator.
     [--module-name[=name]]                Your module name.
     [--module-desc[=description]]         Module description.
     [--module-version[=version]]          Module version.
     [--module-vendor[=vendor]]            Module vendor.
     [--module-category[=category]]        Module category.
     [--module-comp-type[=component_type]] Component type.
     [--module-act-type[=activity_type]]   Component's activity type.
     [--module-max-inst[=max_instance]]    Number of maximum instance.
     [--module-lang[=language]]            Language.
     [--config[=ParamName:Type:Default]]   Configuration variable.
     [--inport[=PortName:Type]]            InPort's name and type.
     [--outport[=PortName:Type]]           OutPort's name and type
     [--service[=PortName:Name:Type]]      Service Provider Port
     [--service-idl[=IDL_file]]            IDL file name for service
     [--consumer[=PortName:Name:Type]]     Service Consumer Port
     [--consumer-idl[=IDL_file]]           IDL file name for consumer
     [--idl-include=[path]]                Search path for IDL compile
        :
      중략
        :
 Example:
     rtc-template -bcxx      --module-name=Sample --module-desc='Sample component'      --module-version=0.1 --module-vendor=AIST --module-category=Generic      --module-comp-type=DataFlowComponent --module-act-type=SPORADIC      --module-max-inst=10       --config=int_param0:int:0 --config=int_param1:int:1      --config=double_param0:double:3.14 --config=double_param1:double:9.99      --config="str_param0:std::string:hoge"      --config="str_param1:std::string:foo"      --inport=Ref:TimedFloat --inport=Sens:TimedFloat      --outport=Ctrl:TimedDouble --outport=Monitor:TimedShort      --service=MySvcPort:myservice0:MyService      --consumer=YourSvcPort:yourservice0:YourService      --service-idl=MyService.idl --consumer-idl=YourService.idl

rtc-template에 대해서 작성하고 싶은 컴포넌트의 설정을 인수로서 건네주면, 컴포넌트의 양식을 작성합니다. 여기에서는 help의 표시의 마지막 부분에 표시된 Example:이하를 복사하여 테스트해 보겠습니다.

Example의 예에서는 서비스 프로바이더로서 MyService, 서비스 컨슈머로서 YourService를 이용하는 옵션이 주어지고 있어 그것을 위한 IDL 파일을 커런트 디렉토리에 둘 필요가 있습니다. 여기에서는 간단한 IDL 파일을 이하와 같이 작성해 둡니다.

  • MyService.idl
     interface MyService 
     {
       void echo();
     };
  • YourService.idl
     interface YourService
     {
        void echo();
     };

이러한 파일을 작성했다면, "Example"의 예를 복사&붙여넣기 하는 등 커멘드로서 입력합니다.

※ --help로 표시되는 샘플은 C++코드 생성용이므로 Python용의 코드를 생성하는 경우는,
"-bcxx"를"-bpython"에 고쳐 써 주십시오.

 > rtc-template -bpython      --module-name=Sample --module-desc='Sample component'      --module-version=0.1 --module-vendor=AIST --module-category=Generic      --module-comp-type=DataFlowComponent --module-act-type=SPORADIC      --module-max-inst=10       --config=int_param0:int:0 --config=int_param1:int:1      --config=double_param0:double:3.14 --config=double_param1:double:9.99      --config="str_param0:std::string:hoge"      --config="str_param1:std::string:foo"      --inport=Ref:TimedFloat --inport=Sens:TimedFloat      --outport=Ctrl:TimedDouble --outport=Monitor:TimedShort      --service=MySvcPort:myservice0:MyService      --consumer=YourSvcPort:yourservice0:YourService      --service-idl=MyService.idl --consumer-idl=YourService.idl
  File "MyService_idl_example.py" was generated.
  File "Sample.py" was generated.
  File "README.Sample" was generated.
 
 > ls
 MyService.idl             README.Sample    YourService_idl.py
 MyService_idl.py          Sample.py        _GlobalIDL/
 MyService_idl_example.py  YourService.idl  _GlobalIDL__POA/
 

이와 같이, 컴포넌트의 Python 코드, 서비스의 구현 코드가 작성됩니다. 여기서,

이것으로, 실행 형식의 컴포넌트(Sample.py)가 작성되었습니다. 여기서, 실행 형식의 컴포넌트를 실행해 보겠습니다. 컴포넌트의 실행에는 컨피그레이션 파일(통상은 rtc.conf 라는 이름)이 필요합니다. 여기에서는 간이판을 커런트 디렉토리에 작성합니다.

  • rtc.conf
     corba.nameservers: 네임서버명:포트 번호
     naming.formats: %n.rtc
     logger.log_level: PARANOID

여기서, 임시의 호스트명:localhost 포트 번호는 디폴트로 합니다.

  • rtc.conf
     corba.nameservers: localhost
     naming.formats: %n.rtc
     logger.log_level: PARANOID

다음은 CORBA의 네이밍 서비스를 기동합니다. CORBA의 네이밍 서비스는,

python $PYTHONPATH/OpenRTM/rtm-naming/rtm-naming.py [포트 번호]

로 기동할 수 있기 때문에, 방금전 rtc.conf로 지정한 포트 번호를 지정해 기동해 주십시오. 아무것도 지정하지 않으면 디폴트 포트를 사용합니다.

 > python $PYTHONPATH/OpenRTM/rtm-naming/rtm-naming.py
 Starting omniORB omniNames:  localhost : 2809
 
 Starting omniNames for the first time.
 Wrote initial log file.
 Read log file successfully.
 Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000e0000003135302e32392e39362e31363700f90a0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
 Checkpointing Phase 1: Prepare.
 Checkpointing Phase 2: Commit.
 Checkpointing completed.

다음에, 컴포넌트를 기동합니다.

 > python Sample.py -f rtc.conf
 혹은
 > python Sample.py (디폴트로 커런트 디렉토리의 rtc.conf를 읽어들인다)

이것으로, 컴포넌트를 기동할 수 있어 RtcLink로
  • InPort를 2개
  • OutPort를 2개
  • 서비스 포트를 2개
  • 컨피그레이션을 6개 갖는 컴포넌트가 표시되면, OpenRTM-aist-Python-0.4.1이 정상적으로 인스톨 된 것이 됩니다.

구체적인 컴포넌트의 작성의 방법은, 메뉴얼을 참조해 주십시오.

주의점

환경 변수 PYTHONPATH에 관한 주의점

 Python버전 OpenRTM를 사용할 때, 환경 변수 PYTHONPATH가 올바르게 설정되어 있는지 확인을 해야합니다.

 올바르게 설정되어 있지 않은 경우, 컴포넌트를 실행할 수 없는 가능성이 있습니다.

복수의 path를 설정하는 경우

 ※ rtc-template에서는 PYTHONPATH의 첫번째의 요소를 참조하고 있기 때문에, PYTHONPATH에는 site-packages (/usr/lib/python2.x/site-packages)까지의 패스를 맨처음에 설정해 주십시오.

"--prefix" 옵션을 지정했을 경우

 다음과 같이--prefix옵션을 이용해 인스톨 디렉토리를 지정했을 경우, PYTHONPATH에는 전개 후의 디렉토리를 지정할 필요가 있습니다.

 # python setup.py install --prefix=/home/openrtm

상기와 같이--prefix 옵션을 지정했을 경우, PYTHONPATH에는 /home/openrtm/lib/python2.x/site-packages를 추가할 필요가 있습니다.

rtc-template로의 주의점

rtc-template.py는 임의의 장소에 복사해 주십시오.

"--config"옵션으로 std::vector를 사용하는 경우는, 다음과 같이 옵션을 지정해 주십시오.

 [C++버전]
 --config="vector_param0:std::vector<double>:0.0,1.0,2.0,3.0,4.0"
 
  ↓    ↓  std::vector<double> 를 double 로   ↓   ↓
 [Python버전]
 --config="vector_param0:double:0.0,1.0,2.0,3.0,4.0"

Service Provider 포트를 갖는 컴포넌트의 구현에서의 주의점

MyService.idl라는 --service-idl로 지정한 IDL 파일이 있는 경우, rtc-template 실행 후에 MyService_idl_example.py라고 하는 파일이 생성됩니다.

이 파일은 IDL로 정의한 오퍼레이션을 구현하기 위한 파일이므로, 이 안에서 오퍼레이션의 구현을 실시해 주십시오.

Windows에서의 동작확인

인스톨의 확인

샘플을 이용해 인스톨 완료의 확인

 부속의 샘플 RT컴포넌트를 이용하여 동작 확인을 실시합니다. "내 컴퓨터"에서 SimpleIO ※1 폴더를 표시해, 그 중의 run.py 를 더블 클릭 합니다. ※2  처음에 터미널 화면이 3개 열리고, 몇초후에 또 하나 열립니다. 4번째의 터미널 화면이 열릴 때까지, 반드시 기다려 주십시오. "Please input number:"라고 표시되고 있는 윈도우에 숫자를 입력합니다. ※3  입력하는 숫자는 long int 에 들어가는 범위의 값을 입력해 주십시오. 그러면 다른 한쪽의 윈도우에서 입력한 수치와 같은 수치가 나타납니다. 여기까지 할 수 있으면 OpenRTM-aist-Python이 정상적으로 인스톨 되고 있는 것을 알 수 있습니다.

※1 샘플 컴포넌트 세트 SimpleIO:

 인스톨러를 사용했을 경우는 통상 C:\Program Files\OpenRTM-aist\0.4\examples\Python\SimpleIO에, 소스로부터 빌드 했을 경우 <소스의 전개 폴더>\OpenRTM\examples\SimpleIO에 각각 인스톨 되고 있습니다.

※2 미리 환경 변수 Path에 Python인스톨 폴더를 추가해 주십시오(C:\Python24 등).


※3 특히 에러는 아니지만, "Please input number:"라고 하는 표시가 나타나지 않는 경우가 있습니다. 이 경우 같은 폴더내의 Connector.py를 기동하면 정상적으로 동작합니다.

참고:

그 외 샘플 컴포넌트에 대해

 OpenRTM-aist-Python에는 SimpleIO 뿐만이 아니라, SeqIO, SimpleService, ConfigSample, ExtTrigger등의 샘플 컴포넌트가 부속되어 있습니다(SimpleIO 폴더와 같은 장소에 있습니다). 샘플 컴포넌트의 자세한 내용은 OpenRTM-aist-0.4 Java의 샘플에 대해를 참조해 주십시오.

컴포넌트 템플릿의 테스트

 다음으로 컴포넌트의 템플릿 제네레이터를 사용하여 간단한 컴포넌트를 작성하는 테스트를 실시합니다. 템플릿 제네레이터 (rtc-template.py)를 사용합니다. 또한 여기에서는 편의상 Python2.4를 사용하는 환경에서의 예를 들고 있습니다. Python2.5 를 사용하는 환경에서는 Python24라고 부분을 Python25로 수정하여 사용해 주십시오.


  • 1.컴포넌트를 작성하는 작업 디렉토리의 준비
     컴포넌트를 작성하는 폴더(임의의 경로, 임의의 폴더. 이하의 예에서는 C:\Documents and Settings\<user name>\SampleComponent를 작업 폴더로 합니다.)를 작성하고, 거기서 컴포넌트 작성 작업을 합니다. 커멘드 prompt를 기동해, 작성한 폴더까지 이동합니다.
     > cd C:\Documents and Settings\<user name>\SampleComponent

  • 2.rtc-template 의 기동을 확인
     우선은 help를 보겠습니다.
     > C:\Python24\Lib\site-packages\OpenRTM\rtc-template\rtc-template.py --help
     
     Usage: rtc-template [OPTIONS]
     
     Options:
     
         [-h]                                  Print short help.
         [--help]                              Print details help.
         [--backend[=backend] or -b]           Specify template code  generator.
         [--module-name[=name]]                Your module name.
         [--module-desc[=description]]         Module description.
         [--module-version[=version]]          Module version.
         [--module-vendor[=vendor]]            Module vendor.
         [--module-category[=category]]        Module category.
         [--module-comp-type[=component_type]] Component type.
         [--module-act-type[=activity_type]]   Component's activity type.
         [--module-max-inst[=max_instance]]    Number of maximum instance.
         [--module-lang[=language]]            Language.
         [--config[=ParamName:Type:Default]]   Configuration variable.
         [--inport[=PortName:Type]]            InPort's name and type.
         [--outport[=PortName:Type]]           OutPort's name and type
         [--service[=PortName:Name:Type]]      Service Provider Port
         [--service-idl[=IDL_file]]            IDL file name for service
         [--consumer[=PortName:Name:Type]]     Service Consumer Port
         [--consumer-idl[=IDL_file]]           IDL file name for consumer
         [--idl-include=[path]]                Search path for IDL compile
            :
          중략
            :
     Example:
         rtc-template -bcxx      --module-name=Sample --module-desc='Sample component'      --module-version=0.1 --module-vendor=AIST --module-category=Generic      --module-comp-type=DataFlowComponent --module-act-type=SPORADIC      --module-max-inst=10       --config=int_param0:int:0 --config=int_param1:int:1      --config=double_param0:double:3.14 --config=double_param1:double:9.99      --config="str_param0:std::string:hoge"      --config="str_param1:std::string:foo"      --inport=Ref:TimedFloat --inport=Sens:TimedFloat      --outport=Ctrl:TimedDouble --outport=Monitor:TimedShort      --service=MySvcPort:myservice0:MyService      --consumer=YourSvcPort:yourservice0:YourService      --service-idl=MyService.idl --consumer-idl=YourService.idl
    ※ rtc-template.py는 위와 같이 전체 경로로 지정해 주십시오. ※※ 편의상 여기에서는 Python2.4를 사용하는 환경의 예를 들고 있습니다. Python2.5의 환경에서는 Python24를 Python25 로 수정하여 사용해 주십시오.  rtc-template에 대해서 작성하고 싶은 컴포넌트의 설정을 인수로서 건네주면, 컴포넌트의 양식을 작성합니다. 여기에서는 help의 표시의 마지막 부분에 표시된Example:이하를 복사하고 테스트해 보겠습니다.

  • 3.MyService.idl 와 YourService.idl 의 준비  Example의 예에서는 서비스 프로바이더로서 MyService, 서비스 컨슈머로서 YourService 를 이용하는 옵션이 주어지고 있어 그것을 위한 IDL 파일을 커런트 디렉토리에 대해 둘 필요가 있습니다. 여기에서는 간단한 IDL 파일을 이하와 같이 작성해 둡니다.

    • MyService.idl
       interface MyService 
       {
         void echo();
       };
    • YourService.idl
       interface YourService
       {
          void echo();
       };


  • 4.rtc-template를 실행해 템플릿 코드를 생성  이러한 파일을 작성하면 Example: 의 예를 복사&붙여넣기 하는 등, 커멘드로서 입력합니다.
     > python C:\Python24\Lib\site-packages\OpenRTM\rtc-template\rtc-template.py -bpython^
         --module-name=Sample --module-desc="Sample component"^
         --module-version=0.1 --module-vendor=AIST --module-category=Generic^
         --module-comp-type=DataFlowComponent --module-act-type=SPORADIC^
         --module-max-inst=10^
         --config=int_param0:int:0 --config=int_param1:int:1^
         --config=double_param0:double:3.14 --config=double_param1:double:9.99^
         --config="str_param0:std::string:hoge"^
         --config="str_param1:std::string:foo"^
         --inport=Ref:TimedFloat --inport=Sens:TimedFloat^
         --outport=Ctrl:TimedDouble --outport=Monitor:TimedShort^
         --service=MySvcPort:myservice0:MyService^
         --consumer=YourSvcPort:yourservice0:YourService^
         --service-idl=MyService.idl --consumer-idl=YourService.idl
      File "MyService_idl_example.py" was generated.
      File "Sample.py" was generated.
      File "README.Sample" was generated.
     > dir
     2008/06/25  12:28    <DIR>          .
     2008/06/25  12:28    <DIR>          ..
     2008/06/25  12:27                45 MyService.idl
     2008/06/25  12:28             2,226 MyService_idl.py
     2008/06/25  12:28             1,341 MyService_idl_example.py
     2008/06/25  12:28             3,557 README.Sample
     2008/06/25  12:28             4,615 Sample.py
     2008/06/25  12:27                47 YourService.idl
     2008/06/25  12:28             2,312 YourService_idl.py
     2008/06/25  12:28    <DIR>          _GlobalIDL
     2008/06/25  12:28    <DIR>          _GlobalIDL__POA
    ※ --help 로 표시되는 샘플은 C++코드 생성용이므로, Python용의 코드를 생성하는 경우는 "-bcxx"를"-bpython"로 수정해 주십시오. ※※ Windows 환경에서 rtc-template.py를 실행하는 경우는 "Sample component"등과 같이(") 쌍따옴표를 사용해 주십시오. (')따옴표를 사용했을 경우는 옵션이 올바르게 해석되지 않습니다. 또, 행 계속 기호는 (\)을 (^)로 변경할 필요가 있습니다. ※※※ 편의상 여기에서는 Python2.4를 사용하는 환경의 예를 들고 있습니다. Python2.5 환경에서는 Python24를 Python25 로 수정하여 사용해 주십시오.  이와 같이, 컴포넌트의 Python의 코드, 서비스의 실장 코드가 작성됩니다. 이것으로 실행 형식의 컴포넌트(Sample.py)가 작성되었습니다.


★Remark:

 rtc-template.py를 실행할 때에 매회 커멘드 입력하는 것은 불편하므로, 이하와 같은 배치파일을 작성해 사용하는 것을 추천합니다.

 python C:\Python24\Lib\site-packages\OpenRTM\rtc-template\rtc-template.py -bpython^
     --module-name=Sample --module-desc="Sample component"^
     --module-version=0.1 --module-vendor=AIST --module-category=Generic^
     --module-comp-type=DataFlowComponent --module-act-type=SPORADIC^
     --module-max-inst=10^
     --config=int_param0:int:0 --config=int_param1:int:1^
     --config=double_param0:double:3.14 --config=double_param1:double:9.99^
     --config="str_param0:std::string:hoge"^
     --config="str_param1:std::string:foo"^
     --inport=Ref:TimedFloat --inport=Sens:TimedFloat^
     --outport=Ctrl:TimedDouble --outport=Monitor:TimedShort^
     --service=MySvcPort:myservice0:MyService^
     --consumer=YourSvcPort:yourservice0:YourService^
     --service-idl=MyService.idl --consumer-idl=YourService.idl
※ 편의상 여기에서는 Python2.4를 사용하는 환경의 예를 들고 있습니다. Python2.5 환경에서는 Python24를 Python25 로 수정하여 사용해 주십시오..



  • 5.컴포넌트의 실행 준비:네임서버의 기동  작성된 실행 형식의 컴포넌트를 실행해 보겠습니다. 우선 그 준비를 합니다.
     CORBA 의 네이밍 서비스를 기동합니다. 다른 커멘드 prompt를 열어,
     > python "C:\Program Files\OpenRTM-aist\0.4\bin\rtm-naming.py" [포트 번호]
     또는,
     C:\Program Files\OpenRTM-aist\0.4\bin로 커런트를 이동하고 나서
     >python rtm-naming.py을 하던지
     또는,
     C:\Program Files\OpenRTM-aist\0.4\bin\에 있는 rtm-naming.py를 더블 클릭
    하는 것으로, CORBA의 네이밍 서비스는 기동할 수 있습니다. 방금전 rtc.conf로 지정한 포트 번호를 지정해 기동해 주십시오. 아무것도 지정하지 않으면 디폴트 포트(2809)를 사용합니다. 디폴트 포트를 사용하는 예입니다.
     > python "C:\Program Files\OpenRTM-aist\0.4\bin\rtm-naming.py"
     Starting omniORB omniNames:  localhost : 2809
     
     Starting omniNames for the first time.
     Wrote initial log file.
     Read log file successfully.
     Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000e0000003135302e32392e39362e31363700f90a0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
     Checkpointing Phase 1: Prepare.
     Checkpointing Phase 2: Commit.
     Checkpointing completed.
     덧붙여 소스로부터 빌드·인스톨 했을 경우는, rtm-naming.py의 패스는 <소스의 전개 폴더>\bin이 됩니다.

  • 6.컴포넌트의 실행 준비:RtcLink를 기동  다음으로 컴포넌트를 조작하기 위한 GUI 툴:RtcLink를 기동합니다(RtcLink에 대한 자세한 것은RtcLink를, 또 인스톨 방법 등은 RtcLink・RtcTemplate의 인스톨을 참조해 주십시요).

  • 7.컴포넌트의 실행 준비:rtc.conf의 배치  컴포넌트의 실행에는 컨피그레이션 파일(통상은 rtc.conf라는 이름)이 필요합니다. 여기에서는 간이판 rtc.conf를 작성해 커런트로 하고 있는 작업 폴더에 배치합니다.
    • rtc.conf 의 간단한 사양
       corba.nameservers: 네임서버명:포트 번호
       naming.formats: %n.rtc
       logger.log_level: PARANOID
      여기서, 임시 호스트명:localhost 포트 번호는 디폴트로 합니다.
      • rtc.conf
         corba.nameservers: localhost
         naming.formats: %n.rtc
         logger.log_level: PARANOID


  • 8.컴포넌트를 기동
     마지막으로, 컴포넌트를 기동합니다.
     > python Sample.py -f rtc.conf
     혹은
     > python Sample.py (디폴트로 커런트 디렉토리의 rtc.conf를 읽어들인다)
     혹은
     Sample.py를 더블 클릭
    이것으로 컴퍼넌트를 기동할 수 있어RtcLink 상에
      • InPort를 2개
      • OutPort를 2개
      • 서비스 포트를 2개
      • 컨피그레이션을 6개
를 갖는 컴퍼넌트가 표시되면, OpenRTM-aist-Python-0.4.1이 정상적으로 인스톨 된 것이 됩니다. 구체적인 컴퍼넌트의 작성의 방법은 여기을 참조해 주십시오.

Tips

Tips

각 패키지 인스톨의 힌트

 OpenRTM-aist의 리포지터리 서버를 등록하는 것으로 apt-get이나 Synaptic 패키지 매니저를 사용해 각 패키지의 인스톨을 간단하게 할 수 있습니다.
  • 1.리포지터리 서버를 등록
    • /etc/apt/sources.list의 마지막에 다음의 한줄을 추가합니다.(슈퍼 유저로서 작업해 주십시오.)
       rpm http://www.openrtm.org/pub/Linux/Vine/apt 3.2/$(ARCH) main
  • 2.각 패키지를 인스톨
    • apt-get를 사용하는 방법
      • 다음의 순서로 인스톨 합니다.
         > su
         # apt-get update
         # apt-get install python python-devel
         # apt-get install omniORB omniORB-devel omniORB-servers omniORB-doc
         # apt-get install omniORBpy omniORBpy-devel omniORBpy-standard
         # apt-get install tkinter

    • Synaptic 패키지 매니저를 사용하는 방법
      1. Synaptic 패키지 매니저를 기동
         「어플리케이션」→「시스템·툴」→「Synaptic 패키지 매니저 」
      2. 「다시 읽기」(reload)
        +++ python 를 인스톨(업그레이드)
         키워드 python으로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         python python-devel
      3. omniORB, omniORBpy를 인스톨
         키워드 omniORB로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         omniORB omniORB-devel omniORB-servers omniORB-doc omniORBpy omniORBpy-devel omniORBpy-standard
      4. tkinter 를 인스톨
         키워드 tkinter로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         tkinter


Vine4.0

OpenRTM-aist의 리포지터리 서버를 등록하는 것으로 apt-get나 Synaptic 패키지 매니저를 사용해 각 패키지의 인스톨을 간단하게 할 수 있습니다.
  • 1.리포지터리 서버를 등록
    • /etc/apt/sources.list의 마지막에 다음의 한줄을 추가합니다.(슈퍼 유저로서 작업해 주세요.)
       rpm http://www.openrtm.org/pub/Linux/Vine/apt 4.0/$(ARCH) main
  • 2.각 패키지를 인스톨
    • apt-get를 사용하는 방법
      • 다음의 순서로 인스톨 합니다.
         > su
         # apt-get update
         # apt-get install python python-devel
         # apt-get install omniORB omniORB-devel omniORB-servers omniORB-doc
         # apt-get install omniORBpy omniORBpy-devel omniORBpy-standard
         # apt-get install tkinter

    • Synaptic 패키지 매니저를 사용하는 방법
      1. Synaptic 패키지 매니저를 기동
         「어플리케이션」→「시스템·툴」→「Synaptic 패키지 매니저 」
      2. 「다시 읽기」(reload)
        +++ python를 인스톨(업그레이드)
         키워드 python 로 검색.다음의 패키지를 마크 하고, 적용한다.
         python python-devel
      3. omniORB, omniORBpy를 인스톨
         키워드 omniORB 로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         omniORB omniORB-devel omniORB-servers omniORB-doc omniORBpy omniORBpy-devel omniORBpy-standard
      4. tkinter를 인스톨
         키워드 tkinter 로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         tkinter

Ubuntu7.10

  • 각 패키지를 인스톨
    • aptitude를 사용하는 방법
      • 다음의 순서로 인스톨을 실시합니다.
         > sudo aptitude update
         > sudo aptitude install python
         > sudo aptitude install omniorb4 omniorb4-nameserver omniorb4-doc omniidl4
         > sudo aptitude install omniidl4-python python-omniorb2 python-omniorb2-omg
         > sudo aptitude install python-tk

    • Synaptic 패키지·매니저를 사용하는 방법
      1. Synaptic 패키지·매니저를 기동
         「시스템」→「시스템 관리」→「Synaptic 패키지·매니저 」
      2. 「다시 읽기」(reload)
        +++ python를 인스톨(업그레이드)
         키워드 python 로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         python
      3. omniORB, omniORBpy 를 인스톨
         키워드 omniORB 로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         omniorb4 omniorb4-nameserver omniorb4-doc python-omniorb2 omniidl4-python python-omniorb2-omg
      4. tkinter를 인스톨
         키워드 tkinter 로 검색. 다음의 패키지를 마크 하고, 적용합니다.
         python-tk

주의점・FAQ

환경 변수에 관한 주의점

환경 변수 PYTHONPATH

 rtc-template에서는 PYTHONPATH의 첫번째의 요소를 참조하고 있기 때문에, PYTHONPATH에는 site-packages(C:\python2.4\Lib\site-packages)까지의 패스만을 설정해 주십시오.

rtc-template에서의 주의점

"--config"옵션으로 std::vector를 사용하는 경우는 다음과 같이 옵션을 지정해 주십시오.

 [C++버전]
 --config="vector_param0:std::vector<double>:0.0,1.0,2.0,3.0,4.0"

  ↓  ↓ std::vector<double> 를 double로  ↓  ↓

 [Python버전]
 --config="vector_param0:double:0.0,1.0,2.0,3.0,4.0"

컴포넌트의 구현에 관한 주의점

Service Provider 포트를 가지는 컴포넌트의 구현에서 주의점

 MyService.idl라는 --service-idl로 지정한 IDL 파일이 있는 경우 rtc-template 실행 후에 MyService_idl_example.py 라고 하는 파일이 생성됩니다. 이 파일은 IDL로 정의한 오퍼레이션을 구현하기 위한 파일이므로, 이 안에서 오퍼레이션을 구현해 주십시오.

FAQ