00001 #ifndef __STEREO_DATACOLLECTOR_H__
00002 #define __STEREO_DATACOLLECTOR_H__
00003
00004 #include <string>
00005 #include <map>
00006 #include "../visionModule.H"
00007 #include <Capability.H>
00008 #include <ImageSource.H>
00009 #include <pthread.h>
00010 #include <WURDEConfiguration.H>
00011 #include <RangeFinder.H>
00012 #include <Egomotion.H>
00013 #include <fstream>
00014
00015 namespace WURDEVision {
00016
00021 class StereoDataCollector : public VisionOperator {
00022 public:
00023 StereoDataCollector(std::string pName);
00024 ~StereoDataCollector();
00025
00026 void initOperator();
00027 void runOperator(WURDE::WURDEImage image, WURDE::WURDEImage stereo);
00028 void runOperator(WURDE::WURDEImage someImage){}
00029 void quitOperator();
00030
00031 void fileWriterThread1();
00032 void fileWriterThread2();
00033 void fileWriterThread3();
00034 inline void fileWriterThread(WURDE::Time &myTime,IplImage **_mainImage,IplImage **_stereoImage,
00035 WURDE::RangeFinderDataStruct &myRanges, WURDE::EgomotionDataStruct &myEgo,
00036 unsigned int &myIndex, bool &myNewImage,WURDE::RunState &myState);
00037
00038 pthread_t thread1, thread2, thread3,thread4,thread5;
00039 WURDE::RunState t1state,t2state,t3state,t4state,t5state;
00040 bool m_newt1image,m_newt2image,m_newt3image,m_newt4image,m_newt5image;
00041 WURDE::Time t1time,t2time,t3time,t4time,t5time;
00042 IplImage *m_t1image,*m_t2image,*m_t3image,*m_t4image,*m_t5image;
00043 IplImage *m_t1simage,*m_t2simage,*m_t3simage,*m_t4simage,*m_t5simage;
00044 WURDE::RangeFinderDataStruct ranges1,ranges2,ranges3,ranges4,ranges5;
00045 WURDE::EgomotionDataStruct ego1,ego2,ego3,ego4,ego5;
00046 unsigned int index1, index2,index3,index4,index5;
00047
00048 std::string m_imageDir;
00049 std::string m_imagePrefix;
00050
00051 protected:
00052 WURDE::RangeFinder m_myRF;
00053 WURDE::Egomotion m_myEgo;
00054 std::ofstream m_outfile;
00055 std::string m_outfilename;
00056 unsigned int index;
00057 bool m_dolaser;
00058 bool m_doodom;
00059
00060 bool m_run;
00061 int next;
00062 inline void queueImage(IplImage *mainImage,IplImage *stereoImage,WURDE::Time &theTime,
00063 WURDE::WURDEImage &mImage, WURDE::WURDEImage &stereo,
00064 unsigned int &tindex,WURDE::RangeFinderDataStruct &tranges,
00065 WURDE::EgomotionDataStruct &tego, bool &newtImage);
00066 };
00067
00068 extern "C" {
00069 void *runStereoDataCollectorThread1(void *ptr);
00070 void *runStereoDataCollectorThread2(void *ptr);
00071 void *runStereoDataCollectorThread3(void *ptr);
00072 void *runStereoDataCollectorThread4(void *ptr);
00073 void *runStereoDataCollectorThread5(void *ptr);
00074 }
00075
00076 };
00077
00078 #endif