Labyrint Problemlösaren Robot, med artificiell intelligens med Arduino (7 / 10 steg)

Steg 7: Förenkla (optimera) sökvägen



Låt oss återvända till vårt exempel. Ser den första gruppen av korsningar, insåg vi att den första vänster förgrena sig är i själva verket en "återvändsgränd" och så, om roboten i stället för en "vänster Back-vänster" bara gått rakt på den första korsningen, mycket energi och tid skulle sparas! Med andra ord, skulle en sekvens "LBL" i själva verket vara samma som "S". Det är precis hur den fullständiga sökvägen kan optimeras. Om du analise alla möjligheter där en "U-sväng" används, uppsättningen 3 korsningar där denna "kovändning" ("B") visas ("xBx") kan minskas till en enda.

Ovanstående är endast ett exempel, nedan hittar du den kompletta listan av möjligheter (prova det):

  • LBR = B
  • LBS = R
  • RBL = B
  • SBL = R
  • SBS = B
  • LBL = S

Tar den fullständiga sökvägen eller vår exempel, kan vi minska det:

Stig = [LBLLLBSBLLBSLL] == > LBL = S

Stig = [SLLBSBLLBSLL] == > LBS = R

Stig = [SLRBLLBSLL] == > RBL = B

Stig = [SLBLBSLL] == > LBL = S

Stig = [SSBSLL] == > SBS = B

Stig = [SBLL] == > SBL = R

Stig = [RL]

Fantastiskt! Titta på exemplet det är mycket tydligt att om roboten tar höger vid första korsningen och efter det, en vänster, kommer det nå slutet av labyrinten i den kortaste vägen!

Första banan av labyrint Problemlösaren totala koden kommer att konsolideras i funktionen mazeSolve(). Denna funktion är i själva verket funktionen loop() använt tidigare, men med alla dessa åtgärder för optimering av lagring och sökvägen.

När den första banan slutade, måste Stig [] matrisen optimerad sökvägen. En ny variabel införs

unsigned int status = 0; lösa = 0; kommer labyrint slutet = 1

Nedan funktionen första banan:

void mazeSolve(void)
{

medan (! status)

{

readLFSsensors();

Switch (läge)

{

fall NO_LINE:

motorStop();

goAndTurn (vänster, 180);

recIntersection('B');

bryta;

fall CONT_LINE:

runExtraInch();

readLFSsensors();

om (läge! = CONT_LINE) {goAndTurn (vänster, 90); recIntersection('L');}

annat mazeEnd();

bryta;

fall RIGHT_TURN:

runExtraInch();

readLFSsensors();

om (läge == NO_LINE) {goAndTurn (rätt, 90). recIntersection('R');}

annat recIntersection('S');

bryta;

fall LEFT_TURN:

goAndTurn (vänster, 90);

recIntersection('L');

bryta;

fall FOLLOWING_LINE:

followingLine();

bryta;

}

}

}

Här introducerades en ny funktion: recIntersection (riktning)

Denna funktion används för butiken i korsningen och även att ringa en annan funktion simplifyPath(), som kommer att minska gruppen av 3 korsningar som innebär en "kovändning" som vi såg innan.

void recIntersection(char direction)
{

sökväg [pathLength] = riktning; Lagra korsningen i path-variabeln.

pathLength ++;

simplifyPath(); Förenkla den lärda vägen.

}


