relvelo.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __FIREVISION_MODELS_VELOCITY_RELATIVE_H_
00026 #define __FIREVISION_MODELS_VELOCITY_RELATIVE_H_
00027
00028 #include <models/velocity/velocitymodel.h>
00029 #include <models/relative_position/relativepositionmodel.h>
00030
00031 #include <fvutils/base/types.h>
00032
00033
00034 #include <list>
00035
00036
00037 typedef struct {
00038 float x;
00039 float y;
00040 timeval t;
00041 } vel_postime_t;
00042
00043
00044 typedef struct {
00045 float vx;
00046 float vy;
00047 timeval t;
00048 } vel_veltime_t;
00049
00050 class VelocityFromRelative : public VelocityModel
00051 {
00052 public:
00053 VelocityFromRelative(RelativePositionModel* model, unsigned int max_history_length, unsigned int calc_interval);
00054 virtual ~VelocityFromRelative();
00055
00056 virtual const char * getName() const;
00057
00058 virtual void setRobotPosition(float x, float y, float ori, timeval t);
00059 virtual void setRobotVelocity(float vel_x, float vel_y, timeval t);
00060 virtual void setPanTilt(float pan, float tilt);
00061 virtual void setTime(timeval t);
00062 virtual void setTimeNow();
00063 virtual void getTime(long int *sec, long int *usec);
00064
00065 virtual void getVelocity(float *vel_x, float *vel_y);
00066
00067 virtual float getVelocityX();
00068 virtual float getVelocityY();
00069
00070 virtual void calc();
00071 virtual void reset();
00072
00073 virtual coordsys_type_t getCoordinateSystem();
00074
00075 private:
00076 RelativePositionModel *relative_pos_model;
00077
00078 float robot_rel_vel_x;
00079 float robot_rel_vel_y;
00080 timeval robot_rel_vel_t;
00081 timeval vel_last_time;
00082
00083 timeval now;
00084 std::list<vel_postime_t *> ball_history;
00085 std::list<vel_postime_t *>::iterator bh_it;
00086
00087 int diff_sec;
00088 int diff_usec;
00089
00090 float f_diff_sec;
00091
00092 unsigned int max_history_length;
00093 unsigned int calc_interval;
00094
00095 float cur_ball_x;
00096 float cur_ball_y;
00097 float cur_ball_dist;
00098
00099
00100 bool last_available;
00101 timeval last_time;
00102 float last_x;
00103 float last_y;
00104 float proj_x;
00105 float proj_y;
00106 float last_proj_error_x;
00107 float last_proj_error_y;
00108 float proj_time_diff_sec;
00109
00110 float diff_x;
00111 float diff_y;
00112
00113 float velocity_x;
00114 float velocity_y;
00115
00116 float avg_vx_sum;
00117 float avg_vy_sum;
00118 float avg_vx;
00119 float avg_vy;
00120 unsigned int avg_vx_num;
00121 unsigned int avg_vy_num;
00122 float rx;
00123 float ry;
00124 float age_factor;
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137 };
00138
00139 #endif