Robot med helvarvs-servon

Berätta om dina pågående projekt.
Ranstam
Inlägg: 456
Blev medlem: 17 november 2007, 21:20:16
Ort: LUND

Robot med helvarvs-servon

Inlägg av Ranstam »

Hej

Håller på att sätta ihop en liten robot, tänkte det kunde vara kul att exprimentera lite med.
Bild
Bild

Framdrivningen består av 2st servon. Som sensorer har den 2st microswitchar, som kollisions detektorer, en Sharp IR-rangefinder är på väg, och kommer monteras i fronten(hål förberedda). Även en LDR-resistor kopplad, för att läsa ljusvärdet(kanske kan vara kul). För att kunna kommunicera med omvärlden har den 3st röda lysdioder på ena sidan.

CPUn är en Atmega16, som kör på 12Mhz extern kristall. Nu ligger där ett enkelt program som helt enkelt kör frammåt, tills det att den stöter emot ngot, backar och svänger vänster.

Det som är lite lurigt är att få den att gå rakt. Servona är vanliga servon, som jag har moddat själv, och kräver mycket exakt petande för att gå lika snabbt. Är det någon som har erfarenhet av färdigköpta "helvarvs-servon"?
//Alexander

Rubrik (var "Robot") / blueint
eAk
Inlägg: 74
Blev medlem: 10 september 2008, 22:50:23
Ort: Kungälv

Re: Robot

Inlägg av eAk »

Jag måste säga att det är ett riktigt fint bygge.
Så fina blir aldrig mina saker :)
Iockförsig har jag ju inte verktygen och prylarna utan det blir mest super lim och smält lim :)

Hoppas du fått tag på rätt kontakt till sharpen. Själv lyckades jagi nte klura ut om elfa hadde något som passade. Ville inte beställa någon sket dyr kabel från hobby butik så jag löste det igenom att böja lite i en stift list och super limma och sedan löda ihop med sharpens stift. så funkar det finfint med vanliga 2.54mm prylar att koppla på.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Re: Robot

Inlägg av MicaelKarlsson »

Aha... är det så duracellrobotarna ser ut, jag trodde att de också var rosa. :mrgreen:


Snyggt bygge!

Vad har du för andra planer för den lilla skönheten?
Ranstam
Inlägg: 456
Blev medlem: 17 november 2007, 21:20:16
Ort: LUND

Re: Robot

Inlägg av Ranstam »

Hej

Även denna robot innehåller lim :). Plattorna är i 3mm stålplåt, som hålls ihop av M4 gängstav. Funderade lite på att använta alluminum, men om man har tillgång till slipverktyg så är stål ganska lättarbetat också.

Nu har jag fixat fast avståndsmätaren, lite lurigt med JST-kontakten dock. Jag löste det genom att helt enkelt löda fast sladdar på pinnarna på kontakten. Jag har lagt in ett program som gör att roboten svänger vänster varje gång den kommer 10cm från ett hinder.

Bild


Jag hade tänkt försöka få roboten att kunna gå runt lite i lägenheten, och undvika att köra in i saker. Jag googlade lite på "robot maping" typ och hittade detta http://www.societyofrobots.com/programm ... ront.shtml. Verkar mycket intressant. Är det någon som har provat denna metoden? Kallas tydligen också för Brushfire(gräsbrand?)

Jag tänkte göra en liten spelplan här hemma och lägga in ett par hinder, och se om man kan lägga in en karta i en matris och få roboten att styra rätt från start till mål. Senare projekt är att få den att kunna uppdatera kartan om den stöter på patrull.


//Alexander



//Alexander
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Re: Robot

Inlägg av MicaelKarlsson »

Ser ju spännande ut men har inte testat det men om du gör det så glöm inte att berätta om resultatet!
Lycka till :)


"Plattorna är i 3mm stålplåt"
Låter lite vingligt! :mrgreen:
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: Robot

Inlägg av squiz3r »

Måste börja med att din robot ser väldigt cool ut, och stabil!!

