49 const SampleType& mean,
const CovarianceType& covariance) {
50 const int dim = mean.size();
51 const int numPoints = 2 * dim + 1;
52 assert(covariance.rows() == covariance.cols() &&
53 covariance.cols() == mean.size() &&
"Dimension Mismatch");
54 const double alpha =
cst(1e-3);
55 const double beta = 2;
56 const double lambda = alpha * alpha * dim;
57 const double wi =
cst(1) / (2 * (dim + lambda));
59 sigmaPoints.resize(numPoints);
61 mean, lambda / (dim + lambda),
62 lambda / (dim + lambda) + (1. - alpha * alpha + beta));
63 Eigen::LLT<CovarianceType> cholDecomp;
64 cholDecomp.compute(covariance * (dim + lambda));
65 if (cholDecomp.info() == Eigen::NumericalIssue)
return false;
66 const CovarianceType& L = cholDecomp.matrixL();
68 for (
int i = 0; i < dim; i++) {
69 SampleType s(L.col(i));
78 SampleType& mean, CovarianceType& covariance,
82 for (
size_t i = 0; i < sigmaPoints.size(); i++) {
83 mean += sigmaPoints[i]._wi * sigmaPoints[i]._sample;
85 for (
size_t i = 0; i < sigmaPoints.size(); i++) {
86 SampleType delta = sigmaPoints[i]._sample - mean;
87 covariance += sigmaPoints[i]._wp * (delta * delta.transpose());