=============================================================================
自己／他者運動分離認識テスト用コンポーネント version 1.0 2011/12/02
東京大学　情報理工学系研究科　情報システム工学室　次世代プロジェクト担当
Mail: itngr@jsk.t.u-tokyo.ac.jp
=============================================================================

-----概要-----

MotionClassifierから出力される自己・他者運動のデータ形式を変換するコン
ポーネントです．

-----コンポーネントの使い方-----

-- コンパイル
../idlと../functionsでmakeした後，このディレクトリでmakeを行ってください．
以下のようなファイルが生成されます．
1. ./build/bin/ClassifiedPointsConverterComp
2. ./build/lib/ClassifiedPointsConverter.so
3. ./build/bin/ClassifiedPointsConverterTest.conf (このディレクトリにあるファイルのコピー)
4. ./build/bin/rtc.conf (上位ディレクトリにあるファイルのコピー)

-- 起動方法
例えば以下のように実行できます．
% cd ./build/bin
% ./ClassifiedPointsConverterComp
RTSystemEditorなどでActivateを行い，動作を実行できます．

-----コンポーネントの入出力-----

-- InPort

*TimedWorldQuatCoords in_coords

推定した自己位置と姿勢クオータニオンを入力します。

TimedWorldQuatCoordsは，

============================================================

  struct Quaternion
  {
    double q1;
    double q2;
    double q3;
    double q4;
  };

  struct WorldQuatCoords
  {
    RTC::Vector3D worldpos;
    Quaternion quat;
  };

============================================================

のように定義されております．
WorldQuatCoordsにおいて，
worldposは自己位置をmm単位で表す3次元ベクトルの構造体です．
quatは自己姿勢を表すクオータニオンの構造体です．

*TimedLabeledPCL in_staticpcl
*TimedLabeledPCL in_movingpcl

推定した特徴点群情報を入力します．
特徴点の位置や含まれるラベル番号などの情報を持っています．

TimedLabeledPCLは，

============================================================

  struct LabeledPointCloudPoint
  {
    short count;
    short objectlabel;
    RTC::PointCloudPoint pc_world;
    RTC::PointCloudPoint pc_local;
  };

  typedef sequence<LabeledPointCloudPoint> LabeledPCL;

  struct TimedLabeledPCL
  {
    RTC::Time tm;
    LabeledPCL lpcl;
  };

============================================================

のように定義されております．
LabeledPointCloudPointにおいて，
countはその特徴点が見つかってから数えたフレーム数です．0なら無効，1以上なら有効な特徴点情報であることも示します．
objectlabelはラベル番号を表し，同じ動きをしている塊は同じラベル番号となります．
pc_worldはグローバル座標における特徴点位置を表します．
pc_localはローカル座標における特徴点位置を表します．

in_staticpclは静止していると認識されたラベル内の特徴点群が入力されます．
in_movingpclは移動していると認識されたラベル内の特徴点群が入力されます．


-- OutPort

*TimedFloatSeq Box3D

は入力された自己位置と姿勢クオータニオンをBoxの形式にして出力します．
出力は(x, y, z, roll, pitch, yaw, depth, width, height)の順に値が格納
されています．そのうちdepth,width,heightはconfigで編集可能となっており
ます．

TimedFloatSeqは，

============================================================
  struct TimedFloadSeq
  {
    Time tm;
    sequence<unsigned short> data;
  };
============================================================

のように定義されております．


*PointCloud Point3D

は特徴点群の3DフローデータをPointCloud型のデータに変換して出力します．

PointCloudは，

============================================================
  struct PointCloutPoint
  {
    /// The position of the point.
    Point3D point;
    /// The colour of the point, if any.
    RGBColour colour
  };
============================================================

のように定義されております．


-----ライセンス-----

本ソフトウェアは new BSD License に基づき配布されます．
詳しくは../LICENSE.txtファイルをご覧ください．
