MROB
Namespaces | Classes | Typedefs | Functions | Variables
mrob Namespace Reference

Special Euclidean (group) in 3d Is the group representing rotations and translations, that is, rigid body transformations. SE3 = {T = [R t] | R SO3 , t Re^3 } [0 1] Associated to the groups of RBT, there is the Lie algebra se3 representing the same transformation in the tangent space around the identity. Particularly, xi =[w , v] Re^6, where w Re^3 represents the rotation and v the translation. We will preserve this order in this class. More...

Namespaces

 PCRegistration
 

Classes

class  CreatePoints
 
class  EigenFactor
 
class  EigenFactorPlane
 
class  EigenFactorPlaneCenter
 
class  EigenFactorPlaneCoordinatesAlign
 
class  EigenFactorPlaneRaw
 
class  EigenFactorPoint
 
class  Factor
 
class  Factor1Pose1Landmark2d
 
class  Factor1Pose1Landmark3d
 
class  Factor1Pose1Plane4d
 
class  Factor1Pose2d
 
class  Factor1Pose3d
 
class  Factor1PosePoint2Plane
 
class  Factor1PosePoint2Point
 
class  Factor2Poses2d
 
class  Factor2Poses2dOdom
 
class  Factor2Poses3d
 
class  Factor2Poses3d2obs
 
class  FactorCameraProj3dLine
 
class  FactorCameraProj3dPoint
 
class  FGraph
 
class  FGraphSolve
 
class  FGraphSolveDense
 
class  Node
 
class  NodeLandmark2d
 
class  NodeLandmark3d
 
class  NodePlane4d
 
class  NodePose2d
 
class  NodePose3d
 
class  Optimizer
 
class  OptimizerDense
 
class  OptimizerSparse
 
class  PiFactorPlane
 
class  Plane
 
class  PlaneRegistration
 
class  SamplePlanarSurface
 
class  SampleUniformSE3
 
class  SE3
 
class  SE3Cov
 
class  SO3
 
class  TimeProfiling
 

Typedefs

using matData_t = double
 
using uint_t = unsigned int
 
using factor_id_t = std::size_t
 
using Mat1 = Eigen::Matrix< matData_t, 1, 1, Eigen::RowMajor >
 
using Mat2 = Eigen::Matrix< matData_t, 2, 2, Eigen::RowMajor >
 
using Mat3 = Eigen::Matrix< matData_t, 3, 3, Eigen::RowMajor >
 
using Mat4 = Eigen::Matrix< matData_t, 4, 4, Eigen::RowMajor >
 
using Mat5 = Eigen::Matrix< matData_t, 5, 5, Eigen::RowMajor >
 
using Mat6 = Eigen::Matrix< matData_t, 6, 6, Eigen::RowMajor >
 
using MatX = Eigen::Matrix< matData_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >
 
using SMatCol = Eigen::SparseMatrix< matData_t, Eigen::ColMajor >
 
using SMatRow = Eigen::SparseMatrix< matData_t, Eigen::RowMajor >
 
using Triplet = Eigen::Triplet< matData_t >
 
using Mat21 = Eigen::Matrix< matData_t, 2, 1 >
 
using Mat31 = Eigen::Matrix< matData_t, 3, 1 >
 
using Mat41 = Eigen::Matrix< matData_t, 4, 1 >
 
using Mat51 = Eigen::Matrix< matData_t, 5, 1 >
 
using Mat61 = Eigen::Matrix< matData_t, 6, 1 >
 
using MatX1 = Eigen::Matrix< matData_t, Eigen::Dynamic, 1 >
 
using Mat12 = Eigen::Matrix< matData_t, 1, 2 >
 
using Mat13 = Eigen::Matrix< matData_t, 1, 3 >
 
using Mat14 = Eigen::Matrix< matData_t, 1, 4 >
 
using Mat15 = Eigen::Matrix< matData_t, 1, 5 >
 
using Mat16 = Eigen::Matrix< matData_t, 1, 6 >
 
using Mat1X = Eigen::Matrix< matData_t, 1, Eigen::Dynamic >
 
template<int D>
using Vect = Eigen::Matrix< matData_t, D, 1, Eigen::RowMajor >
 
template<int Rw, int Col>
using Mat = Eigen::Matrix< matData_t, Rw, Col, Eigen::RowMajor >
 
using VectRefConst = const Eigen::Ref< const MatX1 >
 
using MatRefConst = const Eigen::Ref< const MatX >
 
using Ttim = std::chrono::microseconds
 

Functions

double wrap_angle (double angle)
 
Mat4 hat6 (const Mat61 &xi)
 
Mat61 vee6 (const Mat4 &xi_hat)
 
bool isSE3 (const Mat4 &T)
 
Mat4 SE3GenerativeMatrix (uint_t coordinate)
 
Mat6 curly_wedge (const Mat61 &xi)
 Curly wedge operator. More...
 
Mat3 hat3 (const Mat31 &w)
 
Mat31 vee3 (const Mat3 &w_hat)
 
bool isSO3 (const Mat3 &R)
 
Mat3 quat_to_so3 (const Eigen::Ref< const Mat41 > v)
 
Mat41 so3_to_quat (const Eigen::Ref< const Mat3 > R)
 
Mat3 rpy_to_so3 (const Eigen::Ref< const Mat31 > v)
 
Mat41 estimate_plane (MatRefConst X, bool flagCentered=true)
 
Mat31 estimate_normal (MatRefConst X)
 
