00001 // -*- C++ -*- 00010 #ifndef CEILINGNAVIGATION_H 00011 #define CEILINGNAVIGATION_H 00012 00013 #include <rtm/Manager.h> 00014 #include <rtm/DataFlowComponentBase.h> 00015 #include <rtm/CorbaPort.h> 00016 #include <rtm/DataInPort.h> 00017 #include <rtm/DataOutPort.h> 00018 #include <rtm/idl/BasicDataTypeSkel.h> 00019 00020 #include "std_hdr.h" 00021 00022 #include "intellirobotStub.h" 00023 00024 #include "BlockMatching.h" 00025 #include "ImageData.h" 00026 #include "CeilingMap.h" 00027 00028 using namespace RTC; 00029 00033 class CeilingNavigation 00034 : public RTC::DataFlowComponentBase 00035 { 00036 public: 00037 CeilingNavigation(RTC::Manager* manager); 00038 ~CeilingNavigation(); 00039 00040 virtual RTC::ReturnCode_t onInitialize(); 00041 virtual RTC::ReturnCode_t onStartup(RTC::UniqueId ec_id); 00042 virtual RTC::ReturnCode_t onShutdown(RTC::UniqueId ec_id); 00043 virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id); 00044 virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id); 00045 00046 protected: 00047 std::string m_NavigationMap; /* 天井画像ファイル名 */ 00048 unsigned short m_BlockResolution; /* 画像回転分解能 */ 00049 unsigned short m_BlockSize; /* 画像縮小サイズ */ 00050 double m_BlockCoefficient; /* 画像縮小補正値 */ 00051 unsigned short m_SearchScope; /* マッチング探索範囲 */ 00052 unsigned short m_BlackWhiteValue; /* 2値化閾値 */ 00053 long m_Center_X; /* 画像回転中心座標(X) */ 00054 long m_Center_Y; /* 画像回転中心座標(Y) */ 00055 std::string m_OfflineImage; /* オフラインイメージファイル格納フォルダ名 */ 00056 double m_RealMapHeight; 00057 double m_RealMapWidth; 00058 double m_VirtualMapHeight; 00059 double m_VirtualMapWidth; 00060 00061 unsigned long x_pos; 00062 unsigned long y_pos; 00063 double theta; 00064 00065 double mPerPix;//画像1ピクセルあたりの実世界の長さ[m] 00066 //ロボット座標系は,前方をx,左をyとする. 00067 double camX; //ロボット座標系におけるカメラのx座標 00068 double camY; //ロボット座標系におけるカメラのy座標 00069 //角度については,画像の上方向がロボット座標x軸正方向に一致するように配置するということで固定する. 00070 00071 // </rtc-template> 00072 00073 // DataInPort declaration 00074 // <rtc-template block="inport_declare"> 00075 TimedOctetSeq m_CameraData; 00076 InPort<TimedOctetSeq> m_CameraDataIn; 00077 00078 IIS::TimedPose2D m_LocalizedPosition; 00079 InPort<IIS::TimedPose2D> m_LocalizedPositionIn; 00080 00081 IIS::TimedPose2D m_CeilingPosition; 00082 OutPort<IIS::TimedPose2D> m_CeilingPositionOut; 00083 00084 private: 00085 int dummy; 00086 private: 00087 BlockMatching m_BlockMat; 00088 CeilingMap m_CeilingMap; 00089 00090 }; 00091 00092 00093 extern "C" 00094 { 00095 void CeilingNavigationInit(RTC::Manager* manager); 00096 }; 00097 00098 #endif // CEILINGNAVIGATION_H