#ifndef __INTELLIROBOT_IDL__
#define __INTELLIROBOT_IDL__

#include<BasicDataType.idl>
#include<ExtendedDataTypes.idl>





module RTC {
#ifndef __FURO_IDL__
#define __FURO_IDL__











#endif
#ifndef __SGI_IDL__
#define __SGI_IDL__

 


  struct TimedVelocity {
    Time tm;
    double v;
    double w;
  };

  struct TimedOdometry { 
    Time tm;
    double x;
    double y;
    double theta;
  };

  struct TimedScan {
    Time tm;
    TimedLongSeq scan;
  };


#endif





#ifndef __TOHOKU_IDL__
#define __TOHOKU_IDL__


  struct Path{
    short type;
    short coordinate;
    double x;
    double y;
    double theta;
    double v;
    double w;
    double r;
    Time tm;
  };

  struct PathSeq{
    sequence<Path> path_list;
    Time tm;
  };



 struct TimedObstacle{
    double x;
    double y;
    double r;
    Time tm;
  };
  
  struct TimedMovingObstacle{
    double x;
    double y;
    double r;
    double theta;
    double vel;
    Time tm;
  };
  
  struct TimedObstacles{
    Time tm;
    sequence<TimedObstacle> obstacles;  
  };
  
  struct TimedMovingObstacles{
    Time tm;
    sequence<TimedMovingObstacle> obstacles;  
  };


 struct TimedParticle{
    double x;
    double y;
    double theta;
    double w;
  };

  struct TimedParticles{ 
    Time  tm;
    double timestamp;
    long id;
    sequence<TimedParticle> particles;
  };


#endif


#ifndef __DENTSU_IDL__
#define __DENTSU_IDL__
  

 
   //Formation用のIDL
  //Definition of formation member///////////////////////
  //struct TimedFormationMember{
  //  Time tm;			//
  //  short group;		//Group number
  //  short shape;		//
  //  short leader_id;        //Leader's id
  //  TimedVelocity input;	//Control input for leader
  //  sequence<short> member; //Follower's id list
  //};//ver2.2以前
  struct TimedFormationMember{
    Time tm;		     //
    short group;	     //Group number
    short shape;	     //
    short leader_id;        //Leader's id
    RTC::Velocity2D input;   //Control input for leader
    sequence<short> member; //Follower's id list
  };//ver2.3対応

  //Definition of formation reference////////////////////
  //struct TimedFormationReference{
  //   Time tm;			//
  //   short id;		//Robot id
  //   short mode;		//Mode 0:notselected,1:leader,2:follower
  //   TimedOdometry lpos;	//Position of leader
  //   TimedVelocity linput;	//Velocity input for leader 
  //   double ref_x;		//Reference position : x
  //   double ref_y;		//Reference position : y
  //}; //ver2.2以前
  struct TimedFormationReference{
     Time tm;			    //
     short id;			    //Robot id
     short mode;		    //Mode 0:notselected,1:leader,2:follower
     RTC::Pose2D lpos;	    		//Position of leader
     RTC::Velocity2D linput;   //Velocity input for leader
     double ref_x;		    //Reference position : x
     double ref_y;		    //Reference position : y
  }; //ver2.3対応

  //Definition of TimedRobotData////////////////////////
  //struct TimedRobotData{
  //  Time tm;			//
  //  short id;			//Vehicle id
  //  TimedOdometry pos;	//Odometry
  //  TimedVelocity vel;	//Velocity(not used)
  //};//ver2.2以前
  struct TimedRobotData{
    Time tm;			//
    short id;			//Vehicle id
    RTC::Pose2D pos;		//Odometry
    RTC::Velocity2D vel;	//Velocity(not used for now)
  };//ver2.3対応

  //Definition of formation reference seq////////////////
  struct FormationReferenceSeq{
      Time tm;				             	//
      TimedFormationReference robot1;		//
      TimedFormationReference robot2;		//
      TimedFormationReference robot3;		//
      TimedFormationReference robot4;		//
      TimedFormationReference robot5;		//
  };

    //Definition of formation member///////////////////////
  struct FormationMemberSeq{
    Time tm;					//
	TimedFormationMember group1;	//
	TimedFormationMember group2;	//
	TimedFormationMember group3;	//
	TimedFormationMember group4;	//
	TimedFormationMember group5;	//
  };

  //Definition of MultiRobotDataSeq//////////////////////
  struct RobotDataSeq{
     Time tm;					//
	 TimedRobotData robot1;
	 TimedRobotData robot2;
	 TimedRobotData robot3;
	 TimedRobotData robot4;
	 TimedRobotData robot5;
  };

  



#endif



//-- [二重読込防止開始位置] ------------------------------------------------------------//
#ifndef __IRS_IDL__										// 条件コンパイル開始
#define __IRS_IDL__										// 条件判断用定義セット
//--------------------------------------------------------------------------------------//


//-- [ヘッダファイル] ------------------------------------------------------------------//
//#include<BasicDataType.idl>									// BasicDataType IDLファイル読み込み
//--------------------------------------------------------------------------------------//


//-- [IDL定義] -------------------------------------------------------------------------//
//module RTC {


	/* [IRS IDL] ********************************************************************/


	//-- [GPS Service Module Output] -----------------------------------------------//

