31class RBY1_SDK_API
SE3 {
33 using MatrixType = Eigen::Matrix4d;
35 static MatrixType Identity();
37 static MatrixType T(
const Eigen::Vector3d& p);
39 static MatrixType T(
const SO3::MatrixType& R,
const Eigen::Vector3d& p = Eigen::Vector3d::Zero());
41 static MatrixType Inverse(
const MatrixType& T);
43 static SO3::MatrixType GetRotation(
const MatrixType& T);
45 static Eigen::Vector3d GetPosition(
const MatrixType& T);
47 static MatrixType Exp(
const se3v::MatrixType& S,
double angle = 1.);
49 static MatrixType Exp(so3v::MatrixType w, Eigen::Vector3d v,
double angle = 1.);
51 static se3v::MatrixType
Log(
const MatrixType& T);
53 static typename Eigen::Matrix<double, 6, 6> Ad(
const MatrixType& T);
55 static se3v::MatrixType Ad(
const MatrixType& T,
const se3v::MatrixType& S);
57 static Eigen::Matrix<double, 6, 6> InvAd(
const MatrixType& T);
59 static se3v::MatrixType InvAd(
const MatrixType& T,
const se3v::MatrixType& S);
61 static typename Eigen::Matrix<double, 6, 6> ad(
const se3v::MatrixType& S);
63 static Eigen::Matrix<double, 6, 6> adTranspose(
const se3v::MatrixType& S);
65 static se3v::MatrixType ad(
const se3v::MatrixType& S1,
const se3v::MatrixType& S2);
67 static se3v::MatrixType adTranspose(
const se3v::MatrixType& S1,
const se3v::MatrixType& S2);
69 static Eigen::Vector3d Multiply(
const MatrixType& T,
const Eigen::Vector3d& p);
71 template <
typename Container,
typename = std::enable_if_t<std::is_same_v<
typename Container::value_type, MatrixType>>>
72 static std::optional<MatrixType> Average(
const Container& matrices,
double eps,
int max_iter = -1);
74 static se3v::MatrixType Vec(
const se3::MatrixType& s);
76 static se3::MatrixType Hat(
const se3v::MatrixType& v);