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

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

UNIX/Linux에서의 인스톨

rpm, deb 패키지에 의한 인스톨

 OpenRTM-aist 의 리포지터리 서버로부터 인스톨 할 수 있게 되었습니다.

대응 디스트리뷰션

 아래와 같은 Linux 디스트리뷰션에서 동작합니다.


 ※이전 버전의 OpenRTM-aist가 인스톨 되어 있는 환경에서는 그것을 완전히 삭제하고 나서 인스톨을 해주십시오.

참고:

 → ''FAQ:'' OpenRTM-aist의 인스톨에 실패하는 경우



Vine Linux에의 인스톨

  • 인스톨의 방법
     3개의 인스톨 방법이 있습니다.
    • Vine Linux 일괄 인스톨·스크립트를 사용하는 방법
      • 인스톨·스크립트 pkg_install_vine.sh를여기 로부터 다운로드해, 적당한 디렉토리에 둡니다.
      • 이 디렉토리를 현재 디렉토리로 이동합니다.
      • 다음과 같이 인스톨을 실시합니다.
         > su
         # sh pkg_install_vine.sh


    • apt-get를 사용하는 방법
      • /etc/apt/sources.list의 마지막에에 다음의 문장을 추가합니다(수퍼 유저로 작업해 주십시오).
         rpm http://www.openrtm.org/pub/Linux/Vine/apt x.x/$(ARCH) main
        ※ x.x의 부분은 버전 번호. 예를 들어,Vine3.2라면 x.x를 3.2로 합니다.
         rpm http://www.openrtm.org/pub/Linux/Vine/apt 3.2/$(ARCH) main
      • 다음의 순서로 인스톨을 실시합니다.
         > su
         # apt-get update
         # apt-get install gcc-c++ python
         # apt-get install omniORB omniORB-devel omniORB-servers omniORB-doc
         # apt-get install ace ace-devel
         # apt-get install OpenRTM-aist OpenRTM-aist-devel OpenRTM-aist-doc OpenRTM-aist-example
         # apt-get install PyYAML


    • Synaptic 패키지·매니저를 사용한다
       앞에서 설명한 「apt-get 를 사용하는 방법」과 같은 순서로,Synaptic 패키지·매니저를 이용할 수도 있습니다.


  • 인스톨의 확인
     # rpm -q OpenRTM-aist
     OpenRTM-aist-0.4.2-0.vl31

◆계속 샘플을 사용해 테스트 로 진행해 주십시오.;

Fedora에의 인스톨

 fedora4와 fedora8에서의 동작 확인되고 있습니다.
  • 인스톨의 방법
     2개의 인스톨 방법이 있습니다.
    • Fedora 일괄 인스톨·스크립트를 사용하는 방법
      • 인스톨·스크립트 pkg_install_fedora.sh를여기 에서 다운로드하여, 적당한 디렉토리에 둡니다.
      • 이 디렉토리를 현재 디렉토리로 이동합니다.
      • 다음과 같이 인스톨을 실시합니다.
         > su
         # sh pkg_install_fedora.sh
         도중 , 인스톨의 「필요·불필요」를 물어보므로,y를 입력하면서 완료시킵니다.

    • yum를 사용하는 방법
      • 이하와 같은 설정을 기록한 파일 /etc/yum.repos.d/openrtm.repo를 작성해 둡니다(슈퍼 유저로 작성).
         [openrtm]
         name=Fedora $releasever - $basearch
         failovermethod=priority
         baseurl=http://www.openrtm.org/pub/Linux/Fedora/releases/$releasever/Fedora/$basearch/os/Packages
         enabled=1
         gpgcheck=0
         gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
        /etc/yum.repos.d/openrtm.repo

      • 다음의 순서로 인스톨을 실시합니다. 도중, 몇개의 질문에는 y를 입력하면서 완료시켜 주십시오.
         > su
         # yum install gcc-c++ python
         # yum install omniORB omniORB-devel omniORB-doc omniORB-servers omniORB-utils omniORB-bootscripts
         # yum install ace ace-devel
         # yum install OpenRTM-aist OpenRTM-aist-devel OpenRTM-aist-doc OpenRTM-aist-example
         # yum install PyYAML
  • 인스톨의 확인
     # rpm -q OpenRTM-aist
     OpenRTM-aist-0.4.2-0.fcX

◆계속 샘플을 사용해 테스트 로 진행해 주십시오.;

debian/Ubuntu 에의 인스톨

 ※ Ubuntu7에서 제공되고 있는 omniORB4.0.6에는 버그가 있습니다. Ubuntu8.04이후 버전의 사용을 추천합니다.

    • debian/Ubuntu 일괄 인스톨·스크립트를 사용하는 방법
      • 일괄 인스톨·스크립트 pkg_install_debian.sh 또는 pkg_install_ubuntu.sh를여기 에서 다운로드하여, 적당한 디렉토리에 둡니다.
      • 이 디렉토리를 현재 디렉토리로 이동합니다.
      • 다음과 같이 인스톨을 실시합니다.

 > su
 # sh pkg_install_debian.sh
 또는
 # sh pkg_install_ubuntu.sh

 도중 , 인스톨의 「필요·불필요」를 물어보므로,y를 입력하면서 완료시킵니다.

    • apt-get를 사용하는 방법
      • /etc/apt/sources.list 에 이하의 행을 추가합니다.

 deb http://www.openrtm.org/pub/Linux/ubuntu/ ''code name'' main

또는

 deb http://www.openrtm.org/pub/Linux/debian/ ''code name'' main

"code name" 의 부분에는 이하의 debian/ubuntu의 버전에 대응한 코드네임을 지정합니다.

버젼 code name
Debian 3.1 sarge
Debian 4.0 etch
Ubuntu 7.04 feisty
Ubuntu 7.10 gutsy
Ubuntu 8.04 hardy
Ubuntu 8.10 intrepid
Ubuntu 9.04 jaunty
Ubuntu 9.10 karmic
Ubuntu 9.10 lucid
Ubuntu 9.10 maverick
      • 다음의 순서로 인스톨을 실시합니다. 도중 , 몇개의 질문에는 y를 입력하면서 완료시켜 주십시오.

 > su
 # vi /etc/apt/sources.list # "sources.list" 를 편집
 # apt-get update
 # apt-get install gcc g++ make
 # apt-get install libomniorb4 libomniorb4-dev omniidl4 omniorb4-nameserver
 # apt-get install python-support (Debian 3.1 Sarge만 인스톨 해 주세요.)
 # apt-get install python-yaml
 # apt-get install libace-dev
 # apt-get install libace ⇒ "주:를 참조"
 # apt-get install openrtm-aist openrtm-aist-doc openrtm-aist-dev openrtm-aist-example
 # apt-get install python-yaml

주: libace 에 대해
 「E: 패키지 libace 가 발견되지 않습니다」라는 메세지가 나오지만, 일반적으로 libace-dev의 의존관계에 의해 libace 는 자동적으로 적용되므로, 상기 순서 중 「# apt-get install libace」의 부분은 생략해도 괜찮습니다.
덧붙여 인스톨 끝난 OpenRTM-aist를 특정 버전인 채 보관 유지하고 싶은 경우에는,/etc/apt/preferences를 편집해 이하의 행을 추가합니다.(이 예에서는 0.4 계열로 버전을 고정합니다.)

 Package: OpenRTM-aist
 Pin: version 0.4.*
자세한 것은 http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.ja.html#s-pin 를 참조해 주세요.

    • Synaptic 패키지·매니저를 사용한다
       앞에서 설명한 「apt-get를 사용하는 방법」과 같은 순서로,Synaptic 패키지·매니저를 이용할 수도 있습니다.

  • 인스톨의 확인

 $ dpkg -l 'openrtm*'
 Desired=Unknown/Install/Remove/Purge/Hold
 | Status=Not/Installed/Config-f/Unpacked/Failed-cfg/Half-inst/t-aWait/T-pend
 |/ Err?=(none) /Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
 ||/ Name           Version        Description
 +++-==============-==============-============================================
 ii  openrtm-aist   0.4.2-1        OpenRTM-aist runtime libraries and configura
 ii  openrtm-aist-d 0.4.2-1        Header files for OpenRTM-aist development
 pn  openrtm-aist-d <none>         (no description available)
 ii  openrtm-aist-e 0.4.2-1        OpenRTM-aist examples


◆계속 샘플을 사용해 테스트 로 진행해 주십시오.;



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

※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해서 쓰여져 있습니다.OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

대응 OS 및 디스트리뷰션

OpenRTM-aist-0.4.x는 아래와 같은 OS 및 Linux 디스트리뷰션에서 동작 하는 것이 확인되고 있습니다.

  • FreeBSD
  • Vine Linux
  • Fedora
  • Debian
  • Ubuntu

UNIX에서의 빌드 인스톨

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

※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

대응 OS 및 배포

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

  • FreeBSD
  • Vine Linux
  • Fedora
  • Debian
  • Ubuntu

