Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

VisualTargetCloseTrans.h

Go to the documentation of this file.
00001 //-*-c++-*-
00002 #ifndef INCLUDED_VisualTargetCloseTrans_h_
00003 #define INCLUDED_VisualTargetCloseTrans_h_
00004 
00005 #include "Events/EventRouter.h"
00006 #include "Events/VisionObjectEvent.h"
00007 #include "Shared/debuget.h"
00008 #include "Shared/WorldState.h"
00009 #include "Shared/ERS210Info.h"
00010 #include "Shared/ERS220Info.h"
00011 #include "Shared/ERS7Info.h"
00012 
00013 //! causes a transition when a visual object is "close"
00014 class VisualTargetCloseTrans : public Transition {
00015 public:
00016   //!constructor
00017   VisualTargetCloseTrans(StateNode* destination, unsigned int source_id, float threshold=225)
00018     : Transition("VisualTargetCloseTrans",destination), sid(source_id), distanceThreshold(threshold) {}
00019 
00020   //!constructor
00021   VisualTargetCloseTrans(const std::string& name, StateNode* destination, unsigned int source_id, float threshold=225)
00022     : Transition("VisualTargetCloseTrans",name,destination), sid(source_id), distanceThreshold(threshold) {}
00023 
00024   //!starts listening for the object specified by the source id in the constructor
00025   virtual void DoStart() { Transition::DoStart(); erouter->addListener(this,EventBase::visObjEGID,sid); }
00026 
00027   //!called by StateNode when it becomes inactive - undo whatever you did in Enable()
00028   virtual void DoStop() { erouter->removeListener(this); Transition::DoStop(); }
00029 
00030   //!if the object is "close", calls fire()
00031   virtual void processEvent(const EventBase& e) {
00032     const VisionObjectEvent* ve=dynamic_cast<const VisionObjectEvent*>(&e);
00033     ASSERTRET(ve!=NULL,"Casting error");
00034     float x=ve->getCenterX();
00035     float y=ve->getCenterY();
00036     unsigned int IRDistOffset=::IRDistOffset;
00037     //The ERS-7 adds more IR distance sensors, so we have to
00038     //break it down so we can specify which one
00039     if(RobotName == ERS7Info::TargetName)
00040       IRDistOffset=(distanceThreshold<350) ? ERS7Info::NearIRDistOffset : ERS7Info::FarIRDistOffset;
00041     if(x*x+y*y<0.02f && IRDistOffset!=-1U && state->sensors[IRDistOffset]<distanceThreshold)
00042       fire();
00043   }
00044 
00045 protected:
00046   //!Source ID of object to track
00047   unsigned int sid;
00048   
00049   //!Distance at which to trigger transition, in millimeters
00050   float distanceThreshold;
00051 };
00052 
00053 /*! @file
00054  * @brief Defines VisualTargetCloseTrans, which causes a transition when a visual object is "close"
00055  * @author ejt (Creator)
00056  *
00057  * $Author: ejt $
00058  * $Name: tekkotsu-4_0 $
00059  * $Revision: 1.16 $
00060  * $State: Exp $
00061  * $Date: 2007/06/26 04:27:45 $
00062  */
00063 
00064 #endif

Tekkotsu v4.0
Generated Thu Nov 22 00:54:56 2007 by Doxygen 1.5.4