46 #include <replace/replace.h>
47 #include <libplayercore/playercore.h>
49 #include <reb_params.h>
52 #define REB_CONFIG_BUFFER_SIZE 1024
53 #define REB_BAUDRATE B38400
54 #define REB_DEFAULT_SERIAL_PORT "/dev/ttySA1"
56 #define REB_MOTOR_RIGHT 0
57 #define REB_MOTOR_LEFT 2
59 #define REB_BATTERY_CHANNEL 15
64 #define REB_FIXED_FACTOR 10000
66 #define REB_MAX_ACC 100
67 #define REB_MIN_ACC 10
69 #define REB_POS_MODE_STRAIGHT 0
70 #define REB_POS_MODE_ROTATION 1
72 #define REB_IR_START 1
76 #define REB_RESTART_COMMAND "restart\r\n"
77 #define REB_COMMAND_PROMPT ":\r\n"
80 #define ABS(x) ((x) < 0 ? -(x) : (x))
84 #define SGN(x) ((x) < 0 ? -1 : 1)
109 int ProcessMessage(ClientData * client,
player_msghdr * hdr, uint8_t * data, uint8_t * resp_data,
size_t * resp_len);
112 virtual int Subscribe(player_device_id_t
id);
113 virtual int Unsubscribe(player_device_id_t
id);
122 void SetOdometry(
int,
int,
short);
125 void SetIRState(
int);
127 void UpdateData(
void);
131 void UpdatePosData(player_position_data_t *);
135 void ConfigAD(
int,
int);
136 unsigned short ReadAD(
int);
137 void ReadAllIR(uint16_t * ir);
140 void SetSpeed(
int,
int );
143 void SetPos(
int,
int);
145 void SetPosCounter(
int,
int);
148 unsigned char ReadStatus(
int,
int *,
int *);
149 void ConfigPosPID(
int,
int,
int,
int);
150 void ConfigSpeedPID(
int,
int,
int,
int);
151 void ConfigSpeedProfile(
int,
int,
int);
155 int write_serial(
char *,
int);
156 int read_serial_until(
char *,
int,
char *,
int);
157 int write_command(
char *buf,
int len,
int maxsize);
159 player_device_id_t ir_id;
160 player_device_id_t position_id;
161 player_device_id_t power_id;
163 int ir_subscriptions;
164 int position_subscriptions;
169 struct timeval last_position;
170 bool refresh_last_position;
171 int last_lpos, last_rpos;
172 int last_x_f, last_y_f;
175 struct timeval last_pos_update;
176 struct timeval last_power_update;
177 struct timeval last_ir_update;
179 int pos_update_period;
182 short desired_heading;
185 struct timeval last_ir;
189 bool direct_velocity_control;
192 char reb_serial_port[MAX_FILENAME_SIZE];
194 struct pollfd write_pfd, read_pfd;
197 int ProcessCommand(player_position_cmd_t * poscmd);
198 short last_trans_command, last_rot_command;
199 int leftvel, rightvel;
200 int leftpos, rightpos;
virtual int Subscribe(player_devaddr_t addr)
Subscribe to this driver.
virtual int MainSetup()
Sets up the resources needed by the driver thread.
Definition: reb.cc:294
Generic message header.
Definition: player.h:160
#define PLAYER_IR_REQ_POSE
Request/reply subtype: get pose.
Definition: player_interfaces.h:2102
const char * ReadString(int section, const char *name, const char *value)
Read a string value.
#define PLAYER_POSITION2D_REQ_MOTOR_POWER
Request/reply: Motor power.
Definition: player_interfaces.h:496
virtual void Main()
Main method for driver thread.
Definition: reb.cc:408
Request/reply: get pose.
Definition: player_interfaces.h:2130
#define PLAYER_POSITION2D_REQ_POSITION_PID
Request/reply: Set position PID parameters.
Definition: player_interfaces.h:556
void ProcessMessages(void)
Process pending messages.
player_pose3d_t * poses
the pose of each IR detector on this robot
Definition: player_interfaces.h:2135
#define PLAYER_MSGTYPE_DATA
A data message.
Definition: player.h:94
struct player_ir_pose player_ir_pose_t
Request/reply: get pose.
#define PLAYER_MSGTYPE_RESP_ACK
A positive response message.
Definition: player.h:111
virtual void MainQuit()
Cleanup method for driver thread (called when main exits)
Definition: reb.cc:347
#define PLAYER_MSGTYPE_REQ
A request message.
Definition: player.h:105
#define PLAYER_POSITION2D_REQ_SPEED_PROF
Request/reply: Set linear speed profile parameters.
Definition: player_interfaces.h:562
Data: voltage (PLAYER_POWER_DATA_STATE)
Definition: player_interfaces.h:291
Class for loading configuration file information.
Definition: configfile.h:195
#define PLAYER_POSITION2D_REQ_RESET_ODOM
Request/reply: Reset odometry.
Definition: player_interfaces.h:541
#define PLAYER_POSITION2D_REQ_POSITION_MODE
Request/reply: Change control mode.
Definition: player_interfaces.h:529
Base class for drivers which oeprate with a thread.
Definition: driver.h:551
uint8_t state
FALSE for power off, TRUE for power on.
Definition: player_interfaces.h:2145
Data: ranges (PLAYER_IR_DATA_RANGES)
Definition: player_interfaces.h:2115
uint32_t size
Size in bytes of the payload to follow.
Definition: player.h:173
#define PLAYER_POSITION2D_REQ_VELOCITY_MODE
Request/reply: Change velocity control.
Definition: player_interfaces.h:522
#define PLAYER_MSGTYPE_CMD
A command message.
Definition: player.h:98
#define PLAYER_POSITION2D_REQ_SPEED_PID
Request/reply: Set velocity PID parameters.
Definition: player_interfaces.h:548
Base class for all drivers.
Definition: driver.h:107
#define PLAYER_IR_REQ_POWER
Request/reply subtype: set power.
Definition: player_interfaces.h:2105
virtual int Unsubscribe(player_devaddr_t addr)
Unsubscribe from this driver.
Request/reply: set power.
Definition: player_interfaces.h:2142
float * voltages
voltages [V]
Definition: player_interfaces.h:2120
#define PLAYER_POSITION2D_REQ_SET_ODOM
Request/reply: Set odometry.
Definition: player_interfaces.h:535