modern_robotics
rigid_body_motions.hpp
Go to the documentation of this file.
1 #ifndef MODERN_ROBOTICS__RIGID_BODY_MOTIONS_HPP___
2 #define MODERN_ROBOTICS__RIGID_BODY_MOTIONS_HPP___
3 
4 #include <armadillo>
6 
7 namespace mr
8 {
10 
15 const arma::mat33 RotInv(const arma::mat33 & R);
16 
21 const arma::mat33 VecToso3(const arma::vec3 & omg);
22 
27 const arma::vec3 so3ToVec(const arma::mat33 & so3mat);
28 
35 const std::tuple<const arma::vec3, double> AxisAng3(const arma::vec3 & expc3);
36 
41 const arma::mat33 MatrixExp3(const arma::mat33 & so3mat);
42 
47 const arma::mat33 MatrixLog3(const arma::mat33 & R);
48 
55 const arma::mat44 RpToTrans(const arma::mat33 & R, const arma::vec3 & p);
56 
63 const std::tuple<const arma::mat33, const arma::vec3> TransToRp(const arma::mat44 & T);
64 
71 const arma::mat44 TransInv(const arma::mat44 & T);
72 
77 const arma::mat44 VecTose3(const arma::vec6 & V);
78 
83 const arma::vec6 se3ToVec(const arma::mat44 & se3mat);
84 
89 const arma::mat66 Adjoint(const arma::mat44 & T);
90 
98 const arma::vec6 ScrewToAxis(const arma::vec3 & q, const arma::vec3 & s, const double h);
99 
105 const std::tuple<const arma::vec6, double> AxisAng6(const arma::vec6 & expc6);
106 
112 const arma::mat44 MatrixExp6(const arma::mat44 & se3mat);
113 
118 const arma::mat44 MatrixLog6(const arma::mat44 & T);
119 
128 const arma::mat33 ProjectToSO3(const arma::mat33 & mat);
129 
138 const arma::mat44 ProjectToSE3(const arma::mat44 & mat);
139 
148 double DistanceToSO3(const arma::mat33 & mat);
149 
161 double DistanceToSE3(const arma::mat44 & mat);
162 
172 inline bool TestIfSO3(const arma::mat33 & mat)
173 {
174  return std::fabs(DistanceToSO3(mat)) < tolerance;
175 }
176 
189 inline bool TestIfSE3(const arma::mat44 & mat)
190 {
191  return std::fabs(DistanceToSE3(mat)) < tolerance;
192 }
193 }
194 
195 #endif
const arma::vec6 se3ToVec(const arma::mat44 &se3mat)
Converts an se3 matrix into a spatial velocity vector.
Definition: rigid_body_motions.cpp:135
const arma::mat44 RpToTrans(const arma::mat33 &R, const arma::vec3 &p)
Converts a rotation matrix and a position vector into homogeneous transformation matrix.
Definition: rigid_body_motions.cpp:92
const arma::mat33 MatrixLog3(const arma::mat33 &R)
Computes the matrix logarithm of a rotation matrix.
Definition: rigid_body_motions.cpp:62
const std::tuple< const arma::mat33, const arma::vec3 > TransToRp(const arma::mat44 &T)
Converts a homogeneous transformation matrix into a rotation matrix and position vector.
Definition: rigid_body_motions.cpp:101
const arma::mat33 VecToso3(const arma::vec3 &omg)
Converts a 3-vector to an so(3) representation.
Definition: rigid_body_motions.cpp:14
bool TestIfSE3(const arma::mat44 &mat)
Returns true if mat is close to or on the manifold SE(3)
Definition: rigid_body_motions.hpp:189
const arma::mat44 TransInv(const arma::mat44 &T)
Inverts a homogeneous transformation matrix.
Definition: rigid_body_motions.cpp:109
const arma::mat44 ProjectToSE3(const arma::mat44 &mat)
Returns a projection of mat into SE(3)
Definition: rigid_body_motions.cpp:259
const arma::mat33 MatrixExp3(const arma::mat33 &so3mat)
Computes the matrix exponential of a matrix in so(3)
Definition: rigid_body_motions.cpp:46
const arma::mat33 RotInv(const arma::mat33 &R)
Inverts a rotation matrix.
Definition: rigid_body_motions.cpp:8
double DistanceToSE3(const arma::mat44 &mat)
Returns the Frobenius norm to describe the distance of mat from the SE(3) manifold.
Definition: rigid_body_motions.cpp:278
const arma::mat44 MatrixLog6(const arma::mat44 &T)
Computes the matrix logarithm of a homogeneous transformation matrix.
Definition: rigid_body_motions.cpp:213
const arma::mat44 VecTose3(const arma::vec6 &V)
Converts a spatial velocity vector into a 4x4 matrix in se3.
Definition: rigid_body_motions.cpp:122
const std::tuple< const arma::vec3, double > AxisAng3(const arma::vec3 &expc3)
Converts a 3-vector of exponential coordinates for rotation into axis-angle form.
Definition: rigid_body_motions.cpp:38
double DistanceToSO3(const arma::mat33 &mat)
Returns the Frobenius norm to describe the distance of mat from the SO(3) manifold.
Definition: rigid_body_motions.cpp:268
const std::tuple< const arma::vec6, double > AxisAng6(const arma::vec6 &expc6)
Converts a 6-vector of exponential coordinates into screw axis-angle form.
Definition: rigid_body_motions.cpp:167
const arma::vec3 so3ToVec(const arma::mat33 &so3mat)
Converts an so(3) representation to a 3-vector.
Definition: rigid_body_motions.cpp:28
const arma::mat33 ProjectToSO3(const arma::mat33 &mat)
Returns a projection of mat into SO(3)
Definition: rigid_body_motions.cpp:243
const arma::mat66 Adjoint(const arma::mat44 &T)
Computes the adjoint representation of a homogeneous transformation matrix.
Definition: rigid_body_motions.cpp:144
bool TestIfSO3(const arma::mat33 &mat)
Returns true if mat is close to or on the manifold SO(3)
Definition: rigid_body_motions.hpp:172
const arma::mat44 MatrixExp6(const arma::mat44 &se3mat)
Computes the matrix exponential of an se3 representation of exponential coordinates.
Definition: rigid_body_motions.cpp:183
const arma::vec6 ScrewToAxis(const arma::vec3 &q, const arma::vec3 &s, const double h)
Takes a parametric description of a screw axis and converts it to a normalized screw axis.
Definition: rigid_body_motions.cpp:158
Definition: dynamics_of_open_chains.hpp:7
constexpr double tolerance
Definition: utils.hpp:10