[openrtm-users 00503] ポートの型による処理速度の差異.

5 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 5日 12時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00503] ポートの型による処理速度の差異.

OpenRTMメーリングリストの皆様

始めまして,私は榎本と申します.

Windows+VisualStudio2005+OpenRTM-0.4.2の環境において
画像処理を使ったコーポネント作成に取り組んでおります.

unsigned char型の配列の画像データ(320×240,RGB)を送受信するプログラムの作成を
OpenRTMでのTimedcharSeqという型を使っておりましたところ,
遅い速度でしか通信できませんでした.

ところが,
データポートにTimedOctetSeqという型に変えてみたところ,
劇的に処理速度を改善することができました.

そこでお尋ねしたいのですけれども,

未定義
root
オフライン
Last seen: 5日 12時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00504] ポートの型による処理速度の差異.

榎本様

産総研 安藤です

> OpenRTMメーリングリストの皆様
>
> 始めまして,私は榎本と申します.
>
> Windows+VisualStudio2005+OpenRTM-0.4.2の環境において
> 画像処理を使ったコーポネント作成に取り組んでおります.
>
> unsigned char型の配列の画像データ(320×240,RGB)を送受信するプログラムの作成を
> OpenRTMでのTimedcharSeqという型を使っておりましたところ,
> 遅い速度でしか通信できませんでした.

具体的にはどの程度の速度(フレームレート)で
通信できてますでしょうか?

> ところが,
> データポートにTimedOctetSeqという型に変えてみたところ,
> 劇的に処理速度を改善することができました.
>
> そこでお尋ねしたいのですけれども,
>

root
オフライン
Last seen: 5日 12時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00513] ポートの型による処理速度の差異.

産総研 安藤 様
榎本です.

丁寧な御返答ありがとうございます.

>具体的にはどの程度の速度(フレームレート)で
>通信できてますでしょうか?

簡単なベンチマークとして,
onExecuteの中でwindwosのタイマ関数(timeGetTime)での時間計測を
行い,一サイクルにかかる時間を測定しましたので,
結果をお伝え致します.

私が作成しましたプログラムは,
StereoCamera ・・・ieee1394カメラからカラー画像(320×240)を取得し,RTCに送信.(今回は一個のカメラのみ(一個のデータポートのみ)の使用です)
VisionProcess ・・・RTCから画像を受信し,表示.
のようなものです.
時間の単位は[ms](ミリ秒)です.

○TimedOctetSeqの時
 RTCを結線していない時(state1.jpg)
 StereoCamera 64〜68[ms]
 VisionProcess 31[ms]

 RTCを結線している時(state2.jpg)
 StereoCamera 65〜68[ms]
 VisionProcess 31[ms]

○TimedCharSeqの時
 RTCを結線していない時(state1.jpg)
 StereoCamera 65〜68[ms]
 VisionProcess 31[ms]

 RTCを結線している時(state2.jpg)
 StereoCamera 81〜84[ms]
 VisionProcess 31[ms]

TimedOctetSeqではRTCを繋ぐ時,繋がない時の遅延がほとんどありませんが,
TimedCharSeqではRTCを繋ぐとOutport側で遅延が起きている印象を受けます.

宜しくお願いいたします.

2008/07/07 11:23 Ando Noriaki :
> 榎本様
>
> 産総研 安藤です
>
>> OpenRTMメーリングリストの皆様
>>
>> 始めまして,私は榎本と申します.
>>
>> Windows+VisualStudio2005+OpenRTM-0.4.2の環境において
>> 画像処理を使ったコーポネント作成に取り組んでおります.
>>
>> unsigned char型の配列の画像データ(320×240,RGB)を送受信するプログラムの作成を
>> OpenRTMでのTimedcharSeqという型を使っておりましたところ,
>> 遅い速度でしか通信できませんでした.
>
> 具体的にはどの程度の速度(フレームレート)で
> 通信できてますでしょうか?
>
>> ところが,
>> データポートにTimedOctetSeqという型に変えてみたところ,
>> 劇的に処理速度を改善することができました.
>>
>> そこでお尋ねしたいのですけれども,
>>

root
オフライン
Last seen: 5日 12時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00514] ポートの型による処理速度の差異.

榎本様

産総研 安藤です

詳細な調査ありがとうございました。
結果を見ると、やはり char と octet のマーシャリング速度および
codeset変換の差が通信速度に効いているようですね。

