AUV-Coop-Assembly
Master Thesis for Robotics Engineering. Cooperative peg-in-hole assembly with two underwater vehicles guided by vision
old_missionManager_with_tools.cpp
1 #include "header/missionManager.h"
2 #include <chrono>
3 
4 
17 int main(int argc, char **argv)
18 {
19  if (argc < 3){
20  std::cout << "[MISSION_MANAGER] Please insert the two robots name"<< std::endl;
21  return -1;
22  }
23  std::string robotName = argv[1];
24  std::string otherRobotName = argv[2];
25  std::string pathLog;
26  if (LOG && (argc > 3)){ //if flag log setted to 1 and path log is given
27  pathLog = argv[3];
28  }
29 
30 
32  ros::init(argc, argv, robotName + "_MissionManager");
33  std::cout << "[" << robotName << "][MISSION_MANAGER] Start" << std::endl;
34  ros::NodeHandle nh;
35 
36 
43  double goalLinearVect[] = {-0.287, -0.090, 8};
45  Eigen::Matrix4d wTgoalVeh_eigen = Eigen::Matrix4d::Identity();
46  //rot part
47  wTgoalVeh_eigen.topLeftCorner(3,3) = Eigen::Matrix3d::Identity();
48  //trasl part
49  wTgoalVeh_eigen(0, 3) = goalLinearVect[0];
50  wTgoalVeh_eigen(1, 3) = goalLinearVect[1];
51  wTgoalVeh_eigen(2, 3) = goalLinearVect[2];
52 
54  double goalLinearVectEE[3];
55  if (robotName.compare("g500_A") == 0){
56  goalLinearVectEE[0] = 2.89;
57  goalLinearVectEE[1] = -0.090;
58  goalLinearVectEE[2] = 9.594;
59 
60  } else {
61  goalLinearVectEE[0] = -1.11;
62  goalLinearVectEE[1] = -0.090;
63  goalLinearVectEE[2] = 9.594;
64  }
65  Eigen::Matrix4d wTgoalEE_eigen = Eigen::Matrix4d::Identity();
66  //rot part
67  //wTgoalEE_eigen.topLeftCorner<3,3>() = Eigen::Matrix3d::Identity();
68  //the ee must rotate of 90 on z axis degree to catch the peg
69  wTgoalEE_eigen.topLeftCorner(3,3) << 0, -1, 0,
70  1, 0, 0,
71  0, 0, 1;
72  //trasl part
73  wTgoalEE_eigen(0, 3) = goalLinearVectEE[0];
74  wTgoalEE_eigen(1, 3) = goalLinearVectEE[1];
75  wTgoalEE_eigen(2, 3) = goalLinearVectEE[2];
76 
77 
78 
79 
81  //double goalLinearVectTool[] = {-0.27, -0.102, 2.124};
82  double goalLinearVectTool[] = {-0.27, -1.102, 9.000};
83 
84  Eigen::Matrix4d wTgoalTool_eigen = Eigen::Matrix4d::Identity();
85 
86  //rot part
87  wTgoalTool_eigen.topLeftCorner<3,3>() << 0, 1, 0,
88  -1, 0, 0,
89  0, 0, 1;
90 
91  //wTgoalTool_eigen.topLeftCorner<3,3>() = Eigen::Matrix3d::Identity();
92 
93  //trasl part
94  wTgoalTool_eigen(0, 3) = goalLinearVectTool[0];
95  wTgoalTool_eigen(1, 3) = goalLinearVectTool[1];
96  wTgoalTool_eigen(2, 3) = goalLinearVectTool[2];
97 
98 
103  Infos robInfo;
105  //struct transforms to pass them to Controller class
106  robInfo.transforms.wTgoalVeh_eigen = wTgoalVeh_eigen;
107  robInfo.transforms.wTgoalEE_eigen = wTgoalEE_eigen;
108  robInfo.transforms.wTgoalTool_eigen = wTgoalTool_eigen;
109  robInfo.robotState.vehicleVel.resize(VEHICLE_DOF);
110  std::fill(robInfo.robotState.vehicleVel.begin(), robInfo.robotState.vehicleVel.end(), 0);
111 
112 
114  RobotInterface robotInterface(nh, robotName);
115  robotInterface.init();
116  //The robot 2 has attached the tool2, we cant give him the pipe1 because
117  //if it is not followed exactly for robB the tool is moving respect EE
118  //TODO but try giving robB the pipe1
119  std::string toolName;
120  if (robotName.compare("g500_A") == 0){
121  toolName = "pipe";
122  } else{
123  toolName = "pipe";
124  }
125  WorldInterface worldInterface(robotName);
126  worldInterface.waitReady(toolName);
127  CoordInterfaceMissMan coordInterface(nh, robotName);
128 
129  VisionInterfaceMissMan visionInterface(nh, robotName);
130 
131 
133  //std::string filename = "/home/tori/UWsim/Peg/model/g500ARM5.urdf";
134  std::string filenamePeg; //the model of robot with a "fake joint" in the peg
135  //so, it is ONLY for the already grasped scene
136  if (robotName.compare("g500_A") == 0){
137  filenamePeg = "/home/tori/UWsim/Peg/model/g500ARM5APeg.urdf";
138  } else {
139  filenamePeg = "/home/tori/UWsim/Peg/model/g500ARM5BPeg.urdf";
140  }
141  std::string vehicle = "base_link";
142  std::string link0 = "part0";
143  std::string endEffector = "end_effector";
144 
145  //KDLHelper kdlHelper(filenamePeg, link0, endEffector, vehicle);
146  KDLHelper kdlHelper(filenamePeg, link0, endEffector, "");
147 
148  kdlHelper.setEESolvers();
149  // KDL parse for fixed things (e.g. vehicle and one of his sensor)
150  //TODO Maybe exist an easier method to parse fixed frame from urdf without needed of kdl solver
151  kdlHelper.getFixedFrame(vehicle, link0, &(robInfo.robotStruct.vTlink0));
152  // TODO vT0 non serve più?
153 
155  robotInterface.getJointState(&(robInfo.robotState.jState));
156  robotInterface.getwTv(&(robInfo.robotState.wTv_eigen));
157 
158  worldInterface.getwT(&(robInfo.transforms.wTt_eigen), toolName);
159  //robInfo.transforms.wTgoalTool_eigen.topLeftCorner<3,3>() = robInfo.transforms.wTt_eigen.topLeftCorner<3,3>();
160  worldInterface.getwPos(&(robInfo.exchangedInfo.otherRobPos), otherRobotName);
161 
162  //DEBUGG
163  //robotInterface.getwTjoints(&(robInfo.robotState.wTjoints));
164 
165 
166 
167  //get ee pose RESPECT LINK 0
168  kdlHelper.getEEpose(robInfo.robotState.jState, &(robInfo.robotState.link0Tee_eigen));
169  // useful have vTee: even if it is redunant, everyone use it a lot
170  robInfo.robotState.vTee_eigen = robInfo.robotStruct.vTlink0 * robInfo.robotState.link0Tee_eigen;
171  // get jacobian respect link0
172  kdlHelper.getJacobianEE(robInfo.robotState.jState, &(robInfo.robotState.link0_Jee_man));
173  //get whole jacobian (arm+vehcile and projected on world
174  computeWholeJacobianEE(&robInfo);
175 
176 
177  //TODO before this the robot must have grasped, here only to see if it is correct
178  //if (true){ //TODO if grasped
179  Eigen::Matrix4d eeTtool =
180  FRM::invertTransf(robInfo.robotState.wTv_eigen*robInfo.robotState.vTee_eigen)
181  * robInfo.transforms.wTt_eigen;
182  kdlHelper.setToolSolvers(eeTtool);
183  //}
184  kdlHelper.getJacobianTool(robInfo.robotState.jState, &(robInfo.robotState.v_Jtool_man));
185  computeWholeJacobianTool(&robInfo);
186 
187 
188 
190  Controller controller(robotName);
191 
193  std::vector<Task*> tasksTPIK1; //the first, non coop, one
194  std::vector<Task*> tasksCoop;
195  std::vector<Task*> tasksArmVehCoord; //for arm-vehicle coord
196  setTaskLists(robotName, &tasksTPIK1, &tasksCoop, &tasksArmVehCoord);
197 
198 
202 
205  Logger logger;
206  if (pathLog.size() > 0){
207  logger = Logger(robotName, pathLog);
208 
209  //to for each list... if task was in a previous list, no problem, folder with same name... overwrite?
210  logger.createTasksListDirectories(tasksTPIK1);
211  logger.createTasksListDirectories(tasksCoop);
212 
213  }
214 
219  //wait coordinator to start
220  double msinit = 1;
221  boost::asio::io_service ioinit;
222  std::cout << "[" << robotName << "][MISSION_MANAGER] Wating for "<<
223  "Coordinator to say I can start...\n";
224  while(!coordInterface.getStartFromCoord()){
225  boost::asio::deadline_timer loopRater(ioinit, boost::posix_time::milliseconds(msinit));
226  coordInterface.pubIamReadyOrNot(true);
227 
228  ros::spinOnce();
229  loopRater.wait();
230  }
231 
232  std::cout << "[" << robotName<< "][MISSION_MANAGER] Start from coordinator "<<
233  "received\n";
234 
235 
239  int ms = 100;
240  boost::asio::io_service io;
241  boost::asio::io_service io2;
242 
243  //debug
244  double nLoop = 0.0;
245 
246  while(1){
247 
248  //auto start = std::chrono::steady_clock::now();
249 
250  // this must be inside loop
251  boost::asio::deadline_timer loopRater(io, boost::posix_time::milliseconds(ms));
252 
254  robotInterface.getJointState(&(robInfo.robotState.jState));
255  robotInterface.getwTv(&(robInfo.robotState.wTv_eigen));
256  worldInterface.getwT(&(robInfo.transforms.wTt_eigen), toolName);
257  worldInterface.getwPos(&(robInfo.exchangedInfo.otherRobPos), otherRobotName);
258  visionInterface.getHoleTransform(&(robInfo.transforms.wTholeEstimated_eigen));
259 
260  //DEBUG VISION
261  //std::cout <<"ARRIVED wThole" << robInfo.transforms.wTholeEstimated_eigen << "\n\n";
262  //robInfo.transforms.wTgoalTool_eigen = robInfo.transforms.wTholeEstimated_eigen;
263 
264  //get ee pose RESPECT LINK 0
265  kdlHelper.getEEpose(robInfo.robotState.jState, &(robInfo.robotState.link0Tee_eigen));
266  // useful have vTee: even if it is redunant, tasks use it a lot
267  robInfo.robotState.vTee_eigen = robInfo.robotStruct.vTlink0 * robInfo.robotState.link0Tee_eigen;
268  // get jacobian respect link0
269  kdlHelper.getJacobianEE(robInfo.robotState.jState, &(robInfo.robotState.link0_Jee_man));
270  computeWholeJacobianEE(&robInfo);
271 
272  Eigen::Matrix4d eeTtool =
273  FRM::invertTransf(robInfo.robotState.wTv_eigen*robInfo.robotState.vTee_eigen)
274  * robInfo.transforms.wTt_eigen;
275 
276  kdlHelper.setToolSolvers(eeTtool);
277  kdlHelper.getJacobianTool(robInfo.robotState.jState, &(robInfo.robotState.v_Jtool_man));
278  computeWholeJacobianTool(&robInfo);
279 
281  controller.updateMultipleTasksMatrices(tasksTPIK1, &robInfo);
282  std::vector<double> yDotTPIK1 = controller.execAlgorithm(tasksTPIK1);
283 
284  std::vector<double> yDotFinal(TOT_DOF);
285 
287  Eigen::Matrix<double, VEHICLE_DOF, 1> nonCoopCartVel_eigen =
288  robInfo.robotState.w_Jtool_robot * CONV::vector_std2Eigen(yDotTPIK1);
289 
290  Eigen::Matrix<double, VEHICLE_DOF, VEHICLE_DOF> admisVelTool_eigen =
291  robInfo.robotState.w_Jtool_robot * FRM::pseudoInverse(robInfo.robotState.w_Jtool_robot);
292 
293 
294  coordInterface.publishToCoord(nonCoopCartVel_eigen, admisVelTool_eigen);
295 
296  while (coordInterface.getCoopCartVel(&(robInfo.exchangedInfo.coopCartVel)) == 1){ //wait for coopVel to be ready
297  boost::asio::deadline_timer loopRater2(io2, boost::posix_time::milliseconds(1));
298  loopRater2.wait();
299  ros::spinOnce();
300  }
301 
302  controller.updateMultipleTasksMatrices(tasksCoop, &robInfo);
303  std::vector<double> yDotOnlyVeh = controller.execAlgorithm(tasksCoop);
304 
305 
306  controller.updateMultipleTasksMatrices(tasksArmVehCoord, &robInfo);
307  std::vector<double> yDotOnlyArm = controller.execAlgorithm(tasksArmVehCoord);
308 
309  for (int i=0; i<ARM_DOF; i++){
310  yDotFinal.at(i) = yDotOnlyArm.at(i);
311 
312  }
313 
314  for (int i = ARM_DOF; i<TOT_DOF; i++) {
315  yDotFinal.at(i) = yDotOnlyVeh.at(i);
316  //at the moment no error so velocity are exaclty what we are giving
317  robInfo.robotState.vehicleVel.at(i-ARM_DOF) = yDotFinal.at(i);
318  }
319 
320 
321 
322 
324  //robotInterface.sendyDot(yDotTPIK1);
325  //robotInterface.sendyDot(yDotOnlyVeh);
326  robotInterface.sendyDot(yDotFinal);
327 
328 
330  if (pathLog.size() != 0){
331  logger.logAllForTasks(tasksTPIK1);
332  //TODO flag LOGGED to not print same thing twice
333  //or maybe another list with ALL task only to log here and create folder for log
334  //for the moment, yDot are exactly how vehicle and arm are moving
335  logger.logNumbers(yDotTPIK1, "yDotTPIK1");
336  logger.logNumbers(yDotFinal, "yDotFinal");
337  //logger.logNumbers(admisVelTool_eigen, "JJsharp");
338  logger.logNumbers(robInfo.robotState.w_Jtool_robot
339  * CONV::vector_std2Eigen(yDotOnlyVeh), "toolCartVelCoop");
340  }
341 
344 
345 // std::cout << "JJsharp\n" << admisVelTool_eigen << "\n\n";
346 // std::cout << "SENDED non coop vel:\n" << nonCoopCartVel_eigen <<"\n\n\n";
347 // std::cout << "ARRIVED coop vel:\n" << robInfo.exchangedInfo.coopCartVel << "\n\n\n";
348 
349 
350 // std::cout << "J: \n"
351 // << robInfo.robotState.w_Jtool_robot
352 // << "\n\n";
353 // std::cout << "yDot: \n"
354 // << CONV::vector_std2Eigen(yDotOnlyVeh)
355 // << "\n\n";
356 // std::cout << "The tool velocity non coop are (J*yDot): \n"
357 // << nonCoopCartVel_eigen
358 // << "\n\n";
359 // std::cout << "The tool velocity coop are (J*yDot): \n"
360 // << robInfo.robotState.w_Jtool_robot
361 // * CONV::vector_std2Eigen(yDotFinal)
362 // << "\n\n";
363 
364 // std::vector<Task*> tasksDebug = tasksTPIK1;
365 // for(int i=0; i<tasksDebug.size(); i++){
366 // std::cout << "Activation " << tasksDebug[i]->getName() << ": \n";
367 // tasksDebug[i]->getActivation().PrintMtx() ;
368 // std::cout << "\n";
369 // std::cout << "JACOBIAN " << tasksDebug[i]->getName() << ": \n";
370 // tasksDebug[i]->getJacobian().PrintMtx();
371 // std::cout<< "\n";
372 
373 // std::cout << "REFERENCE " << tasksDebug[i]->getName() << ": \n";
374 // tasksDebug[i]->getReference().PrintMtx() ;
375 // std::cout << "\n";
376 // }
377 
378 
379  controller.resetAllUpdatedFlags(tasksTPIK1);
380  controller.resetAllUpdatedFlags(tasksCoop);
381  controller.resetAllUpdatedFlags(tasksArmVehCoord);
382  ros::spinOnce();
383 
384 
385  //auto end = std::chrono::steady_clock::now();
386  //auto duration = std::chrono::duration_cast<std::chrono::milliseconds>( end - start ).count();
387  //std::cout << "TEMPOOOOO "<<duration << "\n\n";
388 
389 
390  loopRater.wait();
391  //nLoop += 1;
392 
393 // if (nLoop > 10){
394 // exit(-1);
395 // }
396 
397  } //end controol loop
398 
399 
400 
401 
402  coordInterface.pubIamReadyOrNot(false);
403 
404  //todo lista con all task per cancellarli
405  deleteTasks(&tasksArmVehCoord);
406 
407  return 0;
408 }
409 
410 
411 
412 void setTaskLists(std::string robotName, std::vector<Task*> *tasks1,
413  std::vector<Task*> *tasksCoord, std::vector<Task*> *tasksArmVeh){
414 
415  bool eqType = true;
416  bool ineqType = false;
417 
418 
420  Task* coopTask6dof = new CoopTask(6, eqType, robotName);
421  Task* coopTask5dof = new CoopTask(5, eqType, robotName);
422  Task* constrainVel = new VehicleConstrainVelTask(6, eqType, robotName);
423 
424 
426  Task* jl = new JointLimitTask(4, ineqType, robotName);
427  Task* ha = new HorizontalAttitudeTask(1, ineqType, robotName);
428  Task* eeAvoid = new ObstacleAvoidEETask(1, ineqType, robotName);
429 
430 
431 
433 
434 
436  Task* pr5 = new PipeReachTask(5, eqType, robotName, ONLYVEH);
437  Task* pr6 = new PipeReachTask(6, eqType, robotName, ONLYVEH);
438 
439  Task* eer = new EndEffectorReachTask(6, eqType, robotName);
440  Task* vehR = new VehicleReachTask(3, eqType, robotName, ANGULAR);
441  Task* vehYaxis = new VehicleReachTask(1, eqType, robotName, YAXIS);
442 
444  Task* shape = new ArmShapeTask(4, ineqType, robotName, PEG_GRASPED_PHASE);
445  //The "fake task" with all eye and zero matrices, needed as last one for algo?
446  Task* last = new LastTask(TOT_DOF, eqType, robotName);
447 
449  // note: order of priority at the moment is here
450  tasks1->push_back(jl);
451  tasks1->push_back(ha);
452  //tasks1->push_back(eeAvoid);
453  tasks1->push_back(pr6);
454  //TODO discutere diff tra pr6 e pr5... il 5 mette più stress sull obj?
455  //tasks1->push_back(vehR);
456  //tasks1->push_back(vehYaxis);
457  //tasks1->push_back(eer);
458  tasks1->push_back(shape);
459  tasks1->push_back(last);
460 
461  //TODO ASK al momento fatte così le versioni 6dof di pr e coop sono
462  //molto meglio
463  //coop 5 dof assolutamente no
464  //pr5 da un po di stress cmq (linearmente -0.034, -0.008, -0.020),
465  //i due tubi divisi si vedono tanto agli estremi
466  //si dovrebbe abbassare gain e saturaz per usare il pr5
467  //soprattutto se c'è sto shape fatto cosi che fa muovere tantissimo
468  //i bracci, è da cambiare lo shape desiderato
469  tasksCoord->push_back(coopTask6dof);
470  tasksCoord->push_back(jl);
471  tasksCoord->push_back(ha);
472  //tasksCoord->push_back(pr6);
473  //tasks1->push_back(eeAvoid);
474  tasksCoord->push_back(shape);
475  tasksCoord->push_back(last);
476 
477  tasksArmVeh->push_back(coopTask6dof);
478  tasksArmVeh->push_back(constrainVel);
479  tasksArmVeh->push_back(jl);
480  tasksArmVeh->push_back(ha);
481  //tasks1->push_back(eeAvoid);
482 
483  tasksArmVeh->push_back(shape);
484  tasksArmVeh->push_back(last);
485 
486 }
487 
488 
493 void deleteTasks(std::vector<Task*> *tasks){
494  for (std::vector< Task* >::iterator it = tasks->begin() ; it != tasks->end(); ++it)
495  {
496  delete (*it);
497  }
498  tasks->clear();
499 }
500 
501 
502 
512 void setTaskLists(std::string robotName, std::vector<Task*> *tasks){
513 
515  // note: order of priority at the moment is here
516  bool eqType = true;
517  bool ineqType = false;
518 
519  //tasks->push_back(new VehicleNullVelTask(6, ineqType));
520 
521  tasks->push_back(new JointLimitTask(4, ineqType, robotName));
522  tasks->push_back(new HorizontalAttitudeTask(1, ineqType, robotName));
523 
524  //tasks->push_back(new ObstacleAvoidEETask(1, ineqType, robotName));
525  //tasks->push_back(new ObstacleAvoidVehicleTask(1, ineqType, robotName));
526 
527  //tasks->push_back(new FovEEToToolTask(1, ineqType, robotName));
528 
529  //tasks->push_back(new EndEffectorReachTask(6, eqType, robotName));
530  tasks->push_back(new PipeReachTask(5, eqType, robotName, BOTH));
531  //tasks->push_back(new VehicleReachTask(6, eqType, robotName));
532 
533  tasks->push_back(new ArmShapeTask(4, ineqType, robotName, MID_LIMITS));
534  //The "fake task" with all eye and zero matrices, needed as last one for algo
535  tasks->push_back(new LastTask(TOT_DOF, eqType, robotName));
536 }
537 
538 void setTaskLists(std::string robotName, std::vector<Task*> *tasks1, std::vector<Task*> *tasksFinal){
539 
540  bool eqType = true;
541  bool ineqType = false;
542 
543 
545  Task* coopTask6dof = new CoopTask(6, eqType, robotName);
546  Task* coopTask5dof = new CoopTask(5, eqType, robotName);
547 
548 
550  Task* jl = new JointLimitTask(4, ineqType, robotName);
551  Task* ha = new HorizontalAttitudeTask(1, ineqType, robotName);
552 
553 
555 
556 
558  Task* pr5 = new PipeReachTask(5, eqType, robotName, BOTH);
559  Task* pr6 = new PipeReachTask(6, eqType, robotName, BOTH);
560 
561  Task* tr = new EndEffectorReachTask(6, eqType, robotName);
562 
564  Task* shape = new ArmShapeTask(4, ineqType, robotName, MID_LIMITS);
565  //The "fake task" with all eye and zero matrices, needed as last one for algo?
566  Task* last = new LastTask(TOT_DOF, eqType, robotName);
567 
569  // note: order of priority at the moment is here
570  tasks1->push_back(jl);
571  tasks1->push_back(ha);
572  tasks1->push_back(pr5);
573  //tasks1->push_back(tr);
574  //tasks1->push_back(shape);
575  tasks1->push_back(last);
576 
577  tasksFinal->push_back(coopTask5dof);
578  // tasksFinal->push_back(jl);
579  //tasksFinal->push_back(ha);
580  //tasksFinal->push_back(shape);
581  tasksFinal->push_back(last);
582 }
583 
584 
585 
586 
587 
588 
590 // std::cout << "JACOBIAN " << i << ": \n";
591 // tasks[i]->getJacobian().PrintMtx();
592 // std::cout<< "\n";
593 // std::cout << "REFERENCE " << i << ": \n";
594 // tasks[i]->getReference().PrintMtx() ;
595 // std::cout << "\n";
596 
597 
598 //std::cout << nonCoopCartVel_eigen << "\n\n";
599 //std::cout << admisVelTool_eigen << "\n\n";
600 
601 
602 //Q.PrintMtx("Q"); ///DEBUG
603 //yDot_cmat.PrintMtx("yDot");
604 
605 
606 
607 //DEBUGGGG
608 //computeJacobianToolNoKdl(&robInfo, robotName);
609 
610 //std::cout << "con KDL:\n" << robInfo.robotState.w_Jtool_robot << "\n\n";
611 //std::cout << "senza KDL:\n" << robInfo.robotState.w_JNoKdltool_robot << "\n\n";
612 
613 /*
614 //debug
615 Eigen::Matrix4d toolPose_eigen;
616 kdlHelper.getToolpose(robInfo.robotState.jState, eeTtool, &toolPose_eigen);
617 Eigen::Matrix4d W_toolPose_eigen = robInfo.robotState.wTv_eigen * robInfo.robotStruct.vTlink0 * toolPose_eigen;
618 
619 std::cout << "ToolPOSE\n" <<
620  W_toolPose_eigen << "\n\n";
621 */
Definition: logger.h:16
The Controller class is responsabile of 1) taking matrices and giving them to Tasks classes...
Definition: controller.h:20
std::vector< double > vehicleVel
vehicle and joint
Definition: infos.h:45
robotInterface: a ros node responsible of taken info from simulator and robot sensors, and of given commands back. It is the intermiate layer between actual robot and mission manager ("main")
"Fake" Task needed as last to algorithm, it has all fixed matrices of eye and zeros so no setxx are n...
Definition: lastTask.h:9
The ObstacleAvoidEETask class Usage of this task can be for avoiding with the end effector...
The CoopTask class.
Definition: coopTask.h:10
The vehicleConstrainVelTask class This task is a non-reactive one used to to constrain the velocities...
The CoordInterface class class to deal with ros comunications (pub/sub) from MissionManager node to C...
Task to make the end effector reach a goal (both linear and angular position)
Task to make the vehicle reach a goal (both linear and angular position)
The WorldInterface class to get position from world to anything else.
Eigen::Matrix< double, 6, ARM_DOF > link0_Jee_man
Jacobians.
Definition: infos.h:52
Definition: infos.h:117
Eigen::Matrix4d wTv_eigen
Transforms.
Definition: infos.h:34
The ArmShapeTask class Preferred arm Shape: an optimization task. It is a non scalar task...
Definition: armShapeTask.h:20
ABSTRACT class task. Each task is a derived class of this class. It contains all the variable that th...
Definition: task.h:17