17#include <Eigen/Geometry>
20#include <ceres/product_manifold.h>
21#include <ceres/autodiff_manifold.h>
26namespace xrt::tracking::constellation::optimizer {
32typedef Eigen::Matrix<double, kPoseCovarianceSize, kPoseCovarianceSize> PoseStateCovarianceMatrix;
35inline Eigen::Isometry3f
38 return {Eigen::Translation3f{
map_vec3(p.position)} *
map_quat(p.orientation)};
48 Plus(
const T *x,
const T *delta, T *x_plus_delta)
const
50 const Eigen::Map<const Eigen::Quaternion<T>> q(x);
51 const Eigen::Map<const Eigen::Vector3<T>> w(delta);
52 Eigen::Map<Eigen::Quaternion<T>> result(x_plus_delta);
60 Minus(
const T *y,
const T *x, T *y_minus_x)
const
62 const Eigen::Map<const Eigen::Quaternion<T>> q_y(y);
63 const Eigen::Map<const Eigen::Quaternion<T>> q_x(x);
64 Eigen::Map<Eigen::Vector3<T>> result(y_minus_x);
66 result =
quat_ln_so3(Eigen::Quaternion<T>(q_x.conjugate() * q_y));
72typedef ceres::ProductManifold<ceres::EuclideanManifold<3>, ceres::AutoDiffManifold<QuaternionManifoldFunctor, 4, 3>>
76typedef ceres::ProductManifold<ceres::EuclideanManifold<3>,
77 ceres::AutoDiffManifold<QuaternionManifoldFunctor, 4, 3>,
78 ceres::EuclideanManifold<3>>
79 PoseWithVelocityManifold;
Interoperability helpers connecting internal math types and Eigen.
Base implementations for math library.
Helpers for quatexpmap math for bigceres usage.
Eigen::Isometry3f isometryFromPose(const xrt_pose &p)
Returns an Isometry3f from an xrt_pose.
Definition math.hpp:36
C++-only functionality in the Math helper library.
Definition m_documentation.hpp:15
Eigen::Quaternion< typename Derived::Scalar > quat_exp_so3(Eigen::MatrixBase< Derived > const &vec)
Fully-templated free function for quaternion exponentiation, SO(3) version as described by Grassia.
Definition m_quatexpmap.hpp:119
static Eigen::Map< const Eigen::Quaternionf > map_quat(const struct xrt_quat &q)
Wrap an internal quaternion struct in an Eigen type, const overload.
Definition m_eigen_interop.hpp:40
Eigen::Matrix< Scalar, 3, 1 > quat_ln_so3(Eigen::Quaternion< Scalar > const &quat)
Fully-templated free function for quaternion log map, SO(3) version.
Definition m_quatexpmap.hpp:148
static Eigen::Map< const Eigen::Vector3f > map_vec3(const struct xrt_vec3 &v)
Wrap an internal 3D vector struct in an Eigen type, const overload.
Definition m_eigen_interop.hpp:90
RANSAC PnP pose refinement.
Right-multiplying quaternion manifold, matches our local convention.
Definition math.hpp:45
A pose composed of a position and orientation.
Definition xrt_defines.h:513