1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #ifndef CERES_EXAMPLES_POSE_GRAPH_2D_ANGLE_MANIFOLD_H_
- #define CERES_EXAMPLES_POSE_GRAPH_2D_ANGLE_MANIFOLD_H_
- #include "ceres/autodiff_manifold.h"
- #include "normalize_angle.h"
- namespace ceres::examples {
- class AngleManifold {
- public:
- template <typename T>
- bool Plus(const T* x_radians,
- const T* delta_radians,
- T* x_plus_delta_radians) const {
- *x_plus_delta_radians = NormalizeAngle(*x_radians + *delta_radians);
- return true;
- }
- template <typename T>
- bool Minus(const T* y_radians,
- const T* x_radians,
- T* y_minus_x_radians) const {
- *y_minus_x_radians =
- NormalizeAngle(*y_radians) - NormalizeAngle(*x_radians);
- return true;
- }
- static ceres::Manifold* Create() {
- return new ceres::AutoDiffManifold<AngleManifold, 1, 1>;
- }
- };
- }
- #endif
|