コンポーネント接続前は、StereoCameraコンポーネントがデータを
OutPortのバッファに書き込むだけですので、単なるメモリ間のデータコピー
しか発生しないのですが、接続が確立されると、バッファにコピーされたデータを
CORBAのAny型に変換して、VisionProcessコンポーネントのInPortの
put()関数の引数として渡すため、そこで発生するマーシャリングの速度
およびcodeset変換の差が処理速度に影響するのだと思います。

ただし、処理時間の増加分が20msですので、
320x240x3 = 225kB/20ms
codeset変換処理というのがそれほど大変な処理なのかは
疑問の残るところではありますが。。。。

ともかく、char型は文字列であることを前提としてコード変換なども入っているので、
今回の例のように画像データのようなバイナリデータはoctetを使用するのが正しそうですね。

2008/07/09 12:43 yosuke enomoto :
> 産総研 安藤 様
> 榎本です.
>
> 丁寧な御返答ありがとうございます.
>
>>具体的にはどの程度の速度(フレームレート)で
>>通信できてますでしょうか?
>
> 簡単なベンチマークとして,
> onExecuteの中でwindwosのタイマ関数(timeGetTime)での時間計測を
> 行い,一サイクルにかかる時間を測定しましたので,
> 結果をお伝え致します.
>
> 私が作成しましたプログラムは,
> StereoCamera ・・・ieee1394カメラからカラー画像(320×240)を取得し,RTCに送信.(今回は一個のカメラのみ(一個のデータポートのみ)の使用です)
> VisionProcess ・・・RTCから画像を受信し,表示.
> のようなものです.
> 時間の単位は[ms](ミリ秒)です.
>
> ○TimedOctetSeqの時
> RTCを結線していない時(state1.jpg)
> StereoCamera 64〜68[ms]
> VisionProcess 31[ms]
>
> RTCを結線している時(state2.jpg)
> StereoCamera 65〜68[ms]
> VisionProcess 31[ms]
>
> ○TimedCharSeqの時
> RTCを結線していない時(state1.jpg)
> StereoCamera 65〜68[ms]
> VisionProcess 31[ms]
>
> RTCを結線している時(state2.jpg)
> StereoCamera 81〜84[ms]
> VisionProcess 31[ms]
>
> TimedOctetSeqではRTCを繋ぐ時,繋がない時の遅延がほとんどありませんが,
> TimedCharSeqではRTCを繋ぐとOutport側で遅延が起きている印象を受けます.
>
> 宜しくお願いいたします.
>
> 2008/07/07 11:23 Ando Noriaki :
>> 榎本様
>>
>> 産総研 安藤です
>>
>>> OpenRTMメーリングリストの皆様
>>>
>>> 始めまして,私は榎本と申します.
>>>
>>> Windows+VisualStudio2005+OpenRTM-0.4.2の環境において
>>> 画像処理を使ったコーポネント作成に取り組んでおります.
>>>
>>> unsigned char型の配列の画像データ(320×240,RGB)を送受信するプログラムの作成を
>>> OpenRTMでのTimedcharSeqという型を使っておりましたところ,
>>> 遅い速度でしか通信できませんでした.
>>
>> 具体的にはどの程度の速度(フレームレート)で
>> 通信できてますでしょうか?
>>
>>> ところが,
>>> データポートにTimedOctetSeqという型に変えてみたところ,
>>> 劇的に処理速度を改善することができました.
>>>
>>> そこでお尋ねしたいのですけれども,
>>>

root
オフライン
Last seen: 5日 12時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00521] ポートの型による処理速度の差異.

OpenRTM-users MLの皆様

産総研 安藤です

OpenRTMで実際にコンポーネント開発をされている方にお尋ねいたします。

このMLのスレッドで議論がありましたように、バイナリデータ列をデータポート
で送受信する際にはTimeOctetSeq型あるいはOctetのシーケンス型が
適切であることがわかりました。

そうしますと、文字列の送受信にはTimedStringを使用するのが適当ですし、
TimedCharSeq型を利用する場面というのがあまり思いつきません。
同様の理由でTimedChar型もあまり使いでがないようにも思います。

そこで、OpenRTMのデータポートで使用するデフォルト型として、
TimedCharSeqとTimedCharを廃止しようと考えております。
もちろん、ユーザ定義型でこれらの型の使用を禁止するもの
ではありません。

もし、これらの型の有効な利用方法をご存じの方が
いらっしゃいましたらご意見等いただければ幸いです。

