From: Brian G. <br...@ge...> - 2008-09-01 22:00:48
|
On Jul 19, 2008, at 1:30 PM, Apakanati wrote: > > My robot control loop looks like this: > > def run(self): > # Swarm stuff > while self.end == 0: > if(time.time() > self.lastupdate + 1): > self.client.read() > self.lastupdate = time.time() > # do stuff with the robot > self.choose_a_behavior() > self.apply_a_behavior() > time.sleep(1.0) > > > What happens is that this code runs for about 5 minutes without > complaining > and then I get flooded with the following message on the client side: > > playerc error : queue overflow; discarding packets I believe that the problem lies with your use of client.read(). This call will only read one message. So each time you're reading one message (e.g., laser scan) and leaving the others (e.g., position2d) on the socket. Eventually, it will overflow. You probably want to do something like (code off the top of my head): while self.end == 0: if(time.time() > self.lastupdate + 1: self.client.read() while self.client.data_requested == 1: self.client.read() client.data_requested is set to 1 on the first call, when your client requests new data. It's set to 0 when the SYNC message that follows the round of requested data is received. brian. |