00001
00002
00003
00004
00005 #ifndef INCLUDED_ERS2xxInfo_h
00006 #define INCLUDED_ERS2xxInfo_h
00007
00008 #include "CommonERSInfo.h"
00009 #include "ERS210Info.h"
00010 #include "ERS220Info.h"
00011 #include <iostream>
00012
00013
00014 #if defined(TGT_ERS2xx)
00015 # define TGT_HAS_LEDS 22
00016 # define TGT_HAS_BUTTONS 11
00017 # define TGT_HAS_IR_DISTANCE 1
00018 #endif
00019
00020
00021
00022
00023
00024 namespace ERS2xxInfo {
00025
00026
00027
00028
00029
00030 extern const char* const TargetName;
00031
00032 const unsigned int FrameTime=8;
00033 const unsigned int NumFrames=4;
00034 const unsigned int SlowFrameTime=128;
00035 const unsigned int NumSlowFrames=1;
00036 const unsigned int SoundBufferTime=32;
00037
00038
00039
00040
00041 const unsigned NumWheels = 0;
00042
00043 const unsigned JointsPerArm = 0;
00044 const unsigned NumArms = 0;
00045 const unsigned NumArmJoints = JointsPerArm*NumArms;
00046
00047 const unsigned JointsPerLeg = 3;
00048 const unsigned NumLegs = 4;
00049 const unsigned NumLegJoints = JointsPerLeg*NumLegs;
00050 const unsigned NumHeadJoints = 3;
00051 const unsigned NumTailJoints = 2;
00052 const unsigned NumMouthJoints = 1;
00053 const unsigned NumEarJoints = 2;
00054 const unsigned NumButtons = 11;
00055 const unsigned NumSensors = 1+3+1+5;
00056 const unsigned NumLEDs = 22;
00057
00058 const unsigned NumPIDJoints = NumLegJoints+NumHeadJoints+NumTailJoints+NumMouthJoints;
00059 const unsigned NumBinJoints = NumEarJoints;
00060 const unsigned NumOutputs = NumPIDJoints + NumBinJoints + NumLEDs;
00061 const unsigned NumReferenceFrames = NumOutputs + 1 + NumLegs + 1 + 1;
00062
00063 using namespace CameraERS2xx;
00064
00065 const float BallOfFootRadius=27.922f/2;
00066 const float CylinderOfFootRadius=24.606f/2;
00067
00068
00069 const bool IsFastOutput[NumOutputs] = {
00070
00071 true, true, true,
00072 true, true, true,
00073 true, true, true,
00074 true, true, true,
00075 true, true, true,
00076 true, true,
00077 true,
00078
00079 true, true, true,
00080 true, true, true,
00081 true,
00082 true, true, true,
00083 true, true, true,
00084 true, true, true,
00085 true, true, true,
00086 true,
00087 true, true,
00088
00089 false, false
00090 };
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 const unsigned PIDJointOffset = 0;
00102 const unsigned LegOffset = PIDJointOffset;
00103 const unsigned HeadOffset = LegOffset+NumLegJoints;
00104 const unsigned TailOffset = HeadOffset+NumHeadJoints;
00105 const unsigned MouthOffset = TailOffset+NumTailJoints;
00106
00107 const unsigned LEDOffset = PIDJointOffset + NumPIDJoints;
00108
00109 const unsigned BinJointOffset = LEDOffset+NumLEDs;
00110 const unsigned EarOffset = BinJointOffset;
00111
00112 const unsigned BaseFrameOffset = NumOutputs;
00113 const unsigned FootFrameOffset = BaseFrameOffset+1;
00114 const unsigned PawFrameOffset = FootFrameOffset;
00115 const unsigned CameraFrameOffset = FootFrameOffset+NumLegs;
00116 const unsigned IRFrameOffset = CameraFrameOffset+1;
00117
00118
00119 enum LegOrder_t {
00120 LFrLegOrder = 0,
00121 RFrLegOrder,
00122 LBkLegOrder,
00123 RBkLegOrder
00124 };
00125
00126
00127 enum REKOffset_t {
00128 RotatorOffset=0,
00129 ElevatorOffset,
00130 KneeOffset
00131 };
00132
00133
00134 enum TPROffset_t {
00135 TiltOffset = 0,
00136 PanOffset,
00137 RollOffset,
00138 NodOffset=RollOffset
00139 };
00140
00141
00142 enum LegOffset_t {
00143 LFrLegOffset = LegOffset+LFrLegOrder*JointsPerLeg,
00144 RFrLegOffset = LegOffset+RFrLegOrder*JointsPerLeg,
00145 LBkLegOffset = LegOffset+LBkLegOrder*JointsPerLeg,
00146 RBkLegOffset = LegOffset+RBkLegOrder*JointsPerLeg
00147 };
00148
00149
00150
00151
00152 enum LEDOffset_t {
00153 FaceFrontLeftLEDOffset = LEDOffset,
00154 FaceFrontRightLEDOffset,
00155 FaceCenterLeftLEDOffset,
00156 FaceCenterRightLEDOffset,
00157 FaceBackLeftLEDOffset,
00158 FaceBackRightLEDOffset,
00159 ModeLEDOffset,
00160 BackLeft1LEDOffset,
00161 BackLeft2LEDOffset,
00162 BackLeft3LEDOffset,
00163 BackRight3LEDOffset,
00164 BackRight2LEDOffset,
00165 BackRight1LEDOffset,
00166 TailLeftLEDOffset,
00167 TailCenterLEDOffset,
00168 TailRightLEDOffset,
00169 FaceFrontBLEDOffset,
00170 FaceFrontALEDOffset,
00171 FaceFrontCLEDOffset,
00172 RetractableHeadLEDOffset,
00173
00174 TlBluLEDOffset,
00175 TlRedLEDOffset,
00176
00177
00178 BotLLEDOffset = FaceFrontLeftLEDOffset,
00179 BotRLEDOffset = FaceFrontRightLEDOffset,
00180 MidLLEDOffset = FaceCenterLeftLEDOffset,
00181 MidRLEDOffset = FaceCenterRightLEDOffset,
00182 TopLLEDOffset = FaceBackLeftLEDOffset,
00183 TopRLEDOffset = FaceBackRightLEDOffset,
00184 TopBrLEDOffset = ModeLEDOffset,
00185 };
00186
00187
00188
00189 typedef unsigned int LEDBitMask_t;
00190 const LEDBitMask_t FaceFrontLeftLEDMask = 1<<(FaceFrontLeftLEDOffset-LEDOffset);
00191 const LEDBitMask_t FaceFrontRightLEDMask = 1<<(FaceFrontRightLEDOffset-LEDOffset);
00192 const LEDBitMask_t FaceCenterLeftLEDMask = 1<<(FaceCenterLeftLEDOffset-LEDOffset);
00193 const LEDBitMask_t FaceCenterRightLEDMask = 1<<(FaceCenterRightLEDOffset-LEDOffset);
00194 const LEDBitMask_t FaceBackLeftLEDMask = 1<<(FaceBackLeftLEDOffset-LEDOffset);
00195 const LEDBitMask_t FaceBackRightLEDMask = 1<<(FaceBackRightLEDOffset-LEDOffset);
00196 const LEDBitMask_t ModeLEDMask = 1<<(ModeLEDOffset-LEDOffset);
00197 const LEDBitMask_t BackLeft1LEDMask = 1<<(BackLeft1LEDOffset-LEDOffset);
00198 const LEDBitMask_t BackLeft2LEDMask = 1<<(BackLeft2LEDOffset-LEDOffset);
00199 const LEDBitMask_t BackLeft3LEDMask = 1<<(BackLeft3LEDOffset-LEDOffset);
00200 const LEDBitMask_t BackRight3LEDMask = 1<<(BackRight3LEDOffset-LEDOffset);
00201 const LEDBitMask_t BackRight2LEDMask = 1<<(BackRight2LEDOffset-LEDOffset);
00202 const LEDBitMask_t BackRight1LEDMask = 1<<(BackRight1LEDOffset-LEDOffset);
00203 const LEDBitMask_t TailLeftLEDMask = 1<<(TailLeftLEDOffset-LEDOffset);
00204 const LEDBitMask_t TailCenterLEDMask = 1<<(TailCenterLEDOffset-LEDOffset);
00205 const LEDBitMask_t TailRightLEDMask = 1<<(TailRightLEDOffset-LEDOffset);
00206 const LEDBitMask_t FaceFrontBLEDMask = 1<<(FaceFrontBLEDOffset-LEDOffset);
00207 const LEDBitMask_t FaceFrontALEDMask = 1<<(FaceFrontALEDOffset-LEDOffset);
00208 const LEDBitMask_t FaceFrontCLEDMask = 1<<(FaceFrontCLEDOffset-LEDOffset);
00209 const LEDBitMask_t RetractableHeadLEDMask = 1<<(RetractableHeadLEDOffset-LEDOffset);
00210
00211 const LEDBitMask_t TlRedLEDMask= 1<<(TlRedLEDOffset-LEDOffset);
00212 const LEDBitMask_t TlBluLEDMask= 1<<(TlBluLEDOffset-LEDOffset);
00213
00214
00215 const LEDBitMask_t BotLLEDMask = 1<<(BotLLEDOffset-LEDOffset);
00216 const LEDBitMask_t BotRLEDMask = 1<<(BotRLEDOffset-LEDOffset);
00217 const LEDBitMask_t MidLLEDMask = 1<<(MidLLEDOffset-LEDOffset);
00218 const LEDBitMask_t MidRLEDMask = 1<<(MidRLEDOffset-LEDOffset);
00219 const LEDBitMask_t TopLLEDMask = 1<<(TopLLEDOffset-LEDOffset);
00220 const LEDBitMask_t TopRLEDMask = 1<<(TopRLEDOffset-LEDOffset);
00221 const LEDBitMask_t TopBrLEDMask= 1<<(TopBrLEDOffset-LEDOffset);
00222
00223
00224 const LEDBitMask_t FaceLEDMask
00225 = FaceFrontLeftLEDMask
00226 | FaceFrontRightLEDMask
00227 | FaceCenterLeftLEDMask
00228 | FaceCenterRightLEDMask
00229 | FaceBackLeftLEDMask
00230 | FaceBackRightLEDMask
00231 | FaceFrontALEDMask
00232 | FaceFrontBLEDMask
00233 | FaceFrontCLEDMask
00234 | ModeLEDMask;
00235
00236
00237 const LEDBitMask_t HeadLEDMask
00238 = FaceLEDMask | RetractableHeadLEDMask;
00239
00240
00241 const LEDBitMask_t BackLEDMask
00242 = BackLeft1LEDMask
00243 | BackLeft2LEDMask
00244 | BackLeft3LEDMask
00245 | BackRight1LEDMask
00246 | BackRight2LEDMask
00247 | BackRight3LEDMask;
00248
00249
00250 const LEDBitMask_t TailLEDMask
00251 = TailLeftLEDMask
00252 | TailCenterLEDMask
00253 | TailRightLEDMask
00254 | TlRedLEDMask
00255 | TlBluLEDMask;
00256
00257
00258 const LEDBitMask_t AllLEDMask = (LEDBitMask_t)~0;
00259
00260
00261
00262
00263 const fmat::Column<3> AgentBoundingBoxBaseFrameOffset = fmat::pack(0,0,0);
00264
00265
00266 const fmat::Column<3> AgentBoundingBoxHalfDims = fmat::pack(304.8/2, 304.8/2, 0);
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 enum ButtonOffset_t {
00285 LFrPawOffset = LFrLegOrder,
00286 RFrPawOffset = RFrLegOrder,
00287 LBkPawOffset = LBkLegOrder,
00288 RBkPawOffset = RBkLegOrder,
00289 ChinButOffset= 4,
00290 BackButOffset,
00291 HeadFrButOffset,
00292 HeadButOffset=HeadFrButOffset,
00293 HeadBkButOffset,
00294 TailLeftButOffset,
00295 TailCenterButOffset,
00296 TailRightButOffset,
00297 };
00298
00299
00300 const char* const buttonNames[NumButtons] = {
00301 "LFrPaw","RFrPaw","LBkPaw","RBkPaw",
00302 "ChinBut","BackBut","HeadFrBut","HeadBkBut",
00303 "TailLeftBut","TailCenterBut","TailRightBut"
00304 };
00305
00306
00307
00308 enum SensorOffset_t {
00309 IRDistOffset = 0,
00310 BAccelOffset,
00311 LAccelOffset,
00312 DAccelOffset,
00313 ThermoOffset,
00314 PowerRemainOffset,
00315 PowerThermoOffset,
00316 PowerCapacityOffset,
00317 PowerVoltageOffset,
00318 PowerCurrentOffset
00319 };
00320
00321
00322 const char* const sensorNames[NumSensors] = {
00323 "IRDist",
00324 "BAccel","LAccel","DAccel",
00325 "Thermo",
00326 "PowerRemain","PowerThermo","PowerCapacity","PowerVoltage","PowerCurrent"
00327 };
00328
00329
00330
00331
00332
00333 const char* const outputNames[NumReferenceFrames+1] = {
00334 "LFr:rotor",
00335 "LFr:elvtr",
00336 "LFr:knee",
00337 "RFr:rotor",
00338 "RFr:elvtr",
00339 "RFr:knee",
00340 "LBk:rotor",
00341 "LBk:elvtr",
00342 "LBk:knee",
00343 "RBk:rotor",
00344 "RBk:elvtr",
00345 "RBk:knee",
00346
00347 "NECK:tilt",
00348 "NECK:pan",
00349 "NECK:roll",
00350
00351 "TAIL:tilt",
00352 "TAIL:pan",
00353
00354 "MOUTH",
00355
00356 "LED:botL",
00357 "LED:botR",
00358 "LED:midL",
00359 "LED:midR",
00360 "LED:topL",
00361 "LED:topR",
00362 "LED:topBr",
00363
00364 "LED:bkL1",
00365 "LED:bkL2",
00366 "LED:bkL3",
00367 "LED:bkR3",
00368 "LED:bkR2",
00369 "LED:bkR1",
00370 "LED:tailL",
00371 "LED:tailC",
00372 "LED:tailR",
00373 "LED:faceB",
00374 "LED:faceA",
00375 "LED:faceC",
00376 "LED:light",
00377
00378 "LED:tlRed",
00379 "LED:tlBlu",
00380
00381 "EAR:left",
00382 "EAR:right",
00383
00384 "BaseFrame",
00385 "LFrFootFrame",
00386 "RFrFootFrame",
00387 "LBkFootFrame",
00388 "RBkFootFrame",
00389 "CameraFrame",
00390 "IRFrame",
00391 NULL
00392 };
00393
00394
00395
00396 class ERS2xxCapabilities : public Capabilities {
00397 public:
00398
00399 ERS2xxCapabilities()
00400 : Capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs)
00401 {
00402
00403 buttonToIndex["HeadBut"]=HeadButOffset;
00404 #ifdef TGT_ERS2xx
00405 if(detectModel() == ERS210Info::TargetName) {
00406 fakeOutputs.insert(BackLeft1LEDOffset);
00407 fakeOutputs.insert(BackLeft2LEDOffset);
00408 fakeOutputs.insert(BackLeft3LEDOffset);
00409 fakeOutputs.insert(BackRight3LEDOffset);
00410 fakeOutputs.insert(BackRight2LEDOffset);
00411 fakeOutputs.insert(BackRight1LEDOffset);
00412 fakeOutputs.insert(TailLeftLEDOffset);
00413 fakeOutputs.insert(TailCenterLEDOffset);
00414 fakeOutputs.insert(TailRightLEDOffset);
00415 fakeOutputs.insert(FaceFrontBLEDOffset);
00416 fakeOutputs.insert(FaceFrontALEDOffset);
00417 fakeOutputs.insert(FaceFrontCLEDOffset);
00418 fakeOutputs.insert(RetractableHeadLEDOffset);
00419 } else if(detectModel() == ERS220Info::TargetName) {
00420 for(unsigned int i=TailOffset; i<TailOffset+NumTailJoints; ++i)
00421 fakeOutputs.insert(i);
00422 for(unsigned int i=MouthOffset; i<MouthOffset+NumMouthJoints; ++i)
00423 fakeOutputs.insert(i);
00424 fakeOutputs.insert(TlBluLEDOffset);
00425 fakeOutputs.insert(TlRedLEDOffset);
00426 for(unsigned int i=EarOffset; i<EarOffset+NumEarJoints; ++i)
00427 fakeOutputs.insert(i);
00428 } else {
00429 std::cerr << "ERS2xxCapabilities running on unknown model!" << std::endl;
00430 }
00431 #endif
00432 }
00433 };
00434
00435 extern const ERS2xxCapabilities capabilities;
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448 const char* const PrimitiveName [NumOutputs] = {
00449 "PRM:/r2/c1-Joint2:j1",
00450 "PRM:/r2/c1/c2-Joint2:j2",
00451 "PRM:/r2/c1/c2/c3-Joint2:j3",
00452 "PRM:/r4/c1-Joint2:j1",
00453 "PRM:/r4/c1/c2-Joint2:j2",
00454 "PRM:/r4/c1/c2/c3-Joint2:j3",
00455
00456 "PRM:/r3/c1-Joint2:j1",
00457 "PRM:/r3/c1/c2-Joint2:j2",
00458 "PRM:/r3/c1/c2/c3-Joint2:j3",
00459 "PRM:/r5/c1-Joint2:j1",
00460 "PRM:/r5/c1/c2-Joint2:j2",
00461 "PRM:/r5/c1/c2/c3-Joint2:j3",
00462
00463 "PRM:/r1/c1-Joint2:j1",
00464 "PRM:/r1/c1/c2-Joint2:j2",
00465 "PRM:/r1/c1/c2/c3-Joint2:j3",
00466
00467 "PRM:/r6/c2-Joint2:j2",
00468 "PRM:/r6/c1-Joint2:j1",
00469
00470 "PRM:/r1/c1/c2/c3/c4-Joint2:j4",
00471
00472 "PRM:/r1/c1/c2/c3/l1-LED2:l1",
00473 "PRM:/r1/c1/c2/c3/l4-LED2:l4",
00474 "PRM:/r1/c1/c2/c3/l2-LED2:l2",
00475 "PRM:/r1/c1/c2/c3/l5-LED2:l5",
00476 "PRM:/r1/c1/c2/c3/l3-LED2:l3",
00477 "PRM:/r1/c1/c2/c3/l6-LED2:l6",
00478 "PRM:/r1/c1/c2/c3/l7-LED2:l7",
00479
00480 "PRM:/r6/l1-LED2:l1",
00481 "PRM:/r6/l2-LED2:l2",
00482 "PRM:/r6/l3-LED2:l3",
00483 "PRM:/r6/l4-LED2:l4",
00484 "PRM:/r6/l5-LED2:l5",
00485 "PRM:/r6/l6-LED2:l6",
00486
00487 "PRM:/r6/l9-LED2:l9",
00488 "PRM:/r6/l7-LED2:l7",
00489 "PRM:/r6/l8-LED2:l8",
00490
00491 "PRM:/r1/c1/c2/c3/l8-LED2:l8",
00492 "PRM:/r1/c1/c2/c3/l9-LED2:l9",
00493 "PRM:/r1/c1/c2/c3/la-LED2:la",
00494 "PRM:/r1/c1/c2/c3/lb-LED2:lb",
00495
00496 "PRM:/r6/l2-LED2:l2",
00497 "PRM:/r6/l1-LED2:l1",
00498
00499 "PRM:/r1/c1/c2/c3/e1-Joint3:j5",
00500 "PRM:/r1/c1/c2/c3/e2-Joint3:j6"
00501 };
00502
00503
00504 const char* const SpeakerLocator="PRM:/r1/c1/c2/c3/s1-Speaker:S1";
00505
00506
00507 const char* const CameraLocator="PRM:/r1/c1/c2/c3/i1-FbkImageSensor:F1";
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535 const float DefaultPIDs[NumPIDJoints][3] =
00536 {
00537 { 0x16/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x08/(float)(1<<(16-0xF)) },
00538 { 0x14/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x06/(float)(1<<(16-0xF)) },
00539 { 0x23/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x05/(float)(1<<(16-0xF)) },
00540 { 0x16/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x08/(float)(1<<(16-0xF)) },
00541 { 0x14/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x06/(float)(1<<(16-0xF)) },
00542 { 0x23/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x05/(float)(1<<(16-0xF)) },
00543 { 0x16/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x08/(float)(1<<(16-0xF)) },
00544 { 0x14/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x06/(float)(1<<(16-0xF)) },
00545 { 0x23/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x05/(float)(1<<(16-0xF)) },
00546 { 0x16/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x08/(float)(1<<(16-0xF)) },
00547 { 0x14/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x06/(float)(1<<(16-0xF)) },
00548 { 0x23/(float)(1<<(16-0xE)), 0x04/(float)(1<<(16-0x2)), 0x05/(float)(1<<(16-0xF)) },
00549
00550 { 0x0A/(float)(1<<(16-0xE)), 0x08/(float)(1<<(16-0x2)), 0x0C/(float)(1<<(16-0xF)) },
00551 { 0x0D/(float)(1<<(16-0xE)), 0x08/(float)(1<<(16-0x2)), 0x0B/(float)(1<<(16-0xF)) },
00552 { 0x0A/(float)(1<<(16-0xE)), 0x08/(float)(1<<(16-0x2)), 0x0C/(float)(1<<(16-0xF)) },
00553
00554 { 0x0A/(float)(1<<(16-0xE)), 0x00/(float)(1<<(16-0x2)), 0x18/(float)(1<<(16-0xF)) },
00555 { 0x07/(float)(1<<(16-0xE)), 0x00/(float)(1<<(16-0x2)), 0x11/(float)(1<<(16-0xF)) },
00556
00557 { 0x0E/(float)(1<<(16-0xE)), 0x08/(float)(1<<(16-0x2)), 0x10/(float)(1<<(16-0xF)) }
00558 };
00559
00560
00561 const unsigned char DefaultPIDShifts[3] = {0x0E, 0x02, 0x0F};
00562
00563
00564
00565
00566
00567
00568 const float MaxOutputSpeed[NumOutputs] = {
00569 2.8143434f,
00570 2.4980025f,
00571 2.8361600f,
00572 2.8143434f,
00573 2.4980025f,
00574 2.8361600f,
00575 2.8143434f,
00576 2.4980025f,
00577 2.8361600f,
00578 2.8143434f,
00579 2.4980025f,
00580 2.8361600f,
00581
00582 2.1053034f,
00583 3.0106930f,
00584 3.0106930f,
00585
00586 4.4724062f,
00587 4.4724062f,
00588
00589 4.3742314f,
00590
00591 0,0,0,
00592 0,0,0,
00593 0,
00594 0,0,0,
00595 0,0,0,
00596 0,0,0,
00597 0,0,0,
00598 0,
00599 0,0,
00600
00601 0,0
00602 };
00603
00604 #ifndef RAD
00605
00606 #define RAD(deg) (((deg) * (float)M_PI ) / 180.0f)
00607
00608 #define __RI_RAD_FLAG
00609 #endif
00610
00611
00612 const float outputRanges[NumOutputs][2] =
00613 {
00614 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00615 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00616 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00617 { RAD(-117),RAD(117) },{ RAD(-11),RAD(89) },{ RAD(-27),RAD(147) },
00618
00619 { RAD(-82),RAD(43) },{ RAD(-89.6f),RAD(89.6f) },{ RAD(-29),RAD(29) },
00620
00621 { RAD(-22),RAD(22) },{ RAD(-22),RAD(22) },
00622
00623 { RAD(-47),RAD(-3) },
00624
00625 {0,1},{0,1},{0,1},
00626 {0,1},{0,1},{0,1},
00627 {0,1},
00628 {0,1},{0,1},{0,1},
00629 {0,1},{0,1},{0,1},
00630 {0,1},{0,1},{0,1},
00631 {0,1},{0,1},{0,1},
00632 {0,1},
00633 {0,1},{0,1},
00634
00635 {0,1},{0,1}
00636 };
00637
00638
00639 const float mechanicalLimits[NumOutputs][2] =
00640 {
00641 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00642 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00643 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00644 { RAD(-120),RAD(120) },{ RAD(-14),RAD(92) },{ RAD(-30),RAD(150) },
00645
00646 { RAD(-85),RAD(46) },{ RAD(-92.6f),RAD(92.6f) },{ RAD(-32),RAD(32) },
00647
00648 { RAD(-25),RAD(25) },{ RAD(-25),RAD(25) },
00649
00650 { RAD(-50),RAD(0) },
00651
00652 {0,1},{0,1},{0,1},
00653 {0,1},{0,1},{0,1},
00654 {0,1},
00655 {0,1},{0,1},{0,1},
00656 {0,1},{0,1},{0,1},
00657 {0,1},{0,1},{0,1},
00658 {0,1},{0,1},{0,1},
00659 {0,1},
00660 {0,1},{0,1},
00661
00662 {0,1},{0,1}
00663 };
00664
00665 #ifdef __RI_RAD_FLAG
00666 #undef RAD
00667 #undef __RI_RAD_FLAG
00668 #endif
00669
00670 }
00671
00672
00673
00674
00675
00676
00677 #endif