2008/07/09 19:09 Ando Noriaki :
> 榎本様
>
> 産総研 安藤です
>
> 詳細な調査ありがとうございました。
> 結果を見ると、やはり char と octet のマーシャリング速度および
> codeset変換の差が通信速度に効いているようですね。
>
> コンポーネント接続前は、StereoCameraコンポーネントがデータを
> OutPortのバッファに書き込むだけですので、単なるメモリ間のデータコピー
> しか発生しないのですが、接続が確立されると、バッファにコピーされたデータを
> CORBAのAny型に変換して、VisionProcessコンポーネントのInPortの
> put()関数の引数として渡すため、そこで発生するマーシャリングの速度
> およびcodeset変換の差が処理速度に影響するのだと思います。
>
> ただし、処理時間の増加分が20msですので、
> 320x240x3 = 225kB/20ms
> codeset変換処理というのがそれほど大変な処理なのかは
> 疑問の残るところではありますが。。。。
>
>
> ともかく、char型は文字列であることを前提としてコード変換なども入っているので、
> 今回の例のように画像データのようなバイナリデータはoctetを使用するのが正しそうですね。
>
>
> 2008/07/09 12:43 yosuke enomoto :
>> 産総研 安藤 様
>> 榎本です.
>>
>> 丁寧な御返答ありがとうございます.
>>
>>>具体的にはどの程度の速度(フレームレート)で
>>>通信できてますでしょうか?
>>
>> 簡単なベンチマークとして,
>> onExecuteの中でwindwosのタイマ関数(timeGetTime)での時間計測を
>> 行い,一サイクルにかかる時間を測定しましたので,
>> 結果をお伝え致します.
>>
>> 私が作成しましたプログラムは,
>> StereoCamera ・・・ieee1394カメラからカラー画像(320×240)を取得し,RTCに送信.(今回は一個のカメラのみ(一個のデータポートのみ)の使用です)
>> VisionProcess ・・・RTCから画像を受信し,表示.
>> のようなものです.
>> 時間の単位は[ms](ミリ秒)です.
>>
>> ○TimedOctetSeqの時
>> RTCを結線していない時(state1.jpg)
>> StereoCamera 64〜68[ms]
>> VisionProcess 31[ms]
>>
>> RTCを結線している時(state2.jpg)
>> StereoCamera 65〜68[ms]
>> VisionProcess 31[ms]
>>
>> ○TimedCharSeqの時
>> RTCを結線していない時(state1.jpg)
>> StereoCamera 65〜68[ms]
>> VisionProcess 31[ms]
>>
>> RTCを結線している時(state2.jpg)
>> StereoCamera 81〜84[ms]
>> VisionProcess 31[ms]
>>
>> TimedOctetSeqではRTCを繋ぐ時,繋がない時の遅延がほとんどありませんが,
>> TimedCharSeqではRTCを繋ぐとOutport側で遅延が起きている印象を受けます.
>>
>> 宜しくお願いいたします.
>>
>> 2008/07/07 11:23 Ando Noriaki :
>>> 榎本様
>>>
>>> 産総研 安藤です
>>>
>>>> OpenRTMメーリングリストの皆様
>>>>
>>>> 始めまして,私は榎本と申します.
>>>>
>>>> Windows+VisualStudio2005+OpenRTM-0.4.2の環境において
>>>> 画像処理を使ったコーポネント作成に取り組んでおります.
>>>>
>>>> unsigned char型の配列の画像データ(320×240,RGB)を送受信するプログラムの作成を
>>>> OpenRTMでのTimedcharSeqという型を使っておりましたところ,
>>>> 遅い速度でしか通信できませんでした.
>>>
>>> 具体的にはどの程度の速度(フレームレート)で
>>> 通信できてますでしょうか?
>>>
>>>> ところが,
>>>> データポートにTimedOctetSeqという型に変えてみたところ,
>>>> 劇的に処理速度を改善することができました.
>>>>
>>>> そこでお尋ねしたいのですけれども,
>>>>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン

初めての方へ

Windows msi(インストーラ) パッケージ (サンプルの実行ができます。)

C++,Python,Java,
Toolsを含む
1.2.1-RELEASE

RTコンポーネントを開発するためには開発環境のインストールが必要です。詳細はダウンロードページ

統計

Webサイト統計
ユーザ数:1840
プロジェクト統計
RTコンポーネント297
RTミドルウエア28
ツール22
文書・仕様書1

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク