00001
00002 #ifndef INCLUDED_MapBuilderRequest_h_
00003 #define INCLUDED_MapBuilderRequest_h_
00004
00005 #include "Behaviors/BehaviorBase.h"
00006 #include "Shared/fmatSpatial.h"
00007 #include "Vision/colors.h"
00008
00009 #include <queue>
00010
00011 #include "DualCoding/BlobData.h"
00012 #include "DualCoding/MarkerData.h"
00013 #include "DualCoding/Point.h"
00014 #include "DualCoding/ShapeTypes.h"
00015
00016 using namespace std;
00017
00018 namespace DualCoding {
00019
00020 class LookoutSearchRequest;
00021
00022 class MapBuilderRequest {
00023 friend class MapBuilder;
00024
00025 public:
00026 enum MapBuilderRequestType_t {
00027 cameraMap,
00028 groundMap,
00029 localMap,
00030 worldMap
00031 };
00032
00033 typedef unsigned int MapBuilderVerbosity_t;
00034 static coordinate_t defaultMarkerHeight;
00035
00036 MapBuilderRequestType_t requestType;
00037 std::map<ShapeType_t, std::set<color_index> > objectColors;
00038 std::map<ShapeType_t, std::set<color_index> > occluderColors;
00039 std::map<color_index, int> minBlobAreas;
00040 std::map<color_index, BlobData::BlobOrientation_t> blobOrientations;
00041 std::map<color_index, coordinate_t> assumedBlobHeights;
00042 std::set<MarkerType_t> markerTypes;
00043 std::map<MarkerType_t, coordinate_t> markerHeights;
00044 unsigned int floorColor;
00045 string siftDatabasePath;
00046 std::set<std::string> siftObjectNames;
00047 std::pair<int,int> aprilTagFamily;
00048 unsigned int motionSettleTime;
00049 int numSamples;
00050 int sampleInterval;
00051 float maxDist;
00052 bool clearCamera;
00053 bool clearLocal;
00054 bool clearWorld;
00055 bool pursueShapes;
00056 bool immediateRequest;
00057 bool manualHeadMotion;
00058 bool rawY;
00059 bool removePts;
00060 bool doScan;
00061 AngPi dTheta;
00062 ShapeRoot searchArea;
00063 std::queue<LookoutSearchRequest*> worldTargets;
00064 void (*userImageProcessing)();
00065 void (*userCamProcessing)();
00066 void (*userGroundProcessing)();
00067 void (*userLocalProcessing)();
00068 void (*userWorldProcessing)();
00069 bool (*exitTest)();
00070 enum GroundPlaneAssumption_t { onStand, onLegs, onWheel, custom } groundPlaneAssumption;
00071 PlaneEquation customGroundPlane;
00072 BehaviorBase* requestingBehavior;
00073 MapBuilderVerbosity_t setVerbosity;
00074 MapBuilderVerbosity_t clearVerbosity;
00075 fmat::Transform baseTransform;
00076
00077 private:
00078 std::vector<Point> gazePts;
00079 std::vector<fmat::Transform> baseToCamMats;
00080 unsigned int requestID;
00081 MapBuilderVerbosity_t verbosity;
00082
00083 public:
00084
00085 MapBuilderRequest(MapBuilderRequestType_t reqtype=cameraMap)
00086 : requestType(reqtype), objectColors(), occluderColors(),
00087 minBlobAreas(), blobOrientations(), assumedBlobHeights(), markerTypes(), markerHeights(), floorColor(0),
00088 siftDatabasePath(""), siftObjectNames(), aprilTagFamily(),
00089 motionSettleTime(1000), numSamples(1), sampleInterval(0), maxDist(1e10f),
00090 clearCamera(true), clearLocal(true), clearWorld(false),
00091 pursueShapes(false), immediateRequest(false), manualHeadMotion(false), rawY(true), removePts(true),
00092 doScan(false), dTheta((float)M_PI/18),
00093 searchArea(), worldTargets(),
00094 userImageProcessing(NULL), userCamProcessing(NULL), userGroundProcessing(NULL),
00095 userLocalProcessing(NULL), userWorldProcessing(NULL),
00096 exitTest(NULL),
00097 groundPlaneAssumption(onLegs), customGroundPlane(), requestingBehavior(NULL),
00098 setVerbosity(0), clearVerbosity(0),
00099 baseTransform(),
00100 gazePts(), baseToCamMats(),
00101 requestID(0),
00102 verbosity(0)
00103 {}
00104
00105
00106 MapBuilderRequest(const MapBuilderRequest &req)
00107 : requestType(req.requestType),
00108 objectColors(req.objectColors), occluderColors(req.occluderColors),
00109 minBlobAreas(req.minBlobAreas), blobOrientations(req.blobOrientations), assumedBlobHeights(req.assumedBlobHeights),
00110 markerTypes(req.markerTypes), markerHeights(req.markerHeights),
00111 floorColor(req.floorColor),
00112 siftDatabasePath(req.siftDatabasePath), siftObjectNames(req.siftObjectNames),
00113 aprilTagFamily(req.aprilTagFamily),
00114 motionSettleTime(req.motionSettleTime),
00115 numSamples(req.numSamples), sampleInterval(req.sampleInterval),
00116 maxDist(req.maxDist),
00117 clearCamera(req.clearCamera), clearLocal(req.clearLocal), clearWorld(req.clearWorld),
00118 pursueShapes(req.pursueShapes),
00119 immediateRequest(req.immediateRequest),
00120 manualHeadMotion(req.manualHeadMotion),
00121 rawY(req.rawY), removePts(req.removePts),
00122 doScan(req.doScan), dTheta(req.dTheta),
00123 searchArea(req.searchArea), worldTargets(req.worldTargets),
00124 userImageProcessing(req.userImageProcessing),
00125 userCamProcessing(req.userCamProcessing),
00126 userGroundProcessing(req.userGroundProcessing),
00127 userLocalProcessing(req.userLocalProcessing),
00128 userWorldProcessing(req.userWorldProcessing),
00129 exitTest(req.exitTest),
00130 groundPlaneAssumption(req.groundPlaneAssumption),
00131 customGroundPlane(req.customGroundPlane),
00132 requestingBehavior(req.requestingBehavior),
00133 setVerbosity(req.setVerbosity), clearVerbosity(req.clearVerbosity),
00134 baseTransform(req.baseTransform),
00135 gazePts(req.gazePts), baseToCamMats(req.baseToCamMats),
00136 requestID(req.requestID), verbosity(req.verbosity)
00137 {}
00138
00139
00140 MapBuilderRequest& operator=(const MapBuilderRequest &req) {
00141 requestType = req.requestType;
00142 objectColors = req.objectColors;
00143 occluderColors = req.occluderColors;
00144 minBlobAreas = req.minBlobAreas;
00145 blobOrientations = req.blobOrientations;
00146 assumedBlobHeights = req.assumedBlobHeights;
00147 markerTypes = req.markerTypes;
00148 markerHeights = req.markerHeights;
00149 floorColor = req.floorColor;
00150 siftDatabasePath = req.siftDatabasePath;
00151 siftObjectNames = req.siftObjectNames;
00152 aprilTagFamily = req.aprilTagFamily;
00153 motionSettleTime = req.motionSettleTime;
00154 numSamples = req.numSamples;
00155 sampleInterval = req.sampleInterval;
00156 maxDist = req.maxDist;
00157 clearCamera = req.clearCamera;
00158 clearLocal = req.clearLocal;
00159 clearWorld = req.clearWorld;
00160 pursueShapes = req.pursueShapes;
00161 immediateRequest = req.immediateRequest;
00162 manualHeadMotion = req.manualHeadMotion;
00163 rawY = req.rawY;
00164 removePts = req.removePts;
00165 doScan = req.doScan;
00166 dTheta = req.dTheta;
00167 searchArea = req.searchArea;
00168 worldTargets = req.worldTargets;
00169 userImageProcessing = req.userImageProcessing;
00170 userCamProcessing = req.userCamProcessing;
00171 userGroundProcessing = req.userGroundProcessing;
00172 userLocalProcessing = req.userLocalProcessing;
00173 userWorldProcessing = req.userWorldProcessing;
00174 exitTest = req.exitTest;
00175 groundPlaneAssumption = req.groundPlaneAssumption;
00176 customGroundPlane = req.customGroundPlane;
00177 requestingBehavior = req.requestingBehavior;
00178 setVerbosity = req.setVerbosity;
00179 clearVerbosity = req.clearVerbosity;
00180 baseTransform = req.baseTransform;
00181 gazePts = req.gazePts;
00182 baseToCamMats = req.baseToCamMats;
00183 requestID = req.requestID;
00184 verbosity = req.verbosity;
00185 return *this;
00186 }
00187
00188 virtual ~MapBuilderRequest() {}
00189
00190 MapBuilderRequestType_t getRequestType() const { return requestType; }
00191
00192
00193 std::set<color_index> allColors();
00194
00195
00196 void addObjectColor(ShapeType_t type, std::string const &color_name);
00197
00198
00199 void addAllObjectColors(ShapeType_t type);
00200
00201
00202 void addOccluderColor(ShapeType_t type, std::string const &color_name);
00203
00204
00205 void addMinBlobArea(std::string const &color_name, int area);
00206
00207
00208 void addAllMinBlobAreas(int area);
00209
00210
00211 void addBlobOrientation(std::string const &color_name, BlobData::BlobOrientation_t orient, coordinate_t assumedHeight=0);
00212
00213
00214 void addMarkerType(MarkerType_t type);
00215
00216
00217 void addSiftObject(string const &name);
00218
00219
00220 void setAprilTagFamily();
00221
00222
00223 void setAprilTagFamily(int bits, int minimumHammingDistance);
00224
00225 protected:
00226 bool validateRequest();
00227 static bool validateColors(const map<ShapeType_t,set<color_index> > &shapes2colors);
00228 bool validateSift();
00229 bool validateRequestType();
00230 static bool validateAdd(ShapeType_t type, std::string const &color_name);
00231
00232 };
00233
00234 }
00235
00236 #endif