00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "DebugMotionControl.h"
00010
00011 void DebugMotionControl::execute()
00012 {
00013 for (int i = 0; i < jointDataBufferNumOfFrames; i++)
00014 {
00015 JointData ¤tFrame = jointDataBuffer.frame[i];
00016
00017 if (sequencer.isRunning())
00018
00019 sequencer.nextSequenceData(currentFrame);
00020 else
00021
00022 currentFrame = JointData();
00023
00024
00025 executeStayAsForced(sensorDataBuffer.lastFrame(), currentFrame);
00026
00027
00028
00029 if (currentFrame.data[JointData::tailTilt] == jointDataInvalidValue)
00030 {
00031 static int tailcount = 0;
00032 int j=tailcount++;
00033 if (j>64) j = 128-j;
00034 currentFrame.data[JointData::tailTilt] = 10000*(j - 32);
00035 tailcount &= 127;
00036 }
00037 if (currentFrame.data[JointData::tailPan] == jointDataInvalidValue)
00038 currentFrame.data[JointData::tailPan] = 0;
00039
00040
00041
00042 }
00043 clip();
00044 }
00045
00046 bool DebugMotionControl::handleMessage(InMessage& message)
00047 {
00048 switch(message.getMessageID())
00049 {
00050 case idJointDataSequence:
00051 message.bin >> sequencer;
00052 sequencer.start();
00053 return true;
00054 }
00055 return false;
00056 }
00057
00058 #define CLIP(x,min,max) \
00059 if (x > max) x=max; \
00060 else if (x < min) x=min;
00061
00062
00063 void DebugMotionControl::clip()
00064 {
00065 for (int i = 0; i < jointDataBufferNumOfFrames; i++)
00066 {
00067 CLIP(jointDataBuffer.frame[i].data[JointData::legFR1], toMicroRad(jointLimitLeg1FN), toMicroRad(jointLimitLeg1FP));
00068 CLIP(jointDataBuffer.frame[i].data[JointData::legFR2], toMicroRad(jointLimitLeg2N), toMicroRad(jointLimitLeg2P));
00069 CLIP(jointDataBuffer.frame[i].data[JointData::legFR3], toMicroRad(jointLimitLeg3N), toMicroRad(jointLimitLeg3P));
00070 CLIP(jointDataBuffer.frame[i].data[JointData::legFL1], toMicroRad(jointLimitLeg1FN), toMicroRad(jointLimitLeg1FP));
00071 CLIP(jointDataBuffer.frame[i].data[JointData::legFL2], toMicroRad(jointLimitLeg2N), toMicroRad(jointLimitLeg2P));
00072 CLIP(jointDataBuffer.frame[i].data[JointData::legFL3], toMicroRad(jointLimitLeg3N), toMicroRad(jointLimitLeg3P));
00073 CLIP(jointDataBuffer.frame[i].data[JointData::legHR1], toMicroRad(jointLimitLeg1HN), toMicroRad(jointLimitLeg1HP));
00074 CLIP(jointDataBuffer.frame[i].data[JointData::legHR2], toMicroRad(jointLimitLeg2N), toMicroRad(jointLimitLeg2P));
00075 CLIP(jointDataBuffer.frame[i].data[JointData::legHR3], toMicroRad(jointLimitLeg3N), toMicroRad(jointLimitLeg3P));
00076 CLIP(jointDataBuffer.frame[i].data[JointData::legHL1], toMicroRad(jointLimitLeg1HN), toMicroRad(jointLimitLeg1HP));
00077 CLIP(jointDataBuffer.frame[i].data[JointData::legHL2], toMicroRad(jointLimitLeg2N), toMicroRad(jointLimitLeg2P));
00078 CLIP(jointDataBuffer.frame[i].data[JointData::legHL3], toMicroRad(jointLimitLeg3N), toMicroRad(jointLimitLeg3P));
00079 CLIP(jointDataBuffer.frame[i].data[JointData::neckTilt], toMicroRad(jointLimitNeckTiltN), toMicroRad(jointLimitNeckTiltP));
00080 CLIP(jointDataBuffer.frame[i].data[JointData::headPan], toMicroRad(jointLimitHeadPanN), toMicroRad(jointLimitHeadPanP));
00081 CLIP(jointDataBuffer.frame[i].data[JointData::headTilt], toMicroRad(jointLimitHeadTiltN), toMicroRad(jointLimitHeadTiltP));
00082 }
00083 }
00084
00085
00086 #define SET_STAYASFORCED(joint,tolerance) \
00087 setStayAsForcedValue(sensorData,jointData, SensorData::joint,JointData::joint,tolerance)
00088
00089 void DebugMotionControl::executeStayAsForced(
00090 const SensorData& sensorData,
00091 JointData& jointData
00092 )
00093 {
00094 SET_STAYASFORCED(neckTilt,100000);
00095 SET_STAYASFORCED(headPan,100000);
00096 SET_STAYASFORCED(headTilt,50000);
00097 SET_STAYASFORCED(legFL1,100000);
00098 SET_STAYASFORCED(legHL1,100000);
00099 SET_STAYASFORCED(legFR1,100000);
00100 SET_STAYASFORCED(legHR1,100000);
00101 SET_STAYASFORCED(legFL2,100000);
00102 SET_STAYASFORCED(legHL2,100000);
00103 SET_STAYASFORCED(legFR2,100000);
00104 SET_STAYASFORCED(legHR2,100000);
00105 SET_STAYASFORCED(legFL3,100000);
00106 SET_STAYASFORCED(legHL3,100000);
00107 SET_STAYASFORCED(legFR3,100000);
00108 SET_STAYASFORCED(legHR3,100000);
00109 SET_STAYASFORCED(mouth,100000);
00110 }
00111
00112 void DebugMotionControl::setStayAsForcedValue(
00113 const SensorData& sensorData,
00114 JointData& jointData,
00115 SensorData::sensors sensor,
00116 JointData::JointID joint,
00117 long tolerance
00118 )
00119 {
00120 if (jointData.data[joint] == jointDataInvalidValue)
00121 {
00122 if (
00123 ((stayAsForcedOldValue.data[joint] - sensorData.data[sensor]) > tolerance) ||
00124 ((stayAsForcedOldValue.data[joint] - sensorData.data[sensor]) < -tolerance)
00125 )
00126 jointData.data[joint] = stayAsForcedOldValue.data[joint] = sensorData.data[sensor];
00127 else
00128 jointData.data[joint] = stayAsForcedOldValue.data[joint];
00129 }
00130 }
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
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