Go to the documentation of this file.00001 #ifndef __BASE_MOTOR_DRIVER_H__
00002 #define __BASE_MOTOR_DRIVER_H__
00003 
00034 #include <fcntl.h>      
00035 #include <cmath>
00036 #include <cstring>
00037 #include <sys/sem.h>    
00038 #include <termios.h>    
00039 #include <ros/ros.h>
00040 #include "maggie_data.h"
00041 
00042 
00043 
00044 #define DEVICE_NAME1    "/dev/motor_base2"
00045 #define DEVICE_NAME2    "/dev/motor_base1"
00046 
00047 
00048 #define SEM_FILENAME    "/tmp/sem"
00049 key_t SEMFDID;
00050 
00051 
00052 #define BAUDRATE        B19200
00053 
00054 
00055 #define PERIOD          0.060
00056 
00057 
00058 #define SIZE_REPORT_GST 8
00059 
00060 typedef struct {
00061         double v;       
00062         double w;       
00063         double x;       
00064         double y;       
00065         double theta;   
00066 } cinematic_data;
00067 
00068 class BaseMotor {
00069     public:
00073         BaseMotor();
00074 
00078         ~BaseMotor();
00079 
00087         int init_communication();
00088 
00093         int end_communication();
00094 
00103         int enable_motors();
00104 
00113         int disable_motors();
00114 
00125         int enable_disable_motor(int *fd, const char *order);
00126 
00132         int read_data(cinematic_data *data);
00133 
00141         int read_data_variable_time_diff(cinematic_data *data, double time_since_last_call);
00142 
00149         int set_velocity(double v, double w);
00150 
00158         int set_displacement_velocity(double d, double v, double w);
00159 
00165         int move_ahead(double distance);
00166 
00172         int relative_turn(double theta);
00173 
00178         int reset_odometry();
00179 
00185         int update_odometry(double x, double y, double theta);
00186 
00192         cinematic_data * get_estimate_position();
00193 
00201         int set_estimate_position(double x, double y, double theta);
00202 
00203         std::string motor_order;
00204 
00205     private:
00206         
00207         int _fd_motor1, _fd_motor2;
00208 
00209         
00210         double _distance1, _distance2, _before_distance1, _before_distance2;
00211         cinematic_data _current_cinematic, _last_cinematic;
00212 
00213         
00214         int _corrected_data;
00215         cinematic_data _current_estimated, _before_estimated;
00216 };
00217 
00218 #endif