	// GGAメッセージ
	struct Gga_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// UTC測位時刻
		sequence<char> field02;								// 選択された測地系の緯度
		sequence<char> field03;								// 緯度の半径 N - 北緯 S - 南緯
		sequence<char> field04;								// 選択された測地系の経度
		sequence<char> field05;								// 経度の半径 E - 東経 W - 西経
		sequence<char> field06;								// GPSの質の表示
		sequence<char> field07;								// 測位に使用した衛星数
		sequence<char> field08;								// HDOP
		sequence<char> field09;								// 選択された測地系のジオイドからの高さ
		sequence<char> field10;								// M
		sequence<char> field11;								// ジオイドと楕円体との差
		sequence<char> field12;								// M
		sequence<char> field13;								// ディファレンシャルGPSデータのエイジ [秒]
		sequence<char> field14;								// ディファレンシャル参照局 ID [0000 〜 1023]
		sequence<char> field15;								// チェックサム

	};

	// GLLメッセージ
	struct Gll_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// 選択された測地系の緯度
		sequence<char> field02;								// 緯度の半径 N - 北緯 S - 南緯
		sequence<char> field03;								// 選択された測地系の経度
		sequence<char> field04;								// 経度の半径 E - 東経 W - 西経
		sequence<char> field05;								// UTC測位時刻
		sequence<char> field06;								// 測位状態
		sequence<char> field07;								// 測位システムモードインジケータ
		sequence<char> field08;								// チェックサム

	};

	// GNSメッセージ
	struct Gns_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// UTC測位時刻
		sequence<char> field02;								// 選択された測地系の緯度
		sequence<char> field03;								// 緯度の半径 N - 北緯 S - 南緯
		sequence<char> field04;								// 選択された測地系の経度
		sequence<char> field05;								// 経度の半径 E - 東経 W - 西経
		sequence<char> field06;								// モードの表示
		sequence<char> field07;								// 測位に使用した衛星数
		sequence<char> field08;								// HDOP
		sequence<char> field09;								// 選択された測地系のジオイドからの高さ
		sequence<char> field10;								// ジオイドと楕円体との差
		sequence<char> field11;								// ディファレンシャルGPSデータのエイジ [秒]
		sequence<char> field12;								// チェックサム
		sequence<char> gp_field00;							// メッセージ [GPS]
		sequence<char> gp_field01;							// UTC測位時刻 [GPS]
		sequence<char> gp_field07;							// 測位に使用した衛星数 [GPS]
		sequence<char> gp_field11;							// ディファレンシャルGPSデータのエイジ [秒]
		sequence<char> gp_field12;							// チェックサム [GPS]
		sequence<char> gl_field00;							// メッセージ [GLONASS]
		sequence<char> gl_field01;							// UTC測位時刻 [GLONASS]
		sequence<char> gl_field07;							// 測位に使用した衛星数 [GLONASS]
		sequence<char> gl_field11;							// ディファレンシャルGLONASSデータのエイジ [秒]
		sequence<char> gl_field12;							// チェックサム [GLONASS]

	};

	// GRSメッセージ
	struct Grs_message{

		sequence<char> gp_field00;							// メッセージ
		sequence<char> gp_field01;							// UTC時刻
		sequence<char> gp_field02;							// モード
		sequence<char> gp_field03_01;							// 01番目:距離残差の並び
		sequence<char> gp_field03_02;							// 02番目:距離残差の並び
		sequence<char> gp_field03_03;							// 03番目:距離残差の並び
		sequence<char> gp_field03_04;							// 04番目:距離残差の並び
		sequence<char> gp_field03_05;							// 05番目:距離残差の並び
		sequence<char> gp_field03_06;							// 06番目:距離残差の並び
		sequence<char> gp_field03_07;							// 07番目:距離残差の並び
		sequence<char> gp_field03_08;							// 08番目:距離残差の並び
		sequence<char> gp_field03_09;							// 09番目:距離残差の並び
		sequence<char> gp_field03_10;							// 10番目:距離残差の並び
		sequence<char> gp_field03_11;							// 11番目:距離残差の並び
		sequence<char> gp_field03_12;							// 12番目:距離残差の並び
		sequence<char> gp_field04;							// チェックサム
		sequence<char> gl_field00;							// メッセージ
		sequence<char> gl_field01;							// UTC時刻
		sequence<char> gl_field02;							// モード
		sequence<char> gl_field03_01;							// 01番目:距離残差の並び
		sequence<char> gl_field03_02;							// 02番目:距離残差の並び
		sequence<char> gl_field03_03;							// 03番目:距離残差の並び
		sequence<char> gl_field03_04;							// 04番目:距離残差の並び
		sequence<char> gl_field03_05;							// 05番目:距離残差の並び
		sequence<char> gl_field03_06;							// 06番目:距離残差の並び
		sequence<char> gl_field03_07;							// 07番目:距離残差の並び
		sequence<char> gl_field03_08;							// 08番目:距離残差の並び
		sequence<char> gl_field03_09;							// 09番目:距離残差の並び
		sequence<char> gl_field03_10;							// 10番目:距離残差の並び
		sequence<char> gl_field03_11;							// 11番目:距離残差の並び
		sequence<char> gl_field03_12;							// 12番目:距離残差の並び
		sequence<char> gl_field04;							// チェックサム

	};

	// GSAメッセージ
	struct Gsa_message{

		sequence<char> gp_field00;							// メッセージ
		sequence<char> gp_field01;							// 切り替えモード
		sequence<char> gp_field02;							// 測位モード
		sequence<char> gp_field03_01;							// 01番目:衛星番号
		sequence<char> gp_field03_02;							// 02番目:衛星番号
		sequence<char> gp_field03_03;							// 03番目:衛星番号
		sequence<char> gp_field03_04;							// 04番目:衛星番号
		sequence<char> gp_field03_05;							// 05番目:衛星番号
		sequence<char> gp_field03_06;							// 06番目:衛星番号
		sequence<char> gp_field03_07;							// 07番目:衛星番号
		sequence<char> gp_field03_08;							// 08番目:衛星番号
		sequence<char> gp_field03_09;							// 09番目:衛星番号
		sequence<char> gp_field03_10;							// 10番目:衛星番号
		sequence<char> gp_field03_11;							// 11番目:衛星番号
		sequence<char> gp_field03_12;							// 12番目:衛星番号
		sequence<char> gp_field04;							// PDOP
		sequence<char> gp_field05;							// HDOP
		sequence<char> gp_field06;							// VDOP
		sequence<char> gp_field07;							// チェックサム
		sequence<char> gl_field00;							// メッセージ
		sequence<char> gl_field01;							// 切り替えモード
		sequence<char> gl_field02;							// 測位モード
		sequence<char> gl_field03_01;							// 01番目:衛星番号
		sequence<char> gl_field03_02;							// 02番目:衛星番号
		sequence<char> gl_field03_03;							// 03番目:衛星番号
		sequence<char> gl_field03_04;							// 04番目:衛星番号
		sequence<char> gl_field03_05;							// 05番目:衛星番号
		sequence<char> gl_field03_06;							// 06番目:衛星番号
		sequence<char> gl_field03_07;							// 07番目:衛星番号
		sequence<char> gl_field03_08;							// 08番目:衛星番号
		sequence<char> gl_field03_09;							// 09番目:衛星番号
		sequence<char> gl_field03_10;							// 10番目:衛星番号
		sequence<char> gl_field03_11;							// 11番目:衛星番号
		sequence<char> gl_field03_12;							// 12番目:衛星番号
		sequence<char> gl_field04;							// PDOP
		sequence<char> gl_field05;							// HDOP
		sequence<char> gl_field06;							// VDOP
		sequence<char> gl_field07;							// チェックサム

	};

	// GSTメッセージ
	struct Gst_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// UTC測位時間
		sequence<char> field02;								// 距離入力エラーの標準偏差 [メートル]
		sequence<char> field03;								// 誤差楕円の長半径 [メートル]
		sequence<char> field04;								// 誤差楕円の短半径 [メートル]
		sequence<char> field05;								// 誤差楕円の方向 [真北からの度]
		sequence<char> field06;								// 緯度RMSエラー
		sequence<char> field07;								// 経度RMSエラー
		sequence<char> field08;								// 高度RMSエラー
		sequence<char> field09;								// チェックサム

	};

	// GSVメッセージ
	struct Gsv_message{

		sequence<char> gp1_field00;							// メッセージ
		sequence<char> gp1_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gp1_field02;							// メッセージ番号 [1]
		sequence<char> gp1_field03;							// 受信している衛星数
		sequence<char> gp1_field04_1_1;							// 01番:衛星番号
		sequence<char> gp1_field04_1_2;							// 01番:仰角 [度]
		sequence<char> gp1_field04_1_3;							// 01番:方位角 [度]
		sequence<char> gp1_field04_1_4;							// 01番:C/A信号のSNR [db * Hz]
		sequence<char> gp1_field04_2_1;							// 02番:衛星番号
		sequence<char> gp1_field04_2_2;							// 02番:仰角 [度]
		sequence<char> gp1_field04_2_3;							// 02番:方位角 [度]
		sequence<char> gp1_field04_2_4;							// 02番:C/A信号のSNR [db * Hz]
		sequence<char> gp1_field04_3_1;							// 03番:衛星番号
		sequence<char> gp1_field04_3_2;							// 03番:仰角 [度]
		sequence<char> gp1_field04_3_3;							// 03番:方位角 [度]
		sequence<char> gp1_field04_3_4;							// 03番:C/A信号のSNR [db * Hz]
		sequence<char> gp1_field04_4_1;							// 04番:衛星番号
		sequence<char> gp1_field04_4_2;							// 04番:仰角 [度]
		sequence<char> gp1_field04_4_3;							// 04番:方位角 [度]
		sequence<char> gp1_field04_4_4;							// 04番:C/A信号のSNR [db * Hz]
		sequence<char> gp1_field05;							// チェックサム
		sequence<char> gp2_field00;							// メッセージ
		sequence<char> gp2_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gp2_field02;							// メッセージ番号 [2]
		sequence<char> gp2_field03;							// 受信している衛星数
		sequence<char> gp2_field04_1_1;							// 05番:衛星番号
		sequence<char> gp2_field04_1_2;							// 05番:仰角 [度]
		sequence<char> gp2_field04_1_3;							// 05番:方位角 [度]
		sequence<char> gp2_field04_1_4;							// 05番:C/A信号のSNR [db * Hz]
		sequence<char> gp2_field04_2_1;							// 06番:衛星番号
		sequence<char> gp2_field04_2_2;							// 06番:仰角 [度]
		sequence<char> gp2_field04_2_3;							// 06番:方位角 [度]
		sequence<char> gp2_field04_2_4;							// 06番:C/A信号のSNR [db * Hz]
		sequence<char> gp2_field04_3_1;							// 07番:衛星番号
		sequence<char> gp2_field04_3_2;							// 07番:仰角 [度]
		sequence<char> gp2_field04_3_3;							// 07番:方位角 [度]
		sequence<char> gp2_field04_3_4;							// 07番:C/A信号のSNR [db * Hz]
		sequence<char> gp2_field04_4_1;							// 08番:衛星番号
		sequence<char> gp2_field04_4_2;							// 08番:仰角 [度]
		sequence<char> gp2_field04_4_3;							// 08番:方位角 [度]
		sequence<char> gp2_field04_4_4;							// 08番:C/A信号のSNR [db * Hz]
		sequence<char> gp2_field05;							// チェックサム
		sequence<char> gp3_field00;							// メッセージ
		sequence<char> gp3_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gp3_field02;							// メッセージ番号 [3]
		sequence<char> gp3_field03;							// 受信している衛星数
		sequence<char> gp3_field04_1_1;							// 09番:衛星番号
		sequence<char> gp3_field04_1_2;							// 09番:仰角 [度]
		sequence<char> gp3_field04_1_3;							// 09番:方位角 [度]
		sequence<char> gp3_field04_1_4;							// 09番:C/A信号のSNR [db * Hz]
		sequence<char> gp3_field04_2_1;							// 10番:衛星番号
		sequence<char> gp3_field04_2_2;							// 10番:仰角 [度]
		sequence<char> gp3_field04_2_3;							// 10番:方位角 [度]
		sequence<char> gp3_field04_2_4;							// 10番:C/A信号のSNR [db * Hz]
		sequence<char> gp3_field04_3_1;							// 11番:衛星番号
		sequence<char> gp3_field04_3_2;							// 11番:仰角 [度]
		sequence<char> gp3_field04_3_3;							// 11番:方位角 [度]
		sequence<char> gp3_field04_3_4;							// 11番:C/A信号のSNR [db * Hz]
		sequence<char> gp3_field04_4_1;							// 12番:衛星番号
		sequence<char> gp3_field04_4_2;							// 12番:仰角 [度]
		sequence<char> gp3_field04_4_3;							// 12番:方位角 [度]
		sequence<char> gp3_field04_4_4;							// 12番:C/A信号のSNR [db * Hz]
		sequence<char> gp3_field05;							// チェックサム
		sequence<char> gl1_field00;							// メッセージ
		sequence<char> gl1_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gl1_field02;							// メッセージ番号 [1]
		sequence<char> gl1_field03;							// 受信している衛星数
		sequence<char> gl1_field04_1_1;							// 01番:衛星番号
		sequence<char> gl1_field04_1_2;							// 01番:仰角 [度]
		sequence<char> gl1_field04_1_3;							// 01番:方位角 [度]
		sequence<char> gl1_field04_1_4;							// 01番:C/A信号のSNR [db * Hz]
		sequence<char> gl1_field04_2_1;							// 02番:衛星番号
		sequence<char> gl1_field04_2_2;							// 02番:仰角 [度]
		sequence<char> gl1_field04_2_3;							// 02番:方位角 [度]
		sequence<char> gl1_field04_2_4;							// 02番:C/A信号のSNR [db * Hz]
		sequence<char> gl1_field04_3_1;							// 03番:衛星番号
		sequence<char> gl1_field04_3_2;							// 03番:仰角 [度]
		sequence<char> gl1_field04_3_3;							// 03番:方位角 [度]
		sequence<char> gl1_field04_3_4;							// 03番:C/A信号のSNR [db * Hz]
		sequence<char> gl1_field04_4_1;							// 04番:衛星番号
		sequence<char> gl1_field04_4_2;							// 04番:仰角 [度]
		sequence<char> gl1_field04_4_3;							// 04番:方位角 [度]
		sequence<char> gl1_field04_4_4;							// 04番:C/A信号のSNR [db * Hz]
		sequence<char> gl1_field05;							// チェックサム
		sequence<char> gl2_field00;							// メッセージ
		sequence<char> gl2_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gl2_field02;							// メッセージ番号 [2]
		sequence<char> gl2_field03;							// 受信している衛星数
		sequence<char> gl2_field04_1_1;							// 05番:衛星番号
		sequence<char> gl2_field04_1_2;							// 05番:仰角 [度]
		sequence<char> gl2_field04_1_3;							// 05番:方位角 [度]
		sequence<char> gl2_field04_1_4;							// 05番:C/A信号のSNR [db * Hz]
		sequence<char> gl2_field04_2_1;							// 06番:衛星番号
		sequence<char> gl2_field04_2_2;							// 06番:仰角 [度]
		sequence<char> gl2_field04_2_3;							// 06番:方位角 [度]
		sequence<char> gl2_field04_2_4;							// 06番:C/A信号のSNR [db * Hz]
		sequence<char> gl2_field04_3_1;							// 07番:衛星番号
		sequence<char> gl2_field04_3_2;							// 07番:仰角 [度]
		sequence<char> gl2_field04_3_3;							// 07番:方位角 [度]
		sequence<char> gl2_field04_3_4;							// 07番:C/A信号のSNR [db * Hz]
		sequence<char> gl2_field04_4_1;							// 08番:衛星番号
		sequence<char> gl2_field04_4_2;							// 08番:仰角 [度]
		sequence<char> gl2_field04_4_3;							// 08番:方位角 [度]
		sequence<char> gl2_field04_4_4;							// 08番:C/A信号のSNR [db * Hz]
		sequence<char> gl2_field05;							// チェックサム
		sequence<char> gl3_field00;							// メッセージ
		sequence<char> gl3_field01;							// メッセージの数 [1 〜 3]
		sequence<char> gl3_field02;							// メッセージ番号 [3]
		sequence<char> gl3_field03;							// 受信している衛星数
		sequence<char> gl3_field04_1_1;							// 09番:衛星番号
		sequence<char> gl3_field04_1_2;							// 09番:仰角 [度]
		sequence<char> gl3_field04_1_3;							// 09番:方位角 [度]
		sequence<char> gl3_field04_1_4;							// 09番:C/A信号のSNR [db * Hz]
		sequence<char> gl3_field04_2_1;							// 10番:衛星番号
		sequence<char> gl3_field04_2_2;							// 10番:仰角 [度]
		sequence<char> gl3_field04_2_3;							// 10番:方位角 [度]
		sequence<char> gl3_field04_2_4;							// 10番:C/A信号のSNR [db * Hz]
		sequence<char> gl3_field04_3_1;							// 11番:衛星番号
		sequence<char> gl3_field04_3_2;							// 11番:仰角 [度]
		sequence<char> gl3_field04_3_3;							// 11番:方位角 [度]
		sequence<char> gl3_field04_3_4;							// 11番:C/A信号のSNR [db * Hz]
		sequence<char> gl3_field04_4_1;							// 12番:衛星番号
		sequence<char> gl3_field04_4_2;							// 12番:仰角 [度]
		sequence<char> gl3_field04_4_3;							// 12番:方位角 [度]
		sequence<char> gl3_field04_4_4;							// 12番:C/A信号のSNR [db * Hz]
		sequence<char> gl3_field05;							// チェックサム

	};

	// HDTメッセージ
	struct Hdt_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// 真北に対する方向 [度]
		sequence<char> field02;								// T
		sequence<char> field03;								// チェックサム

	};

	// RMCメッセージ
	struct Rmc_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// UTC測位時刻
		sequence<char> field02;								// 測位状態
		sequence<char> field03;								// 選択された測地系の緯度
		sequence<char> field04;								// 緯度の半径 N - 北緯 S - 南緯
		sequence<char> field05;								// 選択された測地系の経度
		sequence<char> field06;								// 経度の半径 E - 東経 W - 西経
		sequence<char> field07;								// 対地速度 [ノット]
		sequence<char> field08;								// 真北に対する進行方向 [度]
		sequence<char> field09;								// 日付 [日/月/年]
		sequence<char> field10;								// 磁北変動量 [度]
		sequence<char> field11;								// 磁北変動方向 E - 東方向 W - 西方向
		sequence<char> field12;								// 測位モード
		sequence<char> field13;								// チェックサム

	};

	// VTGメッセージ
	struct Vtg_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// 真北に対する進行方向 [度]
		sequence<char> field02;								// T
		sequence<char> field03;								// 磁北に対する進行方向 [度]
		sequence<char> field04;								// M
		sequence<char> field05;								// 水平速度 [ノット]
		sequence<char> field06;								// N
		sequence<char> field07;								// 水平速度 [km/h]
		sequence<char> field08;								// K
		sequence<char> field09;								// モード
		sequence<char> field10;								// チェックサム

	};

	// ZDAメッセージ
	struct Zda_message{

		sequence<char> field00;								// メッセージ
		sequence<char> field01;								// UTC時刻
		sequence<char> field02;								// 日 [01 〜 31]
		sequence<char> field03;								// 月 [01 〜 12]
		sequence<char> field04;								// 年
		sequence<char> field05;								// ローカルゾーン時 [- 13 〜 + 13]
		sequence<char> field06;								// ローカルゾーン分 [00 〜 59]
		sequence<char> field07;								// チェックサム

	};

	// GPS Service Module 出力ポート
	/********************************************************************************/
	/*  tm   -> ZDAメッセージより生成したタイムスタンプ				*/
	/*  mode -> モード [メッセージの種類 0:未出力, 1:出力]				*/
	/*           bit 0 : GGAメッセージ						*/
	/*           bit 1 : GLLメッセージ						*/
	/*           bit 2 : GNSメッセージ						*/
	/*           bit 3 : GRSメッセージ						*/
	/*           bit 4 : GSAメッセージ						*/
	/*           bit 5 : GSTメッセージ						*/
	/*           bit 6 : GSVメッセージ						*/
	/*           bit 7 : HDTメッセージ						*/
	/*           bit 8 : RMCメッセージ						*/
	/*           bit 9 : VTGメッセージ						*/
	/*           bit10 : ZDAメッセージ						*/
	/*           bit11 : リザーブ							*/
	/*           bit12 : リザーブ							*/
	/*           bit13 : リザーブ							*/
	/*           bit14 : リザーブ							*/
	/*           bit15 : リザーブ							*/
	/********************************************************************************/
	struct TimedLegacyData{

		Time tm;									// タイムスタンプ
		unsigned short mode;								// モード
		Gga_message gga;								// GGAメッセージ
		Gll_message gll;								// GLLメッセージ
		Gns_message gns;								// GNSメッセージ
		Grs_message grs;								// GRSメッセージ
		Gsa_message gsa;								// GSAメッセージ
		Gst_message gst;								// GSTメッセージ
		Gsv_message gsv;								// GSVメッセージ
		Hdt_message hdt;								// HDTメッセージ
		Rmc_message rmc;								// RMCメッセージ
		Vtg_message vtg;								// VTGメッセージ
		Zda_message zda;								// ZDAメッセージ

	};

	//------------------------------------------------------------------------------//


	//-- [GPS Information Processing Module Output] --------------------------------//

	// GPS Information Processing Module 出力ポート
	/********************************************************************************/
	/*  tm        -> latitude，longitudeを取得したメッセージより			*/
	/*               生成したタイムスタンプ						*/
	/*  latitude  -> GPSの緯度 DDMMSS.SS [DMS]					*/
	/*  longitude -> GPSの経度 DDMMSS.SS [DMS]					*/
	/********************************************************************************/
	struct TimedJgd2000Position{

		Time tm;									// タイムスタンプ
		double latitude;								// GPSの位置 [緯度]
		double longitude;								// GPSの位置 [経度]

	};

	// GPS Information Processing Module 出力ポート
	/********************************************************************************/
	/*  tm        -> Inportより取得したタイムスタンプ				*/
	/********************************************************************************/
	struct TimedGpsData{

		Time tm;									// タイムスタンプ
		TimedJgd2000Position Jgd2000Position;						// 緯度・経度

	};

	//------------------------------------------------------------------------------//


	//-- [Coodinate Transformation Module output] ----------------------------------//

	// Coodinate Transformation Module 入出力ポート
	/********************************************************************************/
	/*  tm -> x，yデータ取得したときのタイムスタンプ				*/
	/*  x  -> 平面直角座標系におけるx座標 [m]					*/
	/*  y  -> 平面直角座標系におけるy座標 [m]					*/
	/********************************************************************************/
	struct Timed19Position{

		Time tm;									// タイムスタンプ
		double x;									// x座標 [m]
		double y;									// y座標 [m]

	};

	// Coodinate Transformation Module 入出力ポート
	/********************************************************************************/
	/*  tm -> x，yデータ取得したときのタイムスタンプ				*/
	/*  x  -> ロボット座標系におけるx座標 [m]					*/
	/*  y  -> ロボット座標系におけるy座標 [m]					*/
	/********************************************************************************/
	struct TimedRobotPosition{

		Time tm;									// タイムスタンプ
		double x;									// x座標 [m]
		double y;									// y座標 [m]

	};

	//------------------------------------------------------------------------------//


	//-- [Management of Area Map Module Output] ------------------------------------//

	// Management of Area Map Module 出力ポート
	/********************************************************************************/
	/*  tm           -> 動作トリガー起動時の入力タイムスタンプ			*/
	/*  mode         -> アクセスモード						*/
	/*                  bit 0 : 0 -> raster image	1 -> vector image		*/
	/*                  bit 1 : 0 -> read		1 -> write			*/
	/*                  bit 2 : リザーブ						*/
	/*                  bit 3 : リザーブ						*/
	/*                  bit 4 : リザーブ						*/
	/*                  bit 5 : リザーブ						*/
	/*                  bit 6 : リザーブ						*/
	/*                  bit 7 : リザーブ						*/
	/*                  bit 8 : リザーブ						*/
	/*                  bit 9 : リザーブ						*/
	/*                  bit10 : リザーブ						*/	
	/*                  bit11 : リザーブ						*/
	/*                  bit12 : リザーブ						*/
	/*                  bit13 : リザーブ						*/
	/*                  bit14 : リザーブ						*/
	/*                  bit15 : リザーブ						*/
	/*  location     -> 地域名               [ディレクトリ名]			*/
	/*  mapset       -> 利用者マップセット名 [ディレクトリ名]			*/
	/*  type         -> データタイプ         [ファイル名]				*/
	/*  origin_x     -> 対象原点x座標 [mm]						*/
	/*  origin_y     -> 対象原点y座標 [mm]						*/
	/*  size_x       -> 原点からの対象範囲x座標 [mm]				*/
	/*  size_y       -> 原点からの対象範囲y座標 [mm]				*/
	/*  explanation  -> 取得した地図の説明						*/
	/*  map_origin_x -> 参照した地図の原点x座標 [mm]				*/
	/*  map_origin_y -> 参照した地図の原点y座標 [mm]				*/
	/*  map_size_x   -> 参照した地図の元のサイズ [x座標:mm]				*/
	/*  map_size_y   -> 参照した地図の元のサイズ [y座標:mm]				*/
	/*  pixel_size_x -> 取得した地図の1ピクセルあたりのサイズ [x座標:mm]		*/
	/*  pixel_size_y -> 取得した地図の1ピクセルあたりのサイズ [y座標:mm]		*/
	/*  category     -> 地図データのカテゴリ					*/
	/*  mapdata      -> カテゴリに対応した地図データ				*/
	/*										*/
	/*       [注意] (origin_x, origin_y)を原点(左下)として,				*/
	/*              (size_x)*(size_y)の長方形となる．				*/
	/*       [注意] categoryのデータ区切りはカンマとなる．				*/
	/*       [注意] categoryは，カテゴリ番号->カテゴリの順番に送信される．		*/
	/*										*/
	/********************************************************************************/
	struct TimedMapData{

		Time tm;									// タイムスタンプ
		unsigned short mode;								// アクセスモード
		sequence<char> location;							// 地域名
		sequence<char> mapset;								// 利用者マップセット名
		sequence<char> type;								// データタイプ
		long origin_x;									// 対象原点x座標 [mm]
		long origin_y;									// 対象原点y座標 [mm]
		unsigned long size_x;								// 対象範囲x座標 [mm]
		unsigned long size_y;								// 対象範囲y座標 [mm]
		sequence<char> explanation;							// 地図説明
		long map_origin_x;								// 地図原点x座標 [mm]
		long map_origin_y;								// 地図原点y座標 [mm]
		unsigned long map_size_x;							// 地図サイズx座標 [mm]
		unsigned long map_size_y;							// 地図サイズy座標 [mm]
		unsigned long pixel_size_x;							// ピクセルサイズx座標 [mm]
		unsigned long pixel_size_y;							// ピクセルサイズy座標 [mm]
		sequence<char> category;							// カテゴリデータ
		sequence<unsigned long> mapdata;						// 地図データ

	};

	// アーク
	struct Arc{

		unsigned long start_id;								// 接続開始ノードID
		unsigned long end_id;								// 接続終了ノードID
		double cost;									// コスト

	};

	// ノード
	struct Node{

		unsigned long id;								// ノードID
		double x;									// x座標 [m]
		double y;									// y座標 [m]
		double theta;									// 方向 [rad]
		sequence<char> explanation;

	};

	// Management of Area Map Module 出力ポート
	/********************************************************************************/
	/*  tm        -> タイムスタンプ							*/
	/*  arc_data  -> アークデータ							*/
	/*  node_data -> ノードデータ							*/
	/********************************************************************************/
	struct TimedArcNode{

		Time tm;									// タイムスタンプ
		sequence<Arc> arc_data;								// アークデータ
		sequence<Node> node_data;							// ノードデータ

	};

	// 直線ランドマーク
	struct Line{

		double x;									// x座標 [m]
		double y;									// y座標 [m]
		double theta;									// 角度 [rad]
		double r;									// 長さの1/2 [m]

	};

	// 円ランドマーク
	struct Circle{

		double x;									// x座標 [m]
		double y;									// y座標 [m]
		double r;									// 半径 [m]

	};

	// Management of Area Map Module 出力ポート
	/********************************************************************************/
	/*  tm          -> タイムスタンプ						*/
	/*  line_data   -> 直線ランドマークデータ					*/
	/*  circle_data -> 円ランドマークデータ						*/
	/********************************************************************************/
	struct TimedLandmark{

		Time tm;									// タイムスタンプ
		sequence<Line> line_data;							// 直線ランドマークデータ
		sequence<Circle> circle_data;							// 円ランドマークデータ

	};

	//------------------------------------------------------------------------------//


	//-- [Hazard Mesh Module Output] -----------------------------------------------//

	// Hazard Mesh Module 出力ポート
	/********************************************************************************/
	/*  tm       -> gettimeofday関数より生成したタイムスタンプ			*/
	/*  trigger  -> 動作を開始するためのトリガー [0から1へ変化した場合のみ反応]	*/
	/*  mode     -> アクセスモード							*/
	/*              bit 0 : 0 -> raster image	1 -> vector image		*/
	/*              bit 1 : 0 -> read		1 -> write			*/
	/*              bit 2 : リザーブ						*/
	/*              bit 3 : リザーブ						*/
	/*              bit 4 : リザーブ						*/
	/*              bit 5 : リザーブ						*/
	/*              bit 6 : リザーブ						*/
	/*              bit 7 : リザーブ						*/
	/*              bit 8 : リザーブ						*/
	/*              bit 9 : リザーブ						*/
	/*              bit10 : リザーブ						*/	
	/*              bit11 : リザーブ						*/
	/*              bit12 : リザーブ						*/
	/*              bit13 : リザーブ						*/
	/*              bit14 : リザーブ						*/
	/*              bit15 : リザーブ						*/
	/*  location -> 地域名               [ディレクトリ名]				*/
	/*  mapset   -> 利用者マップセット名 [ディレクトリ名]				*/
	/*  type     -> データタイプ         [ファイル名]				*/
	/*  origin_x -> 対象原点x座標 [mm]						*/
	/*  origin_y -> 対象原点y座標 [mm]						*/
	/*  size_x   -> 原点からの対象範囲x座標 [mm]					*/
	/*  size_y   -> 原点からの対象範囲y座標 [mm]					*/
	/*										*/
	/*       [注意] (origin_x, origin_y)を原点(左下)として,				*/
	/*              (size_x)*(size_y)の長方形となる．				*/
	/*										*/
	/********************************************************************************/
	struct TimedMapOrder{

		Time tm;									// タイムスタンプ
		unsigned short trigger;								// 動作トリガー
		unsigned short mode;								// アクセスモード
		sequence<char> location;							// 地域名
		sequence<char> mapset;								// 利用者マップセット名
		sequence<char> type;								// データタイプ
		long origin_x;									// 対象原点x座標 [mm]
		long origin_y;									// 対象原点y座標 [mm]
		unsigned long size_x;								// 対象範囲x座標 [mm]
		unsigned long size_y;								// 対象範囲y座標 [mm]

	};

	//------------------------------------------------------------------------------//


	//-- [Dijkstra Module Output] --------------------------------------------------//

	// ロボット座標
	/********************************************************************************/
	/*  x  -> ロボット座標系におけるx座標 [m]					*/
	/*  y  -> ロボット座標系におけるy座標 [m]					*/
	/********************************************************************************/
	struct RobotPosition{

		double x;									// x座標 [m]
		double y;									// y座標 [m]

	};

	// Dijkstra Module 出力ポート
	/********************************************************************************/
	/*  tm        -> gettimeofday関数より生成したタイムスタンプ			*/
	/*  path_data -> ロボット座標系における目標位置情報				*/
	/********************************************************************************/
	struct TimedPath{

		Time tm;									// タイムスタンプ
		sequence<RobotPosition> path_data;						// 目標位置情報

	};

	// Dijkstra Module 出力ポート
	/********************************************************************************/
	/*  tm           -> gettimeofday関数より生成したタイムスタンプ			*/
	/*  trigger      -> 動作を開始するためのトリガー [0から1へ変化した場合のみ反応]	*/
	/*  mode         -> アクセスモード						*/
	/*                  bit 0 : 0 -> raster image	1 -> vector image		*/
	/*                  bit 1 : 0 -> read		1 -> write			*/
	/*                  bit 2 : リザーブ						*/
	/*                  bit 3 : リザーブ						*/
	/*                  bit 4 : リザーブ						*/
	/*                  bit 5 : リザーブ						*/
	/*                  bit 6 : リザーブ						*/
	/*                  bit 7 : リザーブ						*/
	/*                  bit 8 : リザーブ						*/
	/*                  bit 9 : リザーブ						*/
	/*                  bit10 : リザーブ						*/	
	/*                  bit11 : リザーブ						*/
	/*                  bit12 : リザーブ						*/
	/*                  bit13 : リザーブ						*/
	/*                  bit14 : リザーブ						*/
	/*                  bit15 : リザーブ						*/
	/*  location     -> 地域名               [ディレクトリ名]			*/
	/*  mapset       -> 利用者マップセット名 [ディレクトリ名]			*/
	/*  type         -> データタイプ         [ファイル名]				*/
	/*  origin_x     -> 対象原点x座標 [mm]						*/
	/*  origin_y     -> 対象原点y座標 [mm]						*/
	/*  size_x       -> 原点からの対象範囲x座標 [mm]				*/
	/*  size_y       -> 原点からの対象範囲y座標 [mm]				*/
	/*  pixel_size_x -> 取得した地図の1ピクセルあたりのサイズ [x座標:mm]		*/
	/*  pixel_size_y -> 取得した地図の1ピクセルあたりのサイズ [y座標:mm]		*/
	/*										*/
	/*       [注意] (origin_x, origin_y)を原点(左下)として,				*/
	/*              (size_x)*(size_y)の長方形となる．				*/
	/*										*/
	/********************************************************************************/
	struct TimedMeshOrder{

		Time tm;									// タイムスタンプ
		unsigned short trigger;								// 動作トリガー
		unsigned short mode;								// アクセスモード
		sequence<char> location;							// 地域名
		sequence<char> mapset;								// 利用者マップセット名
		sequence<char> type;								// データタイプ
		long origin_x;									// 対象原点x座標 [mm]
		long origin_y;									// 対象原点y座標 [mm]
		unsigned long size_x;								// 対象範囲x座標 [mm]
		unsigned long size_y;								// 対象範囲y座標 [mm]
		unsigned long pixel_size_x;							// ピクセルサイズx座標 [mm]
		unsigned long pixel_size_y;							// ピクセルサイズy座標 [mm]

	};

	//------------------------------------------------------------------------------//


	/********************************************************************************/


