1 #include "header/armShapeTask.h" 3 ArmShapeTask::ArmShapeTask(
int dim,
bool eqType, std::string robotName, ShapeType shapeType)
4 :
Task(dim, eqType, robotName,
"ARM_SHAPE"){
7 this->shapeType = shapeType;
8 std::string eqineq = (eqType) ?
"equality" :
"inequality";
10 std::cout <<
"[" << robotName <<
"][ARM_SHAPE]" <<
" ... as " <<
15 int ArmShapeTask::updateMatrices(
struct Infos*
const robInfo){
17 std::vector<double> jointGoal(4);
18 if (shapeType == MID_LIMITS){
20 jointGoal[0] = (JLIM1_MAX + JLIM1_MIN)/2;
21 jointGoal[1] = (JLIM2_MAX + JLIM2_MIN)/2;
22 jointGoal[2] = (JLIM3_MAX + JLIM3_MIN)/2;
23 jointGoal[3] = (JLIM4_MAX + JLIM4_MIN)/2;
25 }
else if(shapeType == PEG_GRASPED_PHASE){
31 jointGoal[1] = 0.3744;
32 jointGoal[2] = 0.6556;
39 setActivation(jointGoal, robInfo->robotState.jState);
41 setReference(jointGoal, robInfo->robotState.jState);
52 int ArmShapeTask::setActivation(std::vector<double> jointGoal, std::vector<double> jState){
55 double vectDiag[dimension];
56 std::fill_n(vectDiag, dimension, 1);
57 this->A.SetDiag(vectDiag);
60 for (
int i=1; i<=dimension; i++){
63 CMAT::DecreasingBellShapedFunction(
64 jointGoal[i-1]-rangeAct, jointGoal[i-1], 0, 1, jState[i-1]) +
65 CMAT::IncreasingBellShapedFunction(
66 jointGoal[i-1], jointGoal[i-1]+rangeAct, 0, 1, jState[i-1]);
75 int ArmShapeTask::setJacobian(){
77 CMAT::Matrix eye = CMAT::Matrix::Eye(dimension);
78 CMAT::Matrix zero = CMAT::Matrix::Zeros(dimension,VEHICLE_DOF);
80 CMAT::Matrix tot = eye.RightJuxtapose(zero);
85 int ArmShapeTask::setReference(std::vector<double> jointGoal,
86 std::vector<double> jState){
88 for (
int i=0; i<dimension; i++){
89 error(i+1) = jointGoal[i] - jState[i];
90 reference(i+1) = gain * (jointGoal[i] - jState[i]);
ABSTRACT class task. Each task is a derived class of this class. It contains all the variable that th...