PoseManifoldGaussian.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Eigen/Core>
4 #include <Eigen/Geometry>
5 
6 namespace armarx::objpose
7 {
8 
9  /**
10  * @brief A "gaussian" distribution in pose space (i.e. pose manifold).
11  *
12  * The mean is a specific pose, represented as 4x4 homogeneous matrix.
13  *
14  * The covariance is a 6 x 6 covariance matrix.
15  * The first 3 dimensions represent the position (translation) part,
16  * the second 3 dimensions represent the orientation (rotation) part.
17  * A column of the pure orientational part (lower right 3 x 3 matrix)
18  * is a scaled rotation axis, i.e. rotation axis whose norm is the
19  * rotation angle (in this case the "angle variance").
20  *
21  * Note that the lower left and upper right 3x3 parts of the covariance
22  * matrix can be non-zero.
23  */
25  {
26  public:
27  /// The mean (i.e. a pose).
29  /// The covariance matrix.
31 
32 
33  public:
34  /// Get the pure positional part of the covariance matrix.
35  Eigen::Block<Eigen::Matrix<float, 6, 6>, 3, 3>
37  {
38  return covariance.block<3, 3>(0, 0);
39  }
40 
41  Eigen::Block<const Eigen::Matrix<float, 6, 6>, 3, 3>
43  {
44  return covariance.block<3, 3>(0, 0);
45  }
46 
47  /// Get the pure orientational part of the covariance matrix.
48  Eigen::Block<Eigen::Matrix<float, 6, 6>, 3, 3>
50  {
51  return covariance.block<3, 3>(3, 3);
52  }
53 
54  Eigen::Block<const Eigen::Matrix<float, 6, 6>, 3, 3>
56  {
57  return covariance.block<3, 3>(3, 3);
58  }
59 
60  struct Ellipsoid
61  {
62  Eigen::Vector3f center;
64  Eigen::Vector3f size;
65  };
66 
67  /// Get the parameters of a 3D ellipsoid illustrating this gaussian.
69 
70 
71  /**
72  * @brief Get a column of the pure orientational covariance matrix
73  * as axis-angle rotation.
74  *
75  * @param index
76  * The column's index.
77  * @param global
78  * If true, rotate the axis by the mean orientation.
79  * @return
80  */
81  Eigen::AngleAxisf getScaledRotationAxis(int index, bool global = false) const;
82 
83 
84  /**
85  * @brief Transform this gaussian by the given transform (e.g. to another frame).
86  * @param transform The transform to apply.
87  * @return The transformed gaussian.
88  */
90 
91  /**
92  * @brief Transform this gaussian from one base coordinate system to another one.
93  * @param fromFrame The original (current) base coordinate system' pose.
94  * @param toFrame The new base coordinate system' pose.
95  * @return The same gaussian in thenew coordinate system.
96  */
98  const Eigen::Matrix4f& toFrame) const;
99  };
100 
101 } // namespace armarx::objpose
armarx::objpose::PoseManifoldGaussian::Ellipsoid::orientation
Eigen::Matrix3f orientation
Definition: PoseManifoldGaussian.h:63
index
uint8_t index
Definition: EtherCATFrame.h:59
armarx::objpose::PoseManifoldGaussian::mean
Eigen::Matrix4f mean
The mean (i.e. a pose).
Definition: PoseManifoldGaussian.h:28
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::objpose::PoseManifoldGaussian::Ellipsoid::size
Eigen::Vector3f size
Definition: PoseManifoldGaussian.h:64
armarx::objpose::PoseManifoldGaussian
A "gaussian" distribution in pose space (i.e.
Definition: PoseManifoldGaussian.h:24
armarx::objpose::PoseManifoldGaussian::covariance
Eigen::Matrix< float, 6, 6 > covariance
The covariance matrix.
Definition: PoseManifoldGaussian.h:30
armarx::objpose::PoseManifoldGaussian::getScaledRotationAxis
Eigen::AngleAxisf getScaledRotationAxis(int index, bool global=false) const
Get a column of the pure orientational covariance matrix as axis-angle rotation.
Definition: PoseManifoldGaussian.cpp:44
armarx::objpose::PoseManifoldGaussian::getTransformed
PoseManifoldGaussian getTransformed(const Eigen::Matrix4f &transform) const
Transform this gaussian by the given transform (e.g.
Definition: PoseManifoldGaussian.cpp:57
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:570
armarx::objpose::PoseManifoldGaussian::getPositionEllipsoid
Ellipsoid getPositionEllipsoid() const
Get the parameters of a 3D ellipsoid illustrating this gaussian.
Definition: PoseManifoldGaussian.cpp:10
armarx::objpose::PoseManifoldGaussian::Ellipsoid
Definition: PoseManifoldGaussian.h:60
armarx::objpose
Definition: objpose.h:6
armarx::objpose::PoseManifoldGaussian::orientationCovariance
Eigen::Block< Eigen::Matrix< float, 6, 6 >, 3, 3 > orientationCovariance()
Get the pure orientational part of the covariance matrix.
Definition: PoseManifoldGaussian.h:49
armarx::transform
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...
Definition: algorithm.h:351
armarx::objpose::PoseManifoldGaussian::Ellipsoid::center
Eigen::Vector3f center
Definition: PoseManifoldGaussian.h:62
Eigen::Matrix< float, 6, 6 >
armarx::objpose::PoseManifoldGaussian::positionCovariance
Eigen::Block< Eigen::Matrix< float, 6, 6 >, 3, 3 > positionCovariance()
Get the pure positional part of the covariance matrix.
Definition: PoseManifoldGaussian.h:36
GfxTL::Matrix3f
MatrixXX< 3, 3, float > Matrix3f
Definition: MatrixXX.h:649
armarx::objpose::PoseManifoldGaussian::positionCovariance
Eigen::Block< const Eigen::Matrix< float, 6, 6 >, 3, 3 > positionCovariance() const
Definition: PoseManifoldGaussian.h:42
armarx::objpose::PoseManifoldGaussian::orientationCovariance
Eigen::Block< const Eigen::Matrix< float, 6, 6 >, 3, 3 > orientationCovariance() const
Definition: PoseManifoldGaussian.h:55