/* noise.h -- noisy data * Copyright (C) 2013 Galois, Inc. * * This library is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this library. If not, see . * * To contact Galois, complete the Web form at * or write to Galois, Inc., 421 Southwest 6th Avenue, Suite 300, Portland, * Oregon, 97204-1622. */ #ifndef PPAML_VREP_AUTOMOBILE_PLUGIN_NOISE_H #define PPAML_VREP_AUTOMOBILE_PLUGIN_NOISE_H #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include "csv.h" #include "measurement.h" // Noise sources // template class GaussianNoiseSource { public: inline GaussianNoiseSource(RealType mean, RealType stddev); inline RealType get(); private: std::mt19937 generator; std::normal_distribution distribution; }; /* Convenience function to construct a GaussianNoiseSource from a * two-element float vector representing mean and standard deviation. * Throws a std::invalid_argument if the vector is of the wrong * length. */ inline GaussianNoiseSource gaussian(const std::vector); // Noisy values // // Adds noise to a value. Pose addNoise(const Pose &, GaussianNoiseSource &positionNoise, GaussianNoiseSource &angleNoise); ControlSignals addNoise(const ControlSignals &, GaussianNoiseSource &speedNoise, GaussianNoiseSource &steeringAngleNoise); LidarDatum addNoise(const LidarDatum &, GaussianNoiseSource &distanceNoise, GaussianNoiseSource &intensityNoise); #include "noise-inl.h" #endif