A fellow student and I are doing research into various AI techniques for controlling robots and are using Player/Stage.
First, Player/Stage is amazing software, and you guys have done a wonderful job.
Part of this while project is that we are developing a framework / API for easily writing bot AI and controlling the timing of actions.
We are testing a few AI techniques with this: Standard state machine, swarm bots and genetic algorithms.
We have run into a few problems and were wondering if we could get any insight.
When we use grippers to grab another bot, a few different things can happen, none of which are what we expected.
a - If the bot that is grabbed is not active, it loses all devices attached to it. (This is of course using Stage). A bot is able to connect to it later, but when it tries to read from the sensors the whole simulation crashes.
b - If the bot that is grabbed is active, once it is grabbed the simulation crashes upon calling read() in Player.
We are not sure if we are doing something wrong here. Is this just a 'not possible' thing at this point?
One area we were looking to use this in is part of our simulation, which is a game of Jail Break. We have 'guard' and 'prisoner' bots. The game is for the prisoners to get the correct keys to open doors and get to the 'goal' area. Keys are just objects, doors are actually bots using color blob finders and omni-directional movement.
The two ways it was going to be used was for the 'guard' bots to grab the 'prisoner' bots, and the other was just a novel game type we wanted to try where we have both the swarm bots and the state machine bots in the same area. The 'key' for the swarm bots is a normal key, whereas the key for the state machine bot is one of the swarm bots. The bot would have to catch one to get out. Childish, but fun.
I have not personally worked on this yet, but my friend tells me that when he tries to adjust the PTZ for, say, the blob finder, it causes the FOV to go to zero, or what appears to be zero. Was wondering if there were known issues with that or a particular way for doing that.
3) Disconnects and the Player client crashing.
When I close Stage, all connected player clients crash with a socket read error [Success] ( A broken pipe error). This is a problem. The destructors aren't getting called. I tried using a try / catch block to see if there was an exception I could catch, but there doesn't seem to be one. This is a bit of a problem. However, I am assuming I am just missing something here. I THINK the player client is crashing on the read() command, so is there something I can check, variable or method, before calling read to ensure that the socket is still open? Does Stage send out any kind of message before it closes that would indicate to the bot that it needs to close as well?
Thank you very much.
After I finish up the API, I would love to send it to you guys, see what you think. /shrug.