Algorithm
We use several important concepts for the robot’s motion.
· Forward – two motos rotate in the forward direction
· Right- left motor rotates while right motor rests
· Left- right motor rotates while left motor rests
· Sharp right- left motor rotates forward while right motor rotates backward. Two motors rotate with the same speed in opposite directions. This movement is used when the robot needs to take a sharp right turn.
· Sharp left- right motor rotates forward while left motor rotates backward. Two motors rotate with the same speed in opposite directions. This movement is used when the robot needs to take a sharp left turn.
· Reverse- both motors rotate in the backward direction.
B3
|
B4
|
B6
|
B5
|
B7
|
B0
|
B2
|
B1
|
A top view of the sensor panel
This robot is continuosly repeats the source code until we power it off.so we use instructions inside a infinite loop.
Path tracking
Basic path tracking is done using B3 and B4.
If ( B3==0 and B4==0) , go forward
If(B3==0 and B4==1), turn left
If(B3==1 and B4==0), turn right
If (B3==1 and B4==1) {// this situation occurs when the robot is out of the track, discontinuity, in a sharp bend,
If(B0==0 or B1==0 or B2==0) turn left while ( B3==1 and B4==1) // sharp left bends
and continue
If (B5==0 or B6==0 or B7==0) turn right while ( B3==1 and B4==1) // sharp right bend
and continue
If ( B0==1 and B1==1 and B2==1 and B3==1 and B4==1 and B5==1 and B6==1 and B7==1) go forward , a counter starts , after exeeding a specific limit, turn right and continue within this loop.// to find the path when roaming , in discontinuities the count doesn’t exeed the limit.
} // path tracking is done.
Signal detecting
Signal posts are 4 x 4 cm2 black squares. To detect a signal we use six detectors and three variables , sig_right, sig_left and turn_val with all initial values 0.
Sig_left =1 if a signal is to the left, otherwise 0 ,
Sig_right=1 if a signal is to the right, otherwise 0,
Turn_val has 3 values, 0,1 and 2.
Turn_val becomes 0 after turning at a junction.
Turn_val becomes 1 when a signal is to left
Turn_val becomes 2 when a signal is to right
If (B0==0 and B1==0 and B2==0 and B3==0 and B4==0 and B7==1 and( (sig_left==0 and sig_right ==0 ) or turn_val==2) ) // identifies a signal post to the left,
{
Sig_left=1,
sig_right=0 ,
turn_val=1,
continue to the main loop
}
If (B5==0 and B6==0 and B7==0 and B3==0 and B4==0 and B0==1 and( (sig_left==0 and sig_right ==0 ) or turn_val==1) ) // identifies a signal post to the right
{
Sig_left=0,
sig_right=1 ,
turn_val=2,
continue to the main loop
}
Junction detecting
This algorithm is developed to detect 4-way junctions and turn according to the signals.We have already ddiscussed how the robot identifies a signal and here we explain how it turns at a junction according to the signals.
We employee six sensors out of the eight sensors to detect a junction.
If ((B0==0 or B1==0 or B2==0) and (B5==0 or B6==0 or B7==0 ) and (sig_left==1 or sig_right==1))
{
If ( sig_left==1 and sig_right==0) {
Turn left, // to take the middle two sensors to the white background
Sharp left , // this takes a sharp left turn
Turn left while (B3==1 and B4==1)
Sig_left=0;
Sig_right=0;
Turn_val=0;
Continue to main loop;
}
If ( sig_left==1 and sig_right==0) {
Turn right,//to take the middle two sensors to the white background
Sharp right , // this takes a sharp right turn
Turn right while (B3==1 and B4==1)
Sig_left=0;
Sig_right=0;
Turn_val=0;
Continue to main loop;
}
}
Else // if some signal comes except all combinations discussed above,
Go forward and continue to main loop;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////