00001
00002
00003
00004
00005
00006
00007
00008 #ifndef AIBOSENSOR_H
00009 #define AIBOSENSOR_H
00010
00011
00012
00013 #include <math.h>
00014
00015
00016 #include <OPENR/ODataFormats.h>
00017 #include <OPENR/OPENRAPI.h>
00018 #include <OPENR/OSyslog.h>
00019 #include <Types.h>
00020
00021 #include "defines.h"
00022
00024 static const int NUM_SENSORS = 31;
00025
00029 enum SENSOR{
00030 HEAD_TILT,
00031 HEAD_PAN,
00032 HEAD_ROLL,
00033 PSD,
00034 TACT_F,
00035 TACT_R,
00036 TIN_SW,
00037 LFLEG_J1,
00038 LFLEG_J2,
00039 LFLEG_J3,
00040 LFLEG_SW,
00041 LRLEG_J1,
00042 LRLEG_J3,
00043 LRLEG_J2,
00044 LRLEG_SW,
00045 RFLEG_J1,
00046 RFLEG_J2,
00047 RFLEG_J3,
00048 RFLEG_SW,
00049 RRLEG_J1,
00050 RRLEG_J2,
00051 RRLEG_J3,
00052 RRLEG_SW,
00053 THERMO,
00054 BACK_SW,
00055 TAIL_SW_L,
00056 TAIL_SW_M,
00057 TAIL_SW_R,
00058 ACC_X,
00059 ACC_Y,
00060 ACC_Z
00061 };
00062
00063 enum JOINT_SENSOR{
00064 J_HEAD_TILT = 0,
00065 J_HEAD_PAN = 1,
00066 J_HEAD_ROLL = 2,
00067 J_LFLEG_J1 = 7,
00068 J_LFLEG_J2 = 8,
00069 J_LFLEG_J3 = 9,
00070 J_LRLEG_J1 = 11,
00071 J_LRLEG_J2 = 12,
00072 J_LRLEG_J3 = 13,
00073 J_RFLEG_J1 = 15,
00074 J_RFLEG_J2 = 16,
00075 J_RFLEG_J3 = 17,
00076 J_RRLEG_J1 = 19,
00077 J_RRLEG_J2 = 20,
00078 J_RRLEG_J3 = 21
00079 };
00080
00081 enum SWITCH{
00082 S_TACT_F = 4,
00083 S_TACT_R = 5,
00084 S_TIN_SW = 6,
00085 S_LFLEG_SW = 10,
00086 S_LRLEG_SW = 14,
00087 S_RFLEG_SW = 18,
00088 S_RRLEG_SW = 22 ,
00089 S_BACK_SW = 24,
00090 S_TAIL_SW_L = 25,
00091 S_TAIL_SW_M = 26,
00092 S_TAIL_SW_R = 27
00093 };
00094
00095
00099 static const char* const SENSOR_ARRAY[] = {
00100
00101 "PRM:/r1/c1-Joint2:j1",
00102 "PRM:/r1/c1/c2-Joint2:j2",
00103 "PRM:/r1/c1/c2/c3-Joint2:j3",
00105
00106 "PRM:/r1/c1/c2/c3/p1-Sensor:p1",
00107 "PRM:/r1/c1/c2/c3/f1-Sensor:f1",
00108 "PRM:/r1/c1/c2/c3/f2-Sensor:f2",
00109 "PRM:/r1/c1/c2/c3/c4/s5-Sensor:s5",
00111
00112 "PRM:/r2/c1-Joint2:j1",
00113 "PRM:/r2/c1/c2-Joint2:j2",
00114 "PRM:/r2/c1/c2/c3-Joint2:j3",
00115 "PRM:/r2/c1/c2/c3/c4-Sensor:s4",
00117
00118 "PRM:/r3/c1-Joint2:j1",
00119 "PRM:/r3/c1/c2-Joint2:j2",
00120 "PRM:/r3/c1/c2/c3-Joint2:j3",
00121 "PRM:/r3/c1/c2/c3/c4-Sensor:s4",
00123
00124 "PRM:/r4/c1-Joint2:j1",
00125 "PRM:/r4/c1/c2-Joint2:j2",
00126 "PRM:/r4/c1/c2/c3-Joint2:j3",
00127 "PRM:/r4/c1/c2/c3/c4-Sensor:s4",
00129
00130 "PRM:/r5/c1-Joint2:j1",
00131 "PRM:/r5/c1/c2-Joint2:j2",
00132 "PRM:/r5/c1/c2/c3-Joint2:j3",
00133 "PRM:/r5/c1/c2/c3/c4-Sensor:s4",
00135
00136 "PRM:/r6/t1-Sensor:t1",
00137 "PRM:/r6/s1-Sensor:s1",
00139
00140 "PRM:/r6/s2-Sensor:s2",
00141 "PRM:/r6/s3-Sensor:s3",
00142 "PRM:/r6/s4-Sensor:s4",
00144
00145 "PRM:/a1-Sensor:a1",
00146 "PRM:/a2-Sensor:a2",
00147 "PRM:/a3-Sensor:a3"
00148 };
00149
00167 class AiboSensor{
00168
00169
00170 public:
00172 AiboSensor();
00173
00175 virtual ~AiboSensor(){};
00176
00180
00184 bool Initialized() const;
00185
00189 void InitSensorIndex(OSensorFrameVectorData* sensorVec);
00191
00192
00199 void PrintSensorValues(OSensorFrameVectorData* sensorVec);
00200
00206 void PrintSensorValue(OSensorFrameVectorData* sensorVec, SENSOR sens);
00207
00213 void PrintJointValue(OSensorFrameVectorData* sensorVec, JOINT_SENSOR joint);
00214
00215
00217 void PrintSeparator() const;
00219
00229 slongword GetSensorValue(OSensorFrameVectorData* sensorVec, SENSOR sens);
00230
00239 slongword GetMeanSensorValue(OSensorFrameVectorData* sensorVec, SENSOR index, int numFrames);
00240
00241
00246 double GetDistance(OSensorFrameVectorData* sensorVec);
00247
00253 double GetMeanDistance(OSensorFrameVectorData* sensorVec, int numFrames);
00254
00255
00261 double GetJointValue(OSensorFrameVectorData* sensorVec, JOINT_SENSOR joint);
00262
00269 double GetMeanJointValue(OSensorFrameVectorData* sensorVec, JOINT_SENSOR joint, int numFrames);
00270
00276 double GetRefJointValue(OSensorFrameVectorData* sensorVec, JOINT_SENSOR joint);
00277
00284 double GetMeanRefJointValue(OSensorFrameVectorData* sensorVec, JOINT_SENSOR joint, int numFrames);
00285
00286
00291 double GetTemp(OSensorFrameVectorData* sensorVec);
00292
00298 double GetMeanTemp(OSensorFrameVectorData* sensorVec, int numFrames);
00299
00300
00305 double GetXAccel(OSensorFrameVectorData* sensorVec);
00306
00312 double GetMeanXAccel(OSensorFrameVectorData* sensorVec, int numFrames);
00313
00314
00319 double GetYAccel(OSensorFrameVectorData* sensorVec);
00320
00326 double GetMeanYAccel(OSensorFrameVectorData* sensorVec, int numFrames);
00327
00328
00333 double GetZAccel(OSensorFrameVectorData* sensorVec);
00334
00335
00341 double GetMeanZAccel(OSensorFrameVectorData* sensorVec, int numFrames);
00342
00349 bool IsPressed(OSensorFrameVectorData* sensorVec, SWITCH sw);
00351
00352
00353
00358 OPrimitiveID GetPrimitiveID(SENSOR sensor) const;
00359
00360 protected:
00361
00365 bool SensorIndexInitialized;
00366
00370 int SensorIndex[NUM_SENSORS];
00371
00373 OPrimitiveID SensorID[NUM_SENSORS];
00374
00375 };
00376
00377
00378
00379
00380
00381 inline bool AiboSensor::Initialized() const
00382 {
00383 return SensorIndexInitialized;
00384 };
00385
00386
00387
00388
00389
00390 inline OPrimitiveID AiboSensor::GetPrimitiveID(SENSOR sensor) const
00391 {
00392 return SensorID[sensor];
00393 };
00394
00395
00396
00397
00398
00399 inline double AiboSensor::GetDistance(OSensorFrameVectorData* sensorVec)
00400 {
00401 return ((double)GetSensorValue(sensorVec, PSD)/1000.0);
00402 };
00403
00404
00405
00406
00407
00408 inline double AiboSensor::GetMeanDistance(OSensorFrameVectorData* sensorVec,
00409 int numFrames)
00410 {
00411 return ((double)GetMeanSensorValue(sensorVec, PSD, numFrames)/1000.0);
00412 };
00413
00414
00415
00416
00417
00418 inline double AiboSensor::GetJointValue(OSensorFrameVectorData* sensorVec,
00419 JOINT_SENSOR joint)
00420 {
00421 return ((double)GetSensorValue(sensorVec, SENSOR(joint))/MICRO);
00422 };
00423
00424
00425
00426
00427
00428 inline double AiboSensor::GetMeanJointValue(OSensorFrameVectorData* sensorVec,
00429 JOINT_SENSOR joint,
00430 int numFrames)
00431 {
00432 return ((double)GetMeanSensorValue(sensorVec, SENSOR(joint), numFrames)/MICRO);
00433 };
00434
00435
00436
00437
00438
00439 inline double AiboSensor::GetTemp(OSensorFrameVectorData* sensorVec)
00440 {
00441 return ((double)GetSensorValue(sensorVec, THERMO)/MICRO);
00442 };
00443
00444
00445
00446
00447
00448 inline double AiboSensor::GetMeanTemp(OSensorFrameVectorData* sensorVec,
00449 int numFrames)
00450 {
00451 return ((double)GetMeanSensorValue(sensorVec, THERMO, numFrames)/MICRO);
00452 };
00453
00454
00455
00456
00457
00458 inline double AiboSensor::GetXAccel(OSensorFrameVectorData* sensorVec)
00459 {
00460 return ((double)GetSensorValue(sensorVec, ACC_X)/MICRO);
00461 };
00462
00463
00464
00465
00466
00467 inline double AiboSensor::GetMeanXAccel(OSensorFrameVectorData* sensorVec,
00468 int numFrames)
00469 {
00470 return ((double)GetMeanSensorValue(sensorVec, ACC_X, numFrames)/MICRO);
00471 };
00472
00473
00474
00475
00476
00477 inline double AiboSensor::GetYAccel(OSensorFrameVectorData* sensorVec)
00478 {
00479 return ((double)GetSensorValue(sensorVec, ACC_Y)/MICRO);
00480 };
00481
00482
00483
00484
00485
00486 inline double AiboSensor::GetMeanYAccel(OSensorFrameVectorData* sensorVec,
00487 int numFrames)
00488 {
00489 return ((double)GetMeanSensorValue(sensorVec, ACC_Y, numFrames)/MICRO);
00490 };
00491
00492
00493
00494
00495
00496 inline double AiboSensor::GetZAccel(OSensorFrameVectorData* sensorVec)
00497 {
00498 return ((double)GetSensorValue(sensorVec, ACC_Z)/MICRO);
00499 };
00500
00501
00502
00503
00504 inline double AiboSensor::GetMeanZAccel(OSensorFrameVectorData* sensorVec,
00505 int numFrames)
00506 {
00507 return ((double)GetMeanSensorValue(sensorVec, ACC_Z, numFrames)/MICRO);
00508 };
00509
00510
00511
00512
00513
00514 inline bool AiboSensor::IsPressed(OSensorFrameVectorData* sensorVec,
00515 SWITCH sw)
00516 {
00517 return (GetSensorValue(sensorVec, SENSOR(sw)));
00518 };
00519
00520
00521 #endif //define AIBOSENSOR_H