Navigation VFF-hybrid (Cheste circuit)
This practice is to extend the VFF navigation so that the robot around the Cheste circuit. To do this read the points you have to move from a file, so that the gain on each of those points to get full laps of the circuit. For practice I had to make many changes on the previous practice of VFF. changes consisted of: - Speed \u200b\u200bdepending on the angle the resultant force
- The distance that is considered that the robot has reached the goal
is, I almost changed almost all the parameters so that it could complete the turn without getting stuck or crashing. In
the previous practice of generating the repulsive force is growing with the square of the inverse of the distance to the obstacle. On this occasion I had to leave in a linear fashion, as the repulsive force generated obstacles when they were too close, so that increasing the speed of the robot gave him no time to stop and just colliding.
I have also decided to give more repulsion to lasers front (between -25 º and 25 º) than to the side, so that now fronts generate a repulsion equal to the inverse of the distance from the obstacle multiplied by 7900, ie repulsion = (1.0/laser [i]) * 7900.
The sides are multiplied by 6000 instead of 7900.
I also have considered a special case in which the robot gets too close to the obstacle.
This case is that if the robot is less than 500 mm of an obstacle repulsion is 2.8 times higher than previously estimated to avoid getting too close.
And now, the attractive force is 1350, regardless of the distance that is the destination. This is because if she left as before, which was nearer the lower the attraction destination, speed unnecessarily diminished, and appeared in some local minimum points of the circuit that could be avoided.
circuit testing, I've done with two sequences points, one point is the sequence provided in the file-deliberativaCheste sequence and the other are points that I chose.
Since many of the points of sequential file deliberativaCheste were very attached to the walls I had to increase the distance that is considered to have met the target. Now that distance is 410mm.
The biggest problem I had were local minima, since in some corners as the latter appeared clockwise circuit.
This is because when the resultant force was quite an angle to the robot, the robot down and turned much faster speed.
So what I did was find a balance between the feed rate turning, and the actual speed.
If you gave too much speed over the ground speed, I was the problem of local minima, or even the robot was turning, but otherwise the robot was rotated very little get past some points, or get too close to walls or obstacles coming to crash on occasion.
In my case, the values \u200b\u200bthat I have given were:
speed:
- Total Force * 0.8 if you have to turn less than 80 º
- The former divided between 1.3 if you have to rotate between 80 ° and 120 º
- 20 if you have to turn over 120 °
In any case, if the total force 2000 is greater than the feed rate is 100 (If greater than 2000 is because it is mostly repulsive and attractive as the maximum is 1350).
Speed:
- If you have to turn less than 16 ° the speed of rotation ang * 13, where ang is the angle that you have to turn in radians
- If you have to turn over 16 º and less than 120 º the speed is ang * 40
- If you have to turn over 120 º rotational speed is ang * 15
The fact that rotate more slowly when it GUE rotate over 120 degrees is because many times when you must turn so much is because you are in a local minimum and it is running back and forth continuously until leaving the local minimum, so that does not spin more slowly as many "nods" and moving further forward. Another problem I found is that often collided with an obstacle despite the repulsive force was great. This was because the feed rate was proportional to the total force (except when he had to turn over 120 degrees), so if the result was less than 120 degrees and high intensity (obstacle very near) the robot was going very fast when I really had to slow down to give him time to turn.
To fix this I added the proviso that if the total force is greater than 2000 slowed to give him time to turn and avoid the obstacle. Video
robot walking around the track with my points and unhindered: