[openrtm-users 00323] Re: 動的な入出力ポートの変化について

Takashi Kojima tkjim48 @ gmail.com
2007年 12月 14日 (金) 10:35:53 JST


中央大学の小島です。
いつもお世話になっております。

先日の、送信したデータがおかしくなることの原因がおそらくわかりました。

07/12/10 に Takashi Kojima<tkjim48 @ gmail.com> さんは書きました:
> 中央大学の小島です。
>
> お世話になっております。
>
> > > 動的なポートで問題が2点おこり、質問があります。
> > >
> > > 1つめとしては、ポートが接続されている場合、
> > > ポートを削除することができなくなるようです。
> > > (現象からみると、deletePortByNameは実行されているが
> > > 実際には削除されていないようです)
> >
> > 削除されていないと判断された理由は何でしょう?
> > RtcLinkのアイコンでしょうか?
>
> そうですね、アイコンで判断してしまおります。
> もしかして切断されてるのでしょうか?
>
> しかし、何も接続されていなかったポートに関しては、
> RtcLink上では問題なく消えますので、なんとなく納得がいかない感じがしました。
>
> また、この問題は毎回おこるわけではなく、
> 起こる場合と起こらない場合があり、その境目もよくわかりませんが、
> 少なくとも接続されていたポートのみにおこっています。
>
> そのときには、複数のポートが接続されているときによくおこることから、
> 切断がうまくいかず、登録の削除がうまくいってないのではと推測いたしました。
>
>
> > > クラスリファレンスを探しましたが、disconnect_all関数かと
> > > 思ったのですが、継承していないようで、利用することができませんでした。
> >
> > データポートクラスは、ポートそのものではないので、disconnect_allは使えません。
> > 以下のようにすれば、disconnect_allを呼ぶことはできると思います。
>  m_portAdmin.getPort("データポートのポート名").disconnect_all();
>
> ありがとうございます。試してみます。
>
> > > それとも、これはバグでしょうか?何かアイデアがあればお願いします。
> >
> > ちょっと調べてみます。
> >
> > > 2つめとしては、動的なポートを接続し、データを送信したところデータが
> > > おかしくなります。
> > > 一度、ポートを削除し、もう一度作成すると、現在はたいていなおります。
> > > 何か考えられるような原因はありますでしょうか?
> >
> > この辺も原因はわかりません。
> > これについても調査してみます。
> > そちらでも何かわかりましたらお知らせいただけませんか。
> >
> > よろしくお願いいたします。
>
> 承知いたしました。
> こちらでも、何かわかりましたらご連絡差し上げようと思います。
>

原因としましては、vector型を用いたポートにバインドする変数の動的追加が
原因だと考えられます。

vector型はあらかじめ容量を確保している領域が足りなくなると、
そのメモリの内容をコピーして、別の場所に確保するという性質が
あることを思い出しました。

すなわち、ポートが持っている先のアドレスは、push_backされたことにより
そこにはかつてあったが、全く関係ない場所に、取り残されていると考えられます。

そこで、起こっていた現象を詳しく調べてみると
「一度目のポートの動的追加ではデータがおかしい」
「二度目にポートを増やすと正しいデータ」
「データがおかしいくなるのは、決まって前に増やしたポート群(3個増やすと1,2個目)」
という現象でした。
初めて動的変化を行ったときには、領域が確保されていませんが、
2度目では1度目で、領域が確保されているため別領域にメモリを確保するという現象がおこらなくてすみ、
正しいデータになるのではないかと考えられます。

しっかりとした確認はできておりませんが、サービスポートで同じようなことを
していたときに、セグメンテーション違反等のエラーが発生していたのですが、解決できたので、おそらく、こちらも同様のことが原因だと思います。
(論理的には間違っていないとは思うのですが、もし違っていたらすいません)

>
> > > <環境>
> > >  OS: Fedora core 6 (kernel:2.6.18-1.2798)
> > >  コンパイラ:gcc 4.1.1-30
> > >  CORBA:omniORB 4.0.7
> > >  ACE: ace 5.5.4
> > >  OpenRTM-aist:OpenRTM-aist-0.4.1-RELEASE
> > >
> > > 以上2点、何か情報等ございましたらお願いいたします。
> > >
> > > <----------------------------------------------------->
> > >  中央大学大学院 理工学研究科
> > >  電気電子情報通信工学専攻
> > >  博士課程前期1年 國井研究室
> > >
> > >  小島 隆史 [Takashi Kojima]
> > >
> > >  ADRESS:       〒112-8551 東京都文京区春日1-13-27
> > >  TEL :          03-3817-1866(研究室)
> > >  FAX :          03-3817-1847(学科準備室)
> > >  E-Mail:       takashi @ hmsl.elect.chuo-u.ac.jp
> > > <----------------------------------------------------->
> > >
> >
> >
> > --
> > 安藤慶昭@独立行政法人産業技術総合研究所 研究員
> >                   知能システム研究部門 タスクインテリジェンス研究グループ
> >                   〒305-8568 茨城県つくば市梅園1-1-1 中央第2
> >                   TEL: 029-861-5981 FAX: 029-861-5971
> >                   n-ando @ aist.go.jp, n-ando @ ieee.org
>
> <----------------------------------------------------->
>  中央大学大学院 理工学研究科
>  電気電子情報通信工学専攻
>  博士課程前期1年 國井研究室
>
>  小島 隆史 [Takashi Kojima]
>
>  ADRESS:       〒112-8551 東京都文京区春日1-13-27
>  TEL :          03-3817-1866(研究室)
>  FAX :          03-3817-1847(学科準備室)
>  E-Mail:       takashi @ hmsl.elect.chuo-u.ac.jp
> <----------------------------------------------------->
>


-- 
<----------------------------------------------------->
  中央大学大学院 理工学研究科
  電気電子情報通信工学専攻
  博士課程前期1年 國井研究室

  小島 隆史 [Takashi Kojima]

  ADRESS: 	〒112-8551 東京都文京区春日1-13-27
  TEL : 	 03-3817-1866(研究室)
  FAX : 	 03-3817-1847(学科準備室)
  E-Mail: 	takashi @ hmsl.elect.chuo-u.ac.jp
<----------------------------------------------------->



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