Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages | Examples

aibosensor.h

Go to the documentation of this file.
00001 // ***************************************************************************
00002 //                           aibonet.h
00003 //
00004 //    copyright            : (C) 2003 by tbaier
00005 //    email                : tbaier@informatik.uni-hamburg.de
00006 // ***************************************************************************
00007 
00008 #ifndef AIBOSENSOR_H
00009 #define AIBOSENSOR_H
00010 
00011 
00012 //std includes
00013 #include <math.h>
00014 
00015 //AIBO includes
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   //Head Joints
00101   "PRM:/r1/c1-Joint2:j1",             
00102   "PRM:/r1/c1/c2-Joint2:j2",          
00103   "PRM:/r1/c1/c2/c3-Joint2:j3",       
00105   // Head sensors
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   // LeftFrontLeg
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   // LeftRearLeg
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   // RightFrontLeg
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   // RightRearLeg
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   // Back sensors
00136   "PRM:/r6/t1-Sensor:t1",              
00137   "PRM:/r6/s1-Sensor:s1",              
00139   // Tail sensors
00140   "PRM:/r6/s2-Sensor:s2",              
00141   "PRM:/r6/s3-Sensor:s3",              
00142   "PRM:/r6/s4-Sensor:s4",              
00144   // Body sensors
00145   "PRM:/a1-Sensor:a1",                 
00146   "PRM:/a2-Sensor:a2",                 
00147   "PRM:/a3-Sensor:a3"                  
00148 };
00149 
00167 class AiboSensor{
00168   
00169   // METHODS
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


tams Tim Baier AiboLib v0.2.4
Generated Thu Jan 19 11:54:29 2006 by doxygen 1.4.3