RTC Daemonをご存じですか?
RTC Daemonはすでに解説したRTCをダイナミックリンクライブラリ (以下DLL) としてリリースする場合に便利なツールです.
概要
DLLとしてRTCをリリースした場合に,そのDLLをロードして,RTCを実行してくれるManagerが必要でした.
これに対してRTC DaemonはManagerの機能だけを実装したプログラムです.
OpenRTM-aistをインストールすると,Toolsフォルダにインストールされています.
このRTC Daemonを上手く使いこなすには,rtc.confを使いこなすことが要求されますが,このRTC Daemonを使えば,たくさんのメリットがあります.
RTCをまとめて起動出来る
RTC Daemonに複数のDLLを読み込ませて,種類の違うRTCをまとめて起動できます.読み込ませるだけでなく,起動も同時に行います.
RTCを動的に起動できる
Manager自体がCORBAのオブジェクトなので,RTCを外部のPCなどからRT System Editorで起動できます.
複数言語を同時にはつかえない
これは注意点で複数の言語をおなじRTC Daemonから起動することはできません(いまのところ).
ポート番号を変えて同じホストで複数のRTC Daemonを起動すると良いでしょう.
例題
さっそく,やりながら使い方を学びましょう.
スタートから「OpenRTM-aist」>「C++」>「tools」と開くと,rtc.conf for RTC daemonというショートカットがあるとおもうので開いてください.(Python版にはありませんね・・・「C:\Python26\rtcd.py」がrtc daemon本体で,それと同じフォルダのrtc.confがrtc daemon用のrtc.confです.)
OpenCVのインストール
必ずOpenCVをインストールしておいてください.OpenCVのDLLをロードしようとしちゃいます.
rtc.conf
まずは全文見てみます.
corba.nameservers: localhost naming.formats: %h.host_cxt/%n.rtc logger.enable: NO logger.log_level: PARANOID manager.modules.load_path: ../examples/C++/, ../components/ #manager.modules.preload: ConfigSample.dll, \ # ConsoleIn.dll, ConsoleOut.dll, \ # MyServiceConsumer.dll, MyServiceProvider.dll, \ # SeqIn.dll, SeqOut.dll #manager.components.precreate: ConfigSample, \ # ConsoleIn, ConsoleOut, \ # MyServiceConsumer, MyServiceProvider, \ # SeqIn, SeqOut
重要なパラメータについて解説しますね.
manager.modules.load_path
DLLが置いてある場所(フォルダ)のパスです.ここの文法で間違えるのがDLLロード失敗のほとんどです.
Windowsでは以下のように指定します.
manager.modules.load_path: C:/Program Files/OpenRTM-aist, \ C:\\Program Files\\OpenRTM-aist
・コンマで区切る
・区切り文字は「/」か「\\」.
・改行は「¥」.
・空白は読み飛ばす
・パスを「””」で囲む必要は無い<-大事
・相対パスで指定する場合は,rtcd.exeが実行されるフォルダからの相対パス
manager.modules.preload
最初に読み込まれるDLLです.あとからDLLを選んでロードすることも出来ますが,ふつうはこれを指定します.
例:
manager.modules.preload: ConsoleIn.dll, ConsoleOut.dll
・コンマで区切る
・改行は「¥」
・Linuxの場合は拡張子がsoになる.
・フルパスでDLLを指定したい場合は,「manager.modules.abs_path_allowed: YES」とする.
manager.components.precreate
最初に自動的に起動されるRTCのリストです.
例
manager.components.precreate: ConsoleIn, ConsoleOut, ConsoleOut
・RTCの名前だけを書く.
・コンマで区切る
・改行は「¥」
・同じRTCを2つ以上起動する場合は二つ名前を書く<-便利
corba.nameservers: localhost naming.formats: %n.rtc logger.enable: NO logger.log_level: PARANOID manager.modules.load_path: /usr/share/OpenRTM-aist/examples/python/Composite manager.modules.Python.load_paths: /usr/share/OpenRTM-aist/examples/python/Composite #manager.modules.load_path: C:\\Program Files\\OpenRTM-aist\\1.0\\examples\\Python\\ConfigSample #manager.modules.Python.load_paths: C:\\Program Files\\OpenRTM-aist\\1.0\\examples\\Python\\ConfigSample #manager.modules.preload: ConfigSample, ConsoleInl, ConsoleOut #manager.components.precreate: ConfigSample, ConsoleIn, ConsoleOut
適切にrtc.confが設定出来たらStart RTC Daemonというショートカットから起動します.
自動的にRTCが起動しているのがわかります.
また,System Editorから起動が可能です.(「Manager Contorl View」の「Create」ボタンを使います.「Loadable Module」の「Load」ボタンでDLLを読み込めるはずなんですが,Win版だと上手くいきません(2011年1月))
んで,出てきたダイアログからRTCを選びます.
RTCをひとつでもExitするとDaemonが落ちます(2011年1月)
まとめ
まだまだ未完成の部分が多いのですが,一気にRTCを起動出来ます.また後述するComposite RTCの機能を発揮するためにもRTC Daemonを使いましょう.
僕の場合,RTC Daemonのrtc.confを適切に設定した後,スタートメニューのスタートアップにショートカットを入れて,Windows起動と同時にStart Naming ServiceとStart RTC Daemonを呼びます.これでWindowsを立ち上げたと同時にRTシステムが準備完了になります.
System Editorを起動して,システム図をロードしてやれば簡単にRTシステムをじっこう出来ます.