IceCommunicator.qt.C

00001 #ifndef ICECOMMUNICATOR_C
00002 #define ICECOMMUNICATOR_C
00003 
00004 #include "QtUtil/ImageConvert4.H"
00005 #include "Robots/SeaBeeIII/GUI/IceCommunicator.qt.H"
00006 #include "Ice/ImageIce.ice.H"
00007 #include "Ice/IceImageUtils.H"
00008 
00009 
00010 #define MSG_BUFF_MAX 5
00011 
00012 IceCommunicator::IceCommunicator(OptionManager& mgr,
00013                              const std::string& descrName,
00014                              const std::string& tagName) :
00015   RobotBrainComponent(mgr, descrName, tagName)
00016 //  itsGUIRegistered(false),
00017 //  itsFwdRetinaImagesSize(0),
00018 //  itsFwdRetinaMsgCounter(0),
00019 //  itsDwnRetinaImagesSize(0),
00020 //  itsDwnRetinaMsgCounter(0),
00021 //  itsOrangeSegEnabled(false),
00022 //  itsRedSegImagesSize(0),
00023 //  itsSalientPointsSize(0),
00024 //  itsSalientPointsEnabled(false),
00025 //  itsVisionMsgCounter(0),
00026 //  itsBeeStemDataSize(0),
00027 //  itsBeeStemMsgCounter(0),
00028 //  itsCompassMeter(140,130),
00029 //  itsDepthMeter(140,130),
00030 //  itsPressureMeter(100,90),
00031 //  itsCircleFillMeter(60,50,20)
00032 {
00033 //  itsTimer.reset();
00034 //  itsFwdVisionImage = Image<PixRGB<byte> >();
00035 //  itsDwnVisionImage = Image<PixRGB<byte> >();
00036 }
00037 
00038 void IceCommunicator::registerTopics()
00039 {
00040   registerSubscription("BeeStemMessageTopic");
00041   registerSubscription("XBox360RemoteControlMessageTopic");
00042   registerSubscription("RetinaMessageTopic");
00043   registerSubscription("VisionRectangleMessageTopic");
00044   registerSubscription("SalientPointMessageTopic");
00045   registerSubscription("MovementControllerMessageTopic");
00046   registerPublisher("CameraConfigTopic");
00047   registerPublisher("BeeStemConfigTopic");
00048   registerPublisher("SeaBeeStateConditionMessageTopic");
00049 }
00050 
00051 void IceCommunicator::evolve()
00052 {
00053   /*
00054   itsUpdateMutex.lock();
00055   if(itsGUIRegistered)
00056     {
00057       if(itsFwdRetinaImagesSize > 0)
00058         {
00059           updateFwdImg();
00060 
00061           if(itsOrangeSegImages.size() > 0 && itsOrangeSegEnabled)
00062             {
00063               Image<PixRGB<byte> > oj = itsOrangeSegImages.front();
00064 
00065               itsFwdVisionImage = oj;
00066               itsOrangeSegImages.pop_front();
00067             }
00068 
00069           if(itsSalientPoints.size() > 0 && itsSalientPointsEnabled)
00070             updateSaliencyImage();
00071 
00072           itsGUIForm->setFwdVisionImage(itsFwdVisionImage);
00073 
00074         }
00075       if(itsDwnRetinaImagesSize > 0)
00076         {
00077           updateDwnImg();
00078 
00079           itsGUIForm->setDwnVisionImage(itsDwnVisionImage);
00080         }
00081 
00082       if(itsBeeStemDataSize > 0)
00083         {
00084           updateBeeStemData();
00085         }
00086     }
00087 
00088 
00089   if(itsTimer.getSecs() >= 1.0)
00090     {
00091       itsGUIForm->setFwdRetinaMsgField(itsFwdRetinaMsgCounter);
00092       itsGUIForm->setDwnRetinaMsgField(itsDwnRetinaMsgCounter);
00093       itsGUIForm->setBeeStemMsgField(itsBeeStemMsgCounter);
00094       itsGUIForm->setVisionMsgField(itsVisionMsgCounter);
00095       Image<PixRGB<byte> > headingAxis = itsCircleFillMeter.render(itsFwdRetinaMsgCounter);
00096 Image<PixRGB<byte> > depthAxis = itsCircleFillMeter.render(itsDwnRetinaMsgCounter);
00097 Image<PixRGB<byte> > strafeAxis = itsCircleFillMeter.render(itsBeeStemMsgCounter);
00098  itsGUIForm->setAxesImages(headingAxis,depthAxis,strafeAxis);
00099 
00100       itsTimer.reset();
00101       itsFwdRetinaMsgCounter = 0;
00102       itsDwnRetinaMsgCounter = 0;
00103       itsBeeStemMsgCounter = 0;
00104       itsVisionMsgCounter = 0;
00105     }
00106   itsUpdateMutex.unlock();
00107   */
00108 }
00109 
00110 /*
00111 // ######################################################################
00112 void IceCommunicator::updateFwdImg()
00113 {
00114   Image<PixRGB<byte> > img = itsFwdRetinaImages.front();
00115   itsGUIForm->setFwdImage(img);
00116 
00117   itsFwdVisionImage = img;
00118 
00119   itsFwdRetinaImages.pop_front();
00120   itsFwdRetinaImagesSize--;
00121 }
00122 
00123 // ######################################################################
00124 void IceCommunicator::updateDwnImg()
00125 {
00126   Image<PixRGB<byte> > img = itsDwnRetinaImages.front();
00127   itsGUIForm->setDwnImage(img);
00128   itsDwnVisionImage = img;
00129 
00130   itsDwnRetinaImages.pop_front();
00131   itsDwnRetinaImagesSize--;
00132 }
00133 
00134 // ######################################################################
00135 void IceCommunicator::updateSaliencyImage()
00136 {
00137   Point2D<int> pt = itsSalientPoints.front();
00138 
00139   //  drawTraj(itsFwdVisionImage,
00140   //&(itsSalientPoints[0]),&(itsSalientPoints[2]));
00141 
00142   //  LINFO("Point %d, %d\n",pt.i,pt.j);
00143   PixRGB<byte> color(0,0,0);
00144   drawCircle(itsFwdVisionImage, pt, 10, PixRGB<byte>(0,150,0), 1);
00145   drawCircle(itsFwdVisionImage, pt, 13, PixRGB<byte>(0,100,0), 1);
00146   drawCircle(itsFwdVisionImage, pt, 16, PixRGB<byte>(0,50,0), 1);
00147   drawCircle(itsFwdVisionImage, pt, 19, PixRGB<byte>(0,0,0), 1);
00148 
00149 
00150   drawDisk(itsFwdVisionImage, pt, 7, PixRGB<byte>(0,0,0));
00151   drawDisk(itsFwdVisionImage, pt, 4, PixRGB<byte>(0,255,0));
00152 
00153   itsSalientPoints.pop_front();
00154 }
00155 
00156 // ######################################################################
00157 void IceCommunicator::updateBeeStemData()
00158 {
00159   BeeStemData d = itsBeeStemData.front();
00160 
00161   Image<PixRGB<byte> > compassImg = itsCompassMeter.render(d.heading);
00162   Image<PixRGB<byte> > depthImg = itsDepthMeter.render(d.externalPressure);
00163   Image<PixRGB<byte> > pressureImg = itsPressureMeter.render(d.internalPressure);
00164 
00165   itsGUIForm->setCompassImage(compassImg);
00166   itsGUIForm->setDepthImage(depthImg);
00167   itsGUIForm->setPressureImage(pressureImg);
00168   itsGUIForm->setBeeStemData(d);
00169 
00170   itsBeeStemData.pop_front();
00171   itsBeeStemDataSize--;
00172 }
00173 
00174 void IceCommunicator::setOrangeSegEnabled(bool enabled)
00175 {
00176   itsUpdateMutex.lock();
00177   itsOrangeSegEnabled = enabled;
00178   itsUpdateMutex.unlock();
00179 }
00180 
00181 void IceCommunicator::setSalientPointsEnabled(bool enabled)
00182 {
00183   itsUpdateMutex.lock();
00184   itsSalientPointsEnabled = enabled;
00185   itsUpdateMutex.unlock();
00186 }
00187 */
00188 
00189 // ######################################################################
00190 void IceCommunicator::updateMessage(const RobotSimEvents::EventMessagePtr& eMsg,
00191                                   const Ice::Current&)
00192 {
00193 
00194   //Get a retina message
00195   if(eMsg->ice_isA("::RobotSimEvents::RetinaMessage"))
00196   {
00197     RobotSimEvents::RetinaMessagePtr msg = RobotSimEvents::RetinaMessagePtr::dynamicCast(eMsg);
00198 //    LINFO("msg_id: %s",msg->cameraID.c_str());
00199 
00200     if(Ice2Image<PixRGB<byte> >(msg->img).initialized())
00201     {
00202       Image<PixRGB<byte> > retinaImage = Ice2Image<PixRGB<byte> >(msg->img);
00203       QImage qretinaImage = convertToQImage4(retinaImage);
00204 
00205       if(msg->cameraID == "FwdCamera")
00206       {
00207         LINFO("Forward Camera Message");
00208         emit(NewFwdLeftImg(qretinaImage));
00209       }
00210       else if(msg->cameraID == "DwnCamera")
00211       {
00212 
00213       }
00214     }
00215 
00216   }
00217 }
00218 #endif
00219 
Generated on Sun May 8 08:41:32 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3