동작 조건

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

  1. The ADAPTIVE Communication Environment (ACE) 5.4 이상
  2. ORB
    • 현재로서는 대응 ORB implementation은 omniORB-4.0 이상만 되고 있습니다.
    • Ubuntu7에서 제공되고 있는 omniORB4.0.6에는 버그가 있습니다. 반드시 4.0.7이나 4.1.2로 바꾸어 설치해 주십시오.
  3. gcc 는 version3 이후 버전을 사용해 주십시오. gcc2.95.x에서도 컴파일 가능합니다만, 옵션을 지정할 필요가 있습니다.
     → configure에 설정하는 옵션에 대해 의 「·gcc3.x 이전의 컴파일러(gcc2.95.x 등)을 사용하는 경우」를 참조
  4. python
  5. PyYAML (0.4.2만, rtc-template에 필요)

 덧붙여 아래와 같은 OS 및 Linux 배포에 대해서는, 패키지를 인스톨하기 위한 스크립트가 전개한 소스의 build 디렉토리내에 있습니다.
  • ◆OpenRTM-aist-0.4.0, 0.4.1의 경우
    • FreeBSD 5.2: pkg_install_freebsd52.sh
    • FreeBSD 6.x: pkg_install_freebsd6.sh
    • Vine Linux 3.2: pkg_install_vl32.sh
    • Vine Linux 4.0: pkg_install_vl4.sh
    • Fedora Core 4: pkg_install_fc4.sh
    • Fedora Core 5: pkg_install_fc5.sh
    • Fedora Core 6: pkg_install_fc6.sh
    • Debian3.1(Sarge): pkg_install_debianSarge.sh
    • Ubuntu: pkg_install_debianSarge.sh
  • ◆OpenRTM-aist-0.4.2의 경우
    • FreeBSD: pkg_install_freebsd.sh
    • Vine Linux: pkg_install_vine.sh
    • Fedora: pkg_install_fedora.sh
    • Debian: pkg_install_debian.sh
    • Ubuntu: pkg_install_debian.sh

 다만, OpenRTM-aist-0.4.2소스에 부속의 이러한 셸 스크립트는 OpenRTM-aist-0.4.2 빌드된 패키지도 동시에 인스톨 하게 되어 있는 것도 있습니다. 상기 툴 패키지만을 인스톨 하고 싶은 경우는, 이러한 셸 스크립트를 적당 편집해 사용해 주십시오.

  Fedora 와 Vine의 몇개의 대표적인 버전에 대해서는 여기의 리포지터리 서버에 ACE 와 omniORB의 rpm, deb 패키지가 준비되어 있습니다. 이것에 의해 apt-get 나 yum를 이용해 간단하게 인스톨 할 수 있게 되었습니다.

참고

 OpenRTM-aist 의 소스로부터의 빌드를 실시하는 경우는 참고: 중 OpenRTM-aist 관련 (OpenRTM-aist, OpenRTM-aist-devel, OpenRTM-aist-doc, OpenRTM-aist-example)의 인스톨 부분은 생략해 주십시오.

 상기 이외의 OS에 대해서는 각각의 패키지의 문서에 따라 인스톨해 주십시오. 이러한 패키지가, 표준 디렉토리(/usr, /usr/local 등 ) 아래에 인스톨 되어 있으면, 이후의 OpenRTM-aist의 컴파일 작업을 비교적 간단하게 실시할 수 있습니다.

소스 코드의 전개

 우선 소스 코드 OpenRTM-aist-0.4.0.tar.gz zip(※최신 버전은 여기⇒OpenRTM-aist-1.0.0-RC1.tar.gz)를 적당한 디렉토리에 전개합니다.

 > tar xvzf OpenRTM-aist-0.4.0.tar.gz
 > cd OpenRTM-aist-0.4.0

빌드

 OpenRTM-aist 는 패키지의 빌드에 autoconf, automake 를 사용하고 있습니다. 빌드 방법은 다른 autoconf, automake를 사용한 패키지와 같기 때문에 같은 방법으로 실시합니다.

 > ./configure --prefix=/usr [options]

./configure에게 줄 수 있는 옵션의 일부를 이하에 나타냅니다.

configure에게 주는 옵션에 대해

  • prefix
  • 사용하는 ORB  ※omniORB, MICO, TAO 이외는 서포트되고 있지 않습니다. 다른 옵션은 이후 버전을 위해 예약되어 있습니다.
      --with-omniorb=dir
      --with-tao=dir
      --with-mico=dir
      --with-orbix=dir
      --with-orbacus=dir
  • gcc3.x 이전의 컴파일러(gcc2.95.x등 )을 사용하는 경우  버전 3 미만의 gcc에서는 템플릿의 컴파일로 제대로 실행되지 않기 때문에 gcc2.95.x등의 컴파일러를 사용하는 경우는, 이하의 옵션을 지정해 주십시오.
     --with-gcc2
  • ACE include 패스, lib 패스  ACE 가 표준적인 디렉토리에 인스톨 되어 있지 않은 경우 이하의 옵션으로 헤더와 라이브러리의 디렉토리를 지정해 주십시오.
     --with-ace-includes=dir
      --with-ace-lib=dir
    ACE_wrppers가 만약 "/tmp/src/ACE_wrappers" 이하에 인스톨 되고 있는 경우
     --with-ace-include=/tmp/src/ACE_wrappers
     --with-ace-libs=/tmp/src/ACE_wrappers/ace
    )과 같이 지정합니다.
  • 그 외  그 외 사용 가능한 옵션은
     > ./configure --help
    을 참조해 주십시오.

make

 configure가 정상적으로 종료한 것을 확인해 주십시오. 정상적으로 종료했다면 make 합니다.

 > make

인스톨 하기 위해서는 적어도

 OpenRTM-aist-0.4.0/rtm
 OpenRTM-aist-0.4.0/rtm/idl
 OpenRTM-aist-0.4.0/utils/rtm-config
 OpenRTM-aist-0.4.0/utils/rtm-naming
 OpenRTM-aist-0.4.0/utils/rtc-template

이하의 디렉토리가 정상적으로 빌드 되고 있을 필요가 있습니다. 빌드가 정상적으로 종료되어 헤더 파일, 라이브러리, 유틸리티 커멘드군을 인스톨 합니다.

 > su
 # make install

참고:

Windows에서의 인스톨

※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다. 이하의 작업은 Administrator 권한을 가진 상태로 해주십시오.

대응 OS 및 배포

 OpenRTM-aist-0.4 는 아래와 같은 OS 로 동작하는 것이 확인되고 있습니다.
  • Windows XP Professional SP2

동작 조건

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

  1. The ADAPTIVE Communication Environment (ACE) 5.4 이상
  2. omniORB-4.0.7
  3. Python2.4
  4. PyYAML (OpenRTM-aist-0.4.2만, rtc-template에 필요)
  5. OpenCV 1.0 (USBCamera 샘플 실행시에 필요)

덧붙여 ACE 및 omniORB의 Windows용의 헤더 및 라이브러리(LIB.DLL)를 포함한 인스톨러를 다운로드 페이지 및 아래와 같이에 준비되어 있습니다. 또, OpenCV의 인스톨러는 아래와 같이 링크 sourceforge의 다운로드 페이지로부터 다운로드할 수 있습니다.

ACE, omniORB, OpenCV를 상기 이외의 인스톨러로 인스톨 했을 경우한 후의 OpenRTM-aist의 빌드 및 자작 컴포넌트의 빌드 시에 필요한 환경 변수가 설정되지 않으므로 주의해 주십시오. 이러한 인스톨러를 사용한 인스톨을 추천합니다.
최신 정보:2008/06/02
 Visual C++ 2008 Express Edition 일본어판 에 대응한 OpenRTM-aist-0.4.2-jp_vc9패키지가 08/05/29에 릴리스 되었습니다. 이것을 동작시키기 위해서는 ACE, omniORB등도 새로운 버전으로 설치하지 않으면 안됩니다. 그것들을 여기 에 정리하였으니 참고해 주십시오.

ACE의 인스톨

 다운로드 페이지 혹은, 상기 링크로부터 ACE의 인스톨러 ACE-5.5_vcX.msi를 다운로드합니다. ACE-5.5_vcX.msi를 실행하면 인스톨러가 기동하므로 지시에 따라서 인스톨 합니다. 인스톨러는 이하의 작업을 실시합니다.
인스톨러는 이하의 작업을 실시합니다.
  • 디폴트(install_dir)는 C:\Program Files
  • (install_dir) \ACE_wrappers에 헤더, LIB등을 복사
  • Windows 시스템 디렉토리(통상은 C:\Windows\system32)에 ACE.DLL, ACEd.DLL를 복사
  • 환경 변수 ACE_ROOT에(install_dir)\ACE_wrappers를 세트

omniORB의 인스톨

 다운로드 페이지 혹은, 상기 링크로부터 omniORB의 인스톨러 omniORB-4.0.7-jp_vcX.msi를 다운로드합니다. omniORB-4.0.7-jp_vcX.msi를 실행하면 인스톨러가 기동하므로 지시에 따라서 인스톨 합니다.

인스톨러는 이하의 작업을 실시합니다.
  • 디폴트(install_dir)는 C:\Program Files
  • (install_dir) \omniORB 에 소스, 헤더, 스크립트, LIB 등을 복사
  • Windows 시스템 디렉토리(통상은 C:\Windows\system32)에 omniORBxxx.DLL(xxx는 버전 번호) 등을 복사
  • 환경 변수 OMNI_ROOT에(install_dir)\omniORB를 세트

덧붙여 환경 변수의 어플리케이션에의 통지 되지 않으므로, 환경 변수의 갱신을 유효하게 하려면 재기동해 주십시오. (※「내 컴퓨터」→「속성」→「상세 설정」→「환경 변수」로부터 환경 변수를 선택해 「편집」을 클릭해 편집 다이얼로그를 표시하고 그대로 아무것도 변경하지 않고 OK를 누르는 것으로 셸에 환경 변수의 변경이 통지되어 그 셸로부터 새롭게 실행한 어플리케이션에서는 변경된 환경 변수가 유효하게 됩니다만, 확실하지 않을 경우 재기동하는 편이 좋습니다.)

