Wiselib
wiselib.testing/external_interface/pc/roomba_ir_distance_sensors.h
Go to the documentation of this file.
00001 // vim: set noexpandtab ts=4 sw=4:
00002 
00003 #ifndef ROOMBA_IR_DISTANCE_SENSORS_H
00004 #define ROOMBA_IR_DISTANCE_SENSORS_H
00005 
00006 template<typename OsModel_P, typename Roomba_P>
00007 class RoombaIRDistanceSensors {
00008    public:
00009       typedef OsModel_P OsModel;
00010       typedef Roomba_P Roomba;
00011       typedef typename Roomba::Math_P Math;
00012       typedef typename OsModel::size_t size_t;
00013       typedef uint16_t value_t;
00014       
00015       typedef double angle_t;
00016       typedef double length_t;
00017       
00018       RoombaIRDistanceSensors(Roomba& roomba) : roomba_(&roomba) {
00019       }
00020       
00021       size_t number() { return 6; }
00022       
00023       inline angle_t angle(size_t n) {
00024          // TODO: Measure actual values
00025          static const double a[6] = {
00026             Math::PI_2, Math::PI_3, Math::PI_6,
00027             -Math::PI_6, -Math::PI_3, -Math::PI_2
00028          };
00029          return a[n];
00030       } // angle()
00031       
00032       size_t nearest(angle_t radians) {
00033          // TODO: Measure actual values
00034          double angle = Math::radians_to_degrees(radians);
00035          if(angle <= -75.0) { return 5; }
00036          else if(angle <= -45.0) { return 4; }
00037          else if(angle <= 0.0) { return 3; }
00038          else if(angle <= 45.0) { return 2; }
00039          else if(angle <= 75.0) { return 1; }
00040          else { return 0; }
00041       }
00042       
00043       inline length_t distance(size_t n) {
00044          return 50.0; // TODO: Replace with actual value
00045       }
00046       
00047       value_t operator()(size_t n) {
00048          typename Roomba::value_t data = (*roomba_)();
00049          switch(n) {
00050             case 0: return data.light_bump_left_signal;
00051             case 1: return data.light_bump_front_left_signal;
00052             case 2: return data.light_bump_center_left_signal;
00053             case 3: return data.light_bump_center_right_signal;
00054             case 4: return data.light_bump_front_right_signal;
00055             case 5: return data.light_bump_right_signal;
00056             default:
00057                assert(false);
00058          }
00059       } // operator()
00060       
00061       value_t max_value(size_t n) { return 4095; } // according to ROI spec
00062       
00063    private:
00064       Roomba* roomba_;
00065 };
00066 
00067 #endif // ROOMBA_IR_DISTANCE_SENSORS_H
00068 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines