ダウンロード
最新バージョン : 2.1.0-RELESE
| 2.1.0-RELESE | ダウンロードページ |
OpenRTM@Github
OpenRTM-aist GitHubサイト
ROS
Robot Operating System
Choreonoid
モーションエディタ/シミュレータ
DAQ-Middleware
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
産総研が提供するRTC集
東京オープンソースロボティクス協会
| 2.1.0-RELESE | ダウンロードページ |
OpenRTM-aist GitHubサイト
Robot Operating System
モーションエディタ/シミュレータ
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
産総研が提供するRTC集
東京オープンソースロボティクス協会
OpenRTM-aist(C++버전, Python버전, Java버전)에 관한 문제해결을 정리했습니다.
OpenRTM-aist(공통)
OS공통
컴포넌트는 분명히 기동되고 있는데도 좀비 오브젝트로 표시됩니다.
컴포넌트는 기동하고 있고 네임 서버에도 등록되어 있는데 RTSystemEditor의 네임 서비스 뷰 상에서는 좀비 오브젝트로 표시되고 있으며 시스템 에디터에 드래그 & 드롭해도 아무것도 표시가 되지 않습니다.[원인]컴포넌트를 기동한 호스트에 도달할 수 없음
RTSystemEditor가 동작하고 있는 PC로부터 컴포넌트를 기동한 호스트에 어떠한 이유로 도달 되어 있지 않을 가능성이 있습니다.먼저, RTSystemEditor가 기동하고 있는 PC에서 컴포넌트를 기동한 호스트에 대해서 ping이 도달하는가를 확인해 주십시오 예를 들어 이하의 3대의 호스트A, B, C가 있다고 가정합니다.
- hostA: 컴포넌트가 기동하고 있는 호스트
- hostB: 네임 서버가 기동하고 있는 호스트
- hostC: RTSystemEditor가 동작하는 호스트
이러한 호스트의 네트워크가 이하와 같이 구성되어 있어,[hostA]-(네트워크I)-[hostB]-(네트워크I)-[hostC]
한편 hostB가 네트워크I와 네트워크II사이를 적절하게 루팅 하도록 설정되어 있지 않으면 hostC에서 hostA에는 도달할 수 없습니다.
이러한 경우는 hostB를 적절히 설정해 hostC에서 hostA에 도달할 수 있도록 할 필요가 있습니다.
[원인]컴포넌트를 기동한 호스트에서 방화벽이 유효로 설정되어 있다.
컴포넌트가 동작하고 있는 호스트에서 방화벽이 동작하고 있는 경우, RTSystemEditor와 컴포넌트가 통신하지 못하고 이러한 현상이 발생하는 경우가 있습니다.방화벽의 설정을 재검토하거나 OFF로 하는 등 외부에서부터 컴포넌트의 통신이 가능하도록 해 주십시오.
Windows
인스톨러 실행중에 「…권한이 없습니다.」라고 표시되고 인스톨을 진행할 수 없습니다.
컴포넌트가 네임 서비스에 등록되지 않습니다.
네임 서버, 컴포넌트를 기동 후 RTSystemEditor등으로 네임 서버에 접속했을 때 컴포넌트가 등록되어 있지 않은 경우가 있습니다.이런 경우는
먼저 로그 레벨을 최고로 하기 위해 rtc.conf에
컴포넌트의 로그에
이러한 경우, 이하의 원인을 생각할 수 있습니다.
rtc.conf의 corba.nameservers가 올바르게 설정되어 있지 않다.
컴포넌트가 읽어들인 rtc.conf가 올바르게 설정되어 있는지를 확인해 주십시오. 이용하려고 하는 네임 서버를 openrtm.aist.go.jp라는 호스트 명으로 가정하면 이하의 행이 rtc.conf에 포함되어 있어야 합니다.
또, 네임 서버를 포트 번호를 지정해서 기동한 경우는 포트 번호도 지정할 필요가 있습니다. 네임 서버 기동시에 지정한 포트 번호가 1234번인 경우, 이하와 같이 설정할 필요가 있습니다.
컴포넌트를 기동한 호스트에서 네임 서버를 기동한 호스트에 네트워크 연결이 되지 않습니다.
컴포넌트를 기동한 호스트에서 네임 서버를 기동한 호스트에 네트워크 연결이 되는가 확인해 주십시오.먼저, ping이 도달하는지를 확인합니다. 만약 도달하지 않는다면 네트워크의 설정을 재설정해 주십시오.
ping이 도달해도 방화벽 등으로 연결이 금지되어 있는 가능성이 있습니다. 먼저 네임 서버를 기동한 호스트 측의 방화벽의 설정을 재설정해 주십시오. 가장 간단한 방법은 방화벽을 OFF로 하는 것입니다. 각 OS나 방화벽의 설정방법을 참조해 주십시오.
네트워크 인터페이스가 2개 이상 존재합니다.
호스트에 네트워크 인터페이스가 2개 이상 있는 경우, CORBA에 어느 쪽의 인터페이스를 사용할 것인지를 가르쳐 줄 필요가 있습니다.
이것은 네임 서버 측, 컴포넌트 측 모두 고려해야 합니다.
만약 각각의 호스트가 2개씩 인터페이스를 갖고 있고, 각 인터페이스의 어드레스가 이하와 같이 설정되어 있다고 가정합니다.(mask는 255.255.255.0라고 가정)
네임 서버host: eth0:192.168.0.1, eth1:192.168.100.1
컴포넌트host: eth0:192.168.0.2, eth1:192.168.11.96
이러한 경우 네임 서버host와 컴포넌트 host는 192.168.0의 네트워크에 연결되어 있을 것입니다.
따라서,
네임 서버에는 eth0:192.168.0.1
컴포넌트에는 eth0:192.168.0.2
의 인터페이스를 사요하도록 가르쳐 줄 필요가 있습니다.
네임 서버 측에서는 네임 서버를 기동할 때 OMNIORB_USEHOSTNAME라는 환경변수를 설정할 필요가 있습니다.
직접 rtm-naming (UNIX계) 혹은 rtm-naming.bat (Windows)에 써도 좋을 것입니다.
한편, 컴포넌트 측은 rtc.conf에 corba.endpoint의 설정을 기술하는 것으로 사용하는 인터페이스를 지정할 수 있습니다.
OpenRTM-aist(C++버전)
Windows
어플리케이션 에러「어플리케이션을 정상적으로 초기화하지 못했습니다.…」
OpenRTM-aist(C++버전)에서는 VC8(VS2005)를 베이스로한 것과 VC9(VS2008)를 베이스로 한 것이 있습니다. OpenRTM-aist-X.X.X-jp_vc8.msi(X.X.X은 버전)등의 VC8베이스의 인스톨러를 사용한 경우는 Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x86) 를、OpenRTM-aist-X.X.X-jp_vc9.msi(X.X.X은 버전)등의 VC9베이스의 인스톨러를 사용한 경우에는Microsoft Visual C++ 2008 재배포 가능 패키지 (x86) 를 인스톨해 주십시오.
「이 어플리케이션의 구성이 올바르지 않기 때문에 어플리케이션을 개시할 수 없습니다.…」
OpenRTM-aist(C++버전)에서는 VC8(VS2005)를 베이스로한 것과 VC9(VS2008)를 베이스로 한 것이 있습니다. OpenRTM-aist-X.X.X-jp_vc8.msi(X.X.X은 버전)등의 VC8베이스의 인스톨러를 사용한 경우는 Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x86) 를、OpenRTM-aist-X.X.X-jp_vc9.msi(X.X.X은 버전)등의 VC9베이스의 인스톨러를 사용한 경우에는Microsoft Visual C++ 2008 재배포 가능 패키지 (x86) 를 인스톨해 주십시오.
Visual C++ 2008 Express Edition에서 빌드 시 「'windows.h'르 찾을 수 없습니다.」라는 에러
Visual C++ 2008 Express Edition에서 빌드 시 다음과 같은 에러가 나오는 경우가 있습니다.
1.Microsoft Platform SDK가 인스톨되어 있지 않음
2.include 파일 경로・라이브러리 경로의 설정미비
- 대응방법:
- 인스톨하는 순서 등의 관계로 Visual C++ 2008 Express Edition의 설치 디렉토리와는 다른 장소에 にMicrosoft Platform SDK가 인스톨되는 이유로 인해 Visual C++ 2008 Express Edition의 컴파일러가 Microsoft Platform SDK의 include파일이나 라이브러리를 참조하지 못하는 경우가 있습니다. 이러한 경우는 include 파일 서치 경로나 라이브러리 서치 경로에 Microsoft Platform SDK의 인스톨 디렉토리를 추가하는 것으로 문제를 해결할 수 있습니다.
- include 파일 서치 경로의 추가 방법
- Visual C++ 2008 Express Edition의 메뉴바→「도구」→「옵션」을 선택해, 「옵션」윈도우를 엽니다. 왼쪽 트리뷰에서 「프로젝트 및 솔루션」→「VC++디렉터리」를 선택합니다.
- 라이브러리 서치 파일의 추가방법
- 위와 같은 방법으로「옵션」의 왼쪽 트리뷰에서「VC++디렉터리」를 선택한 상태에서, 우측상단의 풀다운 메뉴「다음 파일의 디렉터리 표시」를 「라이브러리 파일」로 하고 Microsoft Platform SDK의 라이브러리 파일의 디렉토리(예를들어, 「C:\Program Files\Microsoft Platform SDK\Lib」)을 라이브러리 파일의 서치 경로에 추가합니다.
또한 서치 경로의 구체적인 추가 방법 등은 Visual C++ 2008 Express Edition의 도움말 등을 참고해주십시오.오른쪽 상단의 풀다운 메뉴「다음 파일의 디렉터리 표시」를 「포함 파일」로 해서 Microsoft Platform SDK의 include 파일의 디렉토리(예를들어, 「C:\Program Files\Microsoft Platform SDK\Include」)를 include 파일의 서치 경로에 추가합니다.
rtm-naming의 실행에서 에러 발생
증상: rtm-naming.bat을 실행하면 어플리케이션 에러가 발생한다.VC++관련 라이브러리가 인스톨 되어 있지 않을 가능성이 있습니다.
VC++관련 라이브러리가 인스톨 되어 있지 않다.
Visual Studio 2008등의 어플리케이션이 인스톨되어 있지 않은 경우는 여기Visual Studio 2008 Express Edition에서 "Visual C++ 2008 Express Edition"을 다운로드해 인스톨 해주십시오.rtm-naming을 실행할 수 없다.
증상:rtm-naming.bat을 실행해도 검은 창(커맨드 프롬프트 화면)가 순간 열렸다 닫힙니다.[원인]omniORB가 인스톨 되어 있지 않다.
rtm-naming.bat내에서는 통상omniORB의 네임 서버 omniNames.exe를 실행합니ㅏ.omniORB가 인스톨 되어 있지 않으면 omniNames.exe도 인스톨 되지 않기 때문에, 네임 서버를 실행할 수 없습니다.
다운로드 페이지에서 omniORB를 다운로드해서 인스톨 해 주십시오.
[원인]log디렉토리의 경로 중에 2바이트 문자가 포함되어 있다.
rtm-naming.bat내에서는 통상omniORB의 네임 서버 omniNames.exe를 이해와 같이 실행합니다.
통상 환경 변수 %TEMP% 는 유저의 템프 디렉토리
대응방법으로 이하의 3가지 방법을 참고해 주십시오.
경로에 한글을 포함하지 않는 로그 디렉토리는 자신에게 작성할 수 있는 디렉토리로 안전한 위치로 해주십시오. 예를들어 C:\tmp 등.
이 네임 서버에는 omniNames과 같은 한글 경로의 문제는 존재하지 않기 때문에 이것을 사용하는 것으로 유저명이 한글이어도 네임 서버를 기동할 수 있습니다.
Unix
패키지의 자동 인스톨에서 다운로드 에러가 발생한다.
네트워크 접속이 정상인데도 다운로드 에러가 발생할 경우, 회선의 혼잡등으로 다운로드에 실패하는 경우가 있고 다운로드 사이트 측에서 파일의 위치나 이름을 변경했을 가능성도 있습니다. 전자의 경우는 시간대등을 늦추어 다시 자동 인스톨러를 실행해주십시오. 후자의 경우는, 해당하는 패키지를 찾아 각각을 다운로드해 수동 인스톨하던지 자동 인스톨러의 다운로드 원 주소를 수정하고 나서 다시 기동해주십시오
또한, 다운로드 사이트 측의 변경이 있을 경우 변경정보를 저희에게 연락을 해주시면 감사하겠습니다. 협력 부탁드리겠습니다.
configure를 실행했지만 에러가 발생해 종료한다.
make를 실행해도 빌드가 완료되지 않음. 또는 make 실행에러가 발생.
OpenRTM-aist의 인스톨에 실패한다.
이전 버전의 OpenRTM-aist이 완전히 삭제되지 않았을 경우, 새 버전을 인스톨 할 수 없습니다. 이전 버전을 완전히 삭제한 다음 다시 인스톨을 합니다.Vine・Fedora・ubuntu・debian공통:
pkg_install_XXXX.sh 을 이용해 삭제.
Vine:
apt-get명령어로 삭제합니다. 다음의 순서로 삭제해 주십시오.Fedora:
yum명령어로 삭제합니다. 다음의 순서로 삭제해 주십시오.ubuntu/debian:
apt-get명령어로 삭제합니다. 다음의 순서로 삭제해 주십시오.apt-get등을 사용해 인스톨 작업을 했을때 CD가 요구된다.
Ubuntu、Debian등의 디스크리뷰션에서 apt-get이나 pkg_install_ubuntu.sh, pkg_install_debian.sh을 사용해 인스톨 작없을 하고 있으면 다음과 같이 CD를 요구하는 경우가 있습니다. 미디어 변경:
물론, CD를 준비하면 좋겠지만 여러가지 사정에 의해 준비할 수 없는 경우의 처리 방법을 기술합니다.
이런 경우에는 우선, C-c(Ctrl+c)를 입력해 인스톨 작업을 중단하고 이하의 순서로 인스톨 작업을 다시해주십시오.
1./etc/apt/sources.list 을 편집
/etc/apt/sources.list 의 앞부분에
또는,
라는 행이 있기 때문에 해당하는 행앞에 # 문자를 삽입해 주석처리 해주십시오.
또는,
2.인스톨 작업을 다시한다.
방금전 중단 했던 인스톨 작업을 처음부터 다시 해 주십시오.샘플 프로그램의 SimpleIO를 실행하는 run.sh을 실행할 수 없다.
샘플 프로그램 SimpleIO를 기동했지만 정상적으로 움직이지 않는다.
SimpleIO의 실행 스크립트 run.sh에서는 터미널 윈도우를 kterm,xterm,gnome-terminal중 어느 쪽인가에 가정하고 있습니다. 이 때문에, 이외의 터미널 윈도우를 사용하는 경우에는 run.sh을 적절히 고쳐 쓰고 나서 실행해 주십시오.OpenRTM-aist(Python버전)
Windows
rtm-naming.py을 실행하면, omniNames가 "usage:"를 표시하고 종료된다.
증상
rtm-naming.py을 "C:\Documents and Settings\Hoge\My Documents"등 디렉토리 명에 공백이 들어가 있는 디렉토리에서 실행한 경우, omniNames는 "usage:"를 표시하고 종료합니다.대처 방법
이것은 rtm-naming.py의 버그에 의한 것입니다. 위의 증상이 나왔을 경우 아래의 방법으로 대처해 주십시오.python.exe이 기동하지 않는다.
Cygwin을 인스톨하고 있는 환경에서는 python.exe가 복수 존재하는 경우가 있다.
Python2.6+omniORBpy-3.4로 omniORB의 임포트시에 "ImportError: DLL load failed"에러가 발생한다.
「MSVCP71.dll를 찾을 수 없기 때문에, …」라는 에러로 종료된다.
「Can't open file: ./rtc.conf」등이라고 표시된다.
컴포넌트가 네임 서비스에 등록되지 않는다.
이하의 커맨드로 rtc.conf의 확인을 해, CRLF라는 문자열이 표시되었을 경우 새로운 rtc.conf파일을 작성해 주십시오.
OpenRTM-aist(Java버전)
OS공통
Java버전 컴포넌트에 데이터 전송에 시간이 걸린다.
Java버전의 RT컴포넌트와 C++버전 등 다른 언어의 컴포넌트와의 사이에서, 특히 큰 데이터(100kB이상일 경우)를 송수신 하는 경우, 극단적으로 속도의 저하가 일어나는 경우가 있습니다. 이것은 Java의 CORBA측의 문제라는 것으로 알려져 있어 타임 아웃을 적절하게 설정하는 것으로 피할 수 있습니다.Java버전의 RTC가 읽어 들이는 rtc.conf에 이하와 같이 기술하는 것으로 Java의 CORBA의 타임 아웃을 설정합니다.
- CORBA 데이터를 read할 때에 0byte였을 경우 Read Thread 가 정지되는 시간(ms)
- CORBA 데이터의 read시에 Read Thread가 대기하는 누적 최대 시간(ms)
- GIOP의 헤더를 read할 때의 타임 아웃(ms)
- CORBA 데이터를 read할 때에 Read Thread가 정지되었을 경우, 다음 정지 시간을 증가하는 비율(%)
라는 의미로 되어 있습니다. 따라서, 1:60000:300:1 는- read해서 0byte일때, Read Thread를 1ms정지한다.
- Read Thread의 대기 최대 누적 시간은 6000ms
- GIOP의 헤더를 read할 때의 타임 아웃 시간은 300ms
- Read Thread의 정지 시간은 1%씩 증가시킨다.
라는 의미가 됩니다.큰 데이터의 경우, 1회의 read로 데이터를 끝까지 읽을 수 없기 때문에 통상 몇회 read를 실시합니다.
다음 데이터는 빨리는 오지 않으므로 read는 읽어들인 바이트 수를 0byte로 돌아가지만, 통상 1ms이내에는 다음의 데이터가 옵니다. 디폴트의 설정이라면 Read Thread가 100ms 대기하지만 그렇게 장시간 기다릴 필요는 없고 1ms정도 기다리면, 곧 다음 데이터를 읽어들일 수 있습니다.
디폴트 설정의 경우, 100ms 기다리고 한번 더 읽어들이는 read가 0을 돌려주므로, 더 한층 100ms+20%의 120ms 대기합니다. 데이터가 너무 클 경우, 이것을 12회 반복하면 최대 누적 시간의 3000ms에 이르러 버리기 때문에 타임 아웃 하고, 데이터가 작아도 데이터의 분할수×100ms의 시간이 걸리기 때문에 매우 늦어집니다.
Java의 CORBA에서는 데이터를 100kB로 분할하기 때문에 이것을 넘는 데이터를 교환할 때, 위의 설정을 rtc.conf에 해두는 편이 좋습니다.
Windows
「java -version」가 인스톨 한 JDK 버전과 다르다.
Unix
FedoraCore에서 Java를 인스톨한 경우의 대응
에러가 발생한 경우는 먼저, Sun Microsystems의 Java가 사용되고 있는지를 확인해 주십시오.