Autonomous Robot v1
Two most important parts of the project are ready.
After few weeks of work connection between two most important parts of the project are ready to be shown. This is the first step introducing robot into an autonomous driving mode.¶
So far the goal was to create movement control and vision system able to recognize objects and move with respect to them. This time I want to show general features and problems related to that topic. On the first video, we can easily see how robot reacts to visible objects and tries to adjust his position and point at the single orange ball.
After seeing this video first thing that will probably come to mind is why robot decided to point at the second ball when it appeared and why after pointing at the ball is still rotating?
The answer to the first question is related to the algorithm which process video stream. It tries to find the smallest rectangle which will become bounding box for the biggest detected object. So if there are two identical objects program always chooses closest and biggest one.
To explain the second question I'll present another video from a different perspective.¶
This time we can easily notice that robot cannot instantly aim at detected object. It's a very common issue in control theory and its called overshooting. But it's not a problem and also we can see that this error decrease over next iterations.
Another noticeable thing is how robot moves and the fact that these movements are not smooth at all. First of all our robot is not equipped with encoders that would give us information about wheel rotation. Instead of that we only receive feedback from vision system what will not provide as good accuracy as encoders. So we decided to use control system which is not typical PID controller but something closer to Kalman filter. We counted how much time does it takes for the robot to make 360-degree rotation on full throttle on deferent surfaces. And then we counted mean value of that time what is initial constant. Then we can halve that time to make 180-degree rotation or divide into 4 to make 90-degree rotation. But it's quite obvious that this value will never be exactly 180 or 90 degrees and difference of that error depends on many different factors. So another task is to make a control system that will estimate next movement count an error and adjust parameters to increase accuracy. And next add some safety features and of course, give robot capability to move toward an object.