49 matrix_VxV_t & J1 = *df_de1;
60 J1(0,4) = P1DP2inv.z(); J1(0,5) = -P1DP2inv.
y();
61 J1(1,3) = -P1DP2inv.z(); J1(1,5) = P1DP2inv.
x();
62 J1(2,3) = P1DP2inv.
y(); J1(2,4) =-P1DP2inv.
x();
80 J1.block(3,3,3,3) = (dLnRot_dRot * aux).eval();
89 matrix_VxV_t & J2 = *df_de2;
94 J2.set_unsafe(i,j, -
R.get_unsafe(i,j));
112 J2.block(3,3,3,3) = (dLnRot_dRot * aux).eval();
118 matrix_VxV_t* df_de1, matrix_VxV_t* df_de2)
129 matrix_VxV_t *df_de1,
130 matrix_VxV_t *df_de2)
134 matrix_VxV_t & J1 = *df_de1;
140 J1.unit(VECTOR_SIZE,1.0);
141 J1(0,2) = -P1DP2inv.
y();
142 J1(1,2) = P1DP2inv.
x();
151 matrix_VxV_t & J2 = *df_de2;
153 const double ccos = cos(P1DP2inv.
phi());
154 const double csin = sin(P1DP2inv.
phi());
156 const double vals[] = {
167 matrix_VxV_t* df_de1, matrix_VxV_t* df_de2)
170 const double phi1 = P1.
phi();
173 const double si = std::sin(phi1), ci = std::cos(phi1);
178 K.block<2, 2>(0, 0) = RotDinv;
183 (*df_de1)(0, 0) = -ci;
184 (*df_de1)(0, 1) = -si;
185 (*df_de1)(0, 2) = -si * dt.x + ci * dt.y;
186 (*df_de1)(1, 0) = si;
187 (*df_de1)(1, 1) = -ci;
188 (*df_de1)(1, 2) = -ci * dt.x - si * dt.y;
191 (*df_de1)(2, 2) = -1;
192 (*df_de1) = K * (*df_de1);
197 (*df_de2)(0, 0) = ci;
198 (*df_de2)(0, 1) = si;
200 (*df_de2)(1, 0) = -si;
201 (*df_de2)(1, 1) = ci;
206 (*df_de2) = K * (*df_de2);
double x() const
Common members of all points & poses classes.
Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL.
#define THROW_EXCEPTION(msg)
mrpt::math::CArrayDouble< 3 > ln_rotation() const
Take the logarithm of the 3x3 rotation matrix, generating the corresponding vector in the Lie Algebra...
static void jacobian_dP1DP2inv_depsilon(const CPose3D &P1DP2inv, matrix_VxV_t *df_de1, matrix_VxV_t *df_de2)
Return one or both of the following 6x6 Jacobians, useful in graph-slam problems: With and being ...
This base provides a set of functions for maths stuff.
mrpt::math::CArrayDouble< 3 > m_coords
The translation vector [x,y,z] access directly or with x(), y(), z() setter/getter methods...
void getRotationMatrix(mrpt::math::CMatrixDouble22 &R) const
Returns the SE(2) 2x2 rotation matrix.
static void jacobian_dDinvP1invP2_depsilon(const CPose2D &Dinv, const CPose2D &P1, const CPose2D &P2, matrix_VxV_t *df_de1, matrix_VxV_t *df_de2)
Return one or both of the following 3x3 Jacobians, useful in graph-slam problems: With and being ...
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
static void jacobian_dDinvP1invP2_depsilon(const CPose3D &Dinv, const CPose3D &P1, const CPose3D &P2, matrix_VxV_t *df_de1, matrix_VxV_t *df_de2)
Return one or both of the following 3x3 Jacobians, useful in graph-slam problems: With and being ...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
static void ln_rot_jacob(const mrpt::math::CMatrixDouble33 &R, mrpt::math::CMatrixFixedNumeric< double, 3, 9 > &M)
Static function to compute the Jacobian of the SO(3) Logarithm function, evaluated at a given 3x3 rot...
const double & phi() const
Get the phi angle of the 2D pose (in radians)
static void pseudo_ln(const CPose3D &P, array_t &x)
A pseudo-Logarithm map in SE(3), where the output = [X,Y,Z, Ln(ROT)], that is, the normal SO(3) logar...
void getRotationMatrix(mrpt::math::CMatrixDouble33 &ROT) const
Get the 3x3 rotation matrix.
static void jacobian_dP1DP2inv_depsilon(const CPose2D &P1DP2inv, matrix_VxV_t *df_de1, matrix_VxV_t *df_de2)
Return one or both of the following 3x3 Jacobians, useful in graph-slam problems: With and being ...