よくある質問

RTミドルウェア / OpenRTM-aist について


RTミドルウエアとは

単体のロボットだけでなく、利用可能な様々なロボット機能要素を指して RT (Robot Technology/Robotic Technology) と呼びます。 RTミドルウエアとは、こうした様々な機能要素をモジュール化し、ソフトウエア的に統合するためのプラットフォームです。 RTミドルウエアの目的は、仕様をオープンにして様々な実装同士が相互接続できるようなオープンアーキテクチャのプラットフォームを確立することです。 従って、RTミドルウエアはこうしたプラットフォーム全体を指す言葉です。

RTコンポーネントとは

RTミドルウエアにおいては、ロボット機能要素は RTコンポーネントと呼ばれるソフトウエアコンポーネントとしてモジュール化され、ロボットは RTミドルウエア上で RTコンポーネント組み合わせることで実現されます。 RTコンポーネントは、他のコンポーネントと通信・相互作用を行うデータポート・サービスポートを備えており、これらのインターフェース仕様を共通化することで、様々なコンポーネント同士を容易に結合することができます。 また、RTコンポーネントは共通の内部状態及び状態遷移を持ち、上位のアプリケーションプログラムは多くのコンポーネントを統一的に扱うことができるようになっています。 さらに、内部パラメーター設定を外部から操作できる標準インターフェースを持つため、再コンパイルすることなく様々な用途で再利用することができます。

OpenRTM-aistとは

OpenRTM-aist は、産総研が実装・配布している RTミドルウエアの実装の一つです。 RTコンポーネントを作成するための RTコンポーネントフレームワーク、RTコンポーネントのライフサイクルの管理・運用を行う RTミドルウエア、さらにコンポーネントの雛形コードを作成するための RTCBuilder、RTコンポーネントを操作・接続するための GUIツール RTSystemEditor から構成されています。 現在、産総研からは C++、Python 及び Java に対する実装が提供されています。

対応言語は?

OpenRTM-aist は C++、Python 及び Java 言語で RTコンポーネントを開発するためのフレームワークを提供しています。

対応OSは?

OpenRTM-aist は現在、FreeBSD、Linux 及び Windows で動作確認をしています。

ライセンスは?

OpenRTM-aist は、LGPL(GNU Lesser General Public License) および産総研と個別に契約するライセンスのデュアルライセンス方式で提供されています。 個別ライセンスとは、OpenRTM-aist のソースコードを改変し商用利用したい場合、ソースをクローズにしたまま配布可能にするためのライセンスです。 特に、組込み等の用途では通常ソースの改変が必要とされますので、企業等での利用を促進するためにこうしたライセンスが用意されています。

作成したコンポーネントのライセンスは?

コンポーネントは動的リンク可能なライブラリ(UNIX では Shared Object、Windows では DLL (Dynamic Link Library)と呼ばれる)として作成し配布することができますので、OpenRTM-aist のコアライブラリと動的リンクし利用されるコンポーネントは LGPLライセンスのもとでは特に制約を受けません。 作成者が個別にライセンスを設定することができます。 ただし、コンポーネントの再利用を促進するという我々の趣旨に賛同いただける方は、ソースコードレベルで作成したコンポーネントをオープンにしていただければ幸いです。

一般・ライセンスに関する FAQ

OpenRTM の利用について

RTミドルウエアと OpenRTM-aist の違いは?

RTミドルウエアとは、Robot Technology (ロボット技術(要素)用の) ミドルウエアという意味です。これは、産総研だけのものではなく、広く一般にロボット用のミドルウエアを指す言葉です。従って、ROS や OROCOS、OPRoS など他のロボット用のプラットフォーム・ミドルウエアも広い意味で RTミドルウエアと呼ぶことができます。 しかし一方で、一般的にはOMG の RTC 標準仕様 を実装したものを RTミドルウエアと呼ぶことが多いと思います。

産総研がオープンソースで開発・配布している RTミドルウエアは固有名詞として OpenRTM-aist と呼ばれます。このほかに、OMG RTC 標準準拠の RTミドルウエアには、株式会社セックの OpenRTM.NET、RT-Middleware on Android、本田技術研究所の RTミドルウエアなど互換性を持ついくつかの実装があります。

OpenRTM-aist を使うにはお金がいるの?

OpenRTM-aist は、LGPLライセンスでソースコードを公開している、いわゆるオープンソースソフトウエアです。 使用するためにお金は一切必要ありません。

詳しくは下の「ライセンス」に関するFAQをご参照ください。

OpenRTM-aist を使うには産総研に申請する必要があるの?

OpenRTM-aist は、LGPLのオープンソースプロダクトですので、使用するにあたって産総研の許可を取る必要はまったくありません。 ご自由にダウンロード、使用していただいて構いません。 また LGPLライセンスに従う限り、製品に組み込んで販売することも自由です。産総研の許可を取る必要はありません。 ただし、もし製品にご使用に使用されたい場合は、メーリングリストやWebページのコンタクトフォームなどへお知らせいただけるとありがたいです。

サポートは提供されるの?保証はあるの?

OpenRTM-aist は、無保証のオープンソースプロダクトです。OpenRTM-aist は As-Is の状態で提供され、産総研およびその開発者はその使用または性能に関していかなる保証も行いません。 また、OpenRTM-aist を使用することにより得られる成果または結果を保証せず、また産総研および開発者はバグやその他不具合などを修正する義務を負いません。 これは、オープンソースソフトウエアに限らず一般的なソフトウエアの使用許諾に記載されている無保証に関する条項と同等のものです。

しかし、産総研ではユーザー間の情報共有のために、

を設け、そこに投稿された質問等を通じて疑問等にはできるだけお答えするよう努力しております。 さらに、講習会、サマーキャンプ、コンテストなどを開催し、RTコンポーネント開発・システム開発技能の習得を促進しており、その場を通じて疑問やフィードバックに対して可能な限りこたえる努力を行っています。

詳しくは「コミュニティについて」をご参照ください。

ライセンス等

OpenRTM-aist のライセンスはなんですか?

OpenRTM-aist (C++, Python, Java)版は LGPL (GNU Lesser General Public License)と、産総研との個別契約可能なデュアルライセンス方式を採用しています。 ツール (RTCBUilder, RTSystemEditor)は EPL (Eclipse Public License) と、産総研との個別契約可能なデュアルライセンス方式を採用しています。

デュアルライセンスとはなんですか?

1つのソフトウェアを異なる2種類(またはそれ以上)のライセンスの元で配布する方法をデュアルライセンス方式と呼びます。 ソフトウェアがデュアルライセンスで配布される場合、その利用者はそのソフトウェアを利用または再配布するためにいずれかのライセンスを選ぶことができます。詳細はWikipedia等をご覧ください。

なぜデュアルライセンスなのですか?

我々は OpenRTM-aist および RTミドルウエア・RTコンポーネントという考え方を広めたいと考えており、そのためにオープンソースでソフトウエアを配布しています。 一方で、我々産総研は実際に RTミドルウエアを利用してロボットなどの実用化・事業化したいと考えている企業を支援するミッションも負っております。 その際、オープンソースライセンスのみで配布していると、企業にとって不都合ないくつかの制約があるため、オープンソースとは別の個別契約も可能なデュアルライセンス方式を採用しています。

どういう場合個別契約が必要なのですか?

例えば、「OpenRTM-aist 本体を改変してシステムに組み込みたいが、改変した部分は公開したくない」という場合、LGPLライセンスで OpenRTM-aist を利用することはできないので、産総研と個別に契約していただく必要があります。 その際、若干の実施料をいただくことになりますが、RTミドルウエアを推進している立場上、法外な値段の実施料をいただくことは決してありませんのでご安心ください。

OpenRTM-aist とツールのライセンスが異なるのはなぜですか?

OpenRTM-aist は、LGPL、ツールは EPL を採用しています。LGPL と EPL には特許条項とGPLライセンスのライブラリと混ぜて使えるか、など違いがあります。

EPL には特許条項があり、ソフトウエアのコントリビューターが持つ特許が当該ソフトウエアに影響しない(使用者には使用料無料の特許ライセンスが付与される)ため使用者にとってはより安全なライセンスとなっていますが、GPL とは非互換のため混ぜて使うことはできません。 したがって、EPL ライセンスの Eclipse ではプラグイン(RTCBuilder、RTSystemEditorなどもプラグインです)も EPL とすることが通例となっています。(例外条項を付加すればプラグインに GPL を適用可能ではありますが。)

一方、OpenRTM-aist を利用して C++ や Python で RTコンポーネントを作成する場合、GPL ライセンスのライブラリなどとリンクすることは容易に起こりえます。したがって、OpenRTM-aist 自体を EPL にするとこうした GPL ライブラリとのリンクが事実上できなくなるため、GPL と互換性のある LGPL を採用しています。

コミュニティについて

OpenRTM-aist コミュニティに参加するには?

OpenRTM-aist のコミィニティに参加することで、OpenRTM-aist を使う上で必要な情報を得たり、他のユーザーと情報交換することができます。 方法としては以下にあげるいくつかの方法があります。

  • メーリングリストに参加する
  • フォーラムに参加する
  • Faebookに参加する
  • 講習会に参加する
  • サマーキャンプに参加する
  • 作った RTコンポーネントを公開する
  • RTミドルウエアコンテストに参加する
  • 学会などで発表する

詳細は以下のFAQをご覧ください。

メーリングリストに参加するには?

コミュニティに参加する一番簡単な方法はメーリングリストに参加することです。 OpenRTM-aist および RTミドルウエア全般の話題を議論するためのメーリングリストがあります。OpenRTM-aist がインストールができない、コンポーネントがうまくつながらないなど、困りごとを相談する場であり、講習会、イベントなどの情報を発信する場ともなっています。

加入は非常に簡単でこちらのページに必要事項を送信の上、自動送信されたメール内のリンクをクリックすれば完了です。

フォーラムに参加するには?

フォーラムとは、Webページ上に設けられた掲示板です。OpenRTM.org にはフォーラムが設置されています。

このフォーラムはメーリングリストと連動しています。メーリングリストの内容が自動でフォーラムにも投稿され、逆にフォーラムに投稿された内容はメーリングリストにも投稿されます。

Facebook に参加するには?

OpenRTM-aist に関する情報は Facebook でも発信しています。1週間に1,2回程度の頻度で、RTミドルウエアに関するお知らせを掲示いたしますので、Facebook をご利用の方であれば、タイムラインにお知らせが表示されます。 また、RTミドルウエアに関する話題がユーザーの皆様から提供されることもあります。

Facebook をご利用の方は、下記ページにアクセスしていただき「いいね」を押していただくか、

下記、OpenRTM-aist の Webページにアクセスしていただき、右上の「いいね」ボタンを押していただければ、登録完了となります。

講習会に参加するには?

産総研では定期または非定期で RTミドルウエアの講習会を開催しています。

通常、機械学会・ロボティクスメカトロニクス講演会のチュートリアルとして RTミドルウエア講習会を開催しております。 また、イベントや依頼によって非定期に開催されることもあります。その際は、http://openrtm.org の NEWS や Facebook、およびメーリングリストで開催のご案内を流します。

サマーキャンプに参加するには?

産総研では毎年夏に RTミドルウエアサマーキャンプという合宿形式の講習会を開催しております。 サマーキャンプでは通常月曜日から金曜日まで、産総研の宿泊施設(さくら館)に宿泊していただき座学、実習、成果発表といった内容で参加者に RTミドルウエアを用いたロボットシステム構築を学習してもらいます。

参加資格は少なくとも上記講習会を1回以上受講した人となっており、より実践的なシステム構築を学ぶことを主眼とした講習会となっています。

プロジェクトページって何?

プロジェクトページとは、openrtm.org に設置されている RTコンポーネントの公開サイトです。誰でも自分の作った RTコンポーネントを公開できます。 また、自分が必要なコンポーネントはここから探してダウンロードすることもできます。

プロジェクトページに自分のコンポーネントを登録するにはユーザー権限の昇格が必要です。 詳しくは

をご覧ください。

RTミドルウエアコンテストに参加するには?

毎年12月に行われる計測自動制御学会・システムインテグレーション部門の講演会において、RTミドルウエアコンテストを開催しています。 コンテストは講演会のオーガナイズドセッションとして開催されますが、参加者は講演会に投稿する論文の他に、RTミドルウエアを使用した何らかのソフトウエア作品を予め OpenRTM の Webページに登録し、審査委員、有志の一般審査委員から評価を受けます。 講演会での最終的なプレゼンテーションを行った後、審査委員会を開き各種賞を授与します。

RTミドルウエアコンテストの特徴として、その賞の多さがあります。個人または企業が協賛賞として一口1万~2万円をだし、賞を設立することができます。 各賞は協賛した個人または企業が独自の基準で受賞作品を選ぶことができます。最も優秀な作品は審査委員会で決定され、計測自動制御学会・システムインテグレーション部会から最優秀賞が授与されます。

学会等で発表するには?

機械学会・ロボティクスメカトロニクス講演会(ROBOMECH)、ロボット学会学術講演会、計測自動制御学会・システムインテグレーション部門講演会でオーガナイズドセッション、「RTシステムとオープン化」「RTミドルウエアとオープン化」を毎年開催しています。 RTミドルウエアや他のロボットミドルウエアを用いてシステム構築した例、ソフトウエアを構築する上での問題点などを議論するためのオーガナイズドセッションです。 ロボットのソフトウエアに興味がある学生さんにはぜひ発表していただきたいと考えています。 OS 開催の案内も、Webページ、Facebook、メーリングリストにてご案内しています。

インストールに関する FAQ


Windows


WindowsでPythonをインストールしてもバージョン番号が表示されない

OpenRTM-aistがサポートしているPythonバージョンをインストールし、その際Pythonのパスを通したのに、コマンドプロンプトで確認するとバージョン番号が表示されないことがあります。

 >python --version
 Python

原因:
  • 先にMicrosoft Store 等からダウンロードされたものがインストールされている可能性があります
  • where pythonコマンドでインストール先を確認してください
     >where python
対処方法:
  • Pythonのアプリ実行エイリアスを確認し、オンになっていたらオフに変更してWindowsを再起動して下さい
  • Windowsの設定 → アプリと機能 → アプリ実行エイリアスで、「pytnon.exe」と「python3.exe」をオフにする

再起動後にコマンドプロンプトでPythonのバージョン番号が表示されることを確認して下さい。 Pythonインストール時のパスを通す手順は、下記ページの解説をご覧ください。
OpenRTM-aistを10分で始めよう!・Pythonのインストール




Windows Defenderからの警告が出る

ネームサーバやサンプルコンポーネントを起動しようとすると、Windows Defenderのファイアウォールにより[Windows セキュリティの重要な警告]ダイアログが表示されることがあります。

対処方法: [プライベート ネットワーク(ホームネットワークや社内ネットワークなど)(R)]にチェックを入れ[パブリックネットワーク(空港、喫茶店など)(非推奨)(U)]のチェックをはずしてアクセスを許可する(A)]をクリックしてください。


Windows10 へ OpenRTM-aist 1.1.2版をインストールしたが、PATH に追加されていない

原因:
  • Windows10 のみでの現象の可能性があります。
  • PATH の設定が長いと長さ制限のために切り捨てられる可能性があります。
対処方法: インストール後にPCを再起動してください。


Windows10 で omniORB の PATH設定が展開されていない

Windows10 で setコマンドを確認したところ、omniORBの PATH設定 %OMNI_ROOT% の変数部分が展開されていなかった。

原因:
  • Windows10 のみでの現象の可能性があります。
  • PATH が展開されていない可能性があります。
対処方法: インストール後にPCを再起動してください。


Eclipse が起動できない

JRE がインストールされていない可能性がありますので、対応バージョンの JRE をインストールしてください。


UNIX


パッケージの自動インストールでダウンロードエラーが表示される

OpenRTM-aist に付属する自動インストーラーは、パッケージの有無とバージョンを確認し、適当なパッケージがインストールされていない場合に各パッケージのダウンロードサイトからダウンロード及び加工するものです。 このため、自動インストーラーでインストールする場合には、コンピューターを必ずインターネットに接続してください。
ネットワーク接続が正常でもダウンロードエラーが出る場合、回線の混雑等でウンロードに失敗した場合と、ダウンロードサイト側でファイルの場所や名前が変わった可能性が考えられます。 前者の場合は時間帯等をずらして再度自動インストーラーを実行してみてください。また後者の場合には、該当するパッケージを探してから個々にダウンロードして手動インストールするか、自動インストーラーのダウンロード元アドレスを修正してから改めて起動してください。