Python의 인스톨

 omniidl (omniORB의 IDL 컴파일러)나, 그 외 OpenRTM-aist의 툴에서 필요합니다. 다운로드 페이지 혹은, 상기의 링크Python 2.4.4 win32 installer로부터 다운로드해 인스톨러를 기동해 주십시오. 인스톨러를 기동하면, 위저드에서 몇이나 선택하는 부분이 있습니다만, 디폴트인 채로 인스톨 해도 괜찮습니다.

 → FAQ:Cygwin을 인스톨 하고 있는 환경에서 python.exe가 복수 존재하는 경우

PyYAML의 인스톨 (0.4.2만, rtc-template에 필요)

 OpenRTM-aist-0.4.2만, rtc-template에 필요합니다.다운로드 페이지 혹은, 상기의 링크PyYAML win32 installer 로부터 다운로드해 인스톨러를 기동해 주십시오.


OpenCV의 인스톨

 다운로드 페이지 혹은, 상기 링크로부터 OpenCV의 인스톨러 OpenCV_1.0.exe를 다운로드합니다. OpenCV_1.0.exe를 실행하면 인스톨러가 기동하므로 지시에 따라서 인스톨 합니다. OpenCV는 부속의 샘플 RT컴포넌트 USBCamera를 사용하는 경우에게만 필요합니다.


OpenRTM-aist의 인스톨

 Windows용의OpenRTM-aist의 인스톨러 (※이 링 크는 현재 0.4.2의 인스톨러가 링크 되고 있습니다)를 다운로드합니다. OpenRTM-aist-0.4.0.msi를 실행해, 지시에 따라서 인스톨 합니다.

인스톨러는 이하의 작업을 실시합니다.
  • 디폴트(install_dir)는 C:\Program Files
  • (install_dir) \OpenRTM-aist 에 소스, 헤더, 스크립트, LIB 등을 카피
  • Windows 시스템 디렉토리(통상은 C:\Windows\system32)에 RTMxxx.DLL(xxx는 버전 번호) 등을 복사
  • 환경 변수 RTM_ROOT에(install_dir)\OpenRTM-aist를 세트
  • 프로그램 폴더에
    • 샘플 프로그램을 등록
    • 클래스 레퍼런스에의 링크를 등록

또, Window로 사용하는 경우에는 환경 변수 Path에 %RTM_ROOT%\bin 및%RTM_ROOT%\utils\rtc-template도 등록하는 것을 추천합니다.
추가: 08/03/17(08/04/28개)
VC++2005 관련의 개발 환경(Microsoft Visual Studio 2005,Visual C++ 2005 Express등)을 인스톨 하고 있지 않는 환경에서는 반드시Microsoft Visual823C++ 2005 SP1 재배포 가능 패키지 (x86) 도 인스톨 해 주십시오.

Windows에서의 빌드

※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해서 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

Windows계 시스템에서의 빌드

 이하의 작업은 Administrator로 진행해 주십시오.

대응 컴파일러

 OpenRTM-aist-0.4.0-win32는 다음의 개발 환경에서 빌드가 가능합니다.

  • 「Visual Studio 2005 Professional」

혹은

  • 「Visual C++ 2005 Express Edition」 & 「Microsoft Platform SDK」


 Visual C++ 2005 Express Edition는 Microsoft가 무상으로 제공하는 C++의 개발 환경에서, MFC나 ATL 등은 이용할 수 없습니다만, 똑같이 무상으로 제공되는 Microsoft Platform SDK와 함께 이용하는 것으로 Windows 어플리케이션(Win32 어플리케이션)을 개발할 수 있습니다. OpenRTM-aist를 이용한 컴포넌트 개발에서도 MFC나 ATL등을 이용하지 않는 컴포넌트는 Visual C++ 2005 Express Edition만으로 개발할 수 있습니다.


최신 정보:2008/06/02
 Visual C++ 2008 Express Edition 일본어판 에 대응한 OpenRTM-aist-0.4.2-jp_vc9 패키지 세트가 08/05/29에 릴리스 되었습니다. 이것을 동작시키기 위해서는 ACE, omniORB등도 새로운 버전을 설치하지 않으면 안됩니다. 그것들을 여기 에 정리하였으니 참고해 주십시오.

「Visual C++ 2005 Express Edition」 & 「Microsoft Platform SDK」로 개발 환경을 구성하는 경우의 주의점

 「Visual C++ 2005 Express Edition」→「Microsoft Platform SDK」의 순서로 인스톨 해 주십시오. 「Microsoft Platform SDK」를 인스톨 할 때, 인스톨 폴더를 물어 봅니다만, 그 때 디폴트*로 인스톨 하지 않고 , 다음과 같이 지정해 주십시오.

 <VC의 인스톨 폴더>\PlatformSDK''*''통상 디폴트에서는 「C:\Program Files\Microsoft Platform SDK\」에 인스톨 됩니다.

대부분의 경우, <VC의 인스톨 폴더>는
 C:\Program Files\Microsoft Visual Studio 8\VC에 있기 때문에 예를 들어 이 경우, Microsoft Platform SDK는
 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK에 인스톨 해 주십시오.
「Visual C++ 2005 Express Edition」 & 「Microsoft Platform SDK」환경에서 빌드가 잘 되지 않는 경우는 FAQ 도 참고해 주십시오(cf:windows.h를 찾을 수 없다).


동작 조건

 OpenRTM-aist-0.4.0 의 인스톨에는 아래와 같은 패키지가 필요합니다.
  1. The ADAPTIVE Communication Environment (ACE) 5.4 이상
  2. omniORB-4.0.7

덧붙여 ACE 및 omniORB의 Windows용의 헤더 및 라이브러리(LIB.DLL)를 포함한 인스톨러를 다운로드 페이지 및 아래와 같이 준비되어 있습니다.

ACE 및 omniORB를 상기 이외의 인스톨러로 인스톨 했을 경우에는 후의 OpenRTM-aist의 빌드 및 자작 컴포넌트의 빌드 시에 필요한 환경 변수가 설정되지 않으므로 주의해 주십시오. 이러한 인스톨러를 사용한 인스톨을 추천합니다.

ACE의 인스톨

 상기 링크 혹은 다운로드 페이지 로부터 ACE의 인스톨러 ACE-5.5_vc8.msi(개발 환경이 VC2005의 경우) 혹은 ACE-5.6_vc9.msi(같이 VC2008의 경우)를 다운로드합니다. 이것을 실행하면 인스톨러가 기동하므로 지시에 따라 인스톨 합니다.
인스톨러는 이하의 작업을 실시합니다.
  • 디폴트(install_dir)는 C:\Program Files
  • (install_dir) \ACE_wrappers에 헤더, LIB등을 복사
  • Windows 시스템 디렉토리(통상은 C:\Windows\system32)에 ACE.DLL, ACEd.DLL를 복사
  • 환경 변수 ACE_ROOT에(install_dir)\ACE_wrappers를 세트

omniORB의 인스톨

 상기 링크 또는 다운로드 페이지 로부터 omniORB의 인스톨러 omniORB-4.0.7-jp_vc8.msi(개발 환경이 VC2005의 경우) 혹은 omniORB-4.1.2_vc9.msi(같이 VC2008의 경우)를 다운로드합니다. 이것을 더블 클릭 해 실행하면 인스톨러가 기동하므로 지시에 따라서 인스톨 합니다..
인스톨러는 이하의 작업을 실시합니다
  • 디폴트(install_dir)는 C:\Program Files
  • (install_dir) \omniORB에 소스, 헤더, 스크립트, LIB 등을 복사
  • Windows 시스템 디렉토리(통상은 C:\Windows\system32)에 omniORBxxx.DLL(xxx는 버전 번호) 등을 복사
  • 환경 변수 OMNI_ROOT에(install_dir)\omniORB를 세트

덧붙여 환경 변수의 어플리케이션에 통지가 되지 않으므로, 환경 변수의 갱신을 유효하게 하려면 재기동해 주십시오. (※「내 컴퓨터」→「속성」→「상세 설정」→「환경 변수」로부터 환경 변수의 어떤 것인지를 선택해 「편집」을 클릭해 편집 다이얼로그를 표시시켜, 그대로 아무것도 변경하지 않고 OK를 누르는 것으로 셸에 환경 변수의 변경이 통지되어 그 셸로부터 새롭게 실행한 어플리케이션에서는 변경된 환경 변수가 유효하게 됩니다만, 확실하지 않을 경우는 재기동하는 편이 좋습니다.)

Python의 인스톨

 다운로드 페이지 혹은 Python 2.4.4 win32 installer 로부터 다운로드해 인스톨러를 기동해 주십시오. 인스톨러를 기동하면 위저드로 몇이나 선택하는 부분이 있습니다만, 디폴트인 채로 인스톨해도 됩니다.

PyYAML의 인스톨 (0.4.2만, rtc-template에 필요)

 OpenRTM-aist-0.4.2만, rtc-template에 필요합니다. 다운로드 페이지 혹은,PyYAML win32 installer 로부터 다운로드해 인스톨러를 기동해 주십시오.

OpenCV의 인스톨

 다운로드 페이지 혹은 OpenCV win32 installer(sourceforge) 에서 OpenCV의 인스톨러 OpenCV_1.0.exe를 다운로드}; 합니다. OpenCV_1.0.exe를 실행하면 인스톨러가 기동하므로 지시에 따라서 인스톨 합니다. OpenCV는 부속의 샘플 RT컴포넌트 USBCamera를 사용하는 경우에게만 필요합니다.

