00001
00002
00003
00004 #ifndef CAJUN_ITERIS_SENSOR_H
00005 #define CAJUN_ITERIS_SENSOR_H
00006
00007 #include "components.H"
00008 #include "queue_generator.H"
00009 #include "simulated_object.H"
00010 #include "data_logger.H"
00011 #include "iteris_lane_data.H"
00012 #include "heading_data.H"
00013 #include "world_state.H"
00014
00015 namespace cajun
00016 {
00017 class simulated_object_t;
00018 class iteris_observer_t;
00019
00021 class iteris_sensor_t : public components_t
00022 {
00023 #define DELAY_ITERIS 0.05
00024
00025 friend class iteris_observer_t;
00026
00027 public:
00028 iteris_sensor_t (simulated_object_t *robot_, timer_t *timer_,
00029 rndf_t *rndf_, access_data_t *ad_, unsigned id_,
00030 char const *lane_dir_);
00031 virtual ~iteris_sensor_t ();
00032
00033
00034 void update_position (dBodyID carb_);
00035 void command (int cmd, double value_);
00036 void simulate_component ();
00037 private:
00038 bool within_2d_span (double x_, double y_, double heading_, double theta_);
00039 double dot_product (double *a, double *b, unsigned size);
00040
00041 world_state_t *m_ws;
00042 simulated_object_t *m_robot;
00043 iteris_observer_t *m_iteris_observer;
00044 iteris_lane_data_t m_iteris_data;
00045 heading_data_t m_heading_data;
00046
00047 vector<rndf_lane_data_t> m_lane_list;
00048 double m_orient_x, m_orient_y, m_orient_z;
00049 };
00050
00052 class iteris_observer_t : public timer_t::observer_t
00053 {
00054 public:
00055 iteris_observer_t (iteris_sensor_t *m_, double interval_, unsigned id_);
00056 virtual ~iteris_observer_t ();
00057 bool timeout (double currTime_);
00058 private:
00059 iteris_sensor_t *m_iteris;
00060 unsigned m_iteris_id;
00061 };
00062 };
00063 #endif