OpenRTM-aist のインストールに失敗する

古いバージョンの OpenRTM-aist が完全にアンインストールされていない場合、新しいバージョンのインストールができません。古いバージョンを一度アンインストールしてから、再度インストール作業をします。

Fedora・Ubuntu・Debian 共通:

pkg_install_XXXX.sh を利用してアンインストールする。

 >su
 #pkg_install_XXXX.sh -u

アンインストールの許可を求められるので、「y」 を入力しながら完了させます。 あるいは次の手順に従います。

Fedora:

yumコマンドでアンインストールする。次の手順でアンインストールを行ってください。
 >su
 #yum remove OpenRTM-aist-example
 #yum remove OpenRTM-aist-dev
 #yum remove OpenRTM-aist-doc
 #yum remove OpenRTM-aist

Ubuntu / Debian:

apt-getコマンドでアンインストールする。次の手順でアンインストールを行ってください。
 >su
 #apt-get remove OpenRTM-aist-example
 #apt-get remove OpenRTM-aist-dev
 #apt-get remove OpenRTM-aist-doc
 #apt-get remove OpenRTM-aist



apt-get などを使用してインストール作業を行うときに CD を要求される

Ubuntu、Debian などのディストリビューションで、apt-get や pkg_install_ubuntu.sh, pkg_install_debian.sh を使用してインストール作業をしていると、次のように CD を求められることがあります。 メディア変更:

   'Ubuntu 7.10 _Gutsy Gibbon_ Japanese Remix - Release i386 (20071018)'

とラベルの付いたディスクをドライブ '/cdrom/' に入れて Enter を押してください。
もちろん、CD を用意すればよいことなのですが、諸事情により用意できない場合の対処方法を記述します。
この場合はとりあえず、C-c(Ctrl+c) を入力してインストール作業を中断し、以下の手順でインストール作業をやり直してください。

1. /etc/apt/sources.list の編集をする

/etc/apt/sources.list の冒頭部分に

 deb cdrom:[Ubuntu 7.10 _Gutsy Gibbon_ Japanese Remix - Release i386 (20071018)]/ gutsy main restricted

あるいは

 deb cdrom:[Debian GNU/Linux 4.0 r3 _Etch_ - Official i386 NETINST Binary-1 20080218-14:15]/ etch contrib main

というような行がありますので、該当する行頭に # 文字を挿入し、コメントアウトしてください。

 #deb cdrom:[Ubuntu 7.10 _Gutsy Gibbon_ Japanese Remix - Release i386 (20071018)]/ gutsy main restricted

または、

 #deb cdrom:[Debian GNU/Linux 4.0 r3 _Etch_ - Official i386 NETINST Binary-1 20080218-14:15]/ etch contrib main

2. インストール作業をやり直す
先ほど中断したインストール作業を始めからやり直してください。

RTコンポーネント作成に関する FAQ


サービスポートを持つ RTC を Eclipse でビルドするとエラーが表示される

RTCBuilder でサービスポートを持つ RTC を生成した場合、Eclipse のビルドで以下のような「***POA を型に解決できません」エラーが表示されます。

Error_POA.png

原因: idl コンパイルは、サービスポートで使用する idlファイルから javaファイル(スタブソース、スケルトンソース、各種ユーティリティソース)を生成します。 idl コンパイルが実行される前にビルドが実行されると、ビルドに必要なこれらのソースファイル(javaファイル)が見つからずエラーになります。

対処方法: Eclipse のパッケージエクスプローラから「build_JavaRTCTest.xml」を右クリックして [実行] > [antビルド] 実行してください。 これにより、idl コンパイルが実行され、javaファイルが生成されます。 「build_JavaRTCTest.xml」実行後に、[F5] キーなどでプロジェクトを更新すると、エラー表示が消えます。


RTC がシステムエディタ上に表示されない

ネットワークの切り替え時に発生する現象で、NameService と RTC を再起動することで表示されるようになります。


データポートで約2MB以上のデータを送りたい

画像データなどをデータポートで送る際、1回に送られるデータサイズ約2MBを超える場合には注意が必要です。
omniORBでは、giop (General Inter-ORB Protocol)で扱えるサイズはデフォルトで"2097152B(2MB)"となっています。 このサイズを超えるデータを1回で送ろうとすると、giop の制限のため正しいデータを送ることができません。

この最大サイズを変更するためには、下記の2つの方法があります。

  • rtc.conf にて最大サイズを指定する場合
     # file: rtc.conf
     corba.nameservers: localhost
     naming.formats: %n.rtc
     corba.args: -ORBgiopMaxMsgSize 3145728 ※この行を追加 (Maxサイズを3Mに指定)

  • 環境変数にて指定する場合
      export ORBgiopMaxMsgSize=3145728
    ※ giopMaxMsgSize を指定する場合、server、client 共に (対になるコンポーネント) 設定する必要があります。
    (omniORB configuration and API)
    http://omniorb.sourceforge.net/omni41/omniORB/omniORB004.html


Raspberry Pi との接続時に、IPアドレスが割り当てられない

Raspberry Pi を再起動してください。


Raspberry Pi 上のデータポートと PC上のデータポートを接続すると接続エラーになる

Raspberry Pi が起動する前に PC側の NameService を立ち上げていたためと思われます。再度、NameService を立ち上げ直してください。


Raspberry Pi に接続した場合に RTC と通信できなくなる

ウイルス対策ソフトの影響の可能性があります。WiFi 設定を WPA2 に変更してください。


Raspberry Pi 側のサービスに ConsoleOut が表示されない

ネームサーバの問題
ネームサーバのエンドポイントアドレスが不正な場合このような現象が起きます。rtm-naming で再度ネームサーバを起動しなおすと解決する場合があります。

このほか、Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合、PCとの接続に使用するどちらかのネットワークのみを使うように設定することで解決するケースもあります。

コンポーネントの問題
コンポーネントが読み込んだ設定ファイル(rtc.conf)に localhost 以外のネームサーバが登録されている場合が考えられます。corba.nameservers: localhost と記述するなど localhost のネームサーバにコンポーネントを登録するよう設定してください。
また、Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合、PCとの接続に使用するどちらかのネットワークのみを使うように設定することで解決するケースもあります。


PCにネットワークインターフェースが2つ以上ある場合、RTSystemEditor で接続できない、反応しなくなるなどの問題がある

PC側のコンポーネントの問題
PCにネットワークインターフェースが2つ以上ある場合、Raspberry Pi で使用しない側のインターフェースアドレスがコンポーネントの参照として利用されている場合このような現象が起こります。

エンドポイントを設定するため、rtc.conf に使用する方の IPアドレスを以下のように設定します。

 corba.endpoints: 192.168.11.20

ただし、Vista 以降の Windows では、C:\Program Files 以下のファイルは簡単には編集ができなくなっています。c:\tmp など適当なディレクトリーに ConsoleIn.exe と rtc.conf をコピー(あるいは新たに作成)するなどして、対処してください。

Raspberry Pi側のコンポーネントの問題
Raspberry Pi の有線LANと無線LAN等2つ以上のネットワークインターフェースがある場合で、それぞれが別のネットワークにつながっている場合、上述のPCと同様の問題が起こります。エンドポイントを設定するため、rtc.conf に以下のように記載します。
 corba.endpoints: 192.168.11.21



RTコンポーネントのインスタンス命名規則について

RTコンポーネントのインスタンス命名規則は、[RTコンポーネント type名] + [数字 (0、1、2、3...)] のようになっています。

RTコンポーネント type名は、rtc-template で --type-name オプションで指定した名前、もしくは、コンポーネントプロファイル (通常は *.cppファイルの先頭に記述) "type_name" に指定されている名前です。 番号は、同一マネージャ上で生成されたコンポーネントに対して、0、1、2、3...のような連番を振ります。

同一のコンポーネントが別プロセスで複数起動された場合には、インスタンスの番号はそれぞれ 0 から始まるので、同一の名前のコンポーネントが複数起動されたことになります。 場合によっては、ネームサービスに同一の名前として複数のコンポーネントが登録されることになり、前に登録されたものは後で登録されたもので上書きされます。

