Go to the documentation of this file.00001 #ifndef GRIPPERKINEMATICS_H
00002 #define GRIPPERKINEMATICS_H
00003
00004 #include <stdexcept>
00005 #include <iostream>
00006 #include "nasa_common_logging/Logger.h"
00007 #include <boost/math/constants/constants.hpp>
00008 #include <boost/math/special_functions/fpclassify.hpp>
00009
00014 class GripperKinematics
00015 {
00016 public:
00017 GripperKinematics() {};
00018 GripperKinematics(const double l1, const double l2, const double l3, const double l4, const double minSliderPosition, const double ballScrewEfficiency,
00019 const double ballScrewMotionRatio, const double jawAngleZeroAdj1, const double jawAngleZeroAdj2, const double gripperLength,
00020 const double motorTorqueConstant, const double overCenterAngle, const double overCenterStatusBuffer, double coulombFrictionCurrentOffset,
00021 const double closeToZero, const bool beSilent = false);
00022 virtual ~GripperKinematics() {};
00023
00024 void setParameters(const double l1, const double l2, const double l3, const double l4, const double minSliderPosition, const double ballScrewEfficiency,
00025 const double ballScrewMotionRatio, const double jawAngleZeroAdj1, const double jawAngleZeroAdj2, const double gripperLength,
00026 const double motorTorqueConstant, const double overCenterAngle, const double overCenterStatusBuffer, double coulombFrictionCurrentOffset,
00027 const double closeToZero, const bool beSilent = false);
00028
00029 double getEncoderAngle(const double& jawAngle);
00030 double getAngleOffSingular(const double& encoderAngle, const double& jawAngle);
00031 bool isOverCenter(const double& encoderAngle, const double& jawAngle);
00032 bool isOverCenterStatus(const double& encoderAngle, const double& jawAngle);
00033 double getMotorCurrentLimit(const double& encoderAngle, const double& jawAngle, const double& forceLimit);
00034
00035 private:
00036 double L1;
00037 double L2;
00038 double L3;
00039 double L4;
00040 double MIN_SLIDER_POSITION;
00041 double BALL_SCREW_EFFICIENCY;
00042 double BALL_SCREW_MOTION_RATIO;
00043 double BALL_SCREW_FORCE_RATIO;
00044 double JAW_ANGLE_ZERO_ADJ;
00045 double GRIPPER_LENGTH;
00046 double MOTOR_TORQUE_CONSTANT;
00047 double OVER_CENTER_ANGLE;
00048 double OVER_CENTER_STATUS_BUFFER;
00049 double COULOMB_FRICTION_CURRENT_OFFSET;
00050 double CLOSE_TO_ZERO;
00051 bool BE_SILENT;
00052 };
00053
00054 typedef boost::shared_ptr<GripperKinematics> GripperKinematicsPtr;
00055
00056 #endif