Go to the documentation of this file.00001 #ifndef GRIPPER_SUPERVISOR_H
00002 #define GRIPPER_SUPERVISOR_H
00003
00004 #include <kdl/tree.hpp>
00005 #include <kdl/jntarray.hpp>
00006 #include <kdl/frames.hpp>
00007
00008 #include "r2_msgs/GripperPositionState.h"
00009 #include "r2_msgs/StringArray.h"
00010 #include "r2_msgs/GripperPositionCommand.h"
00011 #include "r2_msgs/JointControlDataArray.h"
00012 #include "actionlib_msgs/GoalStatusArray.h"
00013 #include "robodyn_utilities/BaseGripperConverter.h"
00014
00015 struct EndEffectorData
00016 {
00017 bool locked;
00018 bool loaded;
00019 bool verified;
00020 };
00021
00022 enum GripperSupervisorStates
00023 {
00024 IDLE = 0,
00025 FAULT,
00026 FAILURE,
00027 LOCK,
00028 RELEASE,
00029 SET,
00030 RELEASE_PENDING,
00031 SET_PENDING,
00032 LOCK_PENDING,
00033 REQUEST_PENDING
00034 };
00035
00036 struct GripperControlModes
00037 {
00038 int state;
00039 int coeffs;
00040 };
00041
00042 class GripperSupervisor : public BaseGripperConverter
00043 {
00044 public:
00045 GripperSupervisor();
00046 ~GripperSupervisor();
00047
00048
00049 void initializeMaps(const std::vector<std::string>& grippers);
00050
00051
00052 void populateGripperStateInfo(const r2_msgs::GripperPositionState& eefState);
00053 void populateBaseFrameInfo(const r2_msgs::StringArray& baseFrames);
00054 void populateGoalStatus(const actionlib_msgs::GoalStatusArray& goalStats);
00055 void populateGripperCommandsIn(const r2_msgs::GripperPositionCommand& gripCmd);
00056 void populateJointControlMode(const r2_msgs::JointControlDataArray& jntMode);
00057 void populateCheckedGrippers(const bool override);
00058 void populateCheckedGrippers(const r2_msgs::StringArray& grippers);
00059
00060
00061 void populateDriveRequestMsg(r2_msgs::StringArray& requestOut);
00062 void populateJointControlCommandMsg(r2_msgs::JointControlDataArray& modeCmdOut);
00063 void populateGoalStatusMsg(actionlib_msgs::GoalStatusArray& statusOut);
00064 void populateGripperCommandMsg(r2_msgs::GripperPositionCommand& cmdOut);
00065
00066
00067 void checkTransitions(int baseOverride);
00068
00069
00070 int getState(const std::string& name);
00071
00072
00073 void setLimits(const int& highDuty, const int& time);
00074
00075 std::map<std::string, EndEffectorData> endEffectorMap;
00076 std::vector<std::string> baseFrameList;
00077 std::map<std::string, GripperControlModes> gripperJointModeMap;
00078 std::map<std::string, bool> gripperDriveApprovedMap;
00079 r2_msgs::GripperPositionCommand gripperCmds;
00080 actionlib_msgs::GoalStatusArray goalStatuses;
00081 r2_msgs::StringArray driveRequest;
00082
00083 private:
00084
00085 actionlib_msgs::GoalStatusArray goalStatusesOut;
00086 r2_msgs::GripperPositionCommand gripperCmdOut;
00087 r2_msgs::JointControlDataArray jointModeCommands;
00088
00089 std::map<std::string, bool> errorStates;
00090 std::map<std::string, GripperSupervisorStates> stateMap;
00091 std::map<std::string, EndEffectorData>::iterator eefIt;
00092 std::map<std::string, GripperControlModes>::iterator intIt;
00093 std::map<std::string, GripperSupervisorStates>::iterator stateIt;
00094 std::map<std::string, bool>::iterator errIt, reqIt;
00095
00096 std::string setpoint;
00097 int motcomLimit;
00098 int hiDutyCycleLimit;
00099 int timeLimit, pendingTimer;
00100 GripperSupervisorStates nextState;
00101
00102 int detectChangeInErrorState(const std::string& name);
00103 int updateErrorState(const std::string& name);
00104 bool isReleaseValid(const std::string& name);
00105 bool isLocked(const std::string& name);
00106
00107 bool transToFault(const std::string& name);
00108 bool transToIdle(const std::string& name);
00109 bool transToFailure(const std::string& name);
00110 bool transToLock(const std::string& name);
00111 bool transToRelease(const std::string& name);
00112 bool transToSet(const std::string& name);
00113
00114 int runStateMachine(const std::string& name);
00115
00116 };
00117
00118 #endif