Exemplo n.º 1
0
    inline int orient2d(const VecT1  & a, const VecT2  & b, const VecT3  & c) {
        EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(VecT1,2)
        EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(VecT2,2)
        EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(VecT3,2)

        PREC f_A = GeometryPredicates::orient2d(const_cast<double*>(a.data()),
                                                const_cast<double*>(b.data()),
                                                const_cast<double*>(c.data()));

        return  ( ( f_A < 0.0 )?   -1   :   ( (f_A > 0.0)? 1 : 0) );

    }
Exemplo n.º 2
0
void setRotFromQuaternion(const Eigen::MatrixBase<Derived>& quat, Eigen::MatrixBase<DerivedOther>& A)
{
    typedef typename Derived::Scalar PREC;
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 4);
    EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(DerivedOther, 3, 3);
    // ASSERTMSG(quat.rows() == 4 && quat.cols()==1 &&  A.rows() == 3 && A.cols() == 3, "IN: "<<
    // quat.rows()<<","<<quat.cols()<<"; OUT: "<<A.rows()<<","<<A.cols() );

    // No check if quaternion is unit...(performance)
    PREC fTx  = 2.0 * quat(1);
    PREC fTy  = 2.0 * quat(2);
    PREC fTz  = 2.0 * quat(3);
    PREC fTwx = fTx * quat(0);
    PREC fTwy = fTy * quat(0);
    PREC fTwz = fTz * quat(0);
    PREC fTxx = fTx * quat(1);
    PREC fTxy = fTy * quat(1);
    PREC fTxz = fTz * quat(1);
    PREC fTyy = fTy * quat(2);
    PREC fTyz = fTz * quat(2);
    PREC fTzz = fTz * quat(3);

    A(0, 0) = 1.0f - (fTyy + fTzz);
    A(0, 1) = fTxy - fTwz;
    A(0, 2) = fTxz + fTwy;
    A(1, 0) = fTxy + fTwz;
    A(1, 1) = 1.0f - (fTxx + fTzz);
    A(1, 2) = fTyz - fTwx;
    A(2, 0) = fTxz - fTwy;
    A(2, 1) = fTyz + fTwx;
    A(2, 2) = 1.0f - (fTxx + fTyy);
}
Exemplo n.º 3
0
 /// \brief Exp: se3 -> SE3.
 ///
 /// Return the integral of the input spatial velocity during time 1.
 template <typename D> SE3Tpl<typename D::Scalar, D::Options>
 exp6(const Eigen::MatrixBase<D> & v)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(D,6);
   MotionTpl<typename D::Scalar,D::Options> nu(v);
   return exp6(nu);
 }
Exemplo n.º 4
0
 /// \brief Exp: so3 -> SO3.
 ///
 /// Return the integral of the input angular velocity during time 1.
 template <typename D> Eigen::Matrix<typename D::Scalar,3,3,D::Options>
 exp3(const Eigen::MatrixBase<D> & v)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(D,3);
   typename D::Scalar nv = v.norm();
   return Eigen::AngleAxis<typename D::Scalar>(nv, v / nv).matrix();
 }
Exemplo n.º 5
0
inline bool Transformation::setCoeffs(
    const Eigen::MatrixBase<Derived_coeffs> & coeffs) {
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived_coeffs, 7);
  parameters_ = coeffs;
  updateC();
  return true;
}
Exemplo n.º 6
0
void setQuaternion(const Eigen::MatrixBase<Derived>& nc_quat,
                   const Eigen::MatrixBase<DerivedOther>& nc_n,
                   const typename Derived::Scalar angleRadian)
{
    typedef typename Derived::Scalar PREC;
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 4);
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(DerivedOther, 3);

    Eigen::MatrixBase<Derived>& quat   = const_cast<Eigen::MatrixBase<Derived>&>(nc_quat);
    Eigen::MatrixBase<DerivedOther>& n = const_cast<Eigen::MatrixBase<DerivedOther>&>(nc_n);

    n.normalize();

    quat(0)                 = cos(angleRadian / 2);
    quat.template tail<3>() = n * sin(angleRadian / 2);
}
Exemplo n.º 7
0
inline Eigen::Matrix<typename Eigen::internal::traits<Derived_T>::Scalar, 3, 3> crossMx(
    Eigen::MatrixBase<Derived_T> const & v)
{
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Eigen::MatrixBase<Derived_T>, 3);
  assert((v.cols()==3 && v.rows()==1)||(v.rows()==3 && v.cols()==1));
  return crossMx(v(0, 0), v(1, 0), v(2, 0));
}
Exemplo n.º 8
0
 friend Motion operator* (const ConstraintPlanar &, const Eigen::MatrixBase<D> & v)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(D,3);
   Motion result (Motion::Zero ());
   result.linear ().template head<2> () = v.template topRows<2> ();
   result.angular ().template tail<1> () = v.template bottomRows<1> ();
   return result;
 }