소스 코드의 전개와 빌드

 우선 소스 코드 OpenRTM-aist-0.4.0-win32.zip(※최신 버전은 이쪽⇒OpenRTM-aist-0.4.2-RELEASE-win32.zip '')를 적당한 디렉토리에 전개합니다. autobuild_vc8.bat(개발 환경이 VC2005의 경우) 혹은 autobuild_vc9.bat(같이 VC2008의 경우)를 더블 클릭 해, 기동하면 자동으로 빌드가 시작됩니다.또, 솔루션 파일(.sln)로부터의 빌드도 가능합니다.
 참고:

빌드 후의 인스톨

 모든 것이 올바르게 빌드 되었으면 다음을 실시하여 인스톨을 완료시킵니다.
  • 환경 변수 RTM_ROOT를 설정
     OpenRTM-aist의 디렉토리를 환경 변수 RTM_ROOT로 설정해 주십시오.
  • DLL에의 패스를 통하는
     DLL를 패스가 다닌 장소에 복사합니다. 혹은, 환경 변수 PATH에 %RTM_ROOT%\bin 를 추가합니다.
  • 환경 변수 PATH의 설정
     환경 변수 Path에%RTM_ROOT%\bin 뿐만이 아니라 %RTM_ROOT%\utils\rtc-template도 등록하는 것을 추천합니다.
  • rtm_config.vsprops의 준비(OpenRTM-aist-0.4.2 의 경우만)
     etc폴더로부터 rtm_config_omni407.vsprops(개발 환경이 VC2005의 경우) 혹은 rtm_config_omni412.vsprops(VC2008의 경우도 같음)를 찾아, rtm_config.vsprops라는 이름으로 같은 etc 폴더 안에 복사합니다.

     이상으로, OpenRTM-aist의 인스톨은 종료입니다.
    ◆계속해서 인스톨의 확인 을 진행해 주십시오.

Unix에서의 동작확인

샘플을 사용한 테스트

 인스톨이 정상적으로 종료되면 부속되어 있는 샘플로 동작 테스트를 합니다. 샘플은 {prefix}* /share/OpenRTM-aist/examples에 있습니다(소스로 빌드·인스톨 했을 경우는 인스톨 디렉토리 이하의 /examples/<샘플 컴포넌트 세트명> 에도 있습니다). 샘플 컴포넌트 세트인 SimpleIO 를 사용하여 샘플 컴포넌트와 OpenRTM-aist 의 동작을 확인합니다.

{prefix}*:  통상 Linux라면 /usr 그 이외에서는 /usr/local 가 되는 경우가 대부분입니다. 소스로 빌드·인스톨 했을 경우는 configure 시의 옵션, --prefix 에게 준 경로( --prefix 를 설정하지 않았던 경우의 디폴트치는 /usr/local).

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

◆편의상 샘플은 usr/share/OpenRTM-aist/examples 이하에 있는 것으로서 설명을 기술합니다.

1.네임서버를 기동

 우선, rtm-naming *으로 네임서버를 기동합니다. 이 때 포트 넘버는 9876로 지정해 주십시오.

  $ rtm-naming 9876
  tarting omniORB omniNames: localhost.localdomain:9876
 $ 
 Wed Jun  4 23:03:09 2008:
 
 Starting omniNames for the first time.
 Wrote initial log file.
 Read log file successfully.
 Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000006400000001010200100000003139322e3136382e3130302e32333600942600000b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
 Checkpointing Phase 1: Prepare.
 Checkpointing Phase 2: Commit.
 Checkpointing completed.

* 패스는 {prefix} /bin/rtm-naming. 대개, which rtm-naming 명령어로 검색할 수 있습니다.

2.rtc.conf의 작성과 배치

 테스트를 위한 RTC 컨피그레이션 파일 rtc.conf를 작성해 배치합니다. 우선, 적당한 작업 디렉토리를 만듭니다. 여기에서는 편의상 홈 디렉토리 아래에 RTCwork 라고 하는 디렉토리를 작업 디렉토리로 하겠습니다. 작업 디렉토리 RTCwork에 다음과 같은 내용의 파일 rtc.conf 를 작성해 저장합니다. ※/usr/share/OpenRTM-aist/examples 아래에 있는 rtc.conf는 이 예에서는 사용할 수 없으므로, ~/RTCWork/rtc.conf 로서 새롭게 작성해 주십시오.

 corba.nameservers: localhost:9876
 naming.formats: %n.rtc
rtc.conf

3.ConsoleInComp의 기동

 터미널을 기동하고 다음과 같이 2.에서 작성한 rtc.conf를 참조시키는 형태로 ConsoleInComp를 기동합니다.

 $ /usr/share/OpenRTM-aist/examples/ConsoleInComp -f ~/RTCwork/rtc.conf
 Creating a component: "ConsoleIn"....succeed.
 =================================================
  Component Profile
 -------------------------------------------------
 InstanceID:     ConsoleIn0
 Implementation: ConsoleIn
 Description:    Console input component
 Version:        1.0
 Maker:          Noriaki Ando, AIST
 Category:       example
   Other properties   
 =================================================
 =================================================
 Port0 (name): out
 -------------------------------------------------
 - properties -
 port.port_type: DataOutPort
 dataport.data_type: TimedLong
 dataport.interface_type: CORBA_Any
 dataport.dataflow_type: Push, Pull
 dataport.subscription_type: Flush, New, Periodic
 -------------------------------------------------

자신이 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/ConsoleInComp -f ~/RTCwork/rtc.conf 으로 ConsoleInComp를 기동합니다.

4.ConsoleOutComp의 기동

 터미널을 기동하고 다음과 같이 2.에서 작성한 rtc.conf를 참조하는 형태로 ConsoleOutComp를 기동합니다.

 $ /usr/share/OpenRTM-aist/examples/ConsoleOutComp -f ~/RTCwork/rtc.conf
 succeed.
 =================================================
  Component Profile
 -------------------------------------------------
 InstanceID:     ConsoleOut0
 Implementation: ConsoleOut
 Description:    Console output component
 Version:        1.0
 Maker:          Noriaki Ando, AIST
 Category:       example
   Other properties   
 =================================================
 =================================================
 Port0 (name): in
 -------------------------------------------------
 - properties -
 port.port_type: DataInPort
 dataport.data_type: TimedLong
 dataport.interface_type: CORBA_Any
 dataport.dataflow_type: Push, Pull
 dataport.subscription_type: Any
 -------------------------------------------------
 
 
자신이 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/ConsoleOutComp -f ~/RTCwork/rtc.conf 으로 ConsoleOutComp를 기동합니다.

5.ConnectorComp의 기동

 터미널을 기동하고 다음과 같이 ConnectorComp를 기동합니다.

 $ /usr/share/OpenRTM-aist/examples/ConnectorComp
 Subscription Type: 
 Connector ID: f9626fe4-3243-21dd-0100-000c293a94a2
 dataport.interface_type: CORBA_Any
 dataport.dataflow_type: Push
 dataport.subscription_type: 
 dataport.corba_any.outport_ref: not a string value
 dataport.corba_any.inport_ref: not a string value
 $

자신이 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/ConnectorComp 으로 ConnectorComp를 기동합니다.

6.ConsoleInComp의 터미널에 숫자를 입력

 5.ConnectorComp 의 기동 후, ConsoleInComp측의 터미널에

 Please input number: 
라는 prompt가 나타나므로 숫자를 입력합니다. 입력하는 숫자는 short int에 들어가는 범위의 수치를 입력해 주십시오.

7.입력한 숫자가 ConsoleOutComp의 터미널상에 표시된다

 ConsoleInComp 측의 터미널에 숫자를 입력하면, ConsoleOutComp 측의 터미널에 입력한 수치가 나타납니다. 여기까지 되었다면 OpenRTM-aist가 정상적으로 인스톨 되고 있는 것을 확인할 수 있습니다.

컴포넌트 템플릿의 테스트

 컴포넌트의 템플릿 제네레이터를 사용하고 간단한 컴포넌트를 작성하는 테스트를 실시합니다. 템플릿 제네레이터 (rtc-template)를 사용합니다.

1.컴포넌트를 작성하는 작업 디렉토리의 준비

 컴포넌트를 작성하는 디렉토리(임의의 디렉토리)를 작성하고, 컴포넌트를 작성해 컴파일 해 보겠습니다.

 > cd 
 > mkdir SampleComponent
 > cd SampleComponent

2.rtc-template 의 기동을 확인

 우선은 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: 이하를 복사하고 테스트해 보겠습니다.|

3.MyService.idl과 YourService.idl의 준비

 Example: 의 예에서는 서비스 프로바이더로서 MyService, 서비스 컨슈머(consumer)로서 YourService를 이용하는 옵션이 주어지고 있어 그것을 위한 IDL 파일을 현재 디렉토리에 둘 필요가 있습니다. 여기에서는 간단한 IDL 파일을 이하와 같이 작성합니다.
    • MyService.idl
       interface MyService 
       {
         void echo();
       };
    • YourService.idl
       interface YourService
       {
          void echo();
       };

