Robot med helvarvs-servon
Robot med helvarvs-servon
Hej
Håller på att sätta ihop en liten robot, tänkte det kunde vara kul att exprimentera lite med.
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
Håller på att sätta ihop en liten robot, tänkte det kunde vara kul att exprimentera lite med.
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
Re: Robot
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å.
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å.
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Re: Robot
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.
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
Ä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.
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
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Re: Robot
Häftig robot, liknar mycket de som säljs (såldes?) i elfa
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?
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?
Re: Robot
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!)
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++;
Re: Robot
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:
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:
sen har du missat några == på några ställen
t.ex.
skall vara
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:
i början.
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++;
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;
}
t.ex.
Kod: Markera allt
if(proxim = 1)
Kod: Markera allt
if(proxim == 1)
Jag antar att du kanske skall ha:
Kod: Markera allt
int proxim=0;
Re: Robot
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 Har jo lagt merke til andre som nesten blir sur om en gjør noen små skrivefeil i koden . Det fungerer mye bedre med oppmuntring enn fordømming og sure oppstøt.
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 Har jo lagt merke til andre som nesten blir sur om en gjør noen små skrivefeil i koden . Det fungerer mye bedre med oppmuntring enn fordømming og sure oppstøt.
Re: Robot
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
Ä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
Re: Robot
ä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?
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?
Re: Robot med helvarvs-servon
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.
Re: Robot med helvarvs-servon
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
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