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