//};
//--------------------------------------------------------------------------------------//


//-- [二重読込防止終了位置] ------------------------------------------------------------//
#endif												// 条件コンパイル終了
//--------------------------------------------------------------------------------------//


};

#ifndef __IDOU_IDL__
#define __IDOU_IDL__

module IIS {

  struct TimedVelocity {
    RTC::Time tm;
    sequence<long> id;
    double vx;
    double vy;
    double w;
    sequence<double> error;
  };

  struct TimedPosition {
    RTC::Time tm;
    sequence<long> id;
    double x;
    double y;
    double theta;
    sequence<double> error;
  };

#if 0
  //ExtendedDataTypes.idl
    struct Point2D
    {
        /// X coordinate in metres.
        double x;
        /// Y coordinate in metres.
        double y;
    };

    struct Pose2D
    {
        /// 2D position.
        Point2D position;
        /// Heading in radians.
        double heading;
    };

    struct Velocity2D
    {
        /// Velocity along the x axis in metres per second.
        double vx;
        /// Velocity along the y axis in metres per second.
        double vy;
        /// Yaw velocity in radians per second.
        double va;
    };
#endif

  //20100902 推定位置
  //20100902 確率的自己位置姿勢 (推定位置と同じ)
  //20100902 目的地
  //20100902 走行状態
    struct TimedPose2D {
    RTC::Time tm;
    sequence<long> id;
    RTC::Pose2D data;
    sequence<double> error;
  };

  //20100902 経路計画(旧)
  struct TimedPose2DSeq {
    RTC::Time tm;
    sequence<long> id;
    sequence<RTC::Pose2D> data;
    sequence<double> error;
  };

  //20100930 経路計画(9/13PS3M案)
  struct TimedPath2DSeq {
    RTC::Time tm;
    sequence<long> id;
    sequence<RTC::Pose2D> pose;
    sequence<RTC::Velocity2D> velocity;
    sequence<double> error;
  };

  //20100902 走行指令 走行情報(旧 間違い)
  struct Velocity2D {
    RTC::Time tm;
    sequence<long> id;
    RTC::Velocity2D data;
    sequence<double> error;
  };

  //20101001 走行指令 走行情報
  struct TimedVelocity2D {
    RTC::Time tm;
    sequence<long> id;
    RTC::Velocity2D data;
    sequence<double> error;
  };

  //20100902 走行状態　別案
  struct TimedState {
    RTC::Time tm;
    long id;
    boolean isStop;
  };


  
  
  
  



};

#endif





#endif