ÄRAN för den simplifyPath () funktion är att Patrick McCabe för sökvägen Solving kod (för detaljer, vänligen besök https://patrickmccabemakes.com! Strategin att sökvägen förenkling är att varje gång vi möter en sekvens xBx, vi kan förenkla det genom att skära ut återvändsgränd. Till exempel LBL == > S som vi såg i exemplet.

void simplifyPath()

{

om (pathLength < 3 || sökväg [pathLength-2]! = 'B') återvända; bara förenkla vägen om det näst sista tur var en "B"

int totalAngle = 0;

int i;

för (jag = 1; jag < = 3; i ++)

{

Switch(Path[pathLength-i])

{

fallet "R":

totalAngle += 90.

bryta;

fallet "L":

totalAngle += 270;

bryta;

fallet "B":

totalAngle += 180;

bryta;

}

}

totalAngle = totalAngle % 360; Få vinkeln som ett tal mellan 0 och 360 grader.

Switch(totalAngle) / / byta ut alla dessa varv med en.

{

fall 0:

sökväg [pathLength - 3] = s ';

bryta;

fall 90:

sökväg [pathLength - 3] = 'R';

bryta;

fall 180:

sökväg [pathLength - 3] = "B";

bryta;

fall 270:

sökväg [pathLength - 3] = 'L';

bryta;

}

pathLength-= 2. Sökvägen är nu två steg kortare.

}

Se Steg
Relaterade Ämnen

Labyrint Problemlösaren med Arduino och ArduMoto(Micromouse) V:1.2

Här '' Instructables'' syftar till att hjälpa någon maker, entusiast att göra sin egen labyrint Problemlösaren (Micromouse). Förekomsten av Micromouses har dateras tillbaka till 1950-talet och tävlingar hålls sedan dess. Även dessa tävlingar kan kräv...

Arduino talande Robot baserad artificiell intelligens

Detta projekt kommer att göra vår talande robot med artificiell intelligens-baserade Arduino.Än i våra tidigare projekt gjort vi vår robot vi checkade in telefonens röstkommando.Du kan se det här.Detta projekt att utveckla vår robot, röstkommandon ko...

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

Roboten labyrint Problemlösaren

Denna handledning hjälper dig skapa en Arduino baserad robot som kan lösa grundläggande linje labyrinter som inte har slutna slingor.Hur det fungerar:Roboten är programmerad att köra över de svarta linjerna av labyrinten och använda optiska sensorer...

Bygga din Internet kontrollerad Video-Streaming Robot med Arduino och Raspberry Pi

< the Instructable och koden är redo. Njut! Lämna en kommentar med du feedback! >Jag är (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel lärande i Max Shein Junior High School för avancerad vetenskap och matematik. Jag gör dett...

Hur man gör en mobiltelefon och dator kontrolleras 3D tryckta Robot med Arduino - IoBot.

Om du letar efter ett sätt att kontrollera en Arduino baserade enheter, kommer att denna anvisning Visa dig hur man gör det genom att bygga enkla robot.IoBot kan styras med mobil och dator ansökan via LAN eller USB-kabel. Programmet körs på Android,...

Hinder att undvika Robot med arduino

HINDER - ATT UNDVIKA ROBOTEtt hinder att undvika ROBOT är en som kan undvika ett hinder med hjälp av ultraljud sensor och gå i sin egen väg. Med en skärbräda bifogas roboten kan du spela roliga inom en kort tid. En sådan är vad vi ska diskutera här....

2WD röst kontrollerat Robot med Arduino och BitVoicer Server

I detta Instructable ska jag visa hur man bygger en 2WD röststyrd robot. Även om jag kontrollera endast DC motorer om du vill flytta roboten, samma tillvägagångssätt kan användas till röststyrning stegmotorer och servomotorer, så om du planerar att b...

Realtid ansikte spårning Robot med Arduino och Matlab

Realtid ansiktsspårning avser uppgiften att lokalisera ansikten i en videoström och spårning hittas eller igenkända ansikten. Numera finns det många verkliga tillämpningar av ansiktsavkänning och andra tekniker för bildbehandling. Det finns många alg...

Kontrollera en Roomba robot med Arduino och Android

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar på AUTOMATION tävling. Tack så mycket! ;-)Som en av robotteknik tävling 2016 vinnarna här på Instructables fick jag som pris en iRobot Roomba Create...

Avlägsen kontrollerade robot med Arduino och T.V. remote

Denna fjärrkontroll bil kan flyttas runt med praktiskt taget alla slags remote såsom TV, AC etc.Det använder sig av det faktum att fjärrkontrollen avger IR(infrared).Den här egenskapen är gjord använda av med hjälp av en IR-mottagare, vilket är en my...

Gör en Robot med Arduino för nybörjare

Steg 1: Material som behövs Tamiya spår och rullar in församling ($7,95 på Pololu)Tamiya 70168 dubbla växellåda Kit ($9,25 på Pololu)L298N dubbla H Bridge ($3,65 på Amazon och kan vara mycket lägre på ebay)4AA batterihållare (används från trasig elek...

SainSmart InstaBots upprätt Rover (själv balansera Robot med Arduino)

Upprätt Rover är en självbalanserande robot som ritades av SainSmart. De verkligen gjort det enkelt. Som ni ser, finns det bara 8 ledningar på robot och 8 ledningar på handkontrollen. Så låt oss ta reda på hur det fungerar!DELAR I RUTAN3 x Potentiome...

Gest kontroll car(robot) med Arduino och Android(bluetooth)

Hej folk,Här är ett intressant projekt för alla er kreativa hjärnor ute. Vi ska bygga en android-telefon kontrollerade RC bil.Inget kunde vara mer fascinerande än avlägsen kontrollerade bilar. Denna använder en Bluetooth för kommunikation och acceler...

Extremt enkel linje efter Robot med Arduino

I detta Instructable ska vi bygga en enkel allmän linje efter arduinobot. Det kommer att finnas ett stort utrymme för kreativitet i detta Instructable.Roboten, i denna tutorial, drivs av 4 AA-batterier och är kunna följa svart eltejp av en vit yta.St...

Gör en självbalanserande Robot med Arduino UNO

Själv balansera Robot är mycket intressant. Många vänner runt omkring oss försökte göra en, men de encounted en hel del chanllenges bland annat bristen på strukturerna som lätt-till-montering, de lämpliga elektroniska kretsarna och program. Så jag be...

Billig Robot med Arduino

jag ville lära mig elektronik, Arduino programmering, och lödning så jag tänkte att jag skulle plocka en av Randys projekt och kopiera den.Jag slutade med en annan motor konfiguration. Min front motor pekar ner och vänder lite kvartalet växel som vän...

Hur du använder verktyget Problemlösaren i Excel

syftet med denna guide är att introducera människor till datorprogrammet Microsoft Excel. Vi kommer särskilt att fokusera på Problemlösaren verktyg aspekten av programmet och hur användare kan använda det till sin fördel. Denna guide kommer att täcka...

Hur man har kul med Arduino (och bli en nörd i processen)

vill du tjäna din geek-kort - pronto? Låter komma igång! Denna guide börjar du på sökvägen till den mörka sidan med hjälp av öppen källkod Arduino utveckling och prototyping plattformen. Det kommer att introducera dig till mikrokontroller, komma igån...