Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef __JAUS_EXTRAS_CONTROLLERS_CONTROL_DEVICE__H
00041 #define __JAUS_EXTRAS_CONTROLLERS_CONTROL_DEVICE__H
00042
00043 #include "jaus/extras/jausextrasdll.h"
00044 #include "jaus/extras/mcu/setmicrocontrollerstate.h"
00045 #include "jaus/core/management/management.h"
00046 #include "jaus/mobility/drivers/primitivedriver.h"
00047 #include "jaus/mobility/drivers/setwrencheffort.h"
00048
00049 namespace JAUS
00050 {
00058 class JAUS_EXTRAS_DLL ControlDevice : public Management::Child
00059 {
00060 public:
00066 enum ButtonActions
00067 {
00068 RequestDriveControl = 0,
00069 ReleaseDriveControl,
00070 };
00077 enum WrenchEffort
00078 {
00079 PropulsiveLinearEffortX = 0,
00080 PropulsiveLinearEffortY,
00081 PropulsiveLinearEffortZ,
00082 PropulsiveRotationalEffortX,
00083 PropulsiveRotationalEffortY,
00084 PropulsiveRotationalEffortZ,
00085 ResistiveLinearEffortX,
00086 ResistiveLinearEffortY,
00087 ResistiveLinearEffortZ,
00088 ResistiveRotationalEffortX,
00089 ResistiveRotationalEffortY,
00090 ResistiveRotationalEffortZ,
00091 };
00092 const static std::string Name;
00093
00094 ControlDevice();
00095
00096 virtual ~ControlDevice();
00097
00098 virtual bool LoadSettings(const std::string& filename);
00099
00100 virtual bool LoadSettingsForVehicle(const std::string& vehicleIdentificationName,
00101 const std::string& directory);
00102
00103 virtual void Shutdown() ;
00104
00105 void SetSubsystemToControl(const UShort id);
00106
00107 virtual void TakeDriveControl(const bool enable = true);
00108
00109 virtual bool HaveDriveControl() const;
00110
00111 virtual void SignalButtonPress(const int buttonNumber);
00112
00113 virtual void SignalButtonRelease(const int buttonNumber);
00114
00115 virtual void UpdateWrench(const int inputID, const double percentEffort);
00116
00117 virtual void UpdateAnalogOut(const int inputID, const double signalValue);
00118
00119 virtual void SendWrenchEffort();
00120
00121 virtual void SendMicrocontrollerState();
00122
00123 virtual void ClearWrenchEffort();
00124
00125 virtual void ClearMicrocontrollState();
00126
00127 virtual void MapButtonToAction(const int buttonNumber, const ButtonActions action);
00128
00129 virtual void MapButtonToDigitalOut(const int buttonNumber,
00130 const std::string& digital,
00131 const bool onPress = true);
00132
00133 virtual void MapInputToWrench(const int inputID,
00134 const WrenchEffort wrenchID,
00135 const double deadzone,
00136 const bool invert,
00137 const double limit);
00138
00139 virtual void MapInputToAnalogOut(const int inputID,
00140 const std::string& analog,
00141 const bool invert,
00142 const double limit);
00143
00144 virtual void CheckServiceStatus(const unsigned int timeSinceLastCheckMs);
00145
00146 virtual bool GenerateEvent(const Events::Subscription& info) const { return false; }
00147
00148 virtual bool IsEventSupported(const Events::Type type,
00149 const double requestedPeriodicRate,
00150 const Message* queryMessage,
00151 double& confirmedPeriodicRate,
00152 std::string& errorMessage) const { return false; }
00153 virtual void ProcessAcquisitionOfControl(const Address& controlledComponent);
00154
00155 virtual bool IsDiscoverable() const { return false; }
00156
00157 virtual void Receive(const Message* message);
00158
00159 virtual Message* CreateMessage(const UShort messageCode) const;
00160
00161 virtual bool Resume() { return true; }
00162
00163 virtual bool Reset() { return true; }
00164
00165 virtual bool Standby() { return true; }
00166
00167 virtual bool SetEmergency() { return true; }
00168
00169 virtual bool ClearEmergency() { return true; }
00170
00171 virtual bool ReleaseControl() { return true; }
00172
00173 virtual void PrintStatus() const;
00174
00175 Address GetDriverID() const { Mutex::ScopedLock lock(&mControlDevice); return mPrimitiveDriverID; }
00176
00177 std::map<int, WrenchEffort> GetInputIdToWrenchMapping(){ Mutex::ScopedLock lock(&mControlDevice); return mWrenchMapping; }
00178 private:
00179 Mutex mControlDevice;
00180 bool mTakeDriveControlFlag;
00181 bool mAutoBrakingFlag;
00182 UShort mSubsystemID;
00183 Address mPrimitiveDriverID;
00184 Address mMicrocontrollerID;
00185 std::map<int, WrenchEffort> mWrenchMapping;
00186 std::map<int, double> mDeadzoneMapping;
00187 std::map<int, bool> mInvertMapping;
00188 std::map<int, ButtonActions> mButtonMapping;
00189 std::map<int, double> mLimitsMapping;
00190 std::map<int, std::string> mAnalogMapping;
00191 std::map<std::string, bool> mAnalogInvertMapping;
00192 std::map<std::string, bool> mDigitalButtonState;
00193 std::map<int, std::string> mButtonDigitalMapping;
00194 std::map<std::string, double> mAnalogLimitsMapping;
00195 SetWrenchEffort mWrenchEffort;
00196 SetMicrocontrollerState mMicrocontrollerState;
00197 };
00198 }
00199
00200 #endif
00201