Difference between revisions of "Czechbot"

From RoboWiki
Jump to: navigation, search
(Abstract)
(Project Files)
 
(25 intermediate revisions by the same user not shown)
Line 12: Line 12:
 
== Abstract ==
 
== Abstract ==
 
   
 
   
General Idea:
+
'''General Idea:'''
Make a robot which can find a goal in a non-cycled maze (only with blind tracks) of black lines by going left on every intersection.
+
 
 +
Make a robot which can find a goal in a non-cycled maze (only with dead end tracks) of black lines by going left on every intersection.
 +
 
 +
----
 +
 
 +
'''Thoughts:'''
  
Thoughts:
 
 
At first we tried robot only with two sensors and he did quite well. But finally we had to rewrite a source code for three sensors robot in a very short time because of troubles with implementation of two sensors ancestor. And that was the whole problem.  
 
At first we tried robot only with two sensors and he did quite well. But finally we had to rewrite a source code for three sensors robot in a very short time because of troubles with implementation of two sensors ancestor. And that was the whole problem.  
  
Results:
+
----
Our robot can follows the black line, it can recognizes blind tracks and turns himself back to line. The only problem is with marking the intersections. Because robot hasn´t a ideal movement, there are still some inaccuracies. Theoreticaly we have some thoughts how to clean up, but we didn´t have enough of time to implement it right (viz. source code).
+
 
 +
'''Results:'''
 +
 
 +
Our robot can follow the black line, he can recognize blind tracks and turn himself back to line. The only problem is with marking the intersections. Because robot hasn´t a ideal movement, there are still some inaccuracies. Theoreticaly we have some thoughts how to clean up, but we didn´t have enough of time to implement it right.
 +
So our robot can`t recognize intersections properly and that is the reason why he makes so many mistakes.
  
 
== Project Files ==
 
== Project Files ==
 +
 +
<source lang="java">
 +
import lejos.navigation.TachoNavigator;
  
  
 +
import lejos.nxt.*;
 +
 +
@SuppressWarnings("deprecation")
 +
public class TEst {
 +
LightSensor left,right,middle;
 +
TachoNavigator navi;
 +
 +
public static void main(String[] args) throws Exception {
 +
TEst l=new TEst();
 +
l.run();
 +
  }
 +
 +
public TEst() {
 +
//init
 +
    right = new LightSensor(SensorPort.S3);
 +
    middle = new LightSensor(SensorPort.S2);
 +
    left = new LightSensor(SensorPort.S4);
 +
    navi = new TachoNavigator(5.6f, 11.5f, Motor.C, Motor.A);
 +
}
 +
 
 +
public boolean isRightDark() {
 +
return right.readValue() < 50;
 +
}
 +
 +
public boolean isLeftDark() {
 +
return left.readValue() < 50;
 +
}
 +
 +
public boolean isMiddleDark() {
 +
return middle.readValue() < 50;
 +
}
 +
 +
public void findIntersection() {
 +
navi.setSpeed(120);
 +
navi.travel(1);
 +
if (isLeftDark()) {
 +
if (isRightDark()) {
 +
navi.travel(4);
 +
if (isMiddleDark()) {
 +
Sound.twoBeeps();
 +
navi.travel(2);
 +
navi.rotate(92);
 +
}
 +
else {
 +
navi.travel(2);
 +
navi.rotate(92);
 +
}
 +
}
 +
// leve T nebo leva zatacka
 +
else {
 +
navi.travel(4);
 +
if (isMiddleDark()) {
 +
Sound.twoBeeps();
 +
navi.travel(2);
 +
navi.rotate(92);
 +
}
 +
else {
 +
navi.travel(2);
 +
navi.rotate(92);
 +
}
 +
}
 +
}
 +
 +
else if (isRightDark()) {
 +
if (isLeftDark()) {
 +
navi.travel(4);
 +
if (isMiddleDark()) {
 +
Sound.twoBeeps();
 +
navi.travel(2);
 +
navi.rotate(92);
 +
}
 +
}
 +
// pravy T nebo prava zatacka
 +
else {
 +
navi.rotate(-5);
 +
navi.travel(4);
 +
if (isMiddleDark()) {
 +
navi.travel(2);
 +
Sound.beep();
 +
}
 +
else {
 +
navi.travel(2);
 +
navi.rotate(-80);
 +
}
 +
}
 +
}
 +
}
 +
 +
public void followLine() {
 +
int dig = 0;
 +
Motor.C.setSpeed(270);
 +
Motor.A.setSpeed(270);
 +
if (middle.readValue() > 45) {
 +
Motor.A.stop();
 +
Motor.C.forward();
 +
 +
dig = Motor.C.getTachoCount();
 +
if (Math.abs(dig) > 270) {
 +
Motor.C.rotate(-dig);
 +
navi.setSpeed(360);
 +
navi.travel(8);
 +
navi.rotate(185);
 +
}
 +
 +
}
 +
else if (middle.readValue() <= 45) {
 +
Motor.C.stop();
 +
Motor.A.forward();
 +
Motor.C.resetTachoCount();
 +
}
 +
}
 +
 +
public void run() throws InterruptedException {  
 +
    while (!Button.ESCAPE.isPressed()) {
 +
    followLine();
 +
    if (isLeftDark()) {
 +
    navi.stop();
 +
    Motor.A.rotate(-5);
 +
    Motor.C.rotate(5);
 +
    findIntersection();
 +
    }
 +
    else if (isRightDark()) {
 +
    navi.stop();
 +
    Motor.A.rotate(5);
 +
    Motor.C.rotate(-5);
 +
    findIntersection();
 +
    }
 +
    LCD.drawInt(SensorPort.S3.readValue(), 4, 0, 0);
 +
    LCD.drawInt(SensorPort.S2.readValue(), 4, 0, 1);
 +
    LCD.drawInt(SensorPort.S4.readValue(), 4, 0, 2);
 +
    }
 +
}
 +
 +
}
 +
 +
</source>
 +
 +
(illustration picture)
  
 
[[Image:Czechbot.jpg]]
 
[[Image:Czechbot.jpg]]
  
The source code: maybe...
+
 
 +
 
  
 
Go back to the [http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Summer_School_2009 List of the projects]
 
Go back to the [http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Summer_School_2009 List of the projects]

Latest revision as of 10:39, 14 August 2009

Overview

Author(s): Pavel Kuttelwascher, Vladimír Janouš
Country: Czech Republic
Date: 12.08.2009-14.8.2009
Activity: Centrobot Robotic Summer School 2009
Location: Vienna, Austria
Hardware: LEGO Mindstorms NXT

Abstract

General Idea:

Make a robot which can find a goal in a non-cycled maze (only with dead end tracks) of black lines by going left on every intersection.


Thoughts:

At first we tried robot only with two sensors and he did quite well. But finally we had to rewrite a source code for three sensors robot in a very short time because of troubles with implementation of two sensors ancestor. And that was the whole problem.


Results:

Our robot can follow the black line, he can recognize blind tracks and turn himself back to line. The only problem is with marking the intersections. Because robot hasn´t a ideal movement, there are still some inaccuracies. Theoreticaly we have some thoughts how to clean up, but we didn´t have enough of time to implement it right. So our robot can`t recognize intersections properly and that is the reason why he makes so many mistakes.