これを回避するには、以下の方法があります。
  • 同一プロセスで複数のコンポーネントを起動させる
  • rtc.conf の naming.formats オプションでそれぞれ衝突しない名前フォーマットを指定する


標準以外のデータ型を InPort / OutPort で使うには

通常 OpenRTM-aist では rtm/idl/BasicDataType.idl で定義されている

TimedShort、TimedLong、TimedUShort、TimedULong、TimedFloat、TimedDouble、TimedChar
TimedBooleanTimedOctet、TimedString、TimedShortSeq、TimedLongSeq、TimedUShortSeq
TimedULongSeq、TimedFloatSeq、TimedDoubleSeq、TimedCharSeq、TimedBooleanSeq
TimedOctetSeq、TimedStringSeq

の20種類のデータ型を InPort および OutPort のデータ型として使用することができます。

これ以外のデータ型を定義し InPort / OutPort で使用したい場合は、そのデータ型を IDL で定義し、コンポーネントをコンパイルするときに同時にコンパイル・リンクする必要があります。

仮に画像を格納するため、サイズ(width, height)、デプス、イメージデータ、各メンバを持つデータ型を使用したいとします。IDL ではこのデータ型を以下のように定義します。

 #include <BasicDataType.idl>
 module RTC
 {
   struct TimedImage
   {
     Time tm;
     long width;
     long height;
     long depth;
     sequence<octet> data;
   };
 };
Time型は OpenRTM で定義されているタイムスタンプのための型です。無くても構いませんが、含めておいたほうが良いでしょう。 これを TimedImage.idl として、ファイルに保存します。

このファイルをコンポーネントを作成するディレクトリーにおきます。 次に、rtc-template でコンポーネントを作成します。その際、この IDL ファイルを --consumer-idl オプションに指定します。
 rtc-template -bcxx
   --module-name=ConsoleIn --module-type='DataFlowComponent'
   --module-desc='Console input component'
   --module-version=1.0 --module-vendor='Noriaki Ando, AIST'
   --module-category=example
   --module-comp-type=DataFlowComponent --module-act-type=SPORADIC
   --module-max-inst=10 --outport=out:TimedImage
   --consumer-idl=TimedImage.idl

この例では、TimedImage.idl で定義した TimedImage型を OutPort のデータ型として用いています。生成されたコードをコンパイルします。
 make -f Makefile.ConsoleIn
これで、TimedImage.idl が IDL コンパイラでコンパイルされ、スタブが生成されると共に、コンポーネントにリンクされます。 コンポーネント内でのデータの使用方法は通常のものと同じです。 これと同じデータ型を他のコンポーネントでも使用したい場合は、この IDL ファイルだけコピーして、同様に rtc-template の --consumer-idl オプションでファイルを指定してください。 これで、このデータ型を用いてコンポーネント間で通信できるようになります。



新規 Java プロジェクトが JDK6(1.6)準拠として作成できない

新規プロジェクトで Java プロジェクトを作成しようとすると、次のようなダイアログが表示されて、JDK準拠が選択できないことがあります。
RTCBuilder を利用し、Java で RTコンポーネント作成するプロジェクトでは、このダイアログにおいて指定する JRE(Java実行環境)を JDK 内に含まれている JRE とする必要があります。このままでは JDK内の JRE を選択できないため設定を変更します。

1. 下図のように JRE フレーム内の「JREを構成...」リンクをクリックします。(あるいは、一旦このダイアログをキャンセルして Eclipse のメニューバーの[ウィンドウ] > [設定] > 「設定」ダイアログの左のツリー部分から「Java」の下の「インストール済みのJRE」を選択します。)

new_project_name_ja.png
新規Javaプロジェクトのダイアログ(JDKの選択がない場合)


2. [追加] ボタンをクリックします。

new_JRE_setting_ja.png
インストール済みのJREのダイアログ(JDKの表示はまだない)


3.「標準VM」 を選択して [次へ] ボタンをクリックします。

new_JRE_VM_setting_ja.png
JREの型の選択のダイアログ


4. [ディレクトリー] ボタンをクリックして、JDK6 までのパスを選択します。(参考:通常、JDK6 のパスはC:\Program Files\Java\jdk1.6.0_XX)

add_JRE_ja.png
JRE の追加ダイアログ


select_JDK_ja.png
JDK6 までのパスを選択し、「JRE の追加」ダイアログに JDK を参照させる


5. JDK までのパスの参照に成功すると、「JRE の追加」ダイアログが下図のようになりますので、[完了] ボタンをクリックしてダイアログを閉じます。

load_JDK_ja.png
JDK6 のパス参照に成功


6.「インストール済みの JRE」ダイアログに戻ってくるので(JDK が追加された状態で)、下図のようにアクティブとする JRE にチェックを入れ、[OK] ボタンをクリックします。

set_active_JDK_ja.png
「インストール済みの JRE」ダイアログに JDK が追加されているので、アクティブチェックを JDK に変更


7.「新規 Java プロジェクト」のダイアログで JDK が選択できるようになります。

SelectJDKasJRE_ja.png
「JRE」としてJDK内の JRE で構成するように指定する



任意のフォルダーにクラスパスを設定して Ant ビルドを行う方法は?

環境変数 RTM_JAVA_ROOT に OpenRTM-aist (Java版)ライブラリ「OpenRTM-aist-X.X.X.jar」(X.X.Xはバージョンです。)が存在するフォルダー「jar」へのベースパス(親フォルダまでのパス)を設定し、それをクラスパスの設定に用いることで、OpenRTM-aist (Java版)は RTCBuilder でのコード生成と Ant でのビルド実行の連携を築いています。したがって、RTM_JAVA_ROOT は OpenRTM-aist (Java版) のライブラリフォルダーへのパス(ベースパス)を必ず保持していなければならないわけです。ところが、RTM_JAVA_ROOT は本来、OpenRTM-aist (Java版) のインストール場所を指すものなので、結果 OpenRTM-aist (Java版) のライブラリと他のコンポーネント(ドキュメント・サンプル・ユーティリティツール類)は常にそのフォルダー構造を保っていなければなりません。

環境変数 RTM_JAVA_ROOT をクラスパス設定専用に使う方法も考えられます。OpenRTM-aist (Java版)のライブラリフォルダーを自由な位置に配置し、それに合わせて RTM_JAVA_ROOT 設定するという使い方もできるでしょう。ただし、この場合は、「環境変数 RTM_JAVA_ROOTをライブラリへのクラスパスの用途以外には使用していない」という保証が必要です。

そこで、何らかの事情で RTM_JAVA_ROOT が指示しているところとは別のところにクラスパスを設定したい場合、クラスパスをどのように設定したらよいのかをここで説明します。

  • Eclipse の Ant 設定ダイアログを呼び出す
    Eclipse の通常左のビュー「パッケージ・エクスプローラー」から build_<CompName>.xml を右クリックして、[実行] > [Antビルド...] を選択する。

    Call_Ant_Setting_ja.png
    Ant設定ダイアログを呼び出す

  • クラスパスの設定
    1. Ant の設定ダイアログが表示されるので、「クラスパス」タブを選択する。

    Ant_Setting_Classpath_ja.png
    「クラスパス」タグを選択する


2.「ユーザーエントリ」を一度選択し、その後「外部 JAR の追加」ボタンをクリックする。

Ant_External_Jar_ja.png
外部JARの追加


3.「JAR の選択」ダイアログが現れたら、目的の JAR ライブラリまでのパスを指定する。結果、下図のように追加した JAR ライブラリが Ant の設定ダイアログに表示される。

Ant_Add_Jar_ja.png
追加された JAR


重要な留意点
環境変数 RTM_JAVA_ROOT は必ず設定しなければなりません(ただし、ダミーでも可)。クラスパスを任意に指定することで、たとえ RTM_JAVA_ROOT の設定が不要となったとしても、その設定削除をしたり、設定そのものをしなかったりするとビルド時にエラーとなります。また、RTM_JAVA_ROOT が指し示すパスの先には(空でもいいので)必ず「jar」という名前のフォルダーが実在していなければなりません。


Java で Ant を使ってコマンドラインからビルドするときに例外が表示される

