00001
00002
00003
00004
00005
00006 #include "SlamSelfLocatorSample.h"
00007
00008 double SlamSelfLocatorSample::paramProbUpLimit = 0.01,
00009 SlamSelfLocatorSample::paramProbDownLimit = 0.005,
00010 SlamSelfLocatorSample::paramProbDelay = 3;
00011
00012 SlamSelfLocatorSample::SlamSelfLocatorSample()
00013 {
00014
00015
00016 for(int i = 0; i < numberOfPerceptTypes; i++)
00017 perceptProbabilities[i] = 0.5;
00018 probability = UNINITIALIZED_PROBABILITY;
00019 }
00020
00021
00022
00023 SlamSelfLocatorSample::SlamSelfLocatorSample(const Pose2D& pose):PoseSample(pose)
00024 {
00025 for(int i = 0; i < numberOfPerceptTypes; i++)
00026 {
00027 perceptProbabilities[i] = UNINITIALIZED_PROBABILITY;
00028 perceptTimestamps[i] = SystemCall::getCurrentSystemTime();
00029 }
00030 probability = UNINITIALIZED_PROBABILITY;
00031
00032 }
00033
00034
00035
00036
00037
00038
00039
00040 void SlamSelfLocatorSample::updateProbability()
00041 {
00042 probability = 1;
00043
00044 for (int i=0; i<numberOfPerceptTypes; i++)
00045 {
00046
00047
00048
00049
00050 if(perceptProbabilities[i]<=1 )
00051 probability *= perceptProbabilities[i];
00052 }
00053
00054
00055 }
00056
00057
00058
00059
00060
00061
00062 void SlamSelfLocatorSample::updateProbability(const double* average)
00063 {
00064 probability = 1;
00065
00066
00067 for (int i=0; i<numberOfPerceptTypes; i++)
00068 {
00069
00070
00071
00072 double alternateProb = max(average[i] - paramProbDelay * paramProbUpLimit, 0.000001);
00073
00074
00075
00076
00077
00078
00079
00080
00081 if (i!=skyblueGoal && perceptProbabilities[i]!=NO_PERCEPT_PROBABILITY )
00082 probability *= perceptProbabilities[i]>1 ? alternateProb : perceptProbabilities[i];
00083 }
00084 }
00085
00086
00087
00088
00089
00090
00091
00092
00093 void SlamSelfLocatorSample::setPerceptProbability(PerceptType type, double value)
00094 {
00095 if (type>=0 && type < numberOfPerceptTypes){
00096 double& q = perceptProbabilities[type];
00097
00098
00099
00100 if((type == skyblueGoal) || type == flag || type == yFieldLine )
00101 {
00102 if(q > 1)
00103 q = value;
00104 else if(value < q)
00105 if(value < q - 0.05)
00106 q -= 0.05;
00107 else
00108 q = value;
00109 else
00110 if(value > q + 0.1)
00111 q += 0.1;
00112 else
00113 q = value;
00114 }
00115 else
00116 {
00117 if (q > 1)
00118 q = value;
00119 else
00120 if (value<q)
00121 if (value < q - paramProbDownLimit)
00122 q -=paramProbDownLimit;
00123 else
00124 q = value;
00125 else
00126 if (value > q + paramProbUpLimit)
00127 q += paramProbUpLimit;
00128 else
00129 q = value;
00130
00131 }
00132
00133
00134 if (type==yellowGoal)
00135 {
00136 perceptProbabilities[skyblueGoal] = perceptProbabilities[yellowGoal];
00137
00138
00139 } else if (type==skyblueGoal)
00140 {
00141 perceptProbabilities[yellowGoal] = perceptProbabilities[skyblueGoal];
00142
00143
00144
00145 }
00146
00147 }
00148
00149 }