3#include <SimoxUtility/math/pose/invert.h>
4#include <SimoxUtility/math/pose/pose.h>
12 const float minSize = 0.005;
14 const Eigen::Matrix3f covarianceTranslation = this->
covariance.block<3, 3>(0, 0);
16 const Eigen::EigenSolver<Eigen::Matrix3f> eigen(covarianceTranslation);
17 const Eigen::Vector3f eval = eigen.eigenvalues().real();
18 const Eigen::Matrix3f evec = eigen.eigenvectors().real();
21 result.
center = simox::math::position(this->
mean);
33 result.
orientation = evec.determinant() > 0 ? evec : -evec;
38 result.
size = result.
size.cwiseMax(Eigen::Vector3f::Constant(minSize));
47 const float angle = axis.norm();
51 axis = simox::math::orientation(
mean) * axis;
60 covRotation.block<3, 3>(0, 0) = covRotation.block<3, 3>(3, 3) =
72 const Eigen::Matrix4f& toFrame)
const
76 Eigen::Matrix4f
transform = toFrame * simox::math::inverted_pose(fromFrame);
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...
double angle(const Point &a, const Point &b, const Point &c)
Eigen::Matrix3f orientation
A "gaussian" distribution in pose space (i.e.
Eigen::Matrix4f mean
The mean (i.e. a pose).
PoseManifoldGaussian getTransformed(const Eigen::Matrix4f &transform) const
Transform this gaussian by the given transform (e.g.
Eigen::AngleAxisf getScaledRotationAxis(int index, bool global=false) const
Get a column of the pure orientational covariance matrix as axis-angle rotation.
Ellipsoid getPositionEllipsoid() const
Get the parameters of a 3D ellipsoid illustrating this gaussian.
Eigen::Matrix< float, 6, 6 > covariance
The covariance matrix.