Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

RobotInfo.cc

Go to the documentation of this file.
00001 #include "RobotInfo.h"
00002 #include <iostream>
00003 
00004 #if defined(TGT_ERS2xx) && defined(PLATFORM_APERIOS)
00005 #  include <OPENR/OPENRAPI.h>
00006 #endif
00007 
00008 // collecting these static allocations here so we don't have to have a separate file for each one
00009 // you can either make a .cc file dedicated to your Info.h, or just add an entry below...
00010 
00011 #include "ERS210Info.h"
00012 namespace ERS210Info {
00013   const char* const TargetName="ERS-210";
00014   const ERS210Capabilities capabilities;
00015 }
00016 
00017 #include "ERS220Info.h"
00018 namespace ERS220Info {
00019   const char* const TargetName="ERS-220";
00020   const ERS220Capabilities capabilities;
00021 }
00022 
00023 #include "ERS2xxInfo.h"
00024 namespace ERS2xxInfo {
00025   const char* const TargetName="ERS-2xx";
00026   const ERS2xxCapabilities capabilities;
00027 }
00028 
00029 #include "ERS7Info.h"
00030 namespace ERS7Info {
00031   const char* const TargetName="ERS-7";
00032   const ERS7Capabilities capabilities;
00033   const char CameraModelName[] = "ERS-7-Camera";
00034 }
00035 
00036 #include "LynxArm6Info.h"
00037 namespace LynxArm6Info {
00038   const char* const TargetName="LynxArm6";
00039   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,0,0,NumOutputs);
00040 }
00041 
00042 #include "Regis1Info.h"
00043 namespace Regis1Info {
00044   const char* const TargetName="Regis1";
00045   const Regis1Capabilities capabilities;
00046 }
00047 
00048 #include "QBotPlusInfo.h"
00049 namespace QBotPlusInfo {
00050   const char* const TargetName="QBotPlus";
00051   const QBotPlusCapabilities capabilities;
00052 }
00053 
00054 #include "QwerkInfo.h"
00055 namespace QwerkInfo {
00056   const char* const TargetName="Qwerk";
00057   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00058 }
00059 
00060 #include "CreateInfo.h"
00061 namespace CreateInfo {
00062   const char* const TargetName="Create";
00063   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00064 }
00065 
00066 #include "CalliopeInfo.h"
00067 namespace CalliopeInfo {
00068   const char* const TargetName="Calliope";
00069   const CalliopeCapabilities capabilities;
00070 }
00071 
00072 namespace CalliopeLPInfo {
00073   const char* const TargetName="CalliopeLP";
00074   const CalliopeLPCapabilities capabilities;
00075 }
00076 
00077 namespace CalliopeSPInfo {
00078   const char* const TargetName="CalliopeSP";
00079   const CalliopeSPCapabilities capabilities;
00080 }
00081 
00082 namespace Calliope2SPInfo {
00083   const char* const TargetName="Calliope2SP";
00084   const Calliope2SPCapabilities capabilities;
00085 }
00086 
00087 namespace Calliope5SPInfo {
00088   const char* const TargetName="Calliope5SP";
00089   const Calliope5SPCapabilities capabilities;
00090 }
00091 
00092 namespace Calliope5KPInfo {
00093   const char* const TargetName="Calliope5KP";
00094   const Calliope5KPCapabilities capabilities;
00095 }
00096 
00097 #include "WiiMoteInfo.h"
00098 namespace WiiMoteInfo {
00099   const char* const TargetName="WiiMote";
00100   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00101 }
00102 
00103 #include "BioloidInfo.h"
00104 namespace BioloidInfo {
00105   const char* const TargetName="Bioloid";
00106   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00107 }
00108 
00109 #include "PanTiltInfo.h"
00110 namespace PanTiltInfo {
00111   const char* const TargetName="PanTilt";
00112   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00113 }
00114 
00115 #include "HandEyeInfo.h"
00116 namespace HandEyeInfo {
00117   const char* const TargetName="HandEye";
00118   const HandEyeCapabilities capabilities;
00119 }
00120 
00121 #include "HandEyeZInfo.h"
00122 namespace HandEyeZInfo {
00123   const char* const TargetName="HandEyeZ";
00124   const HandEyeZCapabilities capabilities;
00125 }
00126 
00127 
00128 #include "TentacleInfo.h"
00129 namespace TentacleInfo {
00130   const char* const TargetName="Tentacle";
00131   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00132 }
00133 
00134 #include "ChiaraInfo.h"
00135 namespace ChiaraInfo {
00136   const char* const TargetName="Chiara";
00137   const ChiaraCapabilities capabilities;
00138 }
00139 
00140 #include "Chiara2Info.h"
00141 namespace Chiara2Info {
00142   const char* const TargetName="Chiara2";
00143   const ChiaraCapabilities capabilities;
00144 }
00145 
00146 #include "KHR2Info.h"
00147 namespace KHR2Info {
00148   const char* const TargetName="KHR2";
00149   const Capabilities capabilities(TargetName,NumReferenceFrames,outputNames,NumButtons,buttonNames,NumSensors,sensorNames,PIDJointOffset,NumPIDJoints,LEDOffset,NumLEDs,NumOutputs);
00150 }
00151 
00152 namespace CameraGeneric60 {
00153   const char CameraModelName[] = "Generic60";
00154 }
00155 
00156 namespace Camera75DOF {
00157   const char CameraModelName[] = "QuickCam-Pro-9000";
00158 }
00159 
00160 namespace CameraSTX {
00161   const char CameraModelName[] = "QuickCam-STX";
00162 }
00163 
00164 namespace CameraERS2xx {
00165   const char CameraModelName[] = "ERS-2xx-Camera";
00166 }
00167 
00168 // and now for RobotInfo's own stuff:
00169 namespace RobotInfo {
00170   
00171   const char* const detectModel() {
00172 #ifdef TGT_ERS2xx
00173 #  ifdef PLATFORM_APERIOS
00174     // might be running on either 210 or 220, check
00175     char robotDesignStr[orobotdesignNAME_MAX + 1];
00176     memset(robotDesignStr, 0, sizeof(robotDesignStr));
00177     if (OPENR::GetRobotDesign(robotDesignStr) != oSUCCESS) {
00178       std::cout << "OPENR::GetRobotDesign() failed." << std::endl;
00179       return TargetName;
00180     } else {
00181       if(strcmp(robotDesignStr,"ERS-210")==0)
00182         return ERS210Info::TargetName;
00183       else if(strcmp(robotDesignStr,"ERS-220")==0)
00184         return ERS220Info::TargetName;
00185       else {
00186         std::cerr << "ERROR: Unknown name '" << robotDesignStr << "' for target ERS2xx" << std::endl;
00187         return TargetName;
00188       }
00189     }
00190 #  else
00191 #    warning TGT_ERS2xx assuming ERS-210 for simulation on local platform
00192     return ERS210Info::TargetName;
00193 #  endif
00194     
00195 #else
00196     // target is directly the robot, return the target name
00197     return TargetName;
00198 #endif
00199   }
00200   
00201 #if defined(TGT_HAS_CAMERA) || defined(TGT_HAS_WEBCAM)
00202   const char* CameraName = CameraModelName;
00203   fmat::Matrix<3,3> CameraHomography = fmat::Matrix<3,3>::identity();
00204 #endif
00205   
00206 #ifndef PLATFORM_APERIOS
00207   const char* const RobotName = detectModel();
00208 #else // have to use a string because aperios is annoying like that
00209   const std::string RobotName = detectModel();
00210 #endif
00211   
00212   
00213   Capabilities::Capabilities(const char* robName, size_t numFrame, const char * const frameNames[], size_t numBut, const char * const butNames[], size_t numSen, const char * const senNames[], size_t pidOff, size_t numPID, size_t ledOff, size_t numLED, size_t numTotalOutputs)
00214     : name(robName),
00215     frames(frameNames,frameNames+numFrame), buttons(butNames,butNames+numBut), sensors(senNames,senNames+numSen),
00216     frameToIndex(), buttonToIndex(), sensorToIndex(),
00217     pidJointOffset(pidOff), numPIDJoints(numPID), ledOffset(ledOff), numLEDs(numLED), numOutputs(numTotalOutputs),
00218     fakeOutputs()
00219   {
00220     for(size_t i=0; i<frames.size(); ++i)
00221       frameToIndex[frames[i]]=i;
00222     for(size_t i=0; i<buttons.size(); ++i)
00223       buttonToIndex[buttons[i]]=i;
00224     for(size_t i=0; i<sensors.size(); ++i)
00225       sensorToIndex[sensors[i]]=i;
00226     
00227     std::map<std::string, const Capabilities*>::const_iterator it=getCaps().find(robName);
00228     if(it!=getCaps().end())
00229       std::cerr << "WARNING: RobotInfo '" << robName << "' capabilities has already been registered!  Name conflict?  Replacing previous..." << std::endl;
00230     getCaps()[robName]=this;
00231   }
00232 
00233   std::map<std::string, const Capabilities*>& Capabilities::getCaps() {
00234     static std::map<std::string, const Capabilities*> caps;
00235     return caps;
00236   }
00237   
00238 }

Tekkotsu v5.1CVS
Generated Fri Mar 16 05:26:51 2012 by Doxygen 1.6.3