34 disturbed_values = values;
36 if (values.size() !=
_mean.size() || values.size() !=
_std.size())
46 for (
int i = 0; i < values.size(); ++i)
51 disturbed_values[i] +=
_mean[i];
65 PRINT_ERROR_NAMED(
"Cannot initialize distributions due to dimension mismatch between mean and std vector.");
70 for (
int i = 0; i <
_mean.size(); ++i)
92 if (
_mean.size() != values_dim)
95 *issues <<
"DisturbanceGaussianNoise: Mean vector dimension (" <<
_mean.size() <<
") does not match required value dimension (" 96 << values_dim <<
")." << std::endl;
100 if (
_std.size() != values_dim)
103 *issues <<
"DisturbanceGaussianNoise: Std vector dimension (" <<
_std.size() <<
") does not match required value dimension (" 104 << values_dim <<
")." << std::endl;
110 #ifdef MESSAGE_SUPPORT 111 void DisturbanceGaussianNoise::toMessage(corbo::messages::DisturbanceGaussianNoise& message)
const 114 message.mutable_mean_vec()->Resize(
_mean.rows(), 0);
118 message.mutable_std_vec()->Resize(
_std.rows(), 0);
122 void DisturbanceGaussianNoise::fromMessage(
const corbo::messages::DisturbanceGaussianNoise& message, std::stringstream* issues)
125 if (message.mean_vec_size() > 0)
131 if (message.std_vec_size() > 0)
std::mt19937 _random_engine
void reset() override
reset internal state
#define PRINT_ERROR_NAMED(msg)
A matrix or vector expression mapping an existing array of data.
Representation of time stamps.
void initializeDistributions()
bool checkParameters(int values_dim, std::stringstream *issues) const override
Check the underlying parameter configuration for validity.
A matrix or vector expression mapping an existing expression.
std::vector< std::normal_distribution< double > > _distributions
bool approx_zero(double val, double epsilon=1e-10)
Check if a double is appoximately zero.
void disturb(const Time &t, const Eigen::Ref< const Eigen::VectorXd > &values, Eigen::Ref< Eigen::VectorXd > disturbed_values) override
Modify values according to the underlying disturbance model.