NDEVR
API Documentation
edge_se3_expmap.h
1#pragma once
2
3#include "base_binary_edge.h"
4#include "vertex_se3_expmap.h"
5
6namespace NDEVR
7{
8
13 : public BaseBinaryEdge<6, SE3Quat, VertexSE3Expmap, VertexSE3Expmap> {
14 public:
15 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
20
21 void computeError() override
22 {
23 SE3Quat error_ = m_b->estimate().inverse() * _measurement * m_a->estimate();
24 _error = error_.log();
25 //if (!_error.array().isFinite().all())
26 // throw "error";
27 }
28
29 void linearizeOplus() override
30 {
31 SE3Quat Ti(m_a->estimate());
32 SE3Quat Tj(m_b->estimate());
33
34 const SE3Quat& Tij = _measurement;
35 SE3Quat invTij = Tij.inverse();
36
37 SE3Quat invTj_Tij = Tj.inverse() * Tij;
38 SE3Quat infTi_invTij = Ti.inverse() * invTij;
39
40 _jacobianOplusXi = invTj_Tij.adj();
41 _jacobianOplusXj = -infTi_invTij.adj();
42 }
43 };
44
45}
Measurement _measurement
Definition base_edge.h:75
void linearizeOplus() override
Computes the analytical Jacobians w.r.t.
void computeError() override
Computes the error as the logarithm of the relative pose difference.
EdgeSE3Expmap()
Default constructor.
SE(3) rigid body transformation represented by a unit quaternion and translation vector.
Definition se3quat.h:42
SE3Quat inverse() const
Computes the inverse of this SE3 transform.
Definition se3quat.h:145
Vector6d log() const
Computes the logarithmic map (SE3 -> 6D tangent vector).
Definition se3quat.h:209
Eigen::Matrix< g_type, 6, 6 > adj() const
Computes the 6x6 adjoint matrix of this SE3 transform.
Definition se3quat.h:309
SE3 Vertex parameterized internally with a transformation matrix and externally with its exponential ...
The primary namespace for the NDEVR SDK.