4.rtc-template를 실행해 템플릿 코드를 생성

 이러한 파일을 작성했다면,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
   File "MyServiceSVC_impl.h" was generated.
   File "MyServiceSVC_impl.cpp" was generated.
   File "Sample.h" was generated.
   File "Sample.cpp" was generated.
   File "SampleComp.cpp" was generated.
   File "Makefile.Sample" was generated.
   File "SampleComp_vc8.vcproj" was generated.
   File "Sample_vc8.vcproj" was generated.
   File "SampleComp_vc9.vcproj" was generated.
   File "Sample_vc9.vcproj" was generated.
   File "Sample_vc8.sln" was generated.
   File "Sample_vc9.sln" was generated.
   File "copyprops.bat" was generated.
   File "user_config.vsprops" was generated.
   File "README.Sample" was generated.
   File "Sample.yaml" was generated.
 > ls
 Makefile.Sample        Sample.h               Sample_vc8.vcproj
 MyService.idl          Sample.yaml            Sample_vc9.sln
 MyServiceSVC_impl.cpp  SampleComp.cpp         Sample_vc9.vcproj
 MyServiceSVC_impl.h    SampleComp_vc8.vcproj  YourService.idl
 README.Sample          SampleComp_vc9.vcproj  copyprops.bat
 Sample.cpp             Sample_vc8.sln         user_config.vsprops

5.make

 4.의 결과, 위와 같이 컴포넌트의 C++의 코드, 서비스의 구현 코드 및 Makefile 등(그 밖에 VC++관련의 파일=Windows용을 포함)이 작성됩니다. 여기서,

 > make -f Makefile.Sample
 혹은
 > mv Makefile.Sample Makefile
 > make

로서 make 합니다.

 > make -f Makefile.Sample
         :
         중략
         :
 g++ -o SampleComp Sample.o MyServiceSkel.o   YourServiceStub.o MyServiceSVC_impl.o   SampleComp.o `rtm-config --libs` 
 > ls
 Makefile.Sample        README.Sample          Sample_vc9.sln
 MyService.hh           Sample.cpp             Sample_vc9.vcproj
 MyService.idl          Sample.h               YourService.hh
 MyServiceDynSK.cc      Sample.o               YourService.idl
 MyServiceSK.cc         Sample.so              YourServiceDynSK.cc
 MyServiceSVC_impl.cpp  Sample.yaml            YourServiceSK.cc
 MyServiceSVC_impl.h    SampleComp             YourServiceSkel.cpp
 MyServiceSVC_impl.o    SampleComp.cpp         YourServiceSkel.h
 MyServiceSkel.cpp      SampleComp.o           YourServiceStub.cpp
 MyServiceSkel.h        SampleComp_vc8.vcproj  YourServiceStub.h
 MyServiceSkel.o        SampleComp_vc9.vcproj  YourServiceStub.o
 MyServiceStub.cpp      Sample_vc8.sln         copyprops.bat
 MyServiceStub.h        Sample_vc8.vcproj      user_config.vsprops

이것으로 loadable module판의 컴포넌트(Sample.so)와 실행 형식의 컴포넌트(SampleComp)가 작성되었습니다.

6.컴포넌트의 실행 준비:네임서버의 기동

 작성된 실행 형식의 컴포넌트를 실행해 보겠습니다. 먼저 그 준비를 합니다.  처음으로 CORBA 의 네임 서비스를 기동합니다. CORBA 의 네임 서비스는,

 > rtm-naming [포트 번호]

로 기동할 수 있기 때문에 8.에서 작성하는 rtc.conf로 설정하는 포트 번호를 지정해 기동해 주십시오. 아무것도 지정하지 않으면 디폴트 포트(2809)를 사용합니다. 여기에서는 디폴트 포트를 사용하는 예를 들고 있습니다.

 > rtm-naming
 Starting omniORB omniNames: rtm:2809
 n-ando@rtm:/tmp/SampleComponent> 
 Fri Apr 27 03:53:09 2007:
 
 Starting omniNames for the first time.
 Wrote initial log file.
 Read log file successfully.
 Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000e0000003135302e32392e39362e31363900611e0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
 Checkpointing Phase 1: Prepare.
 Checkpointing Phase 2: Commit.
 Checkpointing completed.
 rtm-naming를 기동하면 다음과 같은 메세지가 나타나는 경우가 있습니다.
 $ rtm-naming
 Starting omniORB omniNames: localhost.localdomain:
 omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2809
 Failed to initialise the POAs. Is omniNames already running?
 $

이것은 해당 포트를 사용한 네임서버가 이미 기동하고 있는 것을 나타내고 있습니다. 이 경우는 그대로 다음의 7.에 진행되어 괜찮습니다.

7.컴포넌트의 실행 준비:RtcLink를 기동

 다음에 컴포넌트를 조작하기 위한 GUI 툴:RtcLink를 기동합니다(RtcLink에 대한 자세한 것은RtcLink 를, 또 인스톨 방법 등은RtcLink·RtcTemplate의 인스톨을 참조해 주십시오).

8.컴포넌트의 실행 준비:rtc.conf의 작성

 컴포넌트의 실행에는 컨피그레이션 파일(통상은 rtc.conf 라는 이름)이 필요합니다. 여기에서는 다음과 같은 *를 커런트 디렉토리(작업 디렉토리)로 작성해 저장합니다.
    • rtc.conf
       corba.nameservers: localhost
       naming.formats: %n.rtc
       logger.log_level: PARANOID

*NOTES: corba.nameservers: rtm.or.jp:2809 (와)과 같이 corba.nameservers: 에는 호스트명 혹은 IP주소와 포토 번호(rtm.or.jp 는 호스트명, 2809는 포토 번호)를 줄 수 있습니다.

9.컴포넌트를 기동

 마지막으로, 컴포넌트를 기동합니다.

 > ./SampleComp -f rtc.conf

혹은

 > ./SampleComp (디폴트로 현재 디렉토리의 rtc.conf를 읽어들인다)

이것으로 컴포넌트를 기동할 수 있어RtcLink 상에
      • InPort를 2개
      • OutPort를 2개
      • 서비스 포트를 2개
      • 컨피그레이션을 6개 를 갖는 컴포넌트가 표시되면 OpenRTM-aist-0.4.2가 정상적으로 인스톨 된 것입니다. 구체적인 컴포넌트의 작성 방법은 여기를 참조해 주십시오.

Windows에서의 동작확인

인스톨의 확인

※이후의 설명은 편의상 OpenRTM-aist-0.4.0에 대해 쓰여져 있습니다. OpenRTM-aist-0.4.x에 대해서도 같은 순서로 인스톨 할 수 있습니다.

샘플의 실행

 프로그램 메뉴에 등록되어 있는 샘플 프로그램은 디폴트로 로컬 호스트의 CORBA 네임서버를 사용하도록 설정되어 있습니다. 따라서, 다음의 어느 방법(인스톨 방법에 의해 다소 차이가 생깁니다)으로 우선 CORBA 네임서버를 기동할 필요가 있습니다.

  • 프로그램 메뉴의 「OpenRTM-aist」→「example」→「NameService.bat」를 실행합니다.
  • 혹은, OpenRTM-aist\bin에 있는 rtm-naming.bat를 더블 클릭 해 기동합니다.
    NameServer_on_Windows.png
    CORBA 네임서버의 기동

네임서버 기동 후, 샘플 컴포넌트를 기동합니다. 샘플의 기동은 다음에 나타내는 어느 방법(인스톨 방법에 의해 다소 차이가 생깁니다)으로 실시합니다.
  • 샘플은 프로그램 메뉴의 「OpenRTM-aist」→「example」이하에서 기동할 수 있습니다.
  • OpenRTM-aist\examples 이하의 exe 파일을 더블 클릭 해 기동합니다. 이 때, 같은 폴더내에 rtc.conf라고 하는 파일이 없는 경우 exe 파일의 예상된 동작을 수행할 수 없습니다. 그 경우는 그 부모 폴더에 rtc.conf가 있기 때문에 exe 파일 자신을 부모 폴더에 복사(혹은, rtc.conf를 해당 폴더에 복사)하고 나서 기동해 주세요.
    RtcLink를 기동하고 적당한 샘플끼리를 접속하여 동작을 확인합니다. 각각 샘플의 사용법에 대해서는 OpenRTM 부속 샘플에 대해 를 참고해 주십시오. 샘플 컴포넌트는 각각 이하와 같은 기능을 가지고 있습니다.
ConsoleInComp.exe 콘솔로부터 입력된 수치를 OutPort로부터 출력한다. ConsoleOutComp.exe와 연결해 사용
ConsoleOutComp.exe InPort에 입력된 수치를 콘솔에 표시하는 컴포넌트. ConsoleInComp.exe와 연결해 사용
SequenceInComp.exe 랜덤인 수치(Short,Long,Float,Double과 그 순서형)을 출력하는 컴포넌트. SequenceOutComp.exe와 연결해 사용
SequenceOutComp.exe InPort에 입력되는 수치(Short,Long,Float,Double와 그 순서형)을 표시. SequenceInComp.exe와 연결해 사용
MyServiceProviderComp.exe MyService형의 서비스를 제공하는 컴포넌트. MyServiceConsumerComp.exe와 연결해 사용
MyServiceConsumerComp.exe MyService형의 서비스를 제공하는 컴포넌트. MyServiceProviderComp.exe와 연결해 사용
ConfigSampleComp.exe Configuration의 샘플. RtcLink로부터 Configuration를 변경해 Configuration의 거동을 이해하기 위한 샘플.
USBCameraAcquireComp.exe USB 카메라로부터 화상을 취득해 OutPort로부터 출력하는 default 컴포넌트. USBCameraMonitor.exe와 연결해 사용
USBCameraMonitor.exe InPort에 입력되는 화상을 화면에 표시하는 컴포넌트. USBCameraAquire.exe와 연결해 사용

덧붙여 RtcLink에 대해 자세한 것은 RtcLink를, 또 인스톨 방법 등은RtcLink·RtcTemplate의 인스톨을 참조해 주십시오.

