HippocampusService.H
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef NEOVISIONII_HippocampusService_SERVICE
00039 #define NEOVISIONII_HippocampusService_SERVICE
00040
00041 #include <Ice/Ice.h>
00042 #include <Ice/Service.h>
00043 #include <IceStorm/IceStorm.h>
00044 #include <IceUtil/Thread.h>
00045 #include "Component/ModelManager.H"
00046 #include "Component/ModelComponent.H"
00047 #include "Component/ModelParam.H"
00048 #include "Media/FrameSeries.H"
00049 #include "Transport/FrameInfo.H"
00050 #include "Raster/GenericFrame.H"
00051 #include "Image/Image.H"
00052 #include "Image/Pixels.H"
00053 #include "Image/Layout.H"
00054 #include "Image/ShapeOps.H"
00055 #include "Image/ColorOps.H"
00056 #include "Image/Point3D.H"
00057
00058 #include "Ice/BrainObjects.ice.H"
00059 #include "Ice/SimEvents.ice.H"
00060 #include "Ice/IceImageUtils.H"
00061 #include "Ice/ImageIce.ice.H"
00062
00063 #include <map>
00064
00065 using namespace std;
00066 using namespace ImageIceMod;
00067
00068 class HippocampusI : public ModelComponent, public BrainObjects::Hippocampus {
00069
00070 struct ObjectState
00071 {
00072 std::string objName;
00073 Point2D<int> loc;
00074 Point3D<float> pos;
00075 bool inDanger;
00076 float rotation;
00077 float size;
00078 };
00079
00080
00081 public:
00082 struct TopicInfo
00083 {
00084 TopicInfo(const char* _name, IceStorm::TopicPrx& prx) :
00085 name(_name), topicPrx(prx)
00086 {}
00087 std::string name;
00088 IceStorm::TopicPrx topicPrx;
00089 };
00090
00091 HippocampusI(OptionManager& mgr,
00092 nub::ref<OutputFrameSeries> ofs,
00093 const std::string& descrName = "HippocampusService",
00094 const std::string& tagName = "HippocampusService");
00095
00096 ~HippocampusI();
00097
00098 virtual void start2();
00099
00100 virtual void evolve(const SimEvents::EventMessagePtr& eMsg,
00101 const Ice::Current&);
00102
00103 void initSimEvents(Ice::CommunicatorPtr icPtr, Ice::ObjectPrx objectPrx);
00104 void unsubscribeSimEvents();
00105
00106
00107 void resetCurrentObject();
00108
00109 Point3D<float> get3Dpos(int pan, int tilt);
00110
00111 void drawObject(Image<PixRGB<byte> > & img, ObjectState &objState);
00112
00113
00114 private:
00115 nub::ref<OutputFrameSeries> itsOfs;
00116 SimEvents::EventsPrx itsEventsPub;
00117 std::vector<TopicInfo> itsTopicsSubscriptions;
00118 Ice::ObjectPrx itsObjectPrx;
00119 std::map<std::string, ObjectState> itsObjectsState;
00120 ObjectState itsCurrentObject;
00121
00122
00123 float itsCameraDistance;
00124 float itsCameraAngle;
00125 float itsRadPerTilt;
00126 float itsRadPerPan;
00127
00128 };
00129
00130 #endif