Java で Ant を実行すると以下のような例外が表示される場合があります。

 >ant -f build_ModuleName.xml
 Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/to
 ols/ant/launch/Launcher : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

原因:Java のバージョンが古い可能性があります。
Java と Ant のバージョン要件は以下のリンクを参照してください。必要に応じてアップデートを実行してください。

Java と Ant のバージョン要件

OpenRTM-aist (C++版) に関する FAQ

Windows


CMakeに失敗する

原因1:アーキテクチャを合わせていない可能性があります。

OpenRTM は 32bit をインストールしているのに、CMake でコンパイラを 64bit に指定しているなど、アーキテクチャを合わせていない可能性があります。 アーキテクチャを合わせてから実行する必要があります。


原因2:CMake のバージョンが古い可能性があります。
OpenRTM で対応している CMake および VisualStudio のバージョンをインストールして実行してください。


ネームサーバーのコンソール画面が開かない

原因1:omniORB がインストールされていない

openrtm.org が提供する msi インストーラーには omniORB が含まれていますが、手動でインストールした場合には、omniORB が入っていない場合も考えられますので、omniORB がインストールされているか確認してください。


原因2:環境変数 OMNI_ROOT が設定されていない

「Start Naming Service」は %RTM_ROOT%\bin\rtm-naming.bat にあるバッチファイルからネームサーバー (omniNames.exe) を起動します。 この際、omniNames.exe を参照するために環境変数 OMNI_NAMES を利用しています。 通常インストーラーで OpenRTM-aist をインストールした場合には、OMNI_ROOT 環境変数が自動で設定されますが、何らかの理由で環境変数が無効になったり、手動でインストールした場合は、環境変数が設定されていないことがあります。

環境変数 OMNI_ROOT が設定されていることを確認してください
環境変数は、
  • [コントロールパネル] > [システム] > [詳細設定]タブ > [環境変数]
  • [マイコンピューター] を右クリック、[プロパティ] > [詳細設定] タブ > [環境変数] などから参照・編集することができます。
原因3:ユーザー名が2バイト文字の場合、ログを出力するフォルダーを適切に設定できずに omniNames.exe の起動に失敗している

環境変数 TEMP を2バイト文字を含まない場所に設定することで改善する場合があります。 適当なテンポラリフォルダー (以下のケースでは C:\temp) を作成し、そこを環境変数 TEMP が指すように、rtm-naming.bat の先頭部分で以下のように設定します。

 set cosnames="omninames"
 set orb="omniORB"
 set port=%1
 rem set OMNIORB_USEHOSTNAME=localhost
 set PATH=%PATH%;%OMNI_ROOT%\bin\x86_win32
 set TEMP=C:\temp

また、稀なケースですが、ホスト名やアドレスの設定の問題で、起動できないことがあります。 その場合、利用している PC の IPアドレス を omniNames.exe に設定する必要があります。 環境変数 OMNIORB_USEHOSTNAME を以下のように設定します (以下は自ホストの IPアドレスが 192.168.0.11 の場合の例)。

 set cosnames="omninames"
 set orb="omniORB"
 set port=%1
 set OMNIORB_USEHOSTNAME=192.168.0.11
 set PATH=%PATH%;%OMNI_ROOT%\bin\x86_win32



サンプルコンポーネントが起動しない

rtc.conf の設定に問題があります。rtc.conf の設定を以下のように設定し直して確認してください。
 corba.nameservers: localhost
例えば、corba.endpoint/corba.endpoints などの設定が現在実行中の PC のホストアドレスとミスマッチを起こしている場合は、CORBA が異常終了します。


サンプルコンポーネントを起動させると、ランタイムエラーで終了する

ライブラリー等が適切にインストールされていない、設定されていない等の原因でラインタイムエラーが表示される場合があります。 PCを再起動する または OpenRTM-aist をすべてアンインストールし、再インストールすることで改善される場合があります。


CMake 実行時にコンパイラが見つからない

CMake 実行時に以下のエラーが発生する。

 No CMAKE_CXX_COMPILER could be found. 

まずは、<プロジェクトディレクトリー>/<buildディレクトリー>/CMakeFiles/CMakeError.log を確認してください。

原因1:間違ったコンパイラを指定した

CMake を実行 (Configure) する際に、コンパイラをしてします。インストールされている Visual Studio とは異なるコンパイラを指定した場合には、コンパイラが見つからず、No CMAKE_CXX_COMPILER could be found. のようなエラーが発生します。

CMakeError.log を見ると、以下のように、コンパイラチェック開始直後にエラーが発生します。

 Microsoft (R) Build Engine バージョン 4.6.1586.0
 [Microsoft .NET Framework、バージョン 4.0.30319.42000]
 Copyright (C) Microsoft Corporation. All rights reserved.
 
 2017/04/08 10:47:04 にビルドを開始しました。
 ノード 1 上のプロジェクト
 "C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj"
 (既定のターゲット)。
 C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj(18,3): 
 error MSB4019: 
 インポートされたプロジェクト 
 "C:\Microsoft.Cpp.Default.props" が見つかりませんでした。<Import> 
 宣言のパスが正しいかどうか、およびファイルがディスクに存在しているかどうかを
 確認してください。
 プロジェクト
 "C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj"
 (既定のターゲット) のビルドが終了しました -- 失敗。
 
 ビルドに失敗しました。
 
 "C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj"
 (既定のターゲット) (1) ->
  C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj(18,3):
 error MSB4019: インポートされたプロジェクト 
 "C:\Microsoft.Cpp.Default.props" が見つかりませんでした。
 <Import> 宣言のパスが正しいかどうか、およびファイルがディスクに存在しているかどうかを
 確認してください。
  
     0 個の警告
     1 エラー
 
 経過時間 00:00:00.50

対応方法:正しいコンパイラを指定します。
  1. インストールされている OpenRTM を確認
    • → 32bitか、64bitか?
  2. インストールされている Visual Studio を確認
    • → Visual Studio 2008 (VC9), 2010 (VC10), 2012 (VC11), 2013 (VC12), 2015 (VC14), 2017 (VC15)
  3. CMake のキャッシュを削除
    • コンパイラの指定を変更する際には必ずキャッシュを削除する必要があります。
  4. CMake Configure で正しいコンパイラを指定
    • 32bit/64bit はインストールされている OpenRTM に合わせる
      • 32bit は無印 (例: Visual Studio 10 2010)
      • 64bit はWin64 (例: Visual Studio 10 2010 Win64)


原因2:Visual C++ がインストールされていない

Visual Studio インストール時に、C++コンパイラを含む Visual C++ がインストールされていない場合があります。

対応方法:Visual C++ をインストールします

再度インストーラーを(手元になければダウンロードしてから)起動し、[変更] からインストールを行います。 インストールをカスタマイズするを選択して、インストール対象に Visual C++ が含まれていることを確認してからインストールを行います。

この原因の場合も、CMakeError.log の出力内容は(原因1)と同じです。

原因3:rc.exe が実行できない

まれに、インストールされているコンパイラを CMake 実行時に正しく指定しているのにもかかわらず、No CMAKE_CXX_COMPILER could be found. のようなエラーが発生することがあります。 原因の一つとして、複数のバージョンの Visual Studio をインストール・アンインストール等を行った際に、まれにツールチェーンの設定に不整合が生じ、以下のようなエラー rc.exeが実行できない が発生することがあります。

 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\CL.exe
 /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1
 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb"
 /Gd /TC /errorReport:queue CMakeCCompilerId.c
   CMakeCCompilerId.c
 Link:
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe
 /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO
 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
 shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST
 /MANIFESTUAC:"level='asInvoker' uiAccess='false'"
 /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1
 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib"
 /MACHINE:X64 Debug\CMakeCCompilerId.obj
 LINK : fatal error LNK1158: 'rc.exe' を実行できません。
 [C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj]
 プロジェクト "C:\workspace\Flip\build\CMakeFiles\3.7.2\CompilerIdC\CompilerIdC.vcxproj"
 (既定のターゲット) のビルドが終了しました -- 失敗。
 
 ビルドに失敗しました。

対応方法:rc.exe と rcdll.dll をコピーする

