OpenRTM-aist 1.2新機能詳細
マネージャ起動時にポートを接続する機能
rtc.confに以下のように記述することで、起動時にデータポート、サービスポートを接続できる。
manager.components.preconnect: {RTC1}.{port1}?port={RTC2}.{port2}&{option1}={value}, ....
例:
manager.components.preconnect: ConsoleIn.out?port=ConsoleOut.in&dataflow_type=push&interface_type=corba_cdr, SeqIn.octet?port=SeqOut.octet&dataflow_type=push&interface_type=direct
マネージャ起動時にコンポーネントをアクティベーションする機能
rtc.confに以下のように記述することで、起動時にRTCをアクティベートできる。
manager.components.preactivation: {RTC1}, {RTC2}
例:
manager.components.preactivation: ConsoleIn0, ConsoleOut0
CORBA_RTCUtil:コンポーネント操作関数群の導入
RTC、実行コンテキスト、ポート、コンフィギュレーションパラメータ操作のための関数群を導入。 使用できる関数は以下を参照。
トピックベースのポート接続機能
rtc.confで以下のようにトピック名を設定することで、同一トピック名のポートを自動検索して接続する機能。
port.corbaport.{serviceport_name}.rendezvous_point: {topic_name}
port.inport.{inport_name}.subscribe_topic: {topic_name}
port.outport.{outport_name}.publish_topic: {topic_name}
例:
port.inport.in.subscribe_topic: test_topic
port.outport.out.publish_topic: test_topic
共有メモリ通信データポート(shared_memory型インターフェース)
データポートでデータを共有メモリにより転送する機能。
コネクタのインターフェース型にshared_memory
を設定することで使用できる。
manager.components.preconnect: ConsoleIn.out?port=ConsoleOut.in&interface_type=shared_memory
RTSystemEditorを使用する場合は以下の項目で設定する。
同一プロセス内通信のデータ転送を変数で渡すダイレクト接続データポート(direct型インターフェース)
同一プロセス内のデータポート通信で変数によりデータを渡す機能。
コネクタのインターフェース型にdirect
を設定することで使用できる。
manager.components.preconnect: ConsoleIn.out?port=ConsoleOut.in&interface_type=direct
RTSystemEditorを使用する場合は以下の項目で設定する。
OpenSSLによるセキュアな通信機能
OpenSSLによりCORBAの通信を暗号化する機能(SSLIOP)の利用。 rtc.confに以下のように記述することで利用可能。
ただし、証明書や秘密鍵についてはOpenSSLにより生成しておく必要がある。
corba.ssl.certificate_authority_file: root.crt
corba.ssl.key_file: server.pem
corba.ssl.key_file_password: password
manager.modules.load_path: C:\\Program Files\\OpenRTM-aist\\1.2.0\\bin\\vc141
manager.preload.modules: SSLTransport.dll
デフォルトの状態ではIIOPとSSLIOPの2つのポートが利用可能になっているため, RTSystemEditor等から操作可能である。 IIOPを無効にしてSSLIOPのみで通信を行う場合は、以下の環境変数を設定する。
set ORBclientTransportRule=* ssl
この場合はRTSystemEditorからの操作はできなくなるため、別途ツールを作成する必要がある。
名前付けポリシー機能の拡張(同一ネームサーバー、同一ノードで独自のインスタンス名を設定する)
1.1.2以前ではネームサーバーに登録しようとしているRTCと同じインスタンス名のRTCが存在する場合に登録を上書きしていましたが、適切な番号順に設定できるようになりました。
ネームサーバーで独自のインスタンス名を付けるためにはrtc.confで以下の設定を行います。
manager.components.naming_policy: ns_unique
同一ノード内で独自のインスタンスを設定する機能は、同一のマスターマネージャに登録されているスレーブマネージャ内で起動したRTCと被らない名前付けを行う機能です。 このため必ずマスターマネージャの起動が必要です。
rtc.confで以下のように記述することで機能を使用できます。
naming.type: manager
manager.components.naming_policy: node_unique
rtcloc形式のコンポーネント指定方法(マスターマネージャに登録されたスレーブマネージャからコンポーネントを名前で検索)
別プロセスで起動したRTCのリファレンスをrtcloc
形式という文字列で取得する。
この機能はマスターマネージャを利用するため、マスターマネージャの起動が必要である。
この機能の利用のためにはrtc.confでnaming.type
のオプションを設定する必要がある。
naming.type: manager
rtcloc
形式は以下のように記述する。
rtcloc://{マスターマネージャのアドレス}/{RTCのカテゴリ名(省略可)}/{RTCのインスタンス名}
この機能を利用することで、以下のように遠隔のRTCをアクティブ化したり、
manager.components.preactivate: rtcloc://localhost:2810/example/TestComp20, TestComp10
ポートを接続するということができる。
manager.components.preconnect: rtcloc://localhost:2810/example/TestComp20.in?port=TestComp10.out
rtcname形式のコンポーネント指定方法(ネームサーバーに登録されたコンポーネントを名前で検索)
別プロセスで起動したRTCのリファレンスをrtcname
形式という文字列で取得する。
この機能にはネームサーバーを利用する。
rtcname
形式は以下のように記述する。
rtcname://{ネームサーバーのアドレス}/{ネームサーバーでのRTCのパス}
この機能を利用することで、以下のように遠隔のRTCをアクティブ化したり、
manager.components.preactivate:rtcname://localhost:2809/test.host_cxt/TestComp20, TestComp10
ポートを接続するということができる。
manager.components.preconnect:rtcname://localhost:2809/test.host_cxt/TestComp20.in?port=TestComp10.out()
デフォルトでデータポートの二重接続を許可しない機能
デフォルトでデータポートを二重に接続できなくなりました。 二重の接続を許可するためには、rtc.confに以下の記述がポートごとに必要です。
port.inport.<InPortName>.allow_dup_connection: YES
port.outport.<OutPortName>.allow_dup_connection: YES
omniidl shortcutの利用
同一プロセス内の操作呼び出しの処理時間短縮のため、同一プロセス内で関数を直接呼び出すShortCut機能を利用するようにしました。
LogstreamBase:ロガー機能の拡張
1.1.2以前ではロガーはファイル出力、標準出力のみしか使用できませんでしたが、様々なロガーを拡張可能になりました。 Fluent Bitによるロガーがサンプルとして実装されています(ただし、C++版はLinuxのみの対応)。
注:LogstreamBaseは2.0で大幅に仕様が変わる予定です。1.2で作成した独自のロガーは使用できなくなります。
コンポーネントオブザーバのデータ入出力検知機能
コンポーネントオブザーバーというRTC側からRTSystemEditor等に状態等を通知する機能を導入しました。
モジュール探索パスのサブディレクトリのモジュールを探索する機能
rtc.confで以下のようにモジュール探索パスを設定した場合に、1.1.2以前では設定したパス直下からしかモジュールを探索しませんでしたが、サブディレクトリも探索するようになりました・
manager.modules.load_path: ./
ログファイルのエスケープシーケンスをデフォルトで無効にする機能
1.1.2ではログファイルに文字に色を付けるためのエスケープシーケンスが強制的に付加されたためテキストエディタで開くと非常に見づらい問題がありましたが、1.2ではデフォルトでエスケープシーケンスを付加する機能は無効にして設定で有効ににできるようになりました。 有効にするためには、rtc.confに以下のように記述します。
logger.escape_sequence_enable: YES
RT System Editorにネームサーバー起動ボタン、終了ボタンを導入
RT System Editor上でネームサーバーの起動、終了ができるようになりました。
以下のボタンで起動します。起動済みの場合は再起動します。
以下のボタンでネームサーバーを終了します。
RT System Editorでコンポーネントにアタッチした実行コンテキストを表示する機能
以下のようにRTCにアタッチした実行コンテキストをシステムダイアグラムで表示できるようになりました。
表示するためには以下のボタンを押します。
RT System EditorにコンポーネントオブザーバーによるRTC監視機能を導入
RTSystemEditorがRTC側からのコンポーネントオブザーバーによる通知によりRTCの生存、終了、状態遷移などを把握するようになりました。
RT System Editorでデータ入出力中のデータポートを点滅する機能
データポートのデータ送信、受信時にデータポートを点滅させることができるようになりました。
システムダイアグラム上でRTCを右クリックしてポートモニタを開始
を選択後にポートの点滅が有効になります。
RT System Editorにマスターマネージャ起動ボタンを導入
RTSystemEditor上からマスターマネージャを起動できます。
以下のボタンで起動できます。
マスターマネージャのモジュールロードパスはOpenCVのサンプルコンポーネントのパスに設定されています。
ネームサーバーから起動したマスターマネージャを選択後、Loadable Modulesボタンを押してください。
これでロード可能なモジュール一覧が表示されますので、適当なモジュールを選択してcreateボタンを押してください。
以下のウィンドウでOKを押すとRTCが起動します。
RT System EditorにAll Exitボタンを導入
以下のボタンを押すことでシステムダイアグラム上のRTCを全て終了できるようになりました。
RTC BuilderでChoreonoid用のコードを生成する機能
以下のチェックをオンにすることでChoreonoid用のコードを生成可能になりました。
RTC Builderで独自データ型のIDLファイルの設定方法の変更
独自データ型のIDLの指定方法が以下のようなテキストボックスに指定する方式に変更になりました。
一度使用したIDLファイルはワークスペースに保存されるため、2回目以降はデータ型の一覧に表示されます。