AnimatLab  2
Test
RbFirmataDynamixelServo.h
1 // RbFirmataDynamixelServo.h: interface for the RbFirmataDynamixelServo class.
2 //
4 
5 #pragma once
6 
7 #include "RbDynamixelServo.h"
8 
9 namespace RoboticsAnimatSim
10 {
11  namespace Robotics
12  {
13  namespace RobotIOControls
14  {
15  namespace Firmata
16  {
17 
18 class ROBOTICS_PORT RbFirmataDynamixelServo : public RbDynamixelServo, public RbFirmataPart
19 {
20 protected:
22  unsigned long long m_lStartServoUpdateTick;
23 
26 
29 
32 
35 
38 
41 
44 
46  int m_iLED;
47 
49  int m_iAlarm;
50 
51  //Stores the last reg id returned by a get register callback
52  unsigned int m_iLastGetRegisterID;
53 
54  //Stores the last value returned by a get register callback
55  unsigned int m_iLastGetRegisterValue;
56 
57  virtual void WriteGoalPosition(int iServoID, int iPos);
58  virtual int ReadGoalPosition(int iServoID) {return m_iLastGoalPos;};
59  virtual int ReadPresentPosition(int iServoID) {return m_iPresentPos;};
60 
61  virtual void WriteMovingSpeed(int iServoID, int iVelocity);
62  virtual int ReadMovingSpeed(int iServoID) {return m_iLastGoalVelocity;};
63  virtual int ReadPresentSpeed(int iServoID) {return m_iPresentVelocity;};
64 
65  virtual int ReadPresentLoad(int iServoID) {return m_iLoad;};
66  virtual int ReadPresentVoltage(int iServoID) {return m_iVoltage;};
67  virtual int ReadPresentTemperature(int iServoID) {return m_iTemperature;};
68  virtual int ReadIsMoving(int iServoID);
69  virtual int ReadLED(int iServoID);
70  virtual int ReadAlarmShutdown(int iServoID);
71  virtual int ReadModelNumber(int iServoID) {return m_iModelNum;};
72  virtual int ReadID(int iServoID) {return m_iServoID;};
73  virtual int ReadFirmwareVersion(int iServoID) {return m_iFirmwareVersion;};
74 
75  virtual void WriteCWComplianceMargin(int iServoID, int iVal);
76  virtual int ReadCWComplianceMargin(int iServoID) {return m_iCWComplianceMargin;}
77 
78  virtual void WriteCCWComplianceMargin(int iServoID, int iVal);
79  virtual int ReadCCWComplianceMargin(int iServoID) {return m_iCCWComplianceMargin;}
80 
81  virtual void WriteCWComplianceSlope(int iServoID, int iVal);
82  virtual int ReadCWComplianceSlope(int iServoID) {return m_iCWComplianceSlope;}
83 
84  virtual void WriteCCWComplianceSlope(int iServoID, int iVal);
85  virtual int ReadCCWComplianceSlope(int iServoID) {return m_iCCWComplianceSlope;}
86 
87  virtual void WriteMaxTorque(int iServoID, int iVal);
88  virtual int ReadMaxTorque(int iServoID) {return m_iMaxTorque;};
89 
90  virtual void WriteReturnDelayTime(int iServoID, int iVal);
91  virtual int ReadReturnDelayTime(int iServoID) {return m_iReturnDelayTime;};
92 
93  virtual void WriteCCWAngleLimit(int iServoID, int iVal);
94  virtual int ReadCCWAngleLimit(int iServoID) {return m_iCCWAngleLimit;};
95 
96  virtual void WriteCWAngleLimit(int iServoID, int iVal);
97  virtual int ReadCWAngleLimit(int iServoID) {return m_iCWAngleLimit;};
98 
99  virtual void WriteTorqueLimit(int iServoID, int iVal);
100  virtual int ReadTorqueLimit(int iServoID) {return m_iTorqueLimit;};
101 
102  boost::signals2::connection m_EDynamixelReceived;
103  boost::signals2::connection m_EDynamixelTransmitError;
104  boost::signals2::connection m_EDynamixelGetRegister;
105 
106  virtual void DynamixelRecieved(const int &iServoID);
107  virtual void DynamixelTransmitError(const int &iCmd, const int &iServoID);
108  virtual void DynamixelGetRegister(const unsigned char &iServoID, const unsigned char &iReg, const unsigned int &iValue);
109 
110  virtual void AddMotorUpdate(int iPos, int iSpeed);
111  virtual void UpdateMotorData();
112  virtual void UpdateAllMotorData();
113  virtual void UpdateKeyMotorData();
114 
115  virtual void SetRegister(unsigned char reg, unsigned char length, unsigned int value);
116  virtual int GetRegister(unsigned char reg, unsigned char length);
117 
118  virtual void Move(float fltPos, float fltVel);
119 
120  virtual void ConfigureServo();
121 
122 public:
123  RbFirmataDynamixelServo();
124  virtual ~RbFirmataDynamixelServo();
125 
126  virtual bool IsMotorControl() {return true;};
127 
128  virtual void IOComponentID(int iID);
129 
130  virtual float QuantizeServoPosition(float fltPos);
131  virtual float QuantizeServoVelocity(float fltVel);
132 
133  virtual void Stop();
134 
135  virtual void InitMotorData();
136  virtual void ShutdownMotor();
137  virtual void WaitForMoveToFinish();
138 
139 #pragma region DataAccesMethods
140 
141  virtual float *GetDataPointer(const std::string &strDataType);
142  virtual bool SetData(const std::string &strDataType, const std::string &strValue, bool bThrowError = true);
143  virtual void QueryProperties(CStdPtrArray<TypeProperty> &aryProperties);
144 
145 #pragma endregion
146 
147  virtual void Initialize();
148  virtual void StepSimulation();
149  virtual void ResetSimulation();
150  virtual void Load(StdUtils::CStdXml &oXml);
151  virtual void MicroSleep(unsigned int iTime);
152  virtual Simulator *GetSimulator();
153  virtual void SetupIO();
154  virtual void StepIO(int iPartIdx);
155  virtual void ShutdownIO();
156 
157 };
158 
159  } //Firmata
160  } //RobotIOControls
161  } // Robotics
162 } //RoboticsAnimatSim
163 
unsigned long long m_lStartServoUpdateTick
The tick when we start a servo update.
int m_iModelNum
Keeps track of the servos model number. This is updated once at the start of the sim and then used th...
int m_iFirmwareVersion
Keeps track of the servos firmware version. This is updated once at the start of the sim and then use...
A standard xml manipulation class.
Definition: StdXml.h:19
virtual bool IsMotorControl()
Returns true if this part interface is for controlling a motor.
Classes for implementing the cm-labs vortex physics engine for AnimatLab.