これに対する対処方法としては、rc.exe と rcdll.dll を対象コンパイラのツールディレクトリーにコピーする方法があります。

  1. rc.exe, rcdll.dll を探す
    • エクスプローラーを開き C:\Program Files (または C:\Program Files (x86)) を開き rc.exe を検索する。rcdll.dll は同じディレクトリーにあるはずなので探すのは rc.exe のみでよい。
    • 通常は C:\Program Files (x86)\Windows Kits の下にいくつかの rc.exe が見つかるが x86 というディレクトリー下にあるものが対象。
    • 検索結果にて対象の rc.exe を右クリックし「ファイルの場所を開く」を選択
  2. コンパイラのツールディレクトリーを開く
    • 別のエクスプローラーを開き、ツールの bin ディレクトリーを開く
    • 上のログの例では、C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe から、ツールのディレクトリーが C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin (binディレクトリーが対象、x86?amd64は無視してよい) であることがわかる。
  3. rc.exe, rcdll.dll をコピーする
    • 1.で開いたエクスプローラーから rc.exe、rcdll.dll を2.で開いたツールディレクトリーにコピーする



OpenRTP 実行時に xxx.dll が存在しないというエラーが表示される

原因1:
  • Windows10 のみの現象の可能性があります。
  • RTM_VC_VERSION が正しく環境変数に設定されていない可能性があります。
対処方法: OpenRTM インストール後に PCを再起動して、環境変数に RTM_VC_VERSION が正しく設定されているかを確認してください。


「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。…」 が表示される

サンプルの RTコンポーネントなどを起動しようとして、xxxComp.exe を実行すると、上記のようなエラーが出る場合があります。 このエラーは起動環境上に VC++ライブラリーのランタイムコンポーネントがないために起こります。 VC++関連の開発環境(Microsoft Visual Studio,Visual C++ Expressなど)をインストールしていない環境では OpenRTM-aist (C++版) を動作させることはできませんので、必ず VC++関連の開発環境をインストールしてください。



アプリケーションエラー「アプリケーションを正しく初期化できませんでした。…」が表示される

ネームサーバー起動しようとして、rtm-naming.bat を実行すると、上記のようなエラーが出る場合があります。 このエラーは、起動環境上に VC++ライブラリーのランタイムコンポーネントがないために起こります。 VC++関連の開発環境(Microsoft Visual Studio 、Visual C++ Expressなど)をインストールしていない環境では OpenRTM-aist (C++版) を動作させることはできませんので、必ず VC++関連の開発環境をインストールしてください。


VC++関係のライブラリーがインストールされていない

Visual Studio 等のアプリケーションのインストールを行ってください。


rtm-naming.bat を実行するとアプリケーションエラーが発生する

VC++関係のライブラリーがインストールされていない可能性が考えるので、インストールを行ってください。


rtm-naming が実行できない

rtm-naming.bat を実行しても黒い窓(コマンドプロンプト画面)が一瞬開いて閉じてしまう。

原因1:omniORB がインストールされていない
対処方法:ダウンロードページから omniORB をダウンロードしインストールしてください。
rtm-naming.bat 内では通常 omniORB のネームサーバーomniNames.exeを実行します。
omniORB がインストールされていないとomniNames.exeもインストールされないので、ネームサーバーを実行できません。

原因2:log ディレクトリーのパス中に2バイト文字が含まれている
対処方法:r tm-naming.bat 内では通常 omniORB のネームサーバーomniNames.exeを以下のように実行します。
 omniNames.exe -start 2809 -logdir %TEMP%

通常環境変数 %TEMP% はユーザーのテンポラリディレクトリー

 C:\Documents and Settings\ユーザー名\Local Settings\Temp

を指します。ここで、ユーザー名が日本語の場合、omniNames がログファイルを正しく作成できないため、実行できずに終了します。
対応策としては、以下の3つが考えられます。
日本語のユーザー名を使用しない
日本語を使用しないユーザーを新たに作り、その環境で実行する。
rtm-naming.bat を書き換える
C:\Program Files\OpenRTM-aist\[バージョン番号]\binの下にある rtm-naming.bat の中の以下の部分
 %cosnames% -start %port% -logdir %TEMP%\ 

 %cosnames% -start %port% -logdir [パスに日本語を含まないログディレクトリー]
のように書き換えます。
パスに日本語を含まないログディレクトリーは自分に書き込みの権限があるディレクトリーで、安全な場所にしてください。たとえば、C:\tmp など。
Java版の orbd を使用する
OpenRTM-aist の Java版と JDK をインストールすると、スタートメニューの Java版 の examples の中に start-orbd.vbs が現れます。これは、JDK に付属する CORBA ネームサーバーを起動するスクリプトです。
このネームサーバーには、omniNames のような日本語のパスの問題は存在しないので、これを使用することでユーザー名が日本語でも、ネームサーバーを起動できます。

UNIX


configure を実行したがエラーが出て終了する

configure のエラーの大半は、必要なパッケージが見つからないときに出ます。エラーが出た場合には、必要なパッケージがインストールされているか、autoconf が見つけられるディレクトリーにヘッダ、ライブラリーがインストールされているかを確認してください。


make を実行してもビルドが完了しない。または make の実行エラーが表示される

パッケージのインストールまたは OpenRTM-aist (C++版)のビルドが不完全な可能性があります。もう一度パッケージの自動インストーラーを起動して、パッケージのインストールからやり直してください。 パッケージのインストール中の処理画面に何らかのエラーメッセージが表示された場合、該当するパッケージだけを手動でインストールするなどしてから configure を実行してください。 configure を実行してエラーメッセージが表示されないことを確認してから、再度 make を実行してビルドを完了させてください。


サンプルプログラムの SimpleIO を実行する run.sh が実行できない

run.sh に実行ビットが立っていない可能性があります。下記のように実行ビットを立てて実行するか、直接シェルに渡して実行してください。
 > ls -al run.sh
 -rw-r--r--  1 n-ando  n-ando  1146  4 27 15:12 run.sh
 > chmod 755 run.sh
 > ./run.sh
 もしくは
 > sh run.sh



サンプルプログラムの SimpleIO を起動したが、正常に動作しない

SimpleIO の実行スクリプト run.sh では、ターミナルウィンドウを kterm,xterm,gnome-terminal のいずれかに仮定しております。 このため、これ以外のターミナルウィンドウを使用している場合は、run.sh を適宜書き換えてから実行してください。

OpenRTM-aist (Python版) に関する FAQ

Windows

ネームサーバーのコンソール画面が開かない

原因1:omniORBpy がインストールされていない

openrtm.org が提供する msi インストーラーには omniORBpy が含まれていますが、手動でインストールした場合には、omniORBpy が入っていない場合も考えられますので、omniORBpy がインストールされているか確認してください。


原因2:py ファイルの関連付けが違っている

ネームサーバーを起動するファイルは、C:\Program Files (x86)\OpenRTM-aist\1.1\bin\rtm-naming.py です。(32bit 版 msi でインストールした場合)
このディレクトリーでコンソール画面を開き、python rtm-naming.py を実行するとネームサーバーは起動するが、rtm-naming.py をダブルクリックして起動できない場合はインストールしている python を確認してください。
Python の 32bit版、64bit版の両方をインストールしている場合、先にインストールしたものが py ファイルに関連付けられるようなので、OpenRTM-aist-Python のインストーラーと同じアーキテクチャの Python を先にインストールすると解決するかもしれません。


原因3:ホスト名やアドレス設定の問題で起動できない

利用している PC の IPアドレスを omniNames.exe に設定する必要があります。 環境変数 OMNIORB_USEHOSTNAME を以下のように設定します (以下は自ホストの IPアドレスが192.168.0.11の場合の例)。

 変数名(N): OMNIORB_USEHOSTNAME
 変数値(V): 192.168.0.11




サンプルコンポーネントが起動しない

rtc.conf の設定に問題があります。rtc.conf の設定を以下のように設定し直して確認してください。
 corba.nameservers: localhost
例えば、corba.endpoint/corba.endpoints などの設定が現在実行中の PC のホストアドレスとミスマッチを起こしている場合などは、CORBA が異常終了します。


rtm-naming.py を実行したら、omniNames で "usage:" と表示される

現象:rtm-naming.pyを"C:\Documents and Settings\Hoge\My Documents"等、空白が入っているディレクトリーから実行した場合、omniNamesは "usage:" を表示して終了してしまいます。
対応方法:上記現象が発生した場合、下記のどちらかの方法で対処してください。

対処法その1:C:\の直下(または、パス名に空白が入っていない場所)に"RTMNaming"等適当なフォルダーを作成し rtm-naming.py を実行してください。

対処法その2:C:\Python<version>\Lib\site-packages\OpenRTM\rtm-namingのrtm-naming.pyの48行目を下記のように編集してください。
 rtm-naming.py 48行目
  cmd = "omniNames -start "+str(port)+" -logdir \""+str(currdir)+"\" &"



python.exeが起動しない

環境変数 Path に Python インストールフォルダーを追加しておいてください (C:\Python26など)。


Cygwin をインストールしている環境では python.exe が複数存在する場合がある

Cygwin をインストールしている環境では、Cygwin上にも python.exe が存在する場合があります。その場合は、通例 Cygwin上の python.exe へのサーチパスが優先されるよう設定されるため、環境変数 Path を適切に設定しているのにもかかわらず、今回導入したはずの Python とは違うバージョンの(すなわちCygwin上の)python.exe が起動してしまう場合があります。この場合、Python のバージョンの違いによる不具合が発生してしまいます。この問題は非常に原因が特定しづらいのが特徴です。このように Cygwin などをインストールしている環境で OpenRTM-aist Python版を使う場合は、該当バージョンの Pythonインストールフォルダーから python.exe が起動していることを確認してください。

確認方法の例:「python -V」でバージョンを調べる、(Cygwinのある環境では)which python でどの python.exe が実行されているかを確認する...など

この障害が発見された場合の対処:Pythonインストールフォルダー(C:\Python26など)をシステム環境変数 Path(*ユーザー環境変数 Path ではなく)の先頭に追加することで解決できます。


「MSVCP71.dll が見つからなかったため、…」というエラーで終了する

WINDOWS\system32フォルダー内に msvcp71.dll がないために発生するエラーです。msvcp71.dll をこちら から入手してください。


「Can't open file: ./rtc.conf」などと表示される

現象:RTコンポーネントの起動フォルダー(あるいはサーチパス上)に rtc.conf が見つからないため、起動できない状態です。

この場合、次のように表示されます。

 Can't open file: ./rtc.conf
 Can't open file: /etc/rtc.conf
 Can't open file: /etc/rtc/rtc.conf
 Can't open file: /usr/local/etc/rtc.conf
 Can't open file: /usr/local/etc/rtc/rtc.conf
これは rtc.conf を捜すサーチパスがデフォルトの状態であり、上記の順番で探したが見つからないためこのような表示になります。

対応方法:
これを避けるためには、たとえば
 corba.nameservers: localhost
 naming.formats: %n.rtc
という内容のファイル rtc.conf を作成し、上記サーチパス上(通例はカレント=コンポーネントと同じフォルダー)に配置します。


コンポーネントがネームサービスに登録されない

原因:rtc.conf の改行コードが CRLF になっている可能性がある。
以下のコマンドにて rtc.conf の確認を行い、CRLF という文字列が表示された場合、新たに rtc.conf の作成を行ってください。
 $ file rtc.conf

OpenRTM-aist (Java版) に関する FAQ

OS 共通


Java版コンポーネントでデータ転送に時間がかかる

Java版の RTコンポーネントと C++版など他の言語のコンポーネントとの間で、特に大きなデータ(100kB以上でみられることが多い。)を送受信する場合に、極端に速度が低下する場合があります。これは Java の CORBA 側の問題であることが知られており、タイムアウトを適切に設定することにより回避することができます。
Java版の RTC が読み込む rtc.conf に以下のように記述することで、Java の CORBA のタイムアウトを設定します。
 corba.args: -ORBTCPReadTimeouts 1:60000:300:1
Java (JDK1.5以降) ではデフォルトで、100:3000:300:20 となっていますが、これを 1:60000:300:1 に変更するという意味です。各項目は左から、
  • 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

ネームサーバーのコンソール画面が開かない

「Start Java Naming Service」は %RTM_ROOT%\bin\rtm-naming.bat にあるバッチファイルからネームサーバー (omniNames.exe) を起動します。 この際、omniNames.exe を参照するために環境変数 OMNI_NAMES を利用しています。 通常インストーラーで OpenRTM-aist をインストールした場合には、OMNI_ROOT 環境変数が自動で設定されます。しかし、何らかの理由で環境変数が無効になっていたり、手動でインストールした場合は、環境変数が設定されていないことがあります。


サンプルコンポーネントが起動しない

rtc.conf の設定に問題があります。rtc.conf の設定を以下のように設定し直して確認してください。
 corba.nameservers: localhost
例えば、corba.endpoint/corba.endpoints などの設定が現在実行中の PC のホストアドレスとミスマッチを起こしている場合などは、CORBA が異常終了します。


サンプルコンポーネントを起動させると、ランタイムエラーで終了する

ライブラリー等が適切にインストールされていない、設定されていない等の原因でラインタイムエラーが表示される場合があります。 PCを再起動する または OpenRTM-aist をすべてアンインストールし、再インストールすることで改善される場合があります。


UNIX

FedoraCore で RTSystemEditor の NameService View にエラーが表示される

OS が FedoraCore の場合、yum にて Java をインストールすると GCJ (The GNU Compiler for Java ) がインストールされてしまい、その GCJ を使用すると RTSystemEditorのNameService View にエラーが表示されることがあります。
エラーが表示された場合は、まず、Oracle の Java が使用されているか確認してください。
Eclipse だけで Oracle の Java を使用したい場合は、jdk-xxx-linux-i586.bin をダウンロード後、実行してできた jre ディレクトリーを Eclipse インストールディレクトリーへコピーしてご使用ください。
 $ sh jdk-6u4-linux-i586.bin
 $ cp -r jdk1.6.0_04/jre eclipse/
(JPackage,alternativesというのを使用する事で、使用する Java を選択する事も可能なようです。)



FedoraCore で Java をインストールする際の対応

OS が FedoraCore の場合、yum にて Java をインストールすると GCJ (The GNU Compiler for Java ) がインストールされてしまい、その GCJ を使用するといくつかの不具合が生じる事があります。
不具合が発生した場合は、まず、Oracle の Java が使用されているかの確認をしてください。

参考:
JDKインストールのためのヒント
UNIX系環境で簡易に Oracle の Java を Eclipse に適用する方法

RTSystemEditor、RTCBuilder、rtshell 等ツールに関する FAQ

RTSystemEditor

Windows10 などで、高解像度モードのときにアイコン等が小さくなる

Windows10 などで HiDPIモードに対応していないアプリケーションは、高解像度時にウィンドウやアイコンが小さく表示される場合があります。 Eclipse も HiDPIモードでは中途半端にしか対応しておらず、下図のように全体的に小さく表示されます。

OpenRTP_normal.png
通常表示

OpenRTP_small.png
HiDPI非対応の場合の表示

以下の手順でレジストリの変更とマニフェストファイルの配置によって、この問題を解決することができます。

レジストリに以下のキーを追加します

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion‌​\SideBySide\PreferEx‌​ternalManifest = (DWORD) 1

    • レジストリにこの値を追加するための reg ファイルを以下からダウンロードしダブルクリックする
      ExternalManifestON.reg
  • <exeファイル名>.exe.manifest というファイル名のマニフェストファイルを exe と同じフォルダーに置く

RTSystemEditor の操作パフォーマンスが悪くなる

RTSystemEditor は常にシステムの情報を収集しながら表示を同期しています。 このシステム情報を収集する際に、 動作していないオブジェクトのリファレンスにアクセスするとタイムアウト待ちを起こして極端に遅くなることがあります。
動作していないオブジェクトが発生した場合には、 ネームサービスから「Delete from NameService」で削除を行い、また動作していないオブジェクトとポート接続しているオブジェクトを、ネームサービスおよびシステムエディタから削除すると動作が軽くなるでしょう。


システムエディタにて同一ポート間に複数が接続(重複接続)されていると見分けることができない

接続線では、重複接続の区別がつきません。お手数ですが、プロジェクトファイルでご確認をお願いします。


RTSystemEditor で [All Activate] ボタンが押せない

OpenRTP を再起動してください。


RTSystemEditor でコンフィギュレーションが表示されない

