AUV-Coop-Assembly
Master Thesis for Robotics Engineering. Cooperative peg-in-hole assembly with two underwater vehicles guided by vision
endEffectorReachTask.cpp
1 #include "header/endEffectorReachTask.h"
2 
13 EndEffectorReachTask::EndEffectorReachTask(int dim, bool eqType, std::string robotName)
14  : Task(dim, eqType, robotName, "ENDEFFECTOR_REACHING_GOAL"){
15  gain = 0.1;
16 
17 }
18 
24 int EndEffectorReachTask::updateMatrices(struct Infos* const robInfo){
25 
26  setActivation();
27 
28 
29  setJacobian(robInfo->robotState.w_Jee_robot);
30  setReference(robInfo->transforms.wTgoalEE_eigen,
31  robInfo->robotState.wTv_eigen*robInfo->robotState.vTee_eigen);
32 
33  //setJacobian(transf->vTjoints, transf->vTee_eigen);
34  //setReference(transf->vTee_eigen, transf->wTgoalEE_eigen, transf->wTv_eigen);
35  return 0;
36 }
37 
38 void EndEffectorReachTask::setJacobian(Eigen::Matrix<double, 6, TOT_DOF> w_J_robot){
39 
40  J = CONV::matrix_eigen2cmat(w_J_robot);
41 
42 }
43 
44 int EndEffectorReachTask::setActivation(){
45 
46  double vectDiag[6];
47  std::fill_n(vectDiag, 6, 1);
48  this->A.SetDiag(vectDiag);
49 
50  return 0;
51 
52 }
53 
54 
61 void EndEffectorReachTask::setReference(Eigen::Matrix4d wTgoalxxx_eigen, Eigen::Matrix4d wTxxx_eigen){
62 
63  CMAT::TransfMatrix wTgoalxxx_cmat = CONV::matrix_eigen2cmat(wTgoalxxx_eigen);
64  CMAT::TransfMatrix wTxxx_cmat = CONV::matrix_eigen2cmat(wTxxx_eigen);
65 
66  CMAT::Vect6 errorSwapped = CMAT::CartError(wTgoalxxx_cmat, wTxxx_cmat);//ang;lin
67  // ang and lin must be swapped because in yDot and jacob linear part is before
68  CMAT::Vect6 error_priv;
69  error_priv.SetFirstVect3(errorSwapped.GetSecondVect3());
70  error_priv.SetSecondVect3(errorSwapped.GetFirstVect3());
71  this->error = error_priv;
72 
73  error_priv = this->gain * error_priv;
74 
75  //saturate
76  error_priv.SetFirstVect3(FRM::saturateCmat(error_priv.GetFirstVect3(), 0.5)); //linear
77  error_priv.SetSecondVect3(FRM::saturateCmat(error_priv.GetSecondVect3(), 0.2)); //angular
78 
79  this->reference = error_priv; //lin; ang
80 }
81 
82 //int EndEffectorReachTask::setReference(
83 // Eigen::Matrix4d vTee_eigen, Eigen::Matrix4d wTgoalEE_eigen, Eigen::Matrix4d wTv_eigen){
84 
85 // CMAT::TransfMatrix vTee_cmat = CONV::matrix_eigen2cmat(vTee_eigen);
86 // CMAT::TransfMatrix wTgoalEE_cmat = CONV::matrix_eigen2cmat(wTgoalEE_eigen);
87 // CMAT::TransfMatrix wTv_cmat = CONV::matrix_eigen2cmat(wTv_eigen);
88 
89 // CMAT::TransfMatrix vTgoalEE_cmat = wTv_cmat.Inverse() * wTgoalEE_cmat;
90 // //vTgoalEE_cmat.PrintMtx("vTgoalEE"); ///DEBUG: GIUSTA
91 // CMAT::Vect6 errorSwapped = CMAT::CartError(vTgoalEE_cmat, vTee_cmat);//ang;lin
92 // // ang and lin must be swapped because in yDot and jacob linear part is before
93 // CMAT::Vect6 error;
94 // error.SetFirstVect3(errorSwapped.GetSecondVect3());
95 // error.SetSecondVect3(errorSwapped.GetFirstVect3());
96 // //error.PrintMtx("error"); ///DEBUG: GIUSTOOO
97 // this->reference = this->gain * (error); //lin; ang
98 
99 
100 //}
101 
102 
103 //TODO considerare anche il tool (wTt)
104 //int EndEffectorReachTask::setJacobian(std::vector<Eigen::Matrix4d> vTjoints, Eigen::Matrix4d vTee_eigen){
105 
106 // Eigen::MatrixXd J_eigen = Eigen::MatrixXd::Zero(dimension, dof);
107 
108 // Eigen::Vector3d v_ree = vTee_eigen.topRightCorner(3,1); //position of ee respect vehicle
109 // Eigen::Vector3d khat; //versor along z axis
110 // khat << 0, 0, 1;
111 
112 // /// taking rotation matrices and translational vectors
113 // Eigen::Matrix3d v_R_[ARM_DOF];
114 // Eigen::Vector3d v_r[ARM_DOF];
115 
116 // for (int i =0; i<ARM_DOF; i++){
117 // ///DEBUG::POSIZ e ROTAZ SONO CORRETTE
118 // v_R_[i] = vTjoints[i].topLeftCorner(3,3);
119 // v_r[i] = vTjoints[i].topRightCorner(3,1); //position of joint i respect vehicle
120 // //std::cout <<"\n\n JOINT "<< i << ": \n" << v_R_[i] << "\n\n";
121 // }
122 
123 // ///JOINT part (0 to 3 columns)
124 // for (int i = 0; i<ARM_DOF; i++){
125 
126 // Eigen::VectorXd g(dimension);
127 // g << 0,0,0, 0,0,0;
128 
129 // Eigen::Vector3d v_kHat = v_R_[i] * khat; //versor k respect vehicle frame
130 
131 // ///DEBUG cross product รจ GIUSTO vkHat giusto
132 // g.head(3) = v_kHat.cross(v_ree - v_r[i]); //linear part
135 
136 
137 // g.tail(3) = v_kHat; //angular part
138 
139 // J_eigen.col(i) = g;
140 // }
141 
142 
143 // ///VEHICLE part (4 to 9 columns)
144 
145 // //linear part (top rows)
146 // J_eigen.block<3,3>(0,4) = Eigen::Matrix3d::Identity(); //linear contribution to linear velocities
147 // J_eigen.topRightCorner(3,3) = -(FRM::skewMat(v_ree)); //angular contribution to linear velocites
148 
149 // //angualr part (bottom rows)
150 // J_eigen.block<3,3>(3,4) = Eigen::Matrix3d::Zero(); //linear contribution to angular velocities
151 // J_eigen.bottomRightCorner(3,3) = Eigen::Matrix3d::Identity(); //angular contribution to angular velocities
152 
153 // this->J = CONV::matrix_eigen2cmat(J_eigen);
154 // J.PrintMtx();
155 
156 // return 0;
157 //}
int updateMatrices(struct Infos *const robInfo)
VehicleReachTask::updateMatrices overriden of the pure virtual method of Task parent class...
Definition: infos.h:117
Eigen::Matrix4d wTv_eigen
Transforms.
Definition: infos.h:34
EndEffectorReachTask(int dimension, bool eqType, std::string robotName)
EndEffectorReachTask::EndEffectorReachTask Constructor of specific task simply calls the parent const...
ABSTRACT class task. Each task is a derived class of this class. It contains all the variable that th...
Definition: task.h:17