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