Yesterday I tested the fully built robot and had a lot of success with minor tweaking.
The first test showed that my steering values were way to steep. So I decreased them, and increase the drive speed; allowing the robot to steer more smoothly towards its destination. Along with the steering issues I found that a Bluetooth connection was a little to slow for driving a robot efficiently.
This test clearly show the latency between drive command, and robot action
This test showed the the drive / steering values are working smoothly. However This test showed a hint a a bug that was hidden in my code. At this point I formed a hypothesis.
How the robot determines if it is at the target destination is by examining the robots gps accuracy (using it to create a radius. around its location) and the destination’s radius (5 meters in these tests).
If the robots accuracy circle enters the destinations circle by 5 meters, then the robot is assumed to be in the destination’s radius.
For these tests, the robot was programmed to stop it’s autonomous routine if the robot senses that it is at it’s target destination.
During this test I watched the screen more closely as the robot was preforming it’s task, confirmed my hypothesis about the GPS accuracy bug.
After this test I decided to add a simple counter to avoid false positives. This counter will count the number of times (in a row) that the robot’s location is reported to be at the destination. If this counter reaches 5, then the robot will stop.
This test shows that the counter mentioned above fixed my GPS problems. It also showed that it might be a good idea for me to start implementing some sensors to prevent the robot from crashing into things.
This test is a perfect success with out user interaction.
The robot source code is here