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
00009
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
00169 namespace RobotInfo {
00170
00171 const char* const detectModel() {
00172 #ifdef TGT_ERS2xx
00173 # ifdef PLATFORM_APERIOS
00174
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
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 }