GripperSupervisor.h
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     // intitialize
00049     void initializeMaps(const std::vector<std::string>& grippers);
00050 
00051     // put data into maps
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     // create messages from data
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     // do the work
00067     void checkTransitions(int baseOverride);
00068 
00069     // access the data (mostly for unit testing)
00070     int getState(const std::string& name);
00071 
00072     // set limits (from component properties)
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; // 1- error, 0- no error
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


robodyn_mechanisms
Author(s):
autogenerated on Thu Jun 6 2019 21:22:48