00001 // Copyright (C) 2003, 2004 Suresh Golconda, Nitin, Arun Pratap 00002 00003 #ifndef CAJUN_LASER_H 00004 #define CAJUN_LASER_H 00005 00006 #include "components.H" 00007 #include "queue_generator.H" 00008 #include "simulated_object.H" 00009 #include "data_logger.H" 00010 #include "quaternion.H" 00011 00012 namespace cajun 00013 { 00014 class scan_observer_t; 00015 class simulated_object_t; 00016 00017 class laser_sensor_t: public components_t 00018 { 00019 #define DELAY_SICK 0.02 00020 private: 00021 friend class scan_observer_t; 00022 int m_scan_cycle; 00023 00024 scan_data_t m_laser_scan; 00025 simulated_object_t *m_robot; 00026 scan_observer_t *m_scan_observer; 00027 00028 dSpaceID m_thisSpace; 00029 dGeomID m_thisGround; 00030 dGeomID m_laser_ray; 00031 00032 int m_laser_id; 00033 double m_laserRange; 00034 int m_rotation_degrees; 00035 double m_laser_beam_angles[4][SCAN_MAX_BEAMS]; 00036 public: 00037 //Functions 00038 laser_sensor_t (dSpaceID world_space, dGeomID ground, 00039 simulated_object_t *robot, timer_t *timer, 00040 char const *cfg_fname); 00041 void read_config_file (char const *); 00042 void set_laser_beam_angles (); 00043 double test_laser_collision (int cycle,int laser_angle); 00044 00045 // inherited functions 00046 void update_position (dBodyID carb); 00047 void command (int cmd, double value); 00048 void simulate_component (); 00049 virtual ~laser_sensor_t (); 00050 }; 00051 00053 class scan_observer_t : public timer_t::observer_t 00054 { 00055 public: 00056 scan_observer_t (laser_sensor_t *laser_ ,double interval_, int id_); 00057 bool timeout (double currTime); 00058 virtual ~scan_observer_t (); 00059 private: 00060 laser_sensor_t * m_laser; 00061 int m_laser_id; 00062 }; 00063 }; 00064 #endif 00065