컴포넌트 템플릿 제네레이터(rtc-template.py)의 실행

컴포넌트의 템플릿 제네레이터(rtc-template.py)를 사용해 간단한 컴포넌트를 작성합니다. 컴포넌트를 작성하는 폴더는 임의의 폴더로도 좋습니다. 덧붙여 OpenRTM-aist-0.4.2에서는 rtc-template.py의 실행에 PyYAML가 필요합니다. 여기에서 다운로드해, 인스톨 해 주십시오.
※ 이후는 rtc-template.py의 패스가 환경 변수 PATH로 설정되어 있는 것으로서 진행시켜 나갑니다.  → 자세한 것은 빌드 후의 인스톨를 참고로 해 주십시오.
※ "rtc-template.py"는 (install_dir)\OpenRTM-aist\utils\rtc-template에 있습니다.
※ Cygwin 등을 인스톨 하고 있는 환경에서는 python.exe가 복수 존재하는 경우가 있으므로, 이번에 설치한 Python의 인스톨 폴더로부터 python의 인터프리터가 기동되고 있는 것을 확인해 주십시오.

 > 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에 대해서 작성하고 싶은 컴포넌트의 설정을 인수로서 건네주면, 컴포넌트의 양식을 작성합니다. 여기에서는 help의 표시의 마지막에 표시된Example:이하의 서비스 포트에 관한 기술 이외를 복사하고 시험해 보겠습니다.


※ Windows환경에서 CUI판의 rtc-template를 실행하는 경우, 서비스 포트에 관한 옵션은 사용할 수 없습니다.
※ Windows판 컴포넌트에서 서비스 포트를 사용하고 싶은 경우는 UNIX 환경에서 rtc-template를 실행 후에 Windows상의 컴파일러에서 컴포넌트를 빌드하거나, Eclipse판 RtcTemplate를 이용해 코드의 양식을 생성해 주십시오. Eclipse판 RtcTemplate에서는 Windows상에서도 서비스 포트를 가지는 컴포넌트의 양식을 생성하는 것이 가능해지고 있습니다.

커멘드 prompt로부터 커멘드 입력을 실시하는 일도 할 수 있습니다만, 이번은 이하와 같은 배치파일(gen.bat)을 임의의 폴더에 작성해 봅니다. NOTES: OpenRTM-aist-0.4.2에서는 -bvcproject 옵션은 불필요해졌습니다.

 @echo off
 
 rtc-template.py -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
 
 pause
배치파일 gen.bat (OpenRTM-aist-0.4.2를 위한 샘플)


배치파일을 실행하면, 이하와 같은 메세지가 표시된 DOS창이 열려, 컴포넌트의 C++의 코드, VC++용 프로젝트 파일이 작성(OpenRTM-aist-0.4.2의 경우).

   File "Sample.h" was generated.
   File "Sample.cpp" was generated.
   File "SampleComp.cpp" was generated.
   File "Makefile.Sample" was generated.
   File "SampleComp_vc8.vcproj" was generated.
   File "Sample_vc8.vcproj" was generated.
   File "SampleComp_vc9.vcproj" was generated.
   File "Sample_vc9.vcproj" was generated.
   File "Sample_vc8.sln" was generated.
   File "Sample_vc9.sln" was generated.
   File "copyprops.bat" was generated.
   File "user_config.vsprops" was generated.
   File "README.Sample" was generated.
   File "Sample.yaml" was generated. 
 계속하려면  아무 키나 눌러 주세요 . . .

copyprops.bat라고 하는 배치파일이 작업 폴더내에 생성되고 이것을 실행합니다.

 >copyprops.bat
 copy "(RTM_ROOT) \etc\rtm_config.vsprops" .
         1 개의 파일을 복사했습니다.

  • NOTES: etc 폴더에 rtm_config.vsprops 가 존재하지 않으면 copyprops.bat는 실패합니다.
     >copyprops.bat
     copy "(RTM_ROOT) \etc\rtm_config.vsprops" .
     지정된 파일이 발견되지 않습니다.
    이 경우는, etc 폴더에 rtm_config.vsprops를 준비해 주십시오.
     → 자세한 것은 빌드 후의 인스톨를 참고해 주십시오.

 여기서, Sample_vc8.sln(개발 환경이 VC2005의 경우)를, 혹은 Sample_vc9.sln(같이 VC2008의 경우)를 더블 클릭 하면 Visual Studio 등의 개발 환경이 기동됩니다. 「솔루션의 리빌드」를 실시하는 것으로 실행 형식의 컴포넌트SampleComp.exe가 작성됩니다(통상은 작업 폴더\SampleComp\Debug에 작성됩니다).
 ※프로젝트를 빌드하기 위해서는 Visual Studio 등의 VC++개발 환경이 인스톨 되어 있어야 합니다. VC++개발 환경의 인스톨에 대해서는 Windows계 시스템으로의 빌드 를 참조해 주십시오.
 SampleComp.exe 의 동작을 확인하려면 , 이하의 순서를 따릅니다.

      • 1.다음과 같은 내용의 파일 rtc.conf 를 작성해, SampleComp.exe 와 같은 폴더내에 배치합니다.
         corba.nameservers: localhost
         naming.formats: %n.rtc
        rtc.conf
      • 2.네임서버를 기동
      • 3.RtcLink를 기동
      • 4.SampleComp.exe를 기동
      • 5.RtcLink상에 컴포넌트가 나타납니다


 → 참고: 샘플의 실행

ORBexpress의 인스톨

대응 배포 버전

OpenRTM-aist-0.4.x-ORBexpress는 이하의 Linux 배포 버전에서 동작하는 것이 확인되고 있습니다.
  • ubuntu710

동작 조건

OpenRTM-aist-0.4.x-ORBexpress는 인스톨에는 아래와 같은 패키지가 필요합니다.
  1. The ADAPTIVE Communication Environment (ACE) 5.4 이상
  2. ORBexpress ST C++ v2.6.1 x86 Linux v9.0 / self / GCC v3.2.2.
  3. gcc:3.3.6 (Ubuntu 1:3.3.6-15ubuntu2)
  4. python
  5. PyYAML (0.4.2만, rtc-template에 필요) 또한 아래와 같은 OS 및 Linux 배포에 대해서는, ORBexpress를 제외」이러한 패키지를 인스톨하기 위한 스크립트가 build 디렉토리 아래에 있습니다.
    ※OpenRTM-aist-0.4.2 의 경우
  6. Ubuntu: pkg_install_debian.sh
    (다만, OpenRTM-aist-0.4.2 부속의 이러한 셸 스크립트는 OpenRTM-aist-0.4.2 빌드된 패키지에서도 동시에 인스톨 하게 되어 있습니다. 상기 툴 패키지만을 인스톨 하고 싶은 경우는, 이러한 셸 스크립트를 적당히 편집해 사용해 주십시오.)

ORBexpress(Linux)의 인스톨 방법

환경

  • 배포:ubuntu7.10
  • gcc:3.3.6 (Ubuntu 1:3.3.6-15ubuntu2)
  • ORBexpress 버전:ORBexpress ST C++ v2.6.1 x86 Linux v9.0 / self / GCC v3.2.2.
  • ORBexpress 매체:CD-ROM

순서

이하의 순서로 인스톨 합니다.
  1. 전개
    • CD-ROM 의 이하의 파일을 인스톨 하는 디렉토리에 복사합니다.
      \ST_2.6.1\x86-linux_9.0\x86_any-linux_9.0-gcc_3.2.2\ORBexpressST.tar.gz
    • ORBexpressST.tar.gz 의 압축을 해제합니다.
       $tar zxvf ORBexpressST.tar.gz
    • ORBexpress는 /OIS 라고 하는 디렉토리에 전개됩니다.
  2. 인스톨
    • INSTALL_LICENSE의 실행
      INSTALL_LICENSE는 /OIS/ORBexpress/ST_2.6.1/host/x86_linux_9.0/bin/에 저장되어 있습니다.
       $ cd ./OIS/ORBexpress/ST_2.6.1/host/x86_linux_9.0/bin/
       $ ./INSTALL_LICENSE 
      INSTALL_LICENSE는 csh의 셸 스크립트 때문에 실행에는 csh가 필요합니다.
    • 라이센스의 동의
      INSTALL_LICENSE를 실행하고 라이센스 확인 후, 이하의 항목에 답합니다.
       I have the authority to bind the Customer to this agreement. (Y/N)
       I have read and understand this agreement.                   (Y/N)
       I hereby agree to all of the terms of this agreement on behalf of the Customer.                      (Y/N)
       I additionally agree to personally honor the restrictions set forth in this agreement.                              (Y/N)
    • 라이센스 키의 입력
      모두 동의 하고, 라이센스 키를 입력합니다.
       Enter your ORBexpress RT_2.4.0 License Key 05957······
  3. libstdc++-libc6.1-1.so2의 링크를 작성합니다.
    idl2cpp(IDL 변환 소프트)의 실행을 위해 링크를 작성합니다.
     $cd /usr/lib
     $su
     #ln -s libstdc++-libc6.2-2.so.3 libstdc++-libc6.1-1.so.2
     #exit
  4. 패치를 적용.
    idl2cpp의 실행을 위해 패치를 적용합니다.
    오라클사에서 발행중인 패치(/OpenRTM-aist-0.4./p3006854_9204_LINUX.zip)를 적용합니다.
    참조:http://www.opennet.ru/soft/ora_inst/, http://www.idevelopment.info/data/Oracle/DBA_tips/Linux/LINUX_8.shtml
     # unzip p3006854_9204_LINUX.zip
     Archive:  p3006854_9204_LINUX.zip
        creating: 3006854/
       inflating: 3006854/rhel3_pre_install.sh
       inflating: 3006854/README.txt
     # cd 3006854
     # sh rhel3_pre_install.sh
     Applying patch...
     Patch successfully applied
     #
    패치를 적용하지 않고, idl2cpp를 실행하면 이하와 같은 메세지가 표시됩니다.
     Error occurred during initialization of VM
     Unable to load native library:/home/openrtm/OIS/ORBexpress/ST_2.6.1/host/x86_linux_9.0/jre-1.3.1/lib/i386/libjava.so: symbol__libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
  5. idl2cpp 실행한다.
     $./idl2cpp -help
     Usage is: idl2cpp [-help | options] input-file
     
       -a        Generate typecodes & type Any support for user-defined IDL types [default=false]
       -bm       Generate MSVC++ V6 and prior bug-compatible code (not for V7 and later) [default=false]
       -bo       Generate g++ 2.7 bug-compatible code [default=false]
       -d<sym>   Define pre-processor symbol <sym>
       -ea       Generate servant to require only impls with _env arg [default=true]
       -ee       Generate servant to allow impls both with and without _env arg [default=false]
       -ex       Generate servant to require only impls without _env arg [default=false]
       -fi<n>    Set formatting indent to <n> spaces [default=4]
       -fm<n>    Set formatting margin to column <n> [default=80]
       -fh<ext>  Set C++ header file extension to <ext> [default=h]
       -fx<ext>  Set C++ source file extension to <ext> [default=cxx]
       -i<dir>   Search <dir> for #included files
       -m        Map IDL modules to C++ namespaces [default=false]
       -n        Generate code for #included files [default=false]
       -pl       Use POA policies on local invocations [default=false]
       -q        Don't generate model _impl files [default=false]
       -r        Generate client code only, implies -q [default=false]
       -s        Syntax and semantic check only [default=false]
       -ts<size> Allocate temporaries larger than size on heap instead of stack [default=1000000]
       -u<sym>   Undefine pre-processor symbol <sym>
       -v        Print version number and license info
       -help     Print this message
     $
    idl2cpp가 상기와 같이 동작하면 인스톨은 완료입니다.

소스 코드의 전개

우선 소스 코드 OpenRTM-aist-0.4.x-ORBexpress.tar.gz zip를 적당한 디렉토리에 전개합니다.

 $tar xvzf OpenRTM-aist-0.4.x-ORBexpress.tar.gz
 $cd OpenRTM-aist-0.4.x-ORBexpress

빌드

OpenRTM-aist는 패키지의 빌드에 autoconf, automake를 사용하고 있습니다. 빌드의 방법은 다른 autoconf, automake를 사용한 패키지와 같은 방법으로 실시합니다. ./configure에게 주는 옵션에 ORBexpress를 인스톨 한 디렉토리를 지정합니다. 이하는, ORBexpress를 /home/openrtm/의 아래에 전개했을 경우의 것입니다.

 $./configure --with-orbexpress=/home/openrtm/OIS/ORBexpress/ST_2.6.1

※디렉토리는 /OIS/ORBexpress/ST_2.6.1 까지 지정.

그 외 사용 가능한 옵션은

 $./configure --help
를 참조해 주십시오.

make

configure가 정상적으로 종료한 것을 확인해 주십시오. 정상적으로 종료하면 make 합니다.

 $make

인스톨 하기 위해서는 적어도

  OpenRTM-aist-0.4.x-ORBexpress/rtm
  OpenRTM-aist-0.4.x-ORBexpress/rtm/idl
  OpenRTM-aist-0.4.x-ORBexpress/util/rtm-config
  OpenRTM-aist-0.4.x-ORBexpress/util/rtm-naming
  OpenRTM-aist-0.4.x-ORBexpress/util/rtc-template

이하의 디렉토리가 정상적으로 빌드 되고 있을 필요가 있습니다. 빌드가 정상적으로 종료되면 헤더 파일, 라이브러리, 유틸리티 커멘드군을 인스톨 합니다.

 $su
 #make install

ORBexpress의 동작확인

샘플을 사용해 테스트

 인스톨이 정상적으로 종료하면, 부속 샘플로 동작 테스트를 합니다. 샘플은,{prefix}* /share/OpenRTM-aist/examples에 있습니다(다만, 스스로 빌드·인스톨 했을 경우는 인스톨 디렉토리 이하의 /examples/<샘플 컴포넌트 세트명>에 있습니다). 샘플 컴포넌트 세트 SimpleIO를 사용하고, 샘플 컴포넌트와 OpenRTM-aist의 동작을 확인합니다.

 {prefix}*: 통상은 Linux 라면 /usr 그 이외에서는 /usr/local인 경우가 대부분입니다.
샘플 컴포넌트 세트 SimpleIO:
 RT 컴포넌트 ConsoleInComp, ConsoleOutComp와 이것들의 통신을 접속하는 ConnectorComp로 된 샘플 세트입니다. 이 세트는 ConsoleInComp에게 준 수치를 ConsoleOutComp에 표시시키는 「가장 간단한 I/O 데몬스트레이션」을 목적으로 한 샘플입니다. ConsoleInComp로부터 ConsoleOutComp에 접속해, 그 통신을 개시시키는 것이 ConnectorComp의 역할입니다.


◆ 편의상 샘플은 usr/share/OpenRTM-aist/examples 이하에 있는 것으로서 설명을 기술합니다.


  • 1.네임서버를 기동
    우선, rtm-naming*로 네임서버를 기동합니다.이 때 포토 넘버는 2809를 지정해 주세요.
     $ rtm-naming 2809
      tarting omniORB omniNames: localhost.localdomain:9876
     $ 
     Wed Jun  4 23:03:09 2008:
     
     Starting omniNames for the first time.
     Wrote initial log file.
     Read log file successfully.
     Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e30000001000000000000006400000001010200100000003139322e3136382e3130302e32333600942600000b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
     Checkpointing Phase 1: Prepare.
     Checkpointing Phase 2: Commit.
     Checkpointing completed.
     

