[openrtm-users 01521] Re: SI2010でのRTミドルウエアに関する質疑応答
ysuga
ysuga @ ysuga.net
2010年 12月 30日 (木) 01:52:41 JST
リバストの菅です.
お世話になっております.
>栗原様:
ご苦労様です.
Q1に対してです.
結構,どうでもいいと思っている部分もありますが,
その半面,大事な問題を含んでいると思っています.
ある程度,「こうして作ってください」というポリシーがあると,
分かりやすい,と思う人が多い,と考えています.
現状では,このメーリングリストに登録している人も,
アーリーアダプターの人ばかりでしょうが,
他の人にも使ってもらうのであれば,
プログラミングの基準を作るべきだし,
そういうのが公式にあった方がやりやすいという人が,
特に日本人には多い気がします・・・
さて,onActivatedかonInitializeか,という議論ですが,
まだまだRS232Cで動いているデバイスが多いと思いますが,
それ以外でもLinuxでは対応するデバイスファイル名が,
システムによって変更になるので,コンフィグを変更する必要が出てきます.
バイナリで配布しようとすると,結構大事な機能です.
ファイルを開くタイミングですが,
これをonInitializeで行う場合は,rtc.conf,もしくはそれで指定される
***.confのファイル内で,COMポート名もしくは
ファイル名を指定するしかありません.
(さらにonInitializeで**.confにある内容を
読み込むためにはupdateParameterなる関数を
onInitialize内で最初に実行する必要があったはずですが,
開発者が自分で追加する必要があったし,
マニュアルが無いと思いますが・・・)
onActivatedで行う場合は,デフォルトの値をrtc.confなどに指定しておき,
System Editorやその他のツールで変更してからActivateを掛けられる.
この機能はリモートからrtcdを使ってサービスを起動した場合にも便利です.
ということで,onActivatedでのファイルオープンが
優れていると思っています.
また,デバイス自体を強制停止・再起動したい場合も,
deactiveを掛けてファイルクローズさせて,
USBなどで抜き差しして再度activateさせるという荒業も許容してくれます.
まあ,どっちでもいい,という気持ちがかなりあるんですが,
出来れば開発の指針を,いろんなところで示してもらえると
とっても良いと思っています.
//////////////////////////////////////////////
菅 佑樹 (すが ゆうき)
E-mail: ysuga @ ysuga.net
研究者関連: http://www.ysuga.net/research
ロボット関連: http://www.ysuga.net/robot
インラインスケート: http://www.ysuga.net/inline
おしらせ: RTミドルウエアやってます
http://www.ysuga.net/robot/rtm
/////////////////////////////////////////////
(2010/12/30 1:28), kurihara shinji wrote:
> OpenRTM-aistメーリングリストの皆様
>
> お世話になっております。
> 産総研 栗原です。
>
> 先日開催されましたSI2010での「RTミドルウエアコンテスト2010」にてご質問またはコメ
> ント頂きました内容について、遅くなりましたが、回答させて頂きます。
>
> なお、本メールは、SI2010に参加されなかった方にも情報を共有していただければと思い
> 、この ML に流させて頂いております。
>
> Q1. onInitialize/onFinalizeでデバイスのオープン処理やメモリ領域の確保/破棄を
> 行うのではなく、onActivated/onDeactivatedで行った方がよいのでは?
>
> A1. ・そのRTCにて、デバイスを独占したい場合などは、onInitializeの段階にてデバイ
> スデバイスのオープンを行った方がよい。
> ・RAII(Resource Acquisition Is Initialization)イディオムをRTCにあてはめると
> onInitialize/onFinalizeに相当するのでは。
> ・RTCで扱うデバイスや、目的によりonInitializeにするか、onActivatedにするか
> 判断する必要がある。
>
> Q2. OpenRTM-aist-1.0.0ではバッファリングポリシーが導入されており、データが読み込
> み可能かを確認するためにはread() の戻り値を確認すればよいので、isNew()は必要
> ないのでは?
> A2. ・バッファが空の状態でもブロックしないようにバッファリングポリシーが正しく設
> 定されていればread()での確認でもよい。
> ・バッファが空の状態で、データが読み込み可能かを確認するためには、read()より
> isNew()の方が処理が単純で早い。
> ・read()では、push接続においてInPortに届いたデータが最新かどうかの判断はでき
> ない。
>
> Q3. 開発者は、push型で接続するのを想定して作成されたが、ユーザーがpull型で接続さ
> れるといった懸念事項がある。これを制限するにはどうすればよいのか?
> A3. ・component.confなどのコンフィグレーションファイルにてdataflow_typeを指定
> して、これを接続時に反映できるように検討させて頂きます。
>
> Q4. デベロッパーズガイドを早く完成させてほしい。
> A4. 現在、執筆中ですので、もうしばらくお待ち下さい。
>
>
> 何かコメント等ございましたら、ご遠慮なく頂ければと存じます。
> 以上、宜しくお願い致します。
>
openrtm-users メーリングリストの案内