Mat31 estimate_centroid (MatRefConst X)
 

Variables

const std::vector< Mat4 > LieGenerative
 
const std::vector< Mat4 > LieDoubleGenerative
 

Detailed Description

Special Euclidean (group) in 3d Is the group representing rotations and translations, that is, rigid body transformations. SE3 = {T = [R t] | R SO3 , t Re^3 } [0 1] Associated to the groups of RBT, there is the Lie algebra se3 representing the same transformation in the tangent space around the identity. Particularly, xi =[w , v] Re^6, where w Re^3 represents the rotation and v the translation. We will preserve this order in this class.

Special Orthogonal (group) in 3d Is the group representing rotations SO3 = {R GL(3) | R'R = I , det R = 1} where GL(n) is the general linear group of matrices nxn (inverse exists) Associated to the group SO3, there is the Lie algebra so3 representing the same transformation in the tangent space around the identity. Particularly, w Re^3 represents the rotation.

Class SE3Cov for Special eualidean group poses compounding. Class SE3Cov inherits properties of SE3 class and containes additional attribute covariance_ to store the corresponding uncertainty. Beside that, SE3Cov has two compounding methods of different order. Implemented according to the paper: : http://ncfrn.mcgill.ca/members/pubs/barfoot_tro14.pdf.

The Factor1Poses2d is a vertex representing the distribution of a nodePose2d, pretty much like an anchoring factor.

The state is an observed RBT, coincident with the node state it is connected to.

In particular, the residual of this factor is: r = obs-x

In addition, we have added some utilities regarding alternative methods to build SO(3) and connect them to the manifold representation.

Function Documentation

◆ curly_wedge()

Mat6 mrob::curly_wedge ( const Mat61 &  xi)

Curly wedge operator.

Parameters
xi- input state vector
Returns
Mat6

◆ estimate_centroid()

Mat31 mrob::estimate_centroid ( MatRefConst  X)

Estimate centroid: given a set of points, in a Nx3 array, calculates the centroid point p R^3

◆ estimate_normal()

Mat31 mrob::estimate_normal ( MatRefConst  X)

Estimate normal: given a set of points, in a Nx3 array, calculates the noamrl plane n R^3

◆ estimate_plane()

Mat41 mrob::estimate_plane ( MatRefConst  X,
bool  flagCentered = true 
)

Estimate plane: given a set of points, in a Nx3 array, calculates the plane as pi = [n, d] P^3

◆ hat3()

Mat3 mrob::hat3 ( const Mat31 &  w)

Functions specified outside the class, since they are not strictly necessary as a class method.

The hat operator (^) constructs a skew-symetric matrix from a R^3 such as [0 -w3 w2] [w3 0 -w1] [-w2 w1 0]

◆ hat6()

Mat4 mrob::hat6 ( const Mat61 &  xi)

Hat operator xi^ = [0 -w3 w2 v1 w3 0 -w1 v2 -w2 w1 0 v3 0 0 0 0]

◆ quat_to_so3()

Mat3 mrob::quat_to_so3 ( const Eigen::Ref< const Mat41 >  v)

Function converting from quaternion q = [qx, qy, qz, qw](Eigen convention) to a rotation matrix 3x3 XXX: ref eigen did not return a valid matrix (probably lifetime was managed from cpp and this object was local to this scope)

◆ rpy_to_so3()

Mat3 mrob::rpy_to_so3 ( const Eigen::Ref< const Mat31 >  v)

Function converting from roll pitch yaw v = [r, p, y](Eigen convention) to a rotation matrix 3x3

◆ SE3GenerativeMatrix()

Mat4 mrob::SE3GenerativeMatrix ( uint_t  coordinate)

Returns the generative matrix given the coordinate, considering xi(0..5) = [theta(0..2), rho(3..5)]

◆ so3_to_quat()

Mat41 mrob::so3_to_quat ( const Eigen::Ref< const Mat3 >  R)

Function converting from a rotation matrix 3x3 to quaternion q = [qx, qy, qz, qw](Eigen convention)

◆ vee3()

Mat31 mrob::vee3 ( const Mat3 &  w_hat)

The vee operator (v) gets the parameters w from a skew-symetric matrix of the form [0 -w3 w2] [w3 0 -w1] [-w2 w1 0]

◆ vee6()

Mat61 mrob::vee6 ( const Mat4 &  xi_hat)

Vee operator (v), the inverse of hat

◆ wrap_angle()

double mrob::wrap_angle ( double  angle)

utility function for 2D poses to wrap angles into [-pi,pi]

Variable Documentation

◆ LieDoubleGenerative

const std::vector< Mat4> mrob::LieDoubleGenerative

Global variables declared here, defined once in the cpp. These are common data to access, so we make it accessible the fastest way. Returns the double generative matrix given the coordinates (i,j), considering xi(0..5) = [theta(0..2), rho(3..5)] This corresponds to the differential form:

d Exp / d xi = 0.5 (Gi *Gj + Gj*Gi)

◆ LieGenerative

const std::vector<Mat4> mrob::LieGenerative

Returns the double generative matrix given the coordinates (i,j), considering xi(0..5) = [theta(0..2), rho(3..5)] This corresponds to the differential form:

d Exp / d xi = 0.5 (Gi *Gj + Gj*Gi) Global variables declared here, defined once in the cpp.

These are common data to access, so we make it accessible the fastest way. generative matrix given the coordinate, considering xi(0..5) = [theta(0..2), rho(3..5)]