[openrtm-users 00538] Re: コンポーネントの接続について

kurihara shinji shinji.kurihara @ aist.go.jp
2008年 7月 18日 (金) 20:18:47 JST


小島 様

産総研 栗原です。

> >> エラーの原因は、AutoConnect()の orb->destroy(); にあるようです。
> >> orbのポインタを取得するために、CORBA::ORB_init()をコールされております
> 
> init()関数が二度呼び出されて、削除されたことでCORBA側でエラーとなっていたんですね。
> 納得しました。
上記について、"エラーの原因・・・"と"orbのポインタ・・・"の間に改行を
入れるのを忘れておりましたので内容的には継ったように見えますが、
エラーの原因は、"AutoConnect()の orb->destroy();"であり、
CORBA::ORB_init()のコールは影響していないと思います。

紛らわしい書き方をしてしまい、申し訳ございません。

omniORBの実装では、CORBA_init()を複数回呼び出した場合、既に存在するORB
への参照を返すようになっていたかと思います。
よって、ORB_init()を複数回コールした事が今回のエラーの原因ではなく、
orb->destroy()で唯一のORBをdestroy()してしまった事がエラーの原因では
ないかと思います。

"orbのポインタ・・・"を記述した理由としては、
RTC::Manager::init(argc,argv);をコールする事で、既にORB_init()が
コールされており、ORBのポインタも取得できますので、それを利用する方が
簡単ではないかと思い、お知らせさせて頂きました。


> ところが、エラー状態からは回避しましたが、onExecute()内で、isNew() 関数が新しいデータを取得していなくても
> したように振る舞うようになってしまいました。
これは、ConsoleOut::AutoConnect()内で、subs_typeが"Periodic"になってい
るためだと思います。
Periodicの場合、周期的にOutPortからInPortへデータが出力され続けます
ので、InPort側でのisNewは毎回trueになります。
subs_typeを"Flush"または、"New"にされるとよろしいかと思います。
ちなみに、SimpleIOサンプルでは、デフォルトでは"Flush"になっています。


以上、宣しくお願い致します。





On Fri, 18 Jul 2008 19:47:16 +0900
"Takashi Kojima" <tkjim48 @ gmail.com> wrote:

