// Sample from the proposal distribution.
    ParticleState ParticleFilterSIRBicycleGlobal::sampleProposal(ParticleState& particleInitial, double timeStep, Control& control, Observation& observation)
    {
        //std::random_device rd;
        //std::normal_distribution<double> normal(0,1);
        //std::ranlux64_base_01 randengine;//(rd());
        //randengine.seed(rd());
        //double a=normal(randengine);
        //std::cout << "normal test = " << a << std::endl;

        //HERE

        ParticleState newParticle;
        //std::cout << "before" << std::endl;
        std::normal_distribution<double> stdNormal(0., 1.);
        //std::uniform_real<double> unif(0., 1.);
        //std::cout << "uniform = " << unif(engine) << std::endl;
        //std::cout << "normal = " << stdNormal(engine) << std::endl;
        motion::State2D processNoise;
        processNoise.right = std::sqrt(noiseVarProcess.right)*stdNormal(engine);
        processNoise.up = std::sqrt(noiseVarProcess.up)*stdNormal(engine);
        processNoise.orient = std::sqrt(noiseVarProcess.orient)*stdNormal(engine);
        //std::cout << "noise = " << processNoise << std::endl;
        //std::cout << "after" << std::endl;
        newParticle.state = bicycleModel.predict(particleInitial.state, timeStep, control.speed, control.steeringAngle, processNoise);
        newParticle.weight = 1.;

        return newParticle;
    }
예제 #2
0
float RNG::normal(float mean, float sd) { return mean + sd * stdNormal(gen); }