Project Files

import lejos.navigation.TachoNavigator;


import lejos.nxt.*;

@SuppressWarnings("deprecation")
public class TEst {
	LightSensor left,right,middle;
	TachoNavigator navi;
	
public static void main(String[] args) throws Exception {
	 TEst l=new TEst();
	 l.run();
  }
	
public TEst() { 
	//init
    right = new LightSensor(SensorPort.S3);
    middle = new LightSensor(SensorPort.S2);
    left = new LightSensor(SensorPort.S4);
    navi = new TachoNavigator(5.6f, 11.5f, Motor.C, Motor.A); 
}
  
public boolean isRightDark() {
	return right.readValue() < 50;
}

public boolean isLeftDark() {
	return left.readValue() < 50;
}

public boolean isMiddleDark() {	
	return middle.readValue() < 50;
}

public void findIntersection() {
	navi.setSpeed(120);
	navi.travel(1);
	if (isLeftDark()) {
		if (isRightDark()) {
			navi.travel(4);
			if (isMiddleDark()) {
				Sound.twoBeeps();
				navi.travel(2);
				navi.rotate(92);
			}	
			else {
				navi.travel(2);
				navi.rotate(92);
			}	
		}
		// leve T nebo leva zatacka
		else {
			navi.travel(4);
				if (isMiddleDark()) {
					Sound.twoBeeps();
					navi.travel(2);
					navi.rotate(92);
				}
				else { 
					navi.travel(2);
					navi.rotate(92);
				}
		}
	}
	
	else if (isRightDark()) {
		if (isLeftDark()) {
			navi.travel(4);
			if (isMiddleDark()) {
				Sound.twoBeeps();
				navi.travel(2);
				navi.rotate(92);
			}
		}
		// pravy T nebo prava zatacka
		else {
				navi.rotate(-5);
				navi.travel(4);
				if (isMiddleDark()) {
					navi.travel(2);
					Sound.beep();
				}
				else {
					navi.travel(2);
					navi.rotate(-80);
				}
			}
	}
}

public void followLine() {
	int dig = 0;
	Motor.C.setSpeed(270);
	Motor.A.setSpeed(270);
	if (middle.readValue() > 45) {
		Motor.A.stop();
		Motor.C.forward();

		dig = Motor.C.getTachoCount();
		if (Math.abs(dig) > 270) {
			Motor.C.rotate(-dig);
			navi.setSpeed(360);
			navi.travel(8);
			navi.rotate(185);
		}

	}
	else if (middle.readValue() <= 45) {
		Motor.C.stop();
		Motor.A.forward();	
		Motor.C.resetTachoCount();
	}
}

public void run() throws InterruptedException {	  
    while (!Button.ESCAPE.isPressed()) { 	
    	followLine();
    	if (isLeftDark()) {
    		navi.stop();
    		Motor.A.rotate(-5);
    		Motor.C.rotate(5);
    		findIntersection();
    	}
    	else if (isRightDark()) {
    		navi.stop();
    		Motor.A.rotate(5);
    		Motor.C.rotate(-5);
    		findIntersection();
    	}
    	LCD.drawInt(SensorPort.S3.readValue(), 4, 0, 0);
    	LCD.drawInt(SensorPort.S2.readValue(), 4, 0, 1);
    	LCD.drawInt(SensorPort.S4.readValue(), 4, 0, 2);
    }
 }	

}

(illustration picture)

Czechbot.jpg



Go back to the List of the projects