roboIR – en liten robot på larvband

Berätta om dina pågående projekt.
hele
Inlägg: 5
Blev medlem: 4 mars 2011, 20:32:00

roboIR – en liten robot på larvband

Inlägg av hele »

Tänkte presentera mitt pågående projekt lite kort. Då jag har väldigt ytliga kunskaper inom elektronik/programmering tänkte jag helt enkelt ägna sommarens regniga dagar åt att lära mig något vettigt.

Förutsättningarna är (köpt/fått/hittat hemma):
Logik -> Arduino Uno
Motorstyrning -> Arduino Motor shield
Larvbandschassi -> Dagu Rover 5 Tracked Chassis with Encoders
Avståndssensor -> IR 10-80cm GP2Y0A21YK
Servo -> Hitec HS-422

Avståndssensorn ska alltså mha servot fungera som en radar. Undvika hinder och finna lämplig väg känns som det mest grundläggande för en mobil robot.

Bifogar en film på första körningen (hårdkodad körning och dåligt filmat)
http://youtu.be/FbapJL4RfAw

Vägvalet är tänkt att ske genom att sampla sensorns data under ett 120-180graders svep och finna den mest troliga nya vägen. Har börjat skissa lite på en algoritm.

Måste skriva in båda bandens kodare, då den verkliga rotationen av fordonet bör överensstämma med den beräknade (den slirar/drar lite snett idag). Framtida uppdatering kan således även innehålla ett gyro. På önskelistan finns även en display och en gripklo.

Det finns mycket att lära...
All återkoppling på projektet mottages varmt!
Användarvisningsbild
Klas-Kenny
Inlägg: 11827
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: roboIR – en liten robot på larvband

Inlägg av Klas-Kenny »

Kul, lycka till!

Kan nog bli en utmaning att få den till att svänga precis som du vill, encoders på motorerna kan nog fungera mycket bra på avstånd rakt framåt, men när den ska svänga är det nog helt klart desto värre med larvfötter.

Lite beroende på hur du tänkt utforma algoritmen så skulle jag nog rekommendera en avståndssensor baserad på ultraljud istället, de IR-baserade är oerhört olinjära och mätvärden beror mycket på färgen på det den mäter emot mm.
hele
Inlägg: 5
Blev medlem: 4 mars 2011, 20:32:00

Re: roboIR – en liten robot på larvband

Inlägg av hele »

Ja, för att få kontroll över rotationen leder det nog till ett behov av någon typ av gyro eller kompass. Förhoppningsvis får jag till en godtagbar noggrannhet på innegolv med lite död räkning tillsvidare. Lite så är mitt testprogram uppbyggt, det som körs i videon.

Hade sensorn sen tidigare, så den får duga i alla fall under prototypstadiet. Tack för tipset, började läsa lite om ultraljud och det verkar väldigt lovande. Ger mera den radar-känsla jag vill uppnå.

Bifogar en graf för IR-sensorn:
irsensorcharacteristics.png
Den här kurvan borde gå att bemästra med en liten spänning-avstånd-matris. Alternativt om det ger stor osäkerhet, att bara detektera hinder utan att använda sig av avståndet. Ska bli intressant att se vilka material i hemmet som reflekterar bra/dåligt sen.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hele
Inlägg: 5
Blev medlem: 4 mars 2011, 20:32:00

Re: roboIR – en liten robot på larvband

Inlägg av hele »

Idag fick jag lite tid över för min robot igen.

Min Arduino Uno verkar enbart ha två stycken interrupt-pinnar, och jag som behöver ha dem till både bandens kodare och till min radar. Därför började jag skissa lite på en kort main-loop som är tänkt att uppdateras så ofta att den i princip fungerar som en hårdvaru-interrupt. Tanken är att köra med full fart (ja ja, den går ändå inte så snabbt) tills något händer i omgivningen, dvs ett hinder i färdvägen. Då ska den först avvaktande köra långsammare för att sedan stanna och söka en ny väg om hindret är kvar.

Ett första utkast till ett mjukvaru-lågpassfilter skrevs in i main-loopen också.

Skissen:

Kod: Markera allt

const int full = 255;
const int half = 150;
const int brake = 0;

main (void){

	int angle;	//0=forward, negative=left, positive=right
	int signal;	//1023 steps -> 0-5v
	int i;
	delay(5000);	//Halt before motion
	speed(full);

	for(;;){
		i = 0;
		signal = 0;

		//Mean value, low pass filtering function
		for(i=0;i<=100;i++){
			signal = signal + analogRead(irsensor);
		}
		signal = signal / 100; 
		
		//Safety mode
		if(signal>=140 && signal<260){	//0.7-1.3v, 40-20cm
			speed(half);
			return;
		}

		//Find new path		
		if(signal>=260){		//>1.3v, <20cm
			speed(brake); 
			angle = scan(); 
			rotate(angle); 
			speed(full);
			return;
		}
	}
}
Detta är första gången jag försöker mig på att bygga något som ska kunna agera självständigt.
Vad tycker ni, är jag på rätt spår?
Är min filtrering duglig?
Användarvisningsbild
dunz
Inlägg: 94
Blev medlem: 23 januari 2011, 02:13:43
Ort: Enköping
Kontakt:

Re: roboIR – en liten robot på larvband

Inlägg av dunz »

Du kan köra Arduinon med "vanlig" AVR-C annars, då får du tillgång till interrupt-vektorer och annat småttigott

Ett tips är att göra det nu, innan du blir alltför bekväm med Arduino-språket, jag håller för fullt på att "lära om mig" med AVR-C istället, större möjligheter, lycka till med byggandet! :)

Edit: Ser ju att du faktiskt kör vanlig C... kanske ska läsa ordentligt först. Läs igenom databladet för Atmega328, där står hur man kan använda sig av interrupt-vektorer(kanske inte ens är rätt ord för övrigt).

Hur som helst kan du läsa interrupts på alla "portar" men inte alla "pinnar". Så sätter du en interrupt på en hel port är det bara att kolla vilken pinne som gick hög :)
hele
Inlägg: 5
Blev medlem: 4 mars 2011, 20:32:00

Re: roboIR – en liten robot på larvband

Inlägg av hele »

Stämmer bra det, kör C-syntax så gott det går. Det där med portar har jag totalt missat, kanske ska lämna den skyddade Arduino-världen. Dock är det ganska behändigt för en nybörjare att kunna experimentera utan att behöva känna till allt om själva processorn. Får ta det ett steg i taget.

Idag har jag byggt på chassit. En bottenplatta och lite vinklar för IR-sensorn har jag handsågat och värmebockat fram ur ett stycke plexiglas. En CNC-fräs hade gjort jobbet bättre.... (nästa projekt ev..)
Skriv svar