khepera.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
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef _KHEPERADEVICE_H
00035 #define _KHEPERADEVICE_H
00036
00037 #include <pthread.h>
00038 #include <sys/time.h>
00039 #include <errno.h>
00040
00041 #include <libplayercore/playercore.h>
00042
00043 #include <khepera_serial.h>
00044
00045 #define KHEPERA_CONFIG_BUFFER_SIZE 1024
00046 #define KHEPERA_BAUDRATE B38400
00047 #define KHEPERA_DEFAULT_SERIAL_PORT "/dev/ttyUSB0"
00048 #define KHEPERA_DEFAULT_SCALE 10
00049 #define KHEPERA_DEFAULT_ENCODER_RES (1.0/12.0)
00050 #define KHEPERA_DEFAULT_IR_CALIB_A (64.158)
00051 #define KHEPERA_DEFAULT_IR_CALIB_B (-0.1238)
00052
00053 #define KHEPERA_MOTOR_LEFT 0
00054 #define KHEPERA_MOTOR_RIGHT 1
00055
00056 #define KHEPERA_FIXED_FACTOR 10000
00057
00058 #define CRLF "\r\n"
00059 #define KHEPERA_COMMAND_PROMPT "\r\n"
00060
00061 #ifndef ABS
00062 #define ABS(x) ((x) < 0 ? -(x) : (x))
00063 #endif
00064
00065 #ifndef SGN
00066 #define SGN(x) ((x) < 0 ? -1 : 1)
00067 #endif
00068
00069 typedef struct player_khepera_geom
00070 {
00071 char * PortName;
00072 double scale;
00073 player_ir_pose_t ir;
00074 double * ir_calib_a;
00075 double * ir_calib_b;
00076 player_position2d_geom_t position;
00077 double encoder_res;
00078 } __attribute__ ((packed)) player_khepera_geom_t;
00079
00080
00081 class Khepera : public Driver
00082 {
00083 public:
00084
00085 Khepera(ConfigFile *cf, int section);
00086 ~Khepera();
00087
00088
00089 virtual void Main();
00090
00091 virtual int Subscribe(player_devaddr_t addr);
00092 virtual int Unsubscribe(player_devaddr_t addr);
00093
00094 virtual int Setup();
00095 virtual int Shutdown();
00096
00097 int ResetOdometry();
00098
00099
00100 void SetIRState(int);
00101
00102 void UpdateData(void);
00103
00104 void UpdateIRData(player_ir_data_t *);
00105 void UpdatePosData(player_position2d_data_t *);
00106
00107
00108
00109
00110 unsigned short ReadAD(int);
00111 int ReadAllIR(player_ir_data_t *);
00112
00113
00114 int SetSpeed(int, int);
00115 int ReadSpeed(int*, int*);
00116
00117 int SetPos(int, int);
00118
00119 int SetPosCounter(int, int);
00120 int ReadPos(int *, int*);
00121
00122
00123
00124
00125 int ProcessMessage(QueuePointer & resp_queue, player_msghdr * hdr, void * data);
00126
00127 private:
00128 player_devaddr_t ir_addr;
00129 player_devaddr_t position_addr;
00130 int position_subscriptions;
00131 int ir_subscriptions;
00132
00133 KheperaSerial * Serial;
00134
00135 player_khepera_geom_t* geometry;
00136
00137 int param_index;
00138 int khepera_fd;
00139
00140 struct timeval last_position;
00141 bool refresh_last_position;
00142 int last_lpos, last_rpos;
00143 double x,y,yaw;
00144 int last_x_f, last_y_f;
00145 double last_theta;
00146
00147 struct timeval last_pos_update;
00148 struct timeval last_ir_update;
00149
00150 int pos_update_period;
00151
00152 short desired_heading;
00153
00154 int ir_sequence;
00155 struct timeval last_ir;
00156
00157 bool motors_enabled;
00158 bool velocity_mode;
00159 bool direct_velocity_control;
00160
00161
00162 char khepera_serial_port[MAX_FILENAME_SIZE];
00163
00164
00165
00166
00167 };
00168
00169
00170 #endif
Last updated 12 September 2005 21:38:45
|