|
Fast Research Interface Library
Manual and Documentation
|
00001 // ---------------------- Doxygen info ---------------------- 00051 // ---------------------------------------------------------- 00052 // For a convenient reading of this file's source code, 00053 // please use a tab width of four characters. 00054 // ---------------------------------------------------------- 00055 00056 00057 #include <FastResearchInterface.h> 00058 #include <string.h> 00059 #include <OSAbstraction.h> 00060 00061 #define SINGLE_LINE "-----------------------------------------------------------------------------" 00062 #define DOUBLE_LINE "=============================================================================" 00063 00064 00065 #ifndef PI 00066 #define PI ((float)3.1415926535897932384626433832795) 00067 #endif 00068 00069 00070 // **************************************************************** 00071 // GetCompleteRobotStateAndInformation() 00072 // 00073 const char* FastResearchInterface::GetCompleteRobotStateAndInformation(void) 00074 { 00075 bool BoolArray[FRI_USER_SIZE]; 00076 00077 char StringPart[512]; 00078 00079 unsigned int CharCounter = 0 00080 , i = 0; 00081 00082 int IntArray[FRI_USER_SIZE]; 00083 00084 float FloatArray[FRI_USER_SIZE] 00085 , FloatMatrix[LBR_MNJ][FRI_CART_VEC]; 00086 00087 memset((void*)StringPart , 0x0 , 512 * sizeof(char) ); 00088 memset((void*)FloatArray , 0x0 , FRI_USER_SIZE * sizeof(float) ); 00089 memset((void*)IntArray , 0x0 , FRI_USER_SIZE * sizeof(float) ); 00090 memset((void*)BoolArray , 0x0 , FRI_USER_SIZE * sizeof(bool) ); 00091 00092 for (i = 0; i < LBR_MNJ; i++) 00093 { 00094 memset((void*)(FloatMatrix[i]) , 0x0 , FRI_CART_VEC * sizeof(float) ); 00095 } 00096 00097 // --------------------------------------------------------------------------------------------------- 00098 sprintf(StringPart, DOUBLE_LINE); 00099 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00100 CharCounter += strlen(StringPart) + 1; 00101 // --------------------------------------------------------------------------------------------------- 00102 sprintf(StringPart, "Overview about the KUKA Light-Weight Robot IV and the Fast Research Interface"); 00103 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00104 CharCounter += strlen(StringPart) + 1; 00105 // --------------------------------------------------------------------------------------------------- 00106 sprintf(StringPart, DOUBLE_LINE); 00107 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00108 CharCounter += strlen(StringPart) + 1; 00109 // --------------------------------------------------------------------------------------------------- 00110 sprintf(StringPart, "UDP Communication Data"); 00111 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00112 CharCounter += strlen(StringPart) + 1; 00113 // --------------------------------------------------------------------------------------------------- 00114 sprintf(StringPart, SINGLE_LINE); 00115 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00116 CharCounter += strlen(StringPart) + 1; 00117 // --------------------------------------------------------------------------------------------------- 00118 sprintf(StringPart, "Cycle time: %f seconds", this->GetFRICycleTime()); 00119 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00120 CharCounter += strlen(StringPart) + 1; 00121 // --------------------------------------------------------------------------------------------------- 00122 switch (this->GetCommunicationTimingQuality()) 00123 { 00124 case FRI_QUALITY_UNACCEPTABLE: 00125 sprintf(StringPart, "UDP communication quality: Unacceptable"); 00126 break; 00127 case FRI_QUALITY_BAD: 00128 sprintf(StringPart, "UDP communication quality: Bad"); 00129 break; 00130 case FRI_QUALITY_OK: 00131 sprintf(StringPart, "UDP communication quality: Ok"); 00132 break; 00133 case FRI_QUALITY_PERFECT: 00134 sprintf(StringPart, "UDP communication quality: Perfect"); 00135 break; 00136 default: 00137 sprintf(StringPart, "UDP communication quality: UNKNOWN"); 00138 break; 00139 } 00140 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00141 CharCounter += strlen(StringPart) + 1; 00142 // --------------------------------------------------------------------------------------------------- 00143 sprintf(StringPart, "UDP answer rate: %f percent", 100.0 * this->GetUDPAnswerRate()); 00144 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00145 CharCounter += strlen(StringPart) + 1; 00146 // --------------------------------------------------------------------------------------------------- 00147 sprintf(StringPart, "UDP latency: %f seconds", this->GetUDPLatencyInSeconds()); 00148 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00149 CharCounter += strlen(StringPart) + 1; 00150 // --------------------------------------------------------------------------------------------------- 00151 sprintf(StringPart, "UDP jitter: %f seconds", this->GetUDPJitterInSeconds()); 00152 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00153 CharCounter += strlen(StringPart) + 1; 00154 // --------------------------------------------------------------------------------------------------- 00155 sprintf(StringPart, "UDP package loss rate: %f percent", 100.0 * this->GetUDPPackageLossRate()); 00156 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00157 CharCounter += strlen(StringPart) + 1; 00158 // --------------------------------------------------------------------------------------------------- 00159 sprintf(StringPart, "Absolute number of missed packages: %d FRI data telegram packages", this->GetNumberOfMissedUDPPackages()); 00160 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00161 CharCounter += strlen(StringPart) + 1; 00162 // --------------------------------------------------------------------------------------------------- 00163 sprintf(StringPart, "Sequence counter: %d", this->GetValueOfKRCSequenceCounter()); 00164 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00165 CharCounter += strlen(StringPart) + 1; 00166 // --------------------------------------------------------------------------------------------------- 00167 sprintf(StringPart, SINGLE_LINE); 00168 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00169 CharCounter += strlen(StringPart) + 1; 00170 // --------------------------------------------------------------------------------------------------- 00171 sprintf(StringPart, "KRL Data"); 00172 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00173 CharCounter += strlen(StringPart) + 1; 00174 // --------------------------------------------------------------------------------------------------- 00175 sprintf(StringPart, SINGLE_LINE); 00176 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00177 CharCounter += strlen(StringPart) + 1; 00178 // --------------------------------------------------------------------------------------------------- 00179 this->GetKRLBoolValues(BoolArray); 00180 sprintf(StringPart, "Bool array: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" 00181 , BoolArray[ 0] 00182 , BoolArray[ 1] 00183 , BoolArray[ 2] 00184 , BoolArray[ 3] 00185 , BoolArray[ 4] 00186 , BoolArray[ 5] 00187 , BoolArray[ 6] 00188 , BoolArray[ 7] 00189 , BoolArray[ 8] 00190 , BoolArray[ 9] 00191 , BoolArray[10] 00192 , BoolArray[11] 00193 , BoolArray[12] 00194 , BoolArray[13] 00195 , BoolArray[14] 00196 , BoolArray[15]); 00197 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00198 CharCounter += strlen(StringPart) + 1; 00199 // --------------------------------------------------------------------------------------------------- 00200 this->GetKRLIntValues(IntArray); 00201 sprintf(StringPart, "Int array: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" 00202 , IntArray[ 0] 00203 , IntArray[ 1] 00204 , IntArray[ 2] 00205 , IntArray[ 3] 00206 , IntArray[ 4] 00207 , IntArray[ 5] 00208 , IntArray[ 6] 00209 , IntArray[ 7] 00210 , IntArray[ 8] 00211 , IntArray[ 9] 00212 , IntArray[10] 00213 , IntArray[11] 00214 , IntArray[12] 00215 , IntArray[13] 00216 , IntArray[14] 00217 , IntArray[15]); 00218 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00219 CharCounter += strlen(StringPart) + 1; 00220 // --------------------------------------------------------------------------------------------------- 00221 this->GetKRLFloatValues(FloatArray); 00222 sprintf(StringPart, "Float array: %4.f %4.f %4.f %4.f %4.f %f %4.f %4.f %4.f %4.f %4.f %4.f %4.f %4.f %4.f %4.f" 00223 , FloatArray[ 0] 00224 , FloatArray[ 1] 00225 , FloatArray[ 2] 00226 , FloatArray[ 3] 00227 , FloatArray[ 4] 00228 , FloatArray[ 5] 00229 , FloatArray[ 6] 00230 , FloatArray[ 7] 00231 , FloatArray[ 8] 00232 , FloatArray[ 9] 00233 , FloatArray[10] 00234 , FloatArray[11] 00235 , FloatArray[12] 00236 , FloatArray[13] 00237 , FloatArray[14] 00238 , FloatArray[15]); 00239 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00240 CharCounter += strlen(StringPart) + 1; 00241 // --------------------------------------------------------------------------------------------------- 00242 sprintf(StringPart, SINGLE_LINE); 00243 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00244 CharCounter += strlen(StringPart) + 1; 00245 // --------------------------------------------------------------------------------------------------- 00246 sprintf(StringPart, "Robot Control Data"); 00247 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00248 CharCounter += strlen(StringPart) + 1; 00249 // --------------------------------------------------------------------------------------------------- 00250 sprintf(StringPart, SINGLE_LINE); 00251 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00252 CharCounter += strlen(StringPart) + 1; 00253 // --------------------------------------------------------------------------------------------------- 00254 this->GetMeasuredJointPositions(FloatArray); 00255 sprintf(StringPart, "Measured joint positions [deg]: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f" 00256 , FloatArray[0] * 180.0 / PI 00257 , FloatArray[1] * 180.0 / PI 00258 , FloatArray[2] * 180.0 / PI 00259 , FloatArray[3] * 180.0 / PI 00260 , FloatArray[4] * 180.0 / PI 00261 , FloatArray[5] * 180.0 / PI 00262 , FloatArray[6] * 180.0 / PI); 00263 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00264 CharCounter += strlen(StringPart) + 1; 00265 // --------------------------------------------------------------------------------------------------- 00266 this->GetCommandedJointPositions(FloatArray); 00267 sprintf(StringPart, "Commanded joint positions [deg]: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f" 00268 , FloatArray[0] * 180.0 / PI 00269 , FloatArray[1] * 180.0 / PI 00270 , FloatArray[2] * 180.0 / PI 00271 , FloatArray[3] * 180.0 / PI 00272 , FloatArray[4] * 180.0 / PI 00273 , FloatArray[5] * 180.0 / PI 00274 , FloatArray[6] * 180.0 / PI); 00275 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00276 CharCounter += strlen(StringPart) + 1; 00277 // --------------------------------------------------------------------------------------------------- 00278 this->GetCommandedJointPositionOffsets(FloatArray); 00279 sprintf(StringPart, "Commanded joint position offsets [deg]: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f" 00280 , FloatArray[0] * 180.0 / PI 00281 , FloatArray[1] * 180.0 / PI 00282 , FloatArray[2] * 180.0 / PI 00283 , FloatArray[3] * 180.0 / PI 00284 , FloatArray[4] * 180.0 / PI 00285 , FloatArray[5] * 180.0 / PI 00286 , FloatArray[6] * 180.0 / PI); 00287 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00288 CharCounter += strlen(StringPart) + 1; 00289 // --------------------------------------------------------------------------------------------------- 00290 this->GetMeasuredJointTorques(FloatArray); 00291 sprintf(StringPart, "Measured joint torques [Nm]: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f" 00292 , FloatArray[0] 00293 , FloatArray[1] 00294 , FloatArray[2] 00295 , FloatArray[3] 00296 , FloatArray[4] 00297 , FloatArray[5] 00298 , FloatArray[6]); 00299 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00300 CharCounter += strlen(StringPart) + 1; 00301 // --------------------------------------------------------------------------------------------------- 00302 this->GetEstimatedExternalJointTorques(FloatArray); 00303 sprintf(StringPart, "Estimated external joint torques [Nm]: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f" 00304 , FloatArray[0] 00305 , FloatArray[1] 00306 , FloatArray[2] 00307 , FloatArray[3] 00308 , FloatArray[4] 00309 , FloatArray[5] 00310 , FloatArray[6]); 00311 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00312 CharCounter += strlen(StringPart) + 1; 00313 // --------------------------------------------------------------------------------------------------- 00314 this->GetMeasuredCartPose(FloatArray); 00315 sprintf(StringPart, "Measured Cart. pose frame: ( %12.3f %12.3f %12.3f %12.3f )" 00316 , FloatArray[ 0] 00317 , FloatArray[ 1] 00318 , FloatArray[ 2] 00319 , FloatArray[ 3]); 00320 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00321 CharCounter += strlen(StringPart) + 1; 00322 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00323 , FloatArray[ 4] 00324 , FloatArray[ 5] 00325 , FloatArray[ 6] 00326 , FloatArray[ 7]); 00327 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00328 CharCounter += strlen(StringPart) + 1; 00329 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00330 , FloatArray[ 8] 00331 , FloatArray[ 9] 00332 , FloatArray[10] 00333 , FloatArray[11]); 00334 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00335 CharCounter += strlen(StringPart) + 1; 00336 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00337 , 0.0 00338 , 0.0 00339 , 0.0 00340 , 1.0); 00341 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00342 CharCounter += strlen(StringPart) + 1; 00343 // --------------------------------------------------------------------------------------------------- 00344 this->GetCommandedCartPose(FloatArray); 00345 sprintf(StringPart, "Commanded Cart. pose frame: ( %12.3f %12.3f %12.3f %12.3f )" 00346 , FloatArray[ 0] 00347 , FloatArray[ 1] 00348 , FloatArray[ 2] 00349 , FloatArray[ 3]); 00350 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00351 CharCounter += strlen(StringPart) + 1; 00352 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00353 , FloatArray[ 4] 00354 , FloatArray[ 5] 00355 , FloatArray[ 6] 00356 , FloatArray[ 7]); 00357 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00358 CharCounter += strlen(StringPart) + 1; 00359 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00360 , FloatArray[ 8] 00361 , FloatArray[ 9] 00362 , FloatArray[10] 00363 , FloatArray[11]); 00364 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00365 CharCounter += strlen(StringPart) + 1; 00366 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00367 , 0.0 00368 , 0.0 00369 , 0.0 00370 , 1.0); 00371 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00372 CharCounter += strlen(StringPart) + 1; 00373 // --------------------------------------------------------------------------------------------------- 00374 this->GetCommandedCartPoseOffsets(FloatArray); 00375 sprintf(StringPart, "Commanded Cart. pose offset frame: ( %12.3f %12.3f %12.3f %12.3f )" 00376 , FloatArray[ 0] 00377 , FloatArray[ 1] 00378 , FloatArray[ 2] 00379 , FloatArray[ 3]); 00380 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00381 CharCounter += strlen(StringPart) + 1; 00382 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00383 , FloatArray[ 4] 00384 , FloatArray[ 5] 00385 , FloatArray[ 6] 00386 , FloatArray[ 7]); 00387 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00388 CharCounter += strlen(StringPart) + 1; 00389 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00390 , FloatArray[ 8] 00391 , FloatArray[ 9] 00392 , FloatArray[10] 00393 , FloatArray[11]); 00394 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00395 CharCounter += strlen(StringPart) + 1; 00396 sprintf(StringPart, " ( %12.3f %12.3f %12.3f %12.3f )" 00397 , 0.0 00398 , 0.0 00399 , 0.0 00400 , 1.0); 00401 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00402 CharCounter += strlen(StringPart) + 1; 00403 // --------------------------------------------------------------------------------------------------- 00404 this->GetEstimatedExternalCartForcesAndTorques(FloatArray); 00405 sprintf(StringPart, "Estimated external Cart. forces/torques: %8.3f N %8.3f N %8.3f N %8.3f Nm %8.3f Nm %8.3f Nm" 00406 , FloatArray[0] 00407 , FloatArray[1] 00408 , FloatArray[2] 00409 , FloatArray[3] 00410 , FloatArray[4] 00411 , FloatArray[5]); 00412 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00413 CharCounter += strlen(StringPart) + 1; 00414 // --------------------------------------------------------------------------------------------------- 00415 sprintf(StringPart, SINGLE_LINE); 00416 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00417 CharCounter += strlen(StringPart) + 1; 00418 // --------------------------------------------------------------------------------------------------- 00419 sprintf(StringPart, "Robot Status Data"); 00420 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00421 CharCounter += strlen(StringPart) + 1; 00422 // --------------------------------------------------------------------------------------------------- 00423 sprintf(StringPart, SINGLE_LINE); 00424 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00425 CharCounter += strlen(StringPart) + 1; 00426 // --------------------------------------------------------------------------------------------------- 00427 switch (this->GetFRIMode()) 00428 { 00429 case FRI_STATE_OFF: 00430 sprintf(StringPart, "FRI mode: The KRC has NOT opened the FRI yet (OFF)."); 00431 break; 00432 case FRI_STATE_MON: 00433 sprintf(StringPart, "FRI mode: MONITOR Mode"); 00434 break; 00435 case FRI_STATE_CMD: 00436 sprintf(StringPart, "FRI mode: COMMAND Mode"); 00437 break; 00438 default: 00439 sprintf(StringPart, "UDP communication quality: UNKNOWN"); 00440 break; 00441 } 00442 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00443 CharCounter += strlen(StringPart) + 1; 00444 // --------------------------------------------------------------------------------------------------- 00445 if (this->IsRobotArmPowerOn()) 00446 { 00447 sprintf(StringPart, "Robot arm power: ON"); 00448 } 00449 else 00450 { 00451 sprintf(StringPart, "Robot arm power: OFF"); 00452 } 00453 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00454 CharCounter += strlen(StringPart) + 1; 00455 // --------------------------------------------------------------------------------------------------- 00456 if (this->DoesAnyDriveSignalAnError()) 00457 { 00458 sprintf(StringPart, "Drive fault: YES"); 00459 } 00460 else 00461 { 00462 sprintf(StringPart, "Drive fault: NO"); 00463 } 00464 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00465 CharCounter += strlen(StringPart) + 1; 00466 // --------------------------------------------------------------------------------------------------- 00467 if (this->DoesAnyDriveSignalAWarning()) 00468 { 00469 sprintf(StringPart, "Drive warning: YES"); 00470 } 00471 else 00472 { 00473 sprintf(StringPart, "Drive warning: NO"); 00474 } 00475 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00476 CharCounter += strlen(StringPart) + 1; 00477 // --------------------------------------------------------------------------------------------------- 00478 this->GetDriveTemperatures(FloatArray); 00479 sprintf(StringPart, "Drive temperatures: %8.1f %8.1f %8.1f %8.1f %8.1f %8.1f %8.1f" 00480 , FloatArray[0] 00481 , FloatArray[1] 00482 , FloatArray[2] 00483 , FloatArray[3] 00484 , FloatArray[4] 00485 , FloatArray[5] 00486 , FloatArray[6]); 00487 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00488 CharCounter += strlen(StringPart) + 1; 00489 // --------------------------------------------------------------------------------------------------- 00490 switch (this->GetCurrentControlScheme()) 00491 { 00492 case FastResearchInterface::JOINT_POSITION_CONTROL: 00493 sprintf(StringPart, "Control strategy: Joint position control"); 00494 break; 00495 case FastResearchInterface::CART_IMPEDANCE_CONTROL: 00496 sprintf(StringPart, "Control strategy: Cartesian impedance control"); 00497 break; 00498 case FastResearchInterface::JOINT_IMPEDANCE_CONTROL: 00499 sprintf(StringPart, "Control strategy: Joint impedance control"); 00500 break; 00501 default: 00502 sprintf(StringPart, "Control strategy: UNKNOWN!"); 00503 break; 00504 } 00505 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00506 CharCounter += strlen(StringPart) + 1; 00507 // --------------------------------------------------------------------------------------------------- 00508 sprintf(StringPart, DOUBLE_LINE); 00509 sprintf(&(this->RobotStateString[CharCounter]), "%s\n", StringPart); 00510 CharCounter += strlen(StringPart) + 1; 00511 // --------------------------------------------------------------------------------------------------- 00512 00513 return((const char*)this->RobotStateString); 00514 }