con arm control a libreria

SafeCheck.cpp

Committer:
marcodesilva
Date:
2021-10-04
Revision:
0:843c9f29adde

File content as of revision 0:843c9f29adde:

#include "SafeCheck.h"

SafeCheck::SafeCheck(ARAP180_WITH_ROVER *_arm, VectorXf _maxJointPos,VectorXf _minJointPos, VectorXf _maxJointVel, VectorXf _maxJointAcc, Vector3f _maxCartPos, Vector3f _minCartPos){
    
    arm = _arm;
    maxJointPos = _maxJointPos; 
    minJointPos = _minJointPos; 
    maxJointVel = _maxJointVel; 
    maxJointAcc = _maxJointAcc; 
    maxCartPos  = _maxCartPos; 
    minCartPos  = _minCartPos;     
}

void SafeCheck::setSafeCheckParameters(VectorXf _maxJointPos,VectorXf _minJointPos, VectorXf _maxJointVel, VectorXf _maxJointAcc, Vector3f _maxCartPos, Vector3f _minCartPos){

    maxJointPos = _maxJointPos; 
    minJointPos = _minJointPos; 
    maxJointVel = _maxJointVel; 
    maxJointAcc = _maxJointAcc; 
    maxCartPos  = _maxCartPos; 
    minCartPos  = _minCartPos;     
}

void SafeCheck::initSafeCheck(){
    isSafe = true;      
}

bool SafeCheck::check(VectorXf q, VectorXf dq, VectorXf ddq, checkMode mode){
    
    
    Matrix4f Te;
    Vector3f cartPos;
    
    for(int i = 0; i < q.size(); i++){
    
        if(q(i) > maxJointPos(i) || q(i) < minJointPos(i)) isSafe = false;
        if(fabs(dq(i)) > maxJointVel(i)) isSafe = false;
        if(fabs(ddq(i)) > maxJointAcc(i)) isSafe = false;

    }    
    
    
    if(mode == CARTESIAN_MODE){
        Te = arm->forwardKinematics(q);
        cartPos = Te.block(0,3,3,1);
     
        for(int i = 0; i < cartPos.size(); i++){
            if(cartPos(i) > maxCartPos(i) || cartPos(i) < minCartPos(i)) isSafe = false;
        }
    }
    
    return isSafe;
   
    
}