共有メモリを用いた RTコンポーネント間の画像データ通信 筑波大学 ○渡部 努 相山 康道
RTミドルウェアによるシステムの構築 現在,RTミドルウェアの利用が進んでいる ⇒機能要素のRTコンポーネント化を行うことで 要素の再利用性が向上する
RTミドルウェアによるシステムの構築 再利用性のある要素は,分割してComp化したい 何度も通信を行うため, 例)画像処理 例)マニピュレータ(力制御) 何度も通信を行うため, 通信にかかる時間が処理全体の時間に 大きく影響する
OpenRTM-aistにおける通信方法 ホスト間通信をサポートするためCORBAを利用 同一ホスト上Comp間でもCORBAを利用するため, データの通信を行う際,通信時間に遅延が発生する ⇒処理時間に関してシビアな要求をされるシステムの場合, 通信の遅延のためCompによるシステム構築が不可能
提案手法 Comp間で共有するメモリ空間を持つ ⇒共有メモリを経由してデータの授受を行うことで, 高速な通信を実現する ⇒共有メモリを経由してデータの授受を行うことで, 高速な通信を実現する 異なるホスト間では共有メモリは利用できない ⇒前提:高速な処理が求められるものは 同一ホスト上で実行されるであろう 通信対象のデータとして,画像データを取り扱う
提案手法 以下のようにしてメモリの共有を行う CompA CompB 共有空間名“α” 共有メモリ 空間α 共有メモリ空間α 共有メモリ “画像データ”
提案手法 複数段対応 1対多対応 CompA CompB CompC CompD CompA CompB CompC 名称“α” “β” “γ” CompD 共有空間α 共有空間β 共有空間γ 1対多対応 名称“α” CompA CompB CompC 共有空間α
実装方法 共有メモリ通信を容易にするためのクラス ⇒Comp内の画像データ1つにつきインスタンスが1つ必要 IplImage *img; IplImage *Init(CvSize size, int depth, int channels, char *SMname); IplImage *Init(char *SMname); void Release(); void Read(); void Write(); void IsNew(); ⇒Comp内の画像データ1つにつきインスタンスが1つ必要 OS Windows XP RTM OpenRTM-aist 0.4.2 etc. OpenCV
実装した様子 複数段や1対多にも対応
実験と結果 実際に通信にかかる時間を計測した ⇒共有メモリを用いることで通信時間を短縮できた 640×480のカラー画像を使用 送信側CompのWrite()の後と受信側CompのIsNew()の後とで時刻を取得し,差分を通信時間とした 共有メモリによる通信: 0.4μs データポートによる通信: 5.7ms ⇒共有メモリを用いることで通信時間を短縮できた
まとめ Comp間の通信の遅延を解消するために, 共有メモリを用いた通信手法を提案した 処理時間にシビアな要求をされるシステムも RTコンポーネント化が可能になると考えられる 本手法を応用することで,画像データ以外にも 適応が可能である
動画による比較 共有メモリを用いた通信 データポートを用いた通信