Doolhof van Oplosser Robot, met behulp van kunstmatige intelligentie met Arduino (7 / 10 stap)

Stap 7: Vereenvoudiging (optimaliseren) het pad


Laten we terugkeren naar ons voorbeeld. Op zoek naar de eerste groep van kruispunten, we realiseerden ons dat het de eerste links tak is in feite een "doodlopende weg" en dus, als de Robot in plaats van een "links-rug-Left" alleen bij die eerste kruispunt rechtdoor doorgegeven, veel energie en tijd zou worden bespaard! Met andere woorden, een reeks "LBL" in feite zou hetzelfde zijn als "S". Dat is precies hoe het volledige pad kan worden geoptimaliseerd. Als u analise alle mogelijkheden waar een "U-bocht" wordt gebruikt, de set van 3 kruispunten waar deze "ommekeer" ("B") wordt weergegeven ("xBx") kunnen worden teruggebracht tot slechts één.

Het bovenstaande is slechts een voorbeeld, balg vindt u de volledige lijst van mogelijkheden (proberen):

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

Het volledige pad of ons voorbeeld nemen, kunnen we het verminderen:

Path = [LBLLLBSBLLBSLL] == > LBL = S

Path = [SLLBSBLLBSLL] == > LBS = R

Path = [SLRBLLBSLL] == > RBL = B

Path = [SLBLBSLL] == > LBL = S

Path = [SSBSLL] == > SBS = B

Path = [SBLL] == > SBL = R

Path = [RL]

Verbazingwekkend! Kijkend naar het voorbeeld het is duidelijk dat als de robot recht op eerste kruising, en daarna een links neemt, het einde van de doolhof in het kortste pad zal bereiken!

De eerste pad van doolhof Oplosser totale code zullen worden geconsolideerd in de functie mazeSolve(). Deze functie is in feite de loop functie eerder gebruikt, maar op de integratie van alle die stappen van de optimalisering van het opslaan en het pad.

Toen het eerste pad afliep, zal de pad [] array de geoptimaliseerde pad hebben. Een nieuwe variabele wordt ingevoerd

unsigned int status = 0; oplossen van = 0; Doolhof einde bereikt = 1

Blaten de eerste pad-functie:

VOID mazeSolve(void)
{

terwijl (! status)

{

readLFSsensors();

schakelaar (modus)

{

Case NO_LINE:

motorStop();

goAndTurn (links), 180;

recIntersection('B');

breken;

Case CONT_LINE:

runExtraInch();

readLFSsensors();

Als (modus! = CONT_LINE) {goAndTurn (links, 90); recIntersection('L');}

anders mazeEnd();

breken;

Case RIGHT_TURN:

runExtraInch();

readLFSsensors();

Als (modus == NO_LINE) {goAndTurn (recht, 90); recIntersection('R');}

anders recIntersection('S');

breken;

Case LEFT_TURN:

goAndTurn (LEFT, 90);

recIntersection('L');

breken;

Case FOLLOWING_LINE:

followingLine();

breken;

}

}

}

Hier een nieuwe functie geïntroduceerd: recIntersection (richting)

Deze functie zal worden gebruikt voor winkel het snijpunt en ook Bel een andere functie simplifyPath(), die de groep 3 kruispunten met betrekking tot een "bocht", zoals we voordat zagen zal verminderen.

VOID recIntersection(char direction)
{

pad [pathLength] = richting; Het snijpunt in de path variabele opslaan.

pathLength ++;

simplifyPath(); Vereenvoudig het geleerde pad.

}


