本文整理汇总了C++中eigen::Vector3d::coeff方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector3d::coeff方法的具体用法?C++ Vector3d::coeff怎么用?C++ Vector3d::coeff使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Vector3d
的用法示例。
在下文中一共展示了Vector3d::coeff方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dx
Eigen::Matrix4d create_translation3d(const Eigen::Vector3d center)
{
double dx(center.coeff(0)),dy(center.coeff(1)),dz(center.coeff(2));
Eigen::Matrix4d trans;
trans << 1,0,0,dx,
0,1,0,dy,
0,0,1,dz,
0,0,0,1;
return trans;
}
示例2: Exception
Quaternion::Quaternion(const Eigen::Vector3d& axis, double angle)
{
if(axis.norm() == 0.0)
{
throw Exception("Quaternion::Quaternion", "Norm of axis is zero.");
}
double inv_norm = 1.0 / axis.norm();
double sin_val = sin(0.5 * angle);
x_ = axis.coeff(0) * inv_norm * sin_val;
y_ = axis.coeff(1) * inv_norm * sin_val;
z_ = axis.coeff(2) * inv_norm * sin_val;
w_ = cos(0.5 * angle);
}
示例3: rpyToQuaternion
void rpyToQuaternion(const Eigen::Vector3d& rpy, Eigen::Quaternion<double>& q)
{
double a = rpy.coeff(0);
double b = rpy.coeff(1);
double g = rpy.coeff(2);
double sin_b_half = sin(0.5 * b);
double cos_b_half = cos(0.5 * b);
double diff_a_g_half = 0.5 * (a - g);
double sum_a_g_half = 0.5 * (a + g);
q.x() = sin_b_half * cos(diff_a_g_half);
q.y() = sin_b_half * sin(diff_a_g_half);
q.z() = cos_b_half * sin(sum_a_g_half);
q.w() = cos_b_half * cos(sum_a_g_half);
}
示例4: rpyToRotationMatrix
void rpyToRotationMatrix(const Eigen::Vector3d& rpy, Eigen::Matrix3d& mat)
{
double sin_a = sin(rpy.coeff(2));
double cos_a = cos(rpy.coeff(2));
double sin_b = sin(rpy.coeff(1));
double cos_b = cos(rpy.coeff(1));
double sin_g = sin(rpy.coeff(0));
double cos_g = cos(rpy.coeff(0));
mat.coeffRef(0, 0) = cos_a * cos_b;
mat.coeffRef(0, 1) = cos_a * sin_b * sin_g - sin_a * cos_g;
mat.coeffRef(0, 2) = cos_a * sin_b * cos_g + sin_a * sin_g;
mat.coeffRef(1, 0) = sin_a * cos_b;
mat.coeffRef(1, 1) = sin_a * sin_b * sin_g + cos_a * cos_g;
mat.coeffRef(1, 2) = sin_a * sin_b * cos_g - cos_a * sin_g;
mat.coeffRef(2, 0) = -sin_b;
mat.coeffRef(2, 1) = cos_b * sin_g;
mat.coeffRef(2, 2) = cos_b * cos_g;
}
示例5:
Eigen::Matrix4d create_rotation3d_line_angle(const Eigen::Vector3d& center, Eigen::Vector3d v, double theta)
{
//% normalize vector
v.normalize();
//% compute projection matrix P and anti-projection matrix
Eigen::Matrix3d P = v * v.transpose();
Eigen::Matrix3d Q;
Q << 0, -v.coeff(2), v.coeff(1),
v.coeff(2), 0, -v.coeff(0),
-v.coeff(1), v.coeff(0), 0;
Eigen::Matrix3d I = Eigen::Matrix3d::Identity();
//% compute vectorial part of the transform
Eigen::Matrix4d mat = Eigen::Matrix4d::Identity();
mat.block(0, 0, 3, 3) = P + (I - P)*cos(theta) + Q*sin(theta);
//% add translation coefficient
mat = recenter_transform3d(mat, center);
return mat;
}
示例6: computeJacobian
void Manipulator::computeJacobian(int32_t idx, Eigen::MatrixXd& J)
{
J = Eigen::MatrixXd::Zero(6, dof_);
if(idx < dof_) // Not required to consider end-effector
{
for(uint32_t i = 0; i <= idx; ++i)
{
if(link_[i]->ep) // joint_type is prismatic
{
J.block(0, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis();
J.block(3, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * Eigen::Vector3d::Zero();
}
else // joint_type is revolute
{
Eigen::Matrix4d Tib;
math::calculateInverseTransformationMatrix(T_abs_[i], Tib);
Eigen::Matrix4d Cin = Tib * C_abs_[idx];
Eigen::Vector3d P = Cin.block(0, 3, 3, 1);
J.block(0, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis().cross(P);
J.block(3, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis();
}
}
}
else // Required to consider the offset of end-effector
{
--idx;
for(uint32_t i = 0; i <= idx; ++i)
{
if(link_[i]->ep) // joint_type is prismatic
{
J.block(0, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis();
J.block(3, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * Eigen::Vector3d::Zero();
}
else // joint_type is revolute
{
Eigen::Matrix4d Tib;
math::calculateInverseTransformationMatrix(T_abs_[i], Tib);
Eigen::Matrix4d Cin = Tib * C_abs_[idx];
Eigen::Vector3d P = Cin.block(0, 3, 3, 1);
J.block(0, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis().cross(P);
J.block(3, i, 3, 1) = T_abs_[i].block(0, 0, 3, 3) * link_[i]->tf->axis();
}
}
Eigen::MatrixXd J_Pne = Eigen::MatrixXd::Identity(6, 6);
Eigen::Vector3d Pne;
if(C_abs_.size() - 1 - 1 >= 0.0)
{
Pne = T_abs_[T_abs_.size() - 1].block(0, 3, 3, 1) - C_abs_[C_abs_.size() - 1 - 1].block(0, 3, 3, 1);
}
else
{
std::stringstream msg;
msg << "C_abs_.size() <= 1" << std::endl
<< "Manipulator doesn't have enough links." << std::endl;
throw ahl_utils::Exception("Manipulator::computeJacobian", msg.str());
}
Eigen::Matrix3d Pne_cross;
Pne_cross << 0.0, Pne.coeff(2), -Pne.coeff(1),
-Pne.coeff(2), 0.0, Pne.coeff(0),
Pne.coeff(1), -Pne.coeff(0), 0.0;
J_Pne.block(0, 3, 3, 3) = Pne_cross;
J = J_Pne * J;
}
}
示例7:
Quaternion::Quaternion(const Eigen::Vector3d& pos)
: x_(pos.coeff(0)), y_(pos.coeff(1)), z_(pos.coeff(2)), w_(0.0)
{
}