00001
00002
00003
00004
00005 #ifndef __MOTORCOMMANDSSENDER_H__
00006 #define __MOTORCOMMANDSSENDER_H__
00007
00008 #ifndef __ProcessFramework_h__
00009 #error Never include this file directly. Include ProcessFramework.h instead.
00010 #endif
00011
00012 #include "Platform/ProcessFramework.h"
00013 #include "Representations/Motion/MotorCommands.h"
00014 #include <OPENR/OPENRAPI.h>
00015
00016
00017
00018
00019 class MotorCommandsSender : public SenderBase<MotorCommands>
00020 {
00021 private:
00022 OPrimitiveID jointId[JointData::numOfJoint];
00023 bool jointGainsSet;
00024 MemoryRegionID memID;
00025 OCommandVectorData* cmdVec;
00026 RCRegion* package;
00027 PIDData lastPidData;
00028 int numOfLED;
00029
00030
00031
00032
00033 static const char* getPrimitiveJointName(int i)
00034 {
00035 if(SystemCall::getRobotDesign() == RobotDesign::ERS210)
00036 switch (i)
00037 {
00038 case 0: return "PRM:/r1/c1-Joint2:j1";
00039 case 1: return "PRM:/r1/c1/c2-Joint2:j2";
00040 case 2: return "PRM:/r1/c1/c2/c3-Joint2:j3";
00041 case 3: return "PRM:/r1/c1/c2/c3/c4-Joint2:j4";
00042 case 4: return "PRM:/r1/c1/c2/c3/e1-Joint3:j5";
00043 case 5: return "PRM:/r1/c1/c2/c3/e2-Joint3:j6";
00044 case 6: return "PRM:/r4/c1-Joint2:j1";
00045 case 7: return "PRM:/r4/c1/c2-Joint2:j2";
00046 case 8: return "PRM:/r4/c1/c2/c3-Joint2:j3";
00047 case 9: return "PRM:/r2/c1-Joint2:j1";
00048 case 10: return "PRM:/r2/c1/c2-Joint2:j2";
00049 case 11: return "PRM:/r2/c1/c2/c3-Joint2:j3";
00050 case 12: return "PRM:/r5/c1-Joint2:j1";
00051 case 13: return "PRM:/r5/c1/c2-Joint2:j2";
00052 case 14: return "PRM:/r5/c1/c2/c3-Joint2:j3";
00053 case 15: return "PRM:/r3/c1-Joint2:j1";
00054 case 16: return "PRM:/r3/c1/c2-Joint2:j2";
00055 case 17: return "PRM:/r3/c1/c2/c3-Joint2:j3";
00056 case 18: return "PRM:/r6/c1-Joint2:j1";
00057 case 19: return "PRM:/r6/c2-Joint2:j2";
00058 default: return "";
00059 }
00060 else
00061 switch (i)
00062 {
00063 case 0: return "PRM:/r1/c1-Joint2:11";
00064 case 1: return "PRM:/r1/c1/c2-Joint2:12";
00065 case 2: return "PRM:/r1/c1/c2/c3-Joint2:13";
00066 case 3: return "PRM:/r1/c1/c2/c3/c4-Joint2:14";
00067 case 4: return "PRM:/r1/c1/c2/c3/e1-Joint3:15";
00068 case 5: return "PRM:/r1/c1/c2/c3/e2-Joint3:16";
00069 case 6: return "PRM:/r4/c1-Joint2:41";
00070 case 7: return "PRM:/r4/c1/c2-Joint2:42";
00071 case 8: return "PRM:/r4/c1/c2/c3-Joint2:43";
00072 case 9: return "PRM:/r2/c1-Joint2:21";
00073 case 10: return "PRM:/r2/c1/c2-Joint2:22";
00074 case 11: return "PRM:/r2/c1/c2/c3-Joint2:23";
00075 case 12: return "PRM:/r5/c1-Joint2:51";
00076 case 13: return "PRM:/r5/c1/c2-Joint2:52";
00077 case 14: return "PRM:/r5/c1/c2/c3-Joint2:53";
00078 case 15: return "PRM:/r3/c1-Joint2:31";
00079 case 16: return "PRM:/r3/c1/c2-Joint2:32";
00080 case 17: return "PRM:/r3/c1/c2/c3-Joint2:33";
00081 case 18: return "PRM:/r6/c2-Joint2:62";
00082 case 19: return "PRM:/r6/c1-Joint2:61";
00083 default: return "";
00084 }
00085
00086 }
00087
00088
00089
00090
00091 static const char* getPrimitiveLEDName(int i)
00092 {
00093 if(SystemCall::getRobotDesign() == RobotDesign::ERS210)
00094 switch (i)
00095 {
00096 case 0: return "PRM:/r1/c1/c2/c3/l1-LED2:l1";
00097 case 1: return "PRM:/r1/c1/c2/c3/l2-LED2:l2";
00098 case 2: return "PRM:/r1/c1/c2/c3/l3-LED2:l3";
00099 case 3: return "PRM:/r1/c1/c2/c3/l4-LED2:l4";
00100 case 4: return "PRM:/r1/c1/c2/c3/l5-LED2:l5";
00101 case 5: return "PRM:/r1/c1/c2/c3/l6-LED2:l6";
00102 case 6: return "PRM:/r1/c1/c2/c3/l7-LED2:l7";
00103 case 7: return "RPM:/r6/l1-LED2:l1";
00104 case 8: return "RPM:/r6/l2-LED2:l2";
00105 default: return "";
00106 }
00107 else
00108 switch (i)
00109 {
00110 case 0: return "PRM:/r1/c1/c2/c3/l1-LED2:l1";
00111 case 1: return "PRM:/r1/c1/c2/c3/l2-LED2:l2";
00112 case 2: return "PRM:/r1/c1/c2/c3/l3-LED2:l3";
00113 case 3: return "PRM:/r1/c1/c2/c3/l4-LED2:l4";
00114 case 4: return "PRM:/r1/c1/c2/c3/l5-LED2:l5";
00115 case 5: return "PRM:/r1/c1/c2/c3/l6-LED2:l6";
00116 case 6: return "PRM:/r1/c1/c2/c3/la-LED3:la";
00117 case 7: return "PRM:/r1/c1/c2/c3/lb-LED3:lb";
00118 case 8: return "PRM:/r1/c1/c2/c3/lc-LED3:lc";
00119 case 9: return "PRM:/r1/c1/c2/c3/ld-LED3:ld";
00120 case 10: return "PRM:/r1/c1/c2/c3/le-LED3:le";
00121 case 11: return "PRM:/r1/c1/c2/c3/lf-LED3:lf";
00122 case 12: return "PRM:/r1/c1/c2/c3/lg-LED3:lg";
00123 case 13: return "PRM:/r1/c1/c2/c3/lh-LED3:lh";
00124 case 14: return "PRM:/r1/c1/c2/c3/li-LED3:li";
00125 case 15: return "PRM:/r1/c1/c2/c3/lj-LED3:lj";
00126 case 16: return "PRM:/r1/c1/c2/c3/lk-LED3:lk";
00127 case 17: return "PRM:/r1/c1/c2/c3/ll-LED3:ll";
00128 case 18: return "PRM:/r1/c1/c2/c3/lm-LED3:lm";
00129 case 19: return "PRM:/r1/c1/c2/c3/ln-LED3:ln";
00130 case 20: return "PRM:/lu-LED3:lu";
00131 case 21: return "PRM:/lv-LED3:lv";
00132 case 22: return "PRM:/lw-LED3:lw";
00133 case 23: return "PRM:/lx-LED3:lx";
00134 case 24: return "PRM:/ly-LED3:ly";
00135 case 25: return "PRM:/lz-LED3:lz";
00136 default: return "";
00137 }
00138 }
00139
00140 protected:
00141
00142
00143
00144 virtual void preparePackage();
00145
00146
00147
00148
00149
00150 virtual void setPackage(const ObserverID& receiver);
00151
00152
00153
00154
00155 virtual void freePackage();
00156
00157 public:
00158
00159
00160
00161
00162
00163
00164 MotorCommandsSender(PlatformProcess* process,bool blocking);
00165
00166
00167
00168
00169 ~MotorCommandsSender();
00170 };
00171
00172
00173
00174
00175
00176 #define SENDER_MOTORCOMMANDS \
00177 MotorCommandsSender theMotorCommandsSender
00178
00179
00180
00181
00182
00183
00184 #define INIT_SENDER_MOTORCOMMANDS(blocking) \
00185 theMotorCommandsSender(this,blocking)
00186
00187 #endif
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239