00001 #ifndef __SlamSampleTemplateGenerator_h_
00002 #define __SlamSampleTemplateGenerator_h_
00003
00004 #include "Representations/Perception/LandmarksPercept.h"
00005 #include "Tools/Math/Pose2D.h"
00006 #include "Tools/Field.h"
00007 #include "../LinesTables2004.h"
00008
00009 #include "SlamSelfLocatorSample.h"
00010
00011
00012
00013
00014
00015
00016
00017 class SlamSampleTemplateGenerator : LinesTables2004
00018 {
00019 public:
00020
00021
00022
00023 SlamSampleTemplateGenerator();
00024
00025
00026
00027
00028 SlamSelfLocatorSample getTemplate();
00029
00030
00031
00032
00033 void generateTemplates(const LandmarksPercept& landmarksPercept,
00034 const LinesPercept& linesPercept,
00035 const Pose2D& odometry,
00036 int numberOfPerceptTypes,
00037 const LinesPercept::LineType types[LinesPercept::numberOfLineTypes],
00038 bool useLandmarks = false);
00039
00040 int getNumberOfTemplates();
00041
00042
00043 private:
00044 enum{
00045 TEMPLATES_MAX = 100,
00046 FLAGS_MAX = 3
00047 };
00048
00049 Flag flags[FLAGS_MAX];
00050
00051 int numberOfTemplates,
00052 numberOfFlags,
00053 nextTemplate;
00054 int randomFactor;
00055 Pose2D templates[TEMPLATES_MAX];
00056
00057 bool getBearing(const LandmarksPercept& landmarksPercept,int i,
00058 Vector2<double>& mark, double& dir,double& dist);
00059
00060 int poseFromBearingsAndDistance( double dir0,double dir1,double dist,
00061 const Vector2<double>& mark0,
00062 const Vector2<double>& mark1,
00063 const Vector2<double>& cameraOffset,
00064 Pose2D& resultingPose1,
00065 Pose2D& resultingPose2);
00066
00067 bool poseFromBearings(double dir0,double dir1,double dir2,
00068 const Vector2<double>& mark0,
00069 const Vector2<double>& mark1,
00070 const Vector2<double>& mark2,
00071 const Vector2<double>& cameraOffset,
00072 Pose2D& resultingPose);
00073
00074 void addFlag(const Flag& flag);
00075 };
00076 #endif
00077
00078