00001
00002 #ifndef INCLUDED_MapBuilderRequest_h_
00003 #define INCLUDED_MapBuilderRequest_h_
00004
00005 #include <queue>
00006
00007 #include "ShapeTypes.h"
00008
00009 namespace DualCoding {
00010
00011 class LookoutSearchRequest;
00012
00013 class MapBuilderRequest {
00014 friend class MapBuilder;
00015
00016 public:
00017 enum MapBuilderRequestType_t {
00018 cameraMap,
00019 groundMap,
00020 localMap,
00021 worldMap
00022 };
00023
00024 MapBuilderRequestType_t requestType;
00025 std::map<ShapeType_t, std::set<color_index> > objectColors;
00026 std::map<ShapeType_t, std::set<color_index> > occluderColors;
00027 std::map<color_index, int> minBlobAreas;
00028 std::map<color_index, BlobData::BlobOrientation_t> blobOrientations;
00029 std::map<color_index, coordinate_t> assumedBlobHeights;
00030 unsigned int floorColor;
00031 unsigned int motionSettleTime;
00032 int numSamples;
00033 int sampleInterval;
00034 float maxDist;
00035 bool clearShapes;
00036 bool pursueShapes;
00037 bool manualHeadMotion;
00038 bool rawY;
00039 bool removePts;
00040 bool doScan;
00041 AngPi dTheta;
00042 ShapeRoot searchArea;
00043 std::queue<LookoutSearchRequest*> worldTargets;
00044 void (*userCamProcessing)();
00045 void (*userGroundProcessing)();
00046 void (*userLocalProcessing)();
00047 void (*userWorldProcessing)();
00048 bool (*exitTest)();
00049 enum GroundPlaneAssumption_t { onStand, onLegs, custom } groundPlaneAssumption;
00050 NEWMAT::ColumnVector customGroundPlane;
00051 private:
00052 std::vector<Point> gazePts;
00053 std::vector<NEWMAT::Matrix> baseToCamMats;
00054 unsigned int requestID;
00055
00056 public:
00057
00058 MapBuilderRequest(MapBuilderRequestType_t reqtype=cameraMap)
00059 : requestType(reqtype), objectColors(), occluderColors(),
00060 minBlobAreas(), blobOrientations(), assumedBlobHeights(), floorColor(0),
00061 motionSettleTime(1000), numSamples(1), sampleInterval(0), maxDist(1e10),
00062 clearShapes(true), pursueShapes(false), manualHeadMotion(false), rawY(true), removePts(true),
00063 doScan(false), dTheta(M_PI/18),
00064 searchArea(), worldTargets(),
00065 userCamProcessing(NULL), userGroundProcessing(NULL),
00066 userLocalProcessing(NULL), userWorldProcessing(NULL),
00067 exitTest(NULL),
00068 groundPlaneAssumption(onLegs), customGroundPlane(4),
00069 gazePts(), baseToCamMats(),
00070 requestID(0)
00071 {}
00072
00073
00074 MapBuilderRequest(const MapBuilderRequest &req)
00075 : requestType(req.requestType),
00076 objectColors(req.objectColors), occluderColors(req.occluderColors),
00077 minBlobAreas(req.minBlobAreas), blobOrientations(req.blobOrientations), assumedBlobHeights(req.assumedBlobHeights),
00078 floorColor(req.floorColor), motionSettleTime(req.motionSettleTime),
00079 numSamples(req.numSamples), sampleInterval(req.sampleInterval),
00080 maxDist(req.maxDist), clearShapes(req.clearShapes), pursueShapes(req.pursueShapes),
00081 manualHeadMotion(req.manualHeadMotion), rawY(req.rawY), removePts(req.removePts),
00082 doScan(req.doScan), dTheta(req.dTheta),
00083 searchArea(req.searchArea), worldTargets(req.worldTargets),
00084 userCamProcessing(req.userCamProcessing),
00085 userGroundProcessing(req.userGroundProcessing),
00086 userLocalProcessing(req.userLocalProcessing),
00087 userWorldProcessing(req.userWorldProcessing),
00088 exitTest(req.exitTest),
00089 groundPlaneAssumption(req.groundPlaneAssumption),
00090 customGroundPlane(req.customGroundPlane),
00091 gazePts(req.gazePts), baseToCamMats(req.baseToCamMats),
00092 requestID(req.requestID)
00093 {}
00094
00095 virtual ~MapBuilderRequest() {}
00096
00097 MapBuilderRequestType_t getRequestType() const { return requestType; }
00098
00099 void setCustomGroundPlane(float const angle, float const height) {
00100 float const s = std::sin(-angle);
00101 float const c = std::cos(-angle);
00102 customGroundPlane = Kinematics::pack(s, 0, c, -height * c);
00103 groundPlaneAssumption = custom;
00104 }
00105
00106
00107 bool immediateRequest() const {
00108 return !searchArea.isValid() && worldTargets.size() == 0 && !pursueShapes && !doScan && numSamples <= 1;
00109 }
00110
00111 private:
00112 MapBuilderRequest& operator=(const MapBuilderRequest& req);
00113
00114 };
00115
00116 }
00117
00118 #endif