Sunday 29 December 2019

EV3 Limited Wanderer Robot

This post is about a robot, which wanders in a limited area. In this project, we have marked an oval shaped area with a black line. We calibrate the robot with white and black values by making a manual movements on the surface. We then take the threshold (average of black and white values) and expect the robot to turn, when it reaches the threshold. That's the reason, the robot turns 90 degrees, when it reaches half way through the black line. The robot continues the behavior of making turns after finding a black line and keeps itself within the oval. A small clip showing the behavior of robot is shared below. You can also find the LeJOS program, which simulates this behavior, shared below.

In this LeJOS program, we have a single class called LtdWanderer. In its main method, this class initializes the large regulated motors on port B and C. It also initializes the two sensors color sensor and gyro sensor attached to port S4 and S2. The color sensor is initialized in Red mode and gyro sensor in Angle mode. The program then stores the calibrated values of light intensity reflected from the black and white surface. The LeJOS API returns the light intensities in the range 0 to 1. We have multiplied them by 100 and calculated the average light intensity of black and white for further programming logic.

The default behavior of the robot is to keep moving forward with a speed of 180 degrees per second. While moving, it also fetches the samples from the color sensor continuously. The robot checks if the light intensity is greater than average light intensity. If yes, the robot is free to wander further because it is on a white surface. However, when the light intensity goes below the average light intensity, the robot concludes that it is on the black boundary, and it make a left turn to be within its limits. 

NOTE: With each turn the LimitAngle variable increases its value by 90 degrees. We ideally should have reset the sensor and measure the angle each time the robot makes a turn, to check if it is equal to 90 degrees. However, we found that the reset function did not work as we were expecting. The angle measured by the Gyro sensor kept on increasing as and when the robot takes a turn. Hence the purpose of the LimitAngle variable. With the LimitAngle variable, we are checking whether the difference between previous turn angle and the current turn angle is equal to 90 degrees. We then stop the robot from making a turn and let it go straight and wander. 

The robot wanders infinitely until ESCAPE button is pressed.         




No comments:

Post a Comment