OpenRTP を再起動してください。


RT System Editor の操作パフォーマンスが悪くなります

RT System Editor は常にシステムの情報を収集しながら表示に同期しています。このシステム情報を収集する際に、動作していないオブジェクトのリファレンスにアクセスするとタイムアウト待ちを起こして極端に遅くなることがあります。 動作していないオブジェクトが発生した場合は、ネームサービスビューから「 Delete from NameService 」で削除します。また、動作していないオブジェクトとポート接続しているオブジェクトをネームサービスおよびシステムエディタから削除するとパフォーマンスが戻ることがあります。


Eclipse のワークスペースに「 RT System Editor_Files 」プロジェクトが作成されます。これは何ですか?

RT System Editor が実行時に内部で使用している一時的な情報が保存されています。実行時に一時的に使用しているものですので、実行中には削除しないでください。RT System Editor の停止中にはプロジェクトごと削除しても問題ありません。


システムエディタにて同一ポート間に複数が接続(重複接続)されている場合、見分ける方法はありますか?

A. 接続線では、重複接続の区別がつきません。お手数ですが、プロジェクトファイルでご確認をお願いします。


RTCBuilder

RTC プロファイルエディタで保存すると「Error writing file.」というエラーが表示される

保存先の指定が不正な場合に表示されます。保存先を任意のプロジェクト内のディレクトリーにして保存してください。


データ型のプルダウンメニューがブランクになっている

OpenRTM-aist インストール後に PCを再起動していないと現象が発生する可能性があります。再起動を行ってください。


rtc-template(cui版)

サービスポートのオプションについて

サービスプロバイダポートを使用する場合は、
 "--service=PortName:ServiceName:Type"
を、サービスコンシューマポートを使用する場合は、
 "--consumer=PortName:ServiceName:Type"
を与えます。
これらのオプションには以下のような制限があります。
"--module-name="で与えるコンポーネント名とIDLで指定したサービスインターフェース名は異なるものでなければなりません。
"Type"はサービスインターフェース名と同じでなければなりません。
"ServiceName"と"Type"は対になるプロバイダとコンシューマとで同じでなければなりません。(PortNameはコンポーネント内で唯一であれば任意)



Eclipse

Eclipse の起動方法

Windows系システムの場合
Eclipse のインストールフォルダーから eclipse.exe をさがし、そのアイコンをダブルクリックします。
UNIX系システムの場合
以下は、一例としてログインシェルが bash である場合を想定して説明しています。
環境変数 RTM_JAVA_ROOT が /etc/profile に設定されている場合
ファイルブラウザで Eclipse のアイコンをダブルクリックして起動できます。また、次に説明するようにコマンドラインからも起動できます。
環境変数 RTM_JAVA_ROOT が .bashrc に設定されている場合
ダブルクリックでの起動は避けてください。 必ず、ターミナルを起動してコマンドラインから Eclipse を起動してください。たとえば、Eclipse が /usr/Eclipse に展開されているとした場合は次のようなコマンドで Eclipse を起動できます。
 $ /usr/Eclipse/eclipse
note: ダブルクリックでの起動を避ける理由
RTCBuilder で生成した RTC のコードを Eclipse で Ant ビルドするときに、環境変数 RTM_JAVA_ROOT が使用されます。ダブルクリックで Eclipse を起動すると、設定ファイル .bashrc が読み込まれず、Ant ビルドに失敗する場合があります。



UNIX 系環境で簡易に Oracle の Java(JRE) を Eclipse に適用する方法

UNIX系の環境では、Java をインストールしようとすると GCJ (The GNU Compiler for Java ) がインストールされてしまうということが多いようです(多くのLinuxディストリビューションが該当しています)。Eclipse tools は Oracle の JRE1.6 以上でないと不具合が発生してしまいます。とりあえず「Eclipse だけで Oracle の Java を使用したい」場合は次のようにしてください。
JDK を入手し、それを実行してできた jre ディレクトリーを Eclipse インストールディレクトリーへコピーしてご使用ください。
EclipseにOracleのJREを適用する方法例(jdk-6u4-linux-i586.binを使用した場合)
 $ sh jdk-6u4-linux-i586.bin
 $ cp -r jdk1.6.0_04/jre eclipse/


その他 FAQ


インストールした OpenRTM に含まれる各データ型の構造が分かるドキュメントや資料について

以下のページを参照してください。


ポート間のデータを確認したいが、デバッグの方法がわからない

rtprint、rtinject 他 rtshell のコマンド群でデバッグを行います。以下のページを参照してください。

http://www.openrtm.org/pub/OpenRTM-aist/tools/rtshell/3.0/ja/rtprint.html


異なる OS間での通信でもリアルタイム性は保証されていますか?

OS がリアルタイム対応しているのであれば、リアルタイム性のある RTC を作成することは可能ですが、通信を介す場合は TCP/IP を使う以上困難です。


過去のに掲載した FAQ


Visual C++ 2005 Express Edition でビルド時に「'windows.h'が見つからない」と表示される

Visual C++ 2005 Express Edition でビルド時に次のようなエラーが表示される場合があります。

 >c:\program files\omniorb\include\omnithread\nt.h(35) : fatal error C1083:
 include ファイルを開けません。
 'windows.h': No such file or directory

原因1:Microsoft Platform SDK がインストールがされていない
対応方法:Microsoft Platform SDK をインストールする。
原因2:インクルードファイルパス・ライブラリパスの設定不備
対応方法:インクルードファイルサーチパスやライブラリサーチパスに Microsoft Platform SDK のインストールディレクトリーを追加する

インストールをする順序などの関係で、Visual C++ 2005 Express Edition のインストールディレクトリーとは違う場所に Microsoft Platform SDK がインストールされてしまうなどの事情で、Visual C++ 2005 Express Edition のコンパイラが Microsoft Platform SDK のインクルードファイルやライブラリをたぐれなくなっている場合があります。この場合は、インクルードファイルサーチパスやライブラリサーチパスに Microsoft Platform SDK のインストールディレクトリーを追加することで問題を解決できます。

インクルードファイルサーチパスの追加方法
Visual C++ 2005 Express Edition のメニューバー > [ツール] > [オプション] を選択し、「オプション」ウィンドウを開きます。左のツリービューから「プロジェクトおよびソリューション」>「VC++ディレクトリー」を選択します。
右上のプルダウンメニュー「ディレクトリーを表示するプロジェクト」を「インクルード ファイル」として、Microsoft Platform SDK のインクルードファイルのディレクトリー(例えば、「C:\Program Files\Microsoft Platform SDK\Include」)をインクルードファイルのサーチパスに追加します。
ライブラリファイルサーチパスの追加方法
同様にして、「オプション」の左のツリービュー「VC++ディレクトリー」を選択した状態で、右上のプルダウンメニューから「ディレクトリーを表示するプロジェクト」を「ライブラリ ファイル」として、Microsoft Platform SDK のライブラリファイルのディレクトリー(例えば、「C:\Program Files\Microsoft Platform SDK\Lib」)をライブラリファイルのサーチパスに追加します。
なお、サーチパスの具体的な追加方法などは Visual C++ 2005 Express Edition のヘルプ等を参照してください。


「java -version」がインストールした JDK のバージョンと異なる。

すでに JDK よりも新しいバージョンの JRE(Java Runtime Environment)がインストールされている場合は、JDK をインストールしても「java -version」が JRE のままになることがあります。この場合のインストールの確認方法を説明します。

「プログラムの追加と削除」での確認方法:Windowsのコントロールパネルから「プログラムの追加と削除」を呼び出し、JDK5 がインストールされていることを確認してください。

add_or_delete_ja.png
JDK5を「プログラムの追加と削除」で確認

マイコンピューターからの確認方法:JDK をデフォルトでインストールした場合には、通常

 C:\Program Files\Java\jdk1.6.0_21
というようなパスにインストールされるので、マイコンピューターで直接そのフォルダーの存在を確認します。

confirm_Java_ja.png
マイコンピューターからJDK5を確認




Python2.6 + omniORBpy-3.4 で omniORB のインポート時に「importError: DLL load failed」エラーが発生する

mscr71.dll が見つからないために発生するエラーです。msvcr71.dll をこちらから入手して、パスが通ったところにコピーしてください。