Hi all,
I'm developing a swarm robotics application that will require a group of SRV-1's to operate continuously for a long period. I was very surprised and disappointed to find that the behavior of a fully charged SRV-1 running around on a table top changes dramatically after about 2 minutes. The program (written in picoC) processes the camera image and will decide to move straight, make a random turn, or back up. The actual motor command used is motors(50, 50) where the sign of the 50 will depend on the robot's current state. The motor command is followed by:
delay(50);
motors(0, 0);
delay(50);
In the following video you can see that the behavior changes abruptly after about 2 minutes (this roughly coincides with when the robot gets hung up on a block, but I am sure this is unrelated).
http://www.cs.mun.ca/av/pub/SRV1First.mpeg I also did a test with the robot sitting on a block with its treads in the air and executing motors(50,50) followed by the delay, motors, delay sequence shown above. After about 18 minutes of continuous operation there is an abrupt transition and the motors slow to a crawl. The "battery()" function returns a value of 1 throughout this test. Again the robot was fully charged before the test began.
I know that one potential solution may be the addition of some form of feedback (from wheel encoders or the NAV board). However, I would first like to understand what is going on here. If anyone has any tips or suggestions, they would be most appreciated.
Best,
Andrew