Het krediet voor de simplifyPath () functie is het Patrick McCabe voor het pad Solving Code (voor meer informatie, bezoek https://patrickmccabemakes.com! De strategie van vereenvoudiging van het pad is dat wanneer we een reeks xBx tegenkomen, kunnen we het vereenvoudigen door te snijden de doodlopende weg. Bijvoorbeeld, LBL == > S zoals we op het voorbeeld zagen.

VOID simplifyPath()

{

Als (pathLength < 3 || pad [pathLength-2]! = 'B') weer; alleen het vereenvoudigen van het pad als de tweede-na-laatste beurt was een 'B'

int totalAngle = 0;

int i;

voor (ik = 1; ik < = 3; i ++)

{

switch(path[pathLength-i])

{

Case 'R':

totalAngle += 90;

breken;

geval 'L':

totalAngle += 270;

breken;

Case "B":

totalAngle += 180;

breken;

}

}

totalAngle = totalAngle % 360; Krijgen de hoek als een getal tussen 0 en 360 graden.

switch(totalAngle) / / vervangen van al die bochten met één.

{

Case 0:

pad [pathLength - 3] = de ';

breken;

geval 90:

pad [pathLength - 3] = 'R';

breken;

Case 180:

pad [pathLength - 3] = 'B';

breken;

Case 270:

pad [pathLength - 3] = 'L';

breken;

}

pathLength-= 2; Het pad is nu twee stappen korter.

}

Gerelateerde Artikelen

Arduino Robot praten op basis van kunstmatige intelligentie

Arduino Robot praten op basis van kunstmatige intelligentie

Dit project zal doen onze pratende robot met kunstmatige intelligentie gebaseerde Arduino.Dan wij in onze vorige project onze robot die we in de spraakopdrachten van de telefoon ingecheckt gemaakt.U kunt hier zien.Dit project dat we onze robot, spraa
Basic Line Na Robot met Arduino

Basic Line Na Robot met Arduino

09/07/2015Een paar jaar geleden dat we aanvankelijk gepost deze elementaire regel volgende Robot met Arduino tutorial, en lijkt zo veel mensen vonden het nuttig dat we een update die loopt van de huidige Arduino Bibliotheken, moet post bevat de nieuw
Maken van een Robot met Arduino voor Beginners

Maken van een Robot met Arduino voor Beginners

Stap 1: Materialen die nodig zijn Tamiya Track en wiel instellen vergadering ($7.95 op Pololu)Tamiya 70168 dubbele versnellingsbak Kit ($9.25 op Pololu)L298N Dual H Bridge ($3.65 bij Amazon en misschien wel veel lager bij ebay)4AA batterijhouder (geb
Hoe maak je een mobiele telefoon en Computer gecontroleerd 3D gedrukte Robot met Arduino - IoBot.

Hoe maak je een mobiele telefoon en Computer gecontroleerd 3D gedrukte Robot met Arduino - IoBot.

Als u op zoek bent naar een manier om een Arduino gebaseerde apparaten te controleren, zal deze instructie u tonen hoe om het te doen door het bouwen van eenvoudige robot.De IoBot kan worden gecontroleerd door mobiel en computer toepassing via LAN of
Obstakel te vermijden Robot met arduino

Obstakel te vermijden Robot met arduino

OBSTAKEL - VERMIJDEN ROBOTEen obstakel te vermijden ROBOT is een die kan een obstakel te vermijden met behulp van ultrasone sensor en navigeren in haar eigen pad. Met een breadboard gekoppeld aan de robot kunt u plezier spelen binnen een korte period
Real Time ' Face-Tracking Robot met Arduino en Matlab

Real Time ' Face-Tracking Robot met Arduino en Matlab

Real time ' face-tracking verwijst naar de taak van het opsporen van menselijke gezichten in een video-stream en bijhouden van de gedetecteerde of herkende gezichten. Er zijn tegenwoordig veel echte wereld toepassingen van gezichtsherkenning en ander
Externe gecontroleerde robot met Arduino en T.V. afstandsbediening

Externe gecontroleerde robot met Arduino en T.V. afstandsbediening

Deze externe gecontroleerde auto kan worden verplaatst met behulp van vrijwel elk soort ras zoals TV, AC enz.Het maakt gebruik van het feit dat de afstandsbediening IR(infrared) uitzendt.Deze eigenschap is gemaakt met behulp van een IR-ontvanger, die
2WD stem gecontroleerde Robot met Arduino en BitVoicer Server

2WD stem gecontroleerde Robot met Arduino en BitVoicer Server

In dit Instructable ga ik tonen hoe te om een 2WD spraakgestuurde robot te bouwen. Hoewel ik ben alleen gelijkstroommotoren als wilt verplaatsen de robot controle, dezelfde aanpak kan worden gebruikt voor de controle van de stem stappenmotoren en ser
Maak een zelfbalancerende Robot met Arduino UNO

Maak een zelfbalancerende Robot met Arduino UNO

Self balancing Robot is zeer interessant. Veel vrienden om ons heen wilden maken een, maar ze encounted alot van chanllenges met inbegrip van het ontbreken van de gemakkelijk-aan-de vergadering van structuren, de geschikte elektronische schakelingen
Gesture control car(robot) met Arduino en Android(bluetooth)

Gesture control car(robot) met Arduino en Android(bluetooth)

Hallo mensen,Hier is een interessant project voor alles wat je daar creatieve geesten. We gaan om een android telefoon gecontroleerde RC auto te bouwen.Niets zou zijn meer fascinerend dan extern gecontroleerde auto. Deze maakt gebruik van Bluetooth v
SainSmart InstaBots rechtop Rover (Self Balancing Robot met Arduino)

SainSmart InstaBots rechtop Rover (Self Balancing Robot met Arduino)

Rechtop Rover is een zelfbalancerende robot die werd ontworpen door SainSmart. Ze maakten het echt eenvoudig. Zoals u zien kunt, zijn er slechts 8 draden op de robot en 8 draden op de controller. Dus laten we het weten hoe het werkt!ONDERDELEN IN HET
Goedkope Robot met Arduino

Goedkope Robot met Arduino

ik wilde leren elektronika, Arduino, programmering, en het solderen dus ik dacht dat ik zou halen een van Randy's projecten en kopiëren.Ik beëindigde omhoog met een andere motor configuratie. Mijn voorste motor omlaag wijst en verandert een beetje kw
Uiterst eenvoudig Line Na Robot met Arduino

Uiterst eenvoudig Line Na Robot met Arduino

In dit Instructable gaan we om te bouwen van een eenvoudige generische lijn na arduinobot. Er zullen veel ruimte voor creativiteit in dit Instructable.De robot, in deze tutorial wordt gevoed off van 4 AA batterijen en kan volgen van zwarte isolatieta
Maak een eenvoudige draadloze RF robot met behulp van Arduino!

Maak een eenvoudige draadloze RF robot met behulp van Arduino!

UPDATE: IK HEB JOYSTICK-CONTROLE TOEGEVOEGD AAN DEZE ROBOT. GELIEVE TE VERWIJZEN NAAR DE STAP 7, ALS U WILT BEPALEN UW ROBOT VIA JOYSTICK.HalloDit is mijn eerste instructable en in deze tutorial, I 'm gonna Toon u hoe te bouwen van een eenvoudige dra