Exemplo n.º 9
0
void setQuaternionZero(Eigen::MatrixBase<Derived>& quat)
{
    typedef typename Derived::Scalar PREC;
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 4);
    quat(0) = 1;
    quat(1) = 0;
    quat(2) = 0;
    quat(3) = 0;
}
Exemplo n.º 10
0
inline bool Transformation::oplus(
    const Eigen::MatrixBase<Derived_delta> & delta,
    const Eigen::MatrixBase<Derived_jacobian> & jacobian) {
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived_delta, 6);
  EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived_jacobian, 7, 6);
  if (!oplus(delta)) {
    return false;
  }
  return oplusJacobian(jacobian);
}
Exemplo n.º 11
0
Eigen::Matrix<double, 3, 3> getRotFromQuaternion(const Eigen::MatrixBase<Derived>& quat)
{
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 4);
    // ASSERTMSG(quat.rows() == 4 && quat.cols()==1, "IN: "<< quat.rows()<<","<<quat.cols());

    Eigen::Matrix<double, 3, 3> A;
    // No check if quaternion is unit...(performance)
    setRotFromQuaternion(quat, A);
    return A;
}
Exemplo n.º 12
0
 inline void addSkew(const Eigen::MatrixBase<Vector3Like> & v,
                     const Eigen::MatrixBase<Matrix3Like> & M)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector3Like,3);
   EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Matrix3Like,3,3);
   
   Matrix3Like & M_ = PINOCCHIO_EIGEN_CONST_CAST(Matrix3Like,M);
   
                         M_(0,1) -= v[2];      M_(0,2) += v[1];
   M_(1,0) += v[2];                            M_(1,2) -= v[0];
   M_(2,0) -= v[1];      M_(2,1) += v[0];                     ;
 }
Exemplo n.º 13
0
 inline void skew(const Eigen::MatrixBase<Vector3> & v,
                  const Eigen::MatrixBase<Matrix3> & M)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector3,3);
   EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Matrix3,3,3);
   
   Matrix3 & M_ = const_cast<Eigen::MatrixBase<Matrix3> &>(M).derived();
   typedef typename Matrix3::RealScalar Scalar;
   
   M_(0,0) = Scalar(0);  M_(0,1) = -v[2];      M_(0,2) = v[1];
   M_(1,0) = v[2];       M_(1,1) = Scalar(0);  M_(1,2) = -v[0];
   M_(2,0) = -v[1];      M_(2,1) = v[0];       M_(2,2) = Scalar(0);
 }
Exemplo n.º 14
0
inline bool Transformation::oplus(
    const Eigen::MatrixBase<Derived_delta> & delta) {
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived_delta, 6);
  r_ += delta.template head<3>();
  Eigen::Vector4d dq;
  double halfnorm = 0.5 * delta.template tail<3>().norm();
  dq.template head<3>() = sinc(halfnorm) * 0.5 * delta.template tail<3>();
  dq[3] = cos(halfnorm);
  q_ = (Eigen::Quaterniond(dq) * q_);
  q_.normalize();
  updateC();
  return true;
}
Exemplo n.º 15
0
 inline void unSkew(const Eigen::MatrixBase<Matrix3> & M,
                    const Eigen::MatrixBase<Vector3> & v)
 {
   EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector3,3);
   EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Matrix3,3,3);
   assert((M + M.transpose()).isMuchSmallerThan(M));
   
   Vector3 & v_ = const_cast<Eigen::MatrixBase<Vector3> &>(v).derived();
   typedef typename Vector3::RealScalar Scalar;
   
   v_[0] = Scalar(0.5) * (M(2,1) - M(1,2));
   v_[1] = Scalar(0.5) * (M(0,2) - M(2,0));
   v_[2] = Scalar(0.5) * (M(1,0) - M(0,1));
 }
Exemplo n.º 16
0
Eigen::Matrix<typename Derived::Scalar, 4, 1> quatMult(const Eigen::MatrixBase<Derived>& quat1,
                                                       const Eigen::MatrixBase<Derived>& quat2)
{
    typedef typename Derived::Scalar PREC;
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 4);

    Eigen::Matrix<PREC, 4, 1> ret;

    ret(0) = quat1(0) * quat2(0) - quat1(1) * quat2(1) - quat1(2) * quat2(2) - quat1(3) * quat2(3);
    ret(1) = quat1(0) * quat2(1) + quat1(1) * quat2(0) + quat1(2) * quat2(3) - quat1(3) * quat2(2);
    ret(2) = quat1(0) * quat2(2) + quat1(2) * quat2(0) + quat1(3) * quat2(1) - quat1(1) * quat2(3);
    ret(3) = quat1(0) * quat2(3) + quat1(3) * quat2(0) + quat1(1) * quat2(2) - quat1(2) * quat2(1);

    return ret;
}
Exemplo n.º 17
0
inline Eigen::Matrix<typename Derived::Scalar, 3, 3> mySkeww(const Eigen::MatrixBase<Derived> & vec)
{
    EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 3);
    return (Eigen::Matrix<typename Derived::Scalar, 3, 3>() << 0.0, -vec[2], vec[1], vec[2], 0.0, -vec[0], -vec[1], vec[0], 0.0).finished();
}