> 産総研 栗原様
> 
> ご返事ありがとうございます。
> >> エラーの原因は、AutoConnect()の orb->destroy(); にあるようです。
> >> orbのポインタを取得するために、CORBA::ORB_init()をコールされております
> 
> init()関数が二度呼び出されて、削除されたことでCORBA側でエラーとなっていたんですね。
> 納得しました。
> 
> ご教授されたとおり、
> >>   CorbaNaming naming(m_pORB, "127.0.0.1:9876");
> としたところ、接続ができ、エラー状態にならないことが確認できました。
> 
> ところが、エラー状態からは回避しましたが、onExecute()内で、isNew() 関数が新しいデータを取得していなくても
> したように振る舞うようになってしまいました。
> 
> おそらくどこかでセグメンテーション違反などの、エラーが起こってしまっているように思うのですが
> 思い当たるような原因はありますでしょうか?
> (valgrindで実行してみた限り、セグメンテーション違反の兆候などはなさそうです)
> 
> ※表示される前に、受信前に初期化しても、表示されるものが、ほとんどかわらないところをみると、
>  データを受信したフラグがたち、初期化されていないバッファから数値が読み込まれているようです。
> 
> 度重なる質問で恐縮ですが、よろしくお願いいたします。
> 
> 2008/07/18 17:38 kurihara shinji <shinji.kurihara @ aist.go.jp>:
> > 小島 様
> >
> > 産総研 栗原です。
> >
> > orb-destroy();をコメントアウトして下さい。
> >
> > 上記を忘れておりました。
> >
> >
> > 以上、宣しくお願い致します。
> >
> >
> >
> > On Fri, 18 Jul 2008 17:35:07 +0900
> > kurihara shinji <shinji.kurihara @ aist.go.jp> wrote:
> >
> >> 小島 様
> >>
> >> お世話になっております。
> >> 産総研 栗原です。
> >>
> >> 添付のサンプルを拝見させて頂きました。
> >>
> >> エラーの原因は、AutoConnect()の orb->destroy(); にあるようです。
> >> orbのポインタを取得するために、CORBA::ORB_init()をコールされております
> >> が、コンポーネントオブジェクトはRTObject_imple を継承しておりまして、
> >> RTObject_impleではCORBA::ORB_var m_pORB;がprotectedで宣言されておりま
> >> すので、m_pORBを使用できます。
> >>
> >> よって、
> >>   CORBA::ORB_var orb = CORBA::ORB_init(_argc, _argv);
> >>   CorbaNaming naming(orb, "127.0.0.1:9876");
> >> の行は、
> >>   CorbaNaming naming(m_pORB, "127.0.0.1:9876");
> >> に書き換えることができます。
> >>
> >> それと、rtc.confのnaming.formatsも下記のようにして下さい。
> >>
> >>  naming.formats: %n.rtc
> >>
> >>
> >> 以上、宣しくお願い致します。
> >>
> >>
> >>
> >> On Fri, 18 Jul 2008 17:13:38 +0900
> >> "Takashi Kojima" <tkjim48 @ gmail.com> wrote:
> >>
> >> > 静岡大 清水様
> >> >
> >> > お返事ありがとうございます。
> >> > ソースコードをのせたつもりが、添付し忘れていました。
> >> >
> >> > > ソースがないのではっきりとしたことはわかりませんが、
> >> > > CORBAの例外が発生している可能性があります。
> >> > > RTCは、onXXXの中から例外が投げられると、
> >> > > エラー状態に遷移します。
> >> > > もしCORBAオペレーションの例外catchをしていないのなら、
> >> > > それをやってみるとエラー原因がわかるかもしれません。
> >> >
> >> > なるほど。そうであれば、OnExecuteに入っていないのもうなずけます。
> >> > CORBAオペレーションの例外はキャッチしていないので、
> >> > 調べて試してみようと思います。
> >> > (catchについては、理解が足りず、よくわかっておりませんが・・・)
> >> >
> >> > 一応、エラーの出ているソースも添付いたします。
> >> >
> >> > 小島
> >> >
> >> > 2008/07/18 14:46 Masayuki Shimizu <masayuki.shimizu @ aist.go.jp>:
> >> > > 小島樣
> >> > >
> >> > > 静岡大 清水です。
> >> > >
> >> > >> 1.ConsoleOutをアクティベートしたとき、自動で接続が行
> >> > > われるように改造をおこなったのですが
> >> > >> ConsoleOutがエラー状態に陥ってしまいました。
> >> > >
> >> > > ソースがないのではっきりとしたことはわかりませんが、
> >> > > CORBAの例外が発生している可能性があります。
> >> > > RTCは、onXXXの中から例外が投げられると、
> >> > > エラー状態に遷移します。
> >> > > もしCORBAオペレーションの例外catchをしていないのなら、
> >> > > それをやってみるとエラー原因がわかるかもしれません。
> >> > >
> >> > > 清水
> >> > >
> >> > > --- Takashi Kojima <tkjim48 @ gmail.com> wrote:
> >> > >
> >> > >> 中央大学の小島と申します。
> >> > >>
> >> > >> いつもお世話になっております。
> >> > >>
> >> > >> あるコンポーネントが、別のコンポーネントを探し接続する
> >> > > ということを
> >> > >> 実現したく、SimpleIOを改造しております。
> >> > >>
> >> > >> そこで問題と不明な点がありましたのでご質問させていただ
> >> > > きます。
> >> > >>
> >> > >> 1.ConsoleOutをアクティベートしたとき、自動で接続が行
> >> > > われるように改造をおこなったのですが
> >> > >> ConsoleOutがエラー状態に陥ってしまいました。
> >> > >>
> >> > >> 接続に関しては、ConnectorCompにあるコードを、ほぼ、そ
> >> > > のまま使いました。
> >> > >> (ConnectorCompのActivateの部分はコメントアウトしまし
> >> > > た)
> >> > >>
> >> > >> OnExecuteにも移行していないようなので、なんらかの内部
> >> > > 的なエラーがあったのでしょうか?
> >> > >> とすれば、どうすれば、エラーにならずに接続が可能になる
> >> > > でしょうか?
> >> > >> (RTC-Link上では接続まではできていることを確認いたしま
> >> > > した)
> >> > >>
> >> > >> エラーがでるプログラムを添付いたしますので、修正法方等
> >> > > を、ご教授願えると幸いです。
> >> > >>
> >> > >> 2.ConsoleOutでは、自分の持つポートについてはわかって
> >> > > いるので、
> >> > >>
> >> > > 添付したプログラムのconout->get_ports()からthis->gets_ports()
> >> > >> という形に変更して、接続することが出来たのですが、これ
> >> > > は操作としてまずい操作でしょうか。
> >> > >>
> >> > >> registerされたかどうかが不明であるという点以外では、問
> >> > > 題がなさそうに思うのですが、
> >> > >> いかがでしょうか?
> >> > >> (1の現象は起こっているので、正常に動作するかの確認は
> >> > > 出来きておりません)
> >> > >>
> >> > >> 環境:
> >> > >> FC6, OpenRTM-aist-0.4.2
> >> > >> kernel-2.6.18-1.2798.fc6-i686
> >> > >>
> >> > >>
> >> > > __________________________________________________________________
> >> > >>
> >> > >> Takashi KOJIMA
> >> > >>
> >> > >> Kunii labratory ,Chuo University
> >> > >>
> >> > >> ADDRESS: 1-13-27, Kasuga, Bunkyo-ku, Tokyo, 112-8551
> >> > >> Phone : +81-3-3817-1866 (Lab)
> >> > >> FAX : +81-3-3817-1847 (Subject-of-study preparation
> >> > >> room)
> >> > >> E-Mail : tkjim48 @ gmail.com
> >> > >>
> >> > > __________________________________________________________________
> >> > >>
> >> > >>
> >> > >
> >> > >
> >> >
> >>
> >>
> >> --
> >> ----------
> >> 栗原 眞二
> >> shinji.kurihara @ aist.go.jp
> >> kurihara @ imagination.co.jp
> >>
> >
> >
> > --
> > ----------
> > 栗原 眞二
> > shinji.kurihara @ aist.go.jp
> > kurihara @ imagination.co.jp
> >
> >
> 
> 
> 
> -- 
> __________________________________________________________________
> 
> 小島 隆史 / Takashi KOJIMA
> 
> The Kunii labratory master grade 2nd in Chuo University
> 
> ADDRESS: 1-13-27, Kasuga, Bunkyo-ku, Tokyo, 112-8551
> Phone : +81-3-3817-1866 (Lab)
> FAX : +81-3-3817-1847 (Subject-of-study preparation room)
> E-Mail : takashi @ hmsl.elect.chuo-u.ac.jp , tkjim48 @ gmail.com
> __________________________________________________________________
> 


-- 
----------
栗原 眞二
shinji.kurihara @ aist.go.jp
kurihara @ imagination.co.jp



openrtm-users メーリングリストの案内