void VectorLocalization2D::initialize(int _numParticles, const char* mapName, vector2f loc, float angle, float locationUncertainty, float angleUncertainty)
{
  static const bool debug = false;
  
  currentMap = &maps[0];
  bool found = false;
  for(unsigned int i=0; i<maps.size(); i++){
    if(maps[i].mapName.compare(mapName)==0){
      found = true;
      currentMap = &maps[i];
    }
  }
  if(!found){
    char buf[2048];
    snprintf(buf,2047,"Map %s not found in Atlas! Reverting to map %s.",mapName,maps[0].mapName.c_str());
    TerminalWarning(buf);
  }
  
  numParticles = _numParticles;
  particles.resize(numParticles);
  if(debug) printf(" Initializing particles: 0.0%%\r");
  fflush(stdout);
  for(int i=0; i<numParticles; i++){
    particles[i] = Particle2D(DBL_MAX,DBL_MAX,0.0,0.0);
  }
  for(int i=0; i<numParticles; i++){
    if(debug && (i%10)==0){
      printf(" Initializing particles: %5.1f%%\r",float(i)/float(numParticles)*100.0);
      fflush(stdout);
    }
    particles[i] = createParticle(loc, angle, locationUncertainty, angleUncertainty);
  }
  
  computeLocation(loc, angle);
  
  laserEval.numCorrespondences = 0;
  laserEval.numObservedPoints = 0;
  laserEval.runTime = 0;
  laserEval.stage0Weights = 0;
  laserEval.stageRWeights = 0;
  
  pointCloudEval.numCorrespondences = 0;
  pointCloudEval.numObservedPoints = 0;
  pointCloudEval.runTime = 0;
  pointCloudEval.stage0Weights = 0;
  pointCloudEval.stageRWeights = 0;
  
  if(debug) printf("\nDone.\n");
}
Пример #2
0
	inline void AddTexCoord(const float X, const float Y)
	{
		texCoord.push_back(Particle2D(X, Y));
	}
Particle2D VectorLocalization2D::createParticle(vector2f loc, float angle, float locationUncertainty, float angleUncertainty)
{
  return Particle2D(randn(locationUncertainty,loc.x), randn(locationUncertainty,loc.y), randn(angleUncertainty,angle),1.0);
}