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 #ifndef _ER1_DRIVER_H_
00032 #define _ER1_DRIVER_H_
00033
00034 #define ER_DEFAULT_PORT "/dev/usb/tts/0"
00035 #define ER_DEFAULT_LEFT_MOTOR 0
00036 #define ER_DELAY_US 10000
00037
00038
00039
00040
00041 #define NOOP 0x00
00042 #define SETVEL 0x11
00043 #define UPDATE 0x1A
00044 #define GETCMDPOS 0x1D
00045 #define GETEVENTSTATUS 0x31
00046 #define RESETEVENTSTATUS 0x34
00047 #define RESET 0x39
00048 #define SETMOTORCMD 0x77
00049 #define SETLIMITSWITCHMODE 0x80
00050 #define GETVERSION 0x8F
00051 #define SETACCEL 0x90
00052 #define SETDECEL 0x91
00053 #define SETPROFILEMODE 0xA0
00054 #define SETSTOPMODE 0xD0
00055 #define READANALOG 0xEF
00056
00057 #define MOTOR_0 0x00
00058 #define MOTOR_1 0x01
00059
00060
00061 #define ER_DEFAULT_MOTOR_0_DIR -1
00062 #define ER_DEFAULT_MOTOR_1_DIR 1
00063 #define ER_DEFAULT_AXLE_LENGTH .38
00064
00065 #define ER_MAX_TICKS 3000
00066 #define ER_WHEEL_RADIUS .055
00067 #define ER_WHEEL_CIRC .345575197
00068 #define ER_WHEEL_STEP .45
00069 #define ER_M_PER_TICK .00000602836879
00070
00071
00072 #define ER_MAX_WHEELSPEED 500
00073 #define ER_MPS_PER_TICK 1
00074
00075 #define FULL_STOP 0
00076 #define STOP 1
00077
00078
00079 #include <player.h>
00080
00081 #include <driver.h>
00082 #include <drivertable.h>
00083
00084
00085 typedef struct
00086 {
00087 player_position_data_t position;
00088 } __attribute__ ((packed)) player_er1_data_t;
00089
00090
00091
00092 class ER : public Driver
00093 {
00094 private:
00095 player_er1_data_t er1_data;
00096
00097 player_device_id_t position_id;
00098 int position_subscriptions;
00099
00100 public:
00101 ER(ConfigFile* cf, int section);
00102
00103
00104 int SetVelocity(double lvel, double rvel);
00105 void Stop( int StopMode );
00106 virtual void Main();
00107 virtual int Setup();
00108 virtual int Shutdown();
00109 void HandleConfig(void);
00110 void GetCommand(void);
00111 void PutData(void);
00112 void HandlePositionCommand(player_position_cmd_t position_cmd);
00113
00114
00115 private:
00116
00117 int InitOdom();
00118 int InitRobot();
00119
00120
00121 int *_tc_num;
00122 int _fd;
00123 const char* _serial_port;
00124 bool _fd_blocking;
00125
00126
00127 int WriteBuf(unsigned char* s, size_t len);
00128 int ReadBuf(unsigned char* s, size_t len);
00129 int SendCommand(unsigned char * cmd, int cmd_len, unsigned char * ret_val, int ret_len);
00130 int ComputeTickDiff(int from, int to);
00131 int ChangeMotorState(int state);
00132 int BytesToInt32(unsigned char *ptr);
00133 float BytesToFloat(unsigned char *ptr);
00134 void UpdateOdom(int ltics, int rtics);
00135 void SpeedCommand( unsigned char address, double speed, int dir );
00136
00137 int GetOdom(int *ltics, int *rtics, int *lvel, int *rvel);
00138 int GetBatteryVoltage(int* voltage);
00139 int GetRangeSensor( int s, float * val );
00140 void MotorSpeed();
00141
00142
00143 double _axle_length;
00144 int _motor_0_dir;
00145 int _motor_1_dir;
00146
00147
00148 bool _debug;
00149 bool _need_to_set_speed;
00150 bool _odom_initialized;
00151 bool _stopped;
00152 int _last_ltics, _last_rtics;
00153 double _px, _py, _pa;
00154
00155 int send_command( unsigned char address, unsigned char c, int ret_num, unsigned char * ret );
00156 int send_command_2_arg( unsigned char address, unsigned char c, int arg, int ret_num, unsigned char * ret );
00157 int send_command_4_arg( unsigned char address, unsigned char c, int arg, int ret_num, unsigned char * ret );
00158
00159 };
00160 #endif