Den där algoritmen verkar vara riktigt najs, får väll testa den någon gång! :D
eriikh
Inlägg: 258
Blev medlem: 5 maj 2006, 10:52:15

Re: Robot

Inlägg av eriikh »

Häftig robot, liknar mycket de som säljs (såldes?) i elfa :bravo:

Något jag skulle vilja testa är att ställa ut 2st Ir-fyrar, sedan ha ett servo som roterar en fotodiod på roboten (likt en radar) och låta roboten räkna ut var den är. Lite matte behövs ju men vad gör man inte för några utmaningar?
Ranstam
Inlägg: 456
Blev medlem: 17 november 2007, 21:20:16
Ort: LUND

Re: Robot

Inlägg av Ranstam »

Hej

Det verkar intressant med IR-fyrar, bord kunna användas för att fastställa position och korrigera för felen som uppstår under dödräkning, ska lägga till det till listan :)

Mina minst sagt bristfälliga C-skills sätts nu på prov. Har en kompis som är vass på C, som får titta på koden. Jag har iaf fått ihop grundstommen till koden(en fin soppa av IF-satser som säkert kommer kollidera :) )

Detta är vad jag har fått ihop hittils. Kartan i en matris, och programdelen som ritar upp "vågfronten". Code-tagsen är lite missvisande. Men i korthet:

Den går igenom matrisen(kartan) varje kolumn för sig, uppifrån och ned. Om rutan är tom(0), så kollar den grannrutorna. Den rutan som kontrolleras får ett värde 1 högre än närmsta ruta har. Om någon grannruta har nummer 255(robotens possition), och rutan själv får ett nummer, så är kartan färdigritad. Bara för roboten att gå mot rutan med lägsta numret.

Finns säkert en massa fel, ska fortsätta att testa koden(den kompilerar dock utan errors!)

Kod: Markera allt

int map[6][6]= {{1,1,1,1,1,1},			//0 = unoccupied, 1 = wall, 2 = goal, 255 = robot start
				{1,2,0,0,0,1},
				{1,0,0,0,0,1},
				{1,0,0,0,0,1},
				{1,0,0,0,255,1},
				{1,1,1,1,1,1}};
	

Kod: Markera allt

int proxim;
int x = 1;					//Set start, upper left
int y = 1;					//corner