*패스는{prefix} /bin/rtm-naming. 대부분, which rtm-naming 로 검색할 수 있습니다.


  • 2.RTC 컨피그레이션 파일의 작성, 배치
    테스트를 위한 RTC 컨피그레이션 파일을 작성, 배치합니다. 우선, 적당한 작업 디렉토리를 만듭니다. 여기에서는 편의상 홈 디렉토리 바로 아래의 RTCwork라는 디렉토리를 작업 디렉토리로 하겠습니다. 작업 디렉토리 RTCwork에 이하의 파일을 작성해 배치합니다.
    • rtc.conf
       corba.nameservers:iiop:1.0@orbexpress:2809
       corba.id:oeORB
       naming.formats: %n.rtc
       logger.log_level: PARANOID
    • rtcconin.conf(ConsoleInComp용 컨피그레이션 파일)
       corba.nameservers:iiop:1.0@orbexpress:2809
       corba.endpoint:orbexpress:5012
       corba.id:oeORB
       naming.formats: %n.rtc
       logger.log_level: PARANOID
    • rtcconout.conf(ConsoleOutComp용 컨피그레이션 파일)
       corba.nameservers:iiop:1.0@orbexpress:2809
       corba.endpoint:orbexpress:5013
       corba.id:oeORB
       naming.formats: %n.rtc
       logger.log_level: PARANOID
       
      자신이 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/로 이동하고 나서 컨피그레이션 파일을 생성하는 셸 스크립트( gen_conf.sh )를 실행합니다.
       $cd /usr/share/OpenRTM-aist/examples/SimpleIO
       $./gen_conf.sh
      실행 후에는, 이하의 RTC 컨피그레이션 파일이 생성됩니다.
    • rtc.conf
    • rtcconin.conf(ConsoleInComp용 컨피그레이션 파일)
    • rtcconout.conf(ConsoleOutComp용 컨피그레이션 파일)

  • 3.ConsoleInComp의 기동~
    터미널을 기동하고, 다음과 같이2.에서 작성한 rtcconin.conf 를 참조시키는 형태로 ConsoleInComp를 기동합니다.
     $/usr/share/OpenRTM-aist/examples/ConsoleInComp -f ~/RTCwork/rtcconin.conf
     [ manager: _orbexpress_31210:  Server available [null class] / orbexpress_31210 ]
     [ manager: _orbexpress_31210:  Configuration:   tcp://orbexpress:5012 ]
     [ manager: _orbexpress_31210:  NEW CONNECTION to 'tcp://orbexpress:2809' ]
     Creating a component: "ConsoleIn"....succeed.
     =================================================
      Component Profile
     -------------------------------------------------
     InstanceID:     ConsoleIn0
     Implementation: ConsoleIn
     Description:    Console input component
     Version:        1.0
     Maker:          Noriaki Ando, AIST
     Category:       example
       Other properties   
     =================================================
     =================================================
     Port0 (name): out
     -------------------------------------------------
     - properties -
     port.port_type: DataOutPort
     dataport.data_type: TimedLong
     dataport.interface_type: CORBA_Any
     dataport.dataflow_type: Push, Pull
     dataport.subscription_type: Flush, New, Periodic
     -------------------------------------------------

스스로 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/로 이동하고 나서

 ${인스톨 디렉토리}/examples/SimpleIO/
 $./ConsoleInComp -f rtcconin.conf

그리고 ConsoleInComp를 기동합니다.


  • 4.ConsoleOutComp의 기동
    터미널을 기동하고, 다음과 같이 2.에서 작성한 rtcconin.conf 를 참조하는 형태로 ConsoleOutComp를 기동합니다.
     $/usr/share/OpenRTM-aist/examples/ConsoleOutComp -f ~/RTCwork/rtcconout.conf
     $./ConsoleOutComp -f rtcconout.conf
     [ manager: _orbexpress_31242:  Server available [null class] / orbexpress_31242 ]
     [ manager: _orbexpress_31242:  Configuration:   tcp://orbexpress:5013 ]
     [ manager: _orbexpress_31242:  NEW CONNECTION to 'tcp://orbexpress:2809' ]
     succeed.
     =================================================
      Component Profile
     -------------------------------------------------
     InstanceID:     ConsoleOut0
     Implementation: ConsoleOut
     Description:    Console output component
     Version:        1.0
     Maker:          Noriaki Ando, AIST
     Category:       example
       Other properties   
     =================================================
     =================================================
     Port0 (name): in
     -------------------------------------------------
     - properties -
     port.port_type: DataInPort
     dataport.data_type: TimedLong
     dataport.interface_type: CORBA_Any
     dataport.dataflow_type: Push, Pull
     dataport.subscription_type: Any
     -------------------------------------------------

자신이 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/로 이동하고 나서

 ${인스톨 디렉토리}/examples/SimpleIO/
 $./ConsoleOutComp -f rtcconout.conf
그리고 ConsoleOutComp 를 기동합니다.


  • 5.ConnectorComp의 기동
    터미널을 기동하고, 다음과 같이 ConnectorComp를 기동합니다.
     $/usr/share/OpenRTM-aist/examples/ConnectorComp
     Subscription Type: 
     [ : _orbexpress_32078:  NEW CONNECTION to 'tcp://localhost:2809' ]
     [ : _orbexpress_32078:  NEW CONNECTION to 'tcp://orbexpress:5012' ]
     [ : _orbexpress_32078:  NEW CONNECTION to 'tcp://orbexpress:5013' ]
     Connector ID: 26123142-0000-2000-0100-000c29123441
     dataport.interface_type: CORBA_Any
     dataport.dataflow_type: Push
     dataport.subscription_type: 
     dataport.corba_any.outport_ref: not a string value
     dataport.corba_any.inport_ref: not a string value

스스로 빌드·인스톨 했을 경우는, {인스톨 디렉토리}/examples/SimpleIO/로 이동하고 나서

 $cd {인스톨 디렉토리}/examples/SimpleIO/
 $./ConnectorComp
그리고 ConnectorComp를 기동합니다.


  • 6.ConsoleInComp의 터미널에 숫자를 입력
    5.ConnectorComp을 기동 후에, ConsoleInComp측의 터미널에
     Please input number: 
    라는 prompt가 나타나므로, 거기에 숫자를 입력합니다. 입력하는 숫자는 short int에 들어가는 범위의 수치를 입력해 주십시오.

  • 7.그 숫자가 ConsoleOutComp의 터미널상에 표시
     ConsoleInComp 측의 터미널에 숫자를 입력하면, ConsoleOutComp 측의 터미널에 입력한 수치가 나타납니다. 여기까지 할 수 있으면, OpenRTM-aist가 정상적으로 인스톨 되고 있는 것을 확인 할 수 있습니다.


컴포넌트 템플릿의 테스트

 컴포넌트의 템플릿 제네레이터를 사용하여 간단한 컴포넌트를 작성하는 테스트를 합니다. 템플릿 제네레이터(rtc-template)를 사용합니다.


  • 1.컴포넌트를 작성하는 작업 디렉토리의 준비
     컴포넌트를 작성하는 디렉토리(임의의 디렉토리에서 좋습니다.)를 작성하고, 거기서 컴포넌트를 작성해 컴파일 해 보겠습니다.
     > cd 
     > mkdir SampleComponent
     > cd SampleComponent

  • 2.rtc-template의 기동 확인
     먼저 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: 이하를 복사해 테스트 해보겠습니다.

  • 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: 의 예를 복사&붙여넣기 하는 등 커멘드로서 입력합니다.
     > 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
       File "MyServiceSVC_impl.h" was generated.
       File "MyServiceSVC_impl.cpp" was generated.
       File "Sample.h" was generated.
       File "Sample.cpp" was generated.
       File "SampleComp.cpp" was generated.
       File "Makefile.Sample" was generated.
       File "SampleComp_vc8.vcproj" was generated.
       File "Sample_vc8.vcproj" was generated.
       File "SampleComp_vc9.vcproj" was generated.
       File "Sample_vc9.vcproj" was generated.
       File "Sample_vc8.sln" was generated.
       File "Sample_vc9.sln" was generated.
       File "copyprops.bat" was generated.
       File "user_config.vsprops" was generated.
       File "README.Sample" was generated.
       File "Sample.yaml" was generated.
     > ls
     Makefile.Sample        Sample.h               Sample_vc8.vcproj
     MyService.idl          Sample.yaml            Sample_vc9.sln
     MyServiceSVC_impl.cpp  SampleComp.cpp         Sample_vc9.vcproj
     MyServiceSVC_impl.h    SampleComp_vc8.vcproj  YourService.idl
     README.Sample          SampleComp_vc9.vcproj  copyprops.bat
     Sample.cpp             Sample_vc8.sln         user_config.vsprops

  • 5.make
     4.의 결과, 위와 같이 컴포넌트의 C++의 코드, 서비스의 구현 코드 및 Makefile 등(그 밖에 VC++관련의 파일=Windows용을 포함한다)이 작성됩니다. 여기서,
     > make -f Makefile.Sample
     혹은
     > mv Makefile.Sample Makefile
     > make
    로 make 합니다.
     > make -f Makefile.Sample
             :
             중략
             :
     g++ -o SampleComp Sample.o MyServiceSkel.o   YourServiceStub.o MyServiceSVC_impl.o   SampleComp.o `rtm-config --libs` 
     > ls
     Makefile.Sample        README.Sample          Sample_vc9.sln
     MyService.hh           Sample.cpp             Sample_vc9.vcproj
     MyService.idl          Sample.h               YourService.hh
     MyServiceDynSK.cc      Sample.o               YourService.idl
     MyServiceSK.cc         Sample.so              YourServiceDynSK.cc
     MyServiceSVC_impl.cpp  Sample.yaml            YourServiceSK.cc
     MyServiceSVC_impl.h    SampleComp             YourServiceSkel.cpp
     MyServiceSVC_impl.o    SampleComp.cpp         YourServiceSkel.h
     MyServiceSkel.cpp      SampleComp.o           YourServiceStub.cpp
     MyServiceSkel.h        SampleComp_vc8.vcproj  YourServiceStub.h
     MyServiceSkel.o        SampleComp_vc9.vcproj  YourServiceStub.o
     MyServiceStub.cpp      Sample_vc8.sln         copyprops.bat
     MyServiceStub.h        Sample_vc8.vcproj      user_config.vsprops
    이것으로, loadable module판의 컴포넌트(Sample.so)와 실행 형식의 컴포넌트(SampleComp)가 작성되었습니다.

  • 6.컴포넌트의 실행 준비:네임서버의 기동
     작성된 실행 형식의 컴포넌트를 실행해 보겠습니다. 우선, 그 준비를 시작합니다.
     우선, CORBA의 네임 서비스를 기동합니다. CORBA의 네임 서비스는,
     > rtm-naming [포트 번호]
    위의 명령어 기동할 수 있기 때문에 8.에서 작성하는 rtc.conf에 설정하는 포트 번호를 지정해 기동해 주십시오. 아무것도 지정하지 않으면 디폴트 포트(2809)를 사용합니다. 여기에서는 디폴트 포트를 사용하는 예를 들고 있습니다.
     > rtm-naming
     Starting omniORB omniNames: rtm:2809
     n-ando@rtm:/tmp/SampleComponent> 
     Fri Apr 27 03:53:09 2007:
     
     Starting omniNames for the first time.
     Wrote initial log file.
     Read log file successfully.
     Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000060000000010102000e0000003135302e32392e39362e31363900611e0b0000004e616d6553657276696365000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
     Checkpointing Phase 1: Prepare.
     Checkpointing Phase 2: Commit.
     Checkpointing completed.
     rtm-naming를 기동하면, 다음과 같은 표시가 나타나는 경우가 있습니다.
     $ rtm-naming
     Starting omniORB omniNames: localhost.localdomain:
     omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2809
     Failed to initialise the POAs. Is omniNames already running?
     $
    이것은 해당 포토를 사용한 네임서버가 이미 기동되고 있는 것을 나타내고 있습니다. 이 경우는 그대로 다음의 7.로 진행해도 괜찮습니다.

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

  • 8.컴포넌트의 실행 준비:rtc.conf의 배치
     컴포넌트의 실행에는 컨피그레이션 파일(통상은 rtc.conf라는 이름)이 필요합니다. 여기에서는 다음과 같은 *를 커런트 디렉토리(작업 디렉토리)에 작성, 배치합니다.
    • rtc.conf
       corba.nameservers:iiop:1.0@orbexpress:2809
       corba.endpoint:orbexpress:5010
       corba.id:oeORB
       naming.formats: %n.rtc
       logger.log_level: PARANOID

*NOTES:

 corba.nameservers: rtm.or.jp:2809
과 같이 corba.nameservers: 에는 호스트명 혹은 IP주소와 포트 번호(rtm.or.jp는 호스트명, 2809는 포트 번호)를 줄 수 있습니다.


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

개판 이력

2008/6/20 片見