Go to the documentation of this file.
64 MotionVec<T>
transformError(
const PTransform<T> & X_a_b,
const PTransform<T> & X_a_c);
89 typedef Eigen::Quaternion<T> quaternion_t;
95 return PTransform<T>(matrix3_t::Identity(), vector3_t::Zero());
104 template<
typename T2>
113 PTransform(
const matrix3_t & rot,
const vector3_t & trans) : E_(rot), r_(trans) {}
119 PTransform(
const quaternion_t & rot,
const vector3_t & trans) : E_(rot.
matrix()), r_(trans) {}
131 PTransform(
const matrix3_t & rot) : E_(rot), r_(vector3_t::Zero()) {}
180 template<
typename T2>
183 return PTransform<T2>(E_.template cast<T2>(), r_.template cast<T2>());
190 return PTransform<T>(E_ * pt.E_, pt.r_ + pt.E_.transpose() * r_);
201 template<
typename Derived>
202 void mul(
const Eigen::MatrixBase<Derived> & mv, Eigen::MatrixBase<Derived> & result)
const;
211 template<
typename Derived>
212 void invMul(
const Eigen::MatrixBase<Derived> & mv, Eigen::MatrixBase<Derived> & result)
const;
221 template<
typename Derived>
222 void dualMul(
const Eigen::MatrixBase<Derived> & fv, Eigen::MatrixBase<Derived> & result)
const;
231 template<
typename Derived>
232 void transMul(
const Eigen::MatrixBase<Derived> & fv, Eigen::MatrixBase<Derived> & result)
const;
252 return E_ == pt.E_ && r_ == pt.r_;
257 return E_ != pt.E_ || r_ != pt.r_;
268 T s = std::sin(theta), c = std::cos(theta);
275 T s = std::sin(theta), c = std::cos(theta);
282 T s = std::sin(theta), c = std::cos(theta);
296 constexpr T eps = std::numeric_limits<T>::epsilon();
299 constexpr T pi = 3.1415926535897932;
301 T trace = E_a_b(0, 0) + E_a_b(1, 1) + E_a_b(2, 2);
302 T acosV = (trace - 1.) * 0.5;
303 T theta = std::acos(std::min(std::max(acosV, -1.), 1.));
305 Eigen::Vector3<T> w(-E_a_b(2, 1) + E_a_b(1, 2), -E_a_b(0, 2) + E_a_b(2, 0), -E_a_b(1, 0) + E_a_b(0, 1));
307 if(1 + trace < sqsqeps)
314 if(theta > pi - 1e-7)
318 if(E_a_b(0, 1) + E_a_b(1, 0) < 0)
322 if(E_a_b(0, 2) + E_a_b(2, 0) < 0)
329 if(E_a_b(1, 2) + E_a_b(2, 1) < 0)
337 return (w.array() >= 0).select(tn2, -tn2);
364 Eigen::Quaternion<T> qfrom(from.rotation());
365 Eigen::Quaternion<T> qto(to.rotation());
366 PTransform<T> result(qfrom.slerp(t, qto), (from.translation() * (1. - t) + to.translation() * t));
PTransform< T > interpolate(const PTransform< T > &from, const PTransform< T > &to, double t)
Definition: PTransform.h:362
std::ostream & operator<<(std::ostream &out, const ABInertia< T > &abI)
Definition: ABInertia.h:183
Matrix< T, 3, 3 > Matrix3
Definition: EigenTypedef.h:20
T sinc_inv(const T x)
Definition: MathFunc.h:225
Definition: ForceVec.h:19
Definition: ABInertia.h:10
Matrix3< T > vector3ToCrossMatrix(const Vector3< T > &vec)
Definition: EigenUtility.h:16
Matrix< T, 3, 1 > Vector3
Definition: EigenTypedef.h:18
Eigen::Vector3< T > rotationVelocity(const Eigen::Matrix3< T > &E_a_b)
Definition: PTransform.h:294
Eigen::Vector3< T > rotationError(const Eigen::Matrix3< T > &E_a_b, const Eigen::Matrix3< T > &E_a_c)
Definition: PTransform.h:287
Eigen::Matrix3< T > RotY(T theta)
Definition: PTransform.h:273
constexpr T sqrt(T x)
Definition: MathFunc.h:33
Definition: ABInertia.h:18
MotionVec< T > transformVelocity(const PTransform< T > &X_a_b)
Definition: PTransform.h:355
Eigen::Matrix3< T > RotX(T theta)
Definition: PTransform.h:266
Matrix< T, 6, 6 > Matrix6
Definition: EigenTypedef.h:15
Eigen::Matrix3< T > RotZ(T theta)
Definition: PTransform.h:280
MotionVec< T > transformError(const PTransform< T > &X_a_b, const PTransform< T > &X_a_c)
Definition: PTransform.h:348