while(quit!=1)			//mapping starts
{
	if(map[x][y] = 0)				//if square doesnt have number since before
			{
			if(map[x-1][y] <= 254)	
				{							//check left if not wall or robot startingpos
				if(map[x-1][y] >= 2)	
					value = map[x-1][y];		//save number on the one on the left
				}	
			else if(map[x-1][y] = 255) 			//check if robot startpos is close
				proxim = 1;





			if(map[x+1][y] <= 254)	
				{							//check left if not wall or robot startingpos
				if(map[x+1][y] >= 2)	
					value = map[x-1][y];		//save number on the one on the left
				}	
			else if(map[x+1][y] = 255) 			//check if robot startpos is close
				proxim = 1;




			if(map[x][y-1] <= 254)	
				{							//check left if not wall or robot startingpos
				if(map[x][y-1] >= 2)	
					value = map[x-1][y];		//save number on the one on the left
				}	
			else if(map[x][y-1] = 255) 			//check if robot startpos is close
				proxim = 1;



			if(map[x-1][y] <= 254)	
				{							//check left if not wall or robot startingpos
				if(map[x][y+1] >= 2)	
					value = map[x][y+1];		//save number on the one on the left
				}	
			else if(map[x-1][y] = 255) 			//check if robot startpos is close
				proxim = 1;



		if(value >= 3)		//check if map coordinate is set
			{
			if(proxim =1)
				quit = 1;				//and if robot start pos is next
			}							//path found.
		map[x][y] = value + 1;		

		if(y>=5);
			{
			y = 0;
			x++;
			}
		if(y>=4)
		 y++;
			
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Robot

Inlägg av stekern »

Skojigt projekt.

Som koden ser ut nu så står den bara och stampar på ruta x=1,y=1 eftersom något av de här villkoren aldrig kommer uppfyllas:

Kod: Markera allt

      
if(y>=5);
         {
         y = 0;
         x++;
         }
      if(y>=4)
       y++;
och sätter du y=0 kommer du få buffer underflow när du tar map[x][y-1] längre upp.

Skulle det inte vara bättre att ha det så här:

Kod: Markera allt

int x;
int y = 1;
while(!quit) {
   x = 1; 
   while(!quit && x<5) {
        //if satser
        x++;
    }
    if (y<5)
        y++;
   else
       y=1;
}
sen har du missat några == på några ställen
t.ex.

Kod: Markera allt

if(proxim = 1)
skall vara

Kod: Markera allt

if(proxim == 1)
proxim sätts förövrigt aldrig till något annat än till 1 i koden så den där if-satsen är meningslös.
Jag antar att du kanske skall ha:

Kod: Markera allt

int proxim=0;
i början.
StreetBob
Inlägg: 40
Blev medlem: 21 september 2007, 11:00:24

Re: Robot

Inlägg av StreetBob »

Fint prosjekt

Jeg har også lyst å lage en slik :) . Skal bli interresant å følge med fremmover, jeg kommer sikkert til å hente mange ideer fra prosjektet ditt. Må også få takke stekern for hans vennlige måte å hjelpe til med sine kunnskaper :bravo: Har jo lagt merke til andre som nesten blir sur om en gjør noen små skrivefeil i koden :tumner: . Det fungerer mye bedre med oppmuntring enn fordømming og sure oppstøt.
Ranstam
Inlägg: 456
Blev medlem: 17 november 2007, 21:20:16
Ort: LUND

Re: Robot

Inlägg av Ranstam »

Tack för påpekandena Stekern!, håller på att ordna upp koden nu. Projektet blev lite försenat eftersom jag åkte på vinterkräksjuka(i maj!?), men nu när jag inte behöver spendera dagarna vikt över toalettkanten ska det ta fart igen :)

Är det någon som vet hur stor plats en int matris tar i minnet? om den är på 100x100? är varje plats i matrisen på 16bytes? då tar den ju... 160kb?


//Alexander
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: Robot

Inlägg av squiz3r »

är varje plats i matrisen på 16bytes?
Njee, en int i mikroC är väl på 16 bitar, alltså 2 bytes. Alltså ta den 20kb? Men kan du inte köra med char istället, då tar dem ju bara halva platsen, och du har 0-255 i den.

Men AtMega16 verkar bara ha 1k minne, alltså måste du i så fall ha ett externt minne... Det finns ju tex små smidiga EEPROM som är på 64kb.

Men rent spontant så känns det som om man borde kunna komprimera det lite.. :/

Behöver du spara kartan hur länge som helst, kunde man inte bara använt en matris på 50*50 rutor runt om roboten, det som kommer utanför den raderar man?
GFEF
Inlägg: 2371
Blev medlem: 4 december 2004, 18:44:04

Re: Robot

Inlägg av GFEF »

squiz3r
>med char istället, då tar dem ju bara halva platsen, och du har 0-255 i den

char -128 - +128
unsigned char 0-255

Har alldrig förståt iden att ha +- som förvalt typ i C ...
Gimbal
Inlägg: 7927
Blev medlem: 20 april 2005, 15:43:53

Re: Robot med helvarvs-servon

Inlägg av Gimbal »

Hur många värden behöver du i matrisen? Kanske räcker det med två bitar (4 värden), lite meckigare att programmera men inte ogörligt. Jag skulle nog gjort 1-bitars matriser och sedan använt så många jag behövt.
Ranstam
Inlägg: 456
Blev medlem: 17 november 2007, 21:20:16
Ort: LUND

Re: Robot med helvarvs-servon

Inlägg av Ranstam »

Tack för tankehjälpen!

Squiz3r: Atmegan har lite olika sorters minne, eprom och sram som är på 1kb/512b. Programminnet är på 16kb. Det normala tror jag är att variabler sparas i eprom/sram minnet, men om man använder ngt commando istil med ProgMem så ska det hamna i det större programminnet istället.


//Alexander
Skriv svar