1 #include "header/fovEEToToolTask.h" 3 FovEEToToolTask::FovEEToToolTask(
int dim,
bool eqType, std::string robotName)
4 :
Task(dim, eqType, robotName,
"FOV_EE_TO_TOOL") {
7 std::cerr <<
"[" << robotName <<
"]" << taskName <<
"] ERROR, this task is intended to be a scalar one, "<<
8 "you setted "<< dimension <<
" as dimension\n";
15 int FovEEToToolTask::updateMatrices(
struct Infos*
const robInfo){
20 Eigen::Matrix4d wTee = robInfo->robotState.
wTv_eigen * robInfo->robotState.vTee_eigen;
22 w_kHat_ee = wTee.topLeftCorner<3,3>() * kHat;
24 w__Dist_ee_t = robInfo->transforms.wTt_eigen.topRightCorner<3,1>() -
25 wTee.topRightCorner<3,1>();
28 if (w__Dist_ee_t.norm() < 0.000001){
32 a_d = w__Dist_ee_t / w__Dist_ee_t.norm();
34 distNorm = (a_d - w_kHat_ee).norm();
37 if (distNorm < 0.000001){
43 setJacobian(robInfo->robotState.w_Jee_robot);
55 void FovEEToToolTask::setActivation(){
58 A(1) = CMAT::IncreasingBellShapedFunction(0.015, 0.6, 0, 1, distNorm);
61 void FovEEToToolTask::setReference(){
63 reference(1) = - gain * distNorm;
67 void FovEEToToolTask::setJacobian(
68 Eigen::Matrix<double, 6, TOT_DOF> w_J_robot){
70 Eigen::Vector3d normalVectDist = (a_d - w_kHat_ee) / distNorm;
72 Eigen::Matrix3d skew_ad = FRM::skewMat(a_d);
73 Eigen::Matrix3d skew_Dist_ee_t__inv = FRM::pseudoInverse(FRM::skewMat(w__Dist_ee_t));
74 Eigen::Matrix3d skew_kHat_ee = FRM::skewMat(w_kHat_ee);
76 Eigen::Matrix<double, 1, TOT_DOF> J_eigen;
77 J_eigen = normalVectDist.transpose() * (
78 -skew_ad * skew_Dist_ee_t__inv * w_J_robot.topRows<3>() +
79 skew_kHat_ee * w_J_robot.bottomRows<3>()
82 J = CONV::matrix_eigen2cmat(J_eigen);
Eigen::Matrix4d wTv_eigen
Transforms.
ABSTRACT class task. Each task is a derived class of this class. It contains all the variable that th...