RTC Daemonの使い方

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が起動しているのがわかります.

例のrtc.confでの起動の様子

また,System Editorから起動が可能です.(「Manager Contorl View」の「Create」ボタンを使います.「Loadable Module」の「Load」ボタンでDLLを読み込めるはずなんですが,Win版だと上手くいきません(2011年1月))

Createから起動

んで,出てきたダイアログからRTCを選びます.

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システムをじっこう出来ます.