Obstakel vermijden met behulp van kunstmatige intelligentie
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
| ||||
| ||||
| ||||
| ||||
| ||||
| ||||
|
Apps en online services
|
Over dit project
OBSTAKEL VERMIJDEN ROBOT MET GEBRUIK VAN AI/REINFORCEMENT LEREN
Probleemstelling: Het belangrijkste doel is om te leren obstakels in "N" afleveringen te vermijden en de optimale actie te leren. Laten we in dit geval aannemen dat we onze robot nodig hebben om optimale actie als 'juist' te leren.
Gebruikt versterkingsalgoritme: Q leren
Hoe L298N twee gelijkstroommotoren aandrijft:
Hoe de HC-SR04-sensor afstand berekent:
Belangrijke termen in versterkend leren:
int ACTIES =[0,1,2,3]
/* HIER :
0 =VOORUIT
1 =ACHTERUIT
2 =STOP
3 =RECHTS*/
/*NA HET UITVOEREN VAN EEN ACTIE GAAT DE ROBOT IN DE VOLGENDE STAAT IN DIT GEVAL VAN OBSTAKEL
VERMIJD ROBOT*/
int NEXT_STATE;
int STATE =0;
NEXT_STATE =STATE+1;
float Q[N_STATES][NUMBER_OF_ACTIONS] ={{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0 ,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0 }};
Hier N_STATES =10 AND N_ACTIONS =4. hier geeft "0.0" aan dat elke actie kan worden uitgevoerd vanuit een van de 4 mogelijke acties. als u echter een fijnstof wilt verwijderen actie in een staat vervang gewoon "0.0" door "-1.0" in de matrix. "-1.0" geeft aan dat de actie in die staat niet kan worden uitgevoerd. hier wordt aangenomen dat we 10 verschillende staten hebben waarbij elke staat dezelfde actie verwacht. als je wilt dat je robot acties leert die in elke staat anders zijn, verander dan de beloningen uit de beloningsmatrix in de code
int REWARDS[STATES][NUMBER_OF_ACTTIONS] ={{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10}};
Hyperparameters bij leren van bekrachtiging:
float ALPHA =0.2;
float GAMMA =0,9;
float EPSILON =0,75;
Q-LEARNING ALGORITHM:
- Initialiseer de tabel met Q-waarden, Q(s, a) . Ik heb deze waarden geïnitialiseerd op 0.0.
- Bekijk de huidige staat, s .
- Kies een actie, een , voor die staat op basis van een van de actieselectiebeleidslijnen die hier op de vorige pagina zijn uitgelegd (📷-soft, 📷-greedy of softmax).
//////////////////////////Epsilon Greedy Policy/////////////// ///////////////
PROB =RANDOM(EPSILON);
if (PROB<=EPSILON) //ONTDEK DE ACTIES
{
ACTIE =willekeurig(0,4);
VLAG =2;
}
else //EXPLOIT DE ACTIES VANUIT Q TABLE
{
ACTIE =ARGMAX(Q,STATE);
VLAG =2;
}
- Onderneem actie en observeer de beloning, r , evenals de nieuwe staat, s' .
- Werk de Q-waarde voor de staat bij met behulp van de waargenomen beloning en de maximaal mogelijke beloning voor de volgende staat. Het bijwerken gebeurt volgens de hierboven beschreven formule en parameters.
- Stel de status in op de nieuwe status en herhaal het proces totdat een eindstatus is bereikt.
- Om Q-learning te begrijpen bezoek deze link beter:https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c
///////////////////Implementatie van Q_Learning Formula///////////////////// ////
Q_OLD =Q_TABLE[S][A];
Q_MAX =MAX(Q_TABLE, NEXT_S);
Q_NEW =(1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX);
Serial.print("Q VALUE:");
Serial.println(Q_NEW);
Q_TABLE[S][A] =Q_NEW;
Werkvideo:vergeet niet de werkvideo van AI Robot te bekijken :)
Code
- Obstakel vermijden Robot met Q-LEARNING
Robot voor het vermijden van obstakels met Q-LEARNINGC/C++
DIT IS EEN OP KUNSTMATIGE INTELLIGENTIE GEBASEERDE OBSTAKELVERMIJDING ROBOT'S HOOFDCODE./* Dit is een obstakel vermijdende robot met behulp van Reinforcement Learning/AI Auteur van dit project:Varun Walimbe Algoritme gebruikt in dit project:Q learningHoe obstakel vermijden werkt?1.Ultrasoon sensor wordt gebruikt, meet de afstand tot het obstakel met behulp van de Echo- en Trig-pinnen. 2. Wanneer de afstand wordt gemeten en als deze minder dan 20 cm is, is er een obstakel in de buurt, anders is de robot veilig en gaat vooruit. 3. Als een obstakel wordt gedetecteerd, neemt de robot draai naar links of rechts, afhankelijk van de situatie. Hoe werkt het vermijden van obstakels op basis van AI? (Q-leren) 1. Hier blijft de 1e stap van het bovenste artikel hetzelfde. De 2e stap is echter anders. 2. Een lijst met acties van de robot is eerst geïnitialiseerd. In dit geval zijn acties van de robot bijvoorbeeld:Links, Vooruit, Achteruit, Stop. 3. Wanneer de robot in de buurt van een obstakel komt, moet hij een actie uitvoeren. Houd er echter rekening mee dat de robot in dit geval niet weet welke actie hij moet ondernemen, omdat deze niet voorgeprogrammeerd is en uit zichzelf leert om obstakels te vermijden. 4. Wanneer de robot stopt wanneer er een obstakel voor hem staat, krijgt hij een beloning als 0 Wanneer de robot stopt en achteruit gaat, ontvangt hij een beloning van -5. Wanneer de robot vooruit blijft gaan en de obstakels negeert, ontvangt hij een beloning van -10. Wanneer de robot net naar links beweegt zodra een obstakel wordt gedetecteerd, krijgt hij een beloning van +105. Op deze manier krijgt de robot leert zelfstandig obstakels te vermijden door beloningsmechanisme.*///////////ROBOT'S HARDWARE PARAMETERS////////////////////int TRIG_PIN =7;int ECHO_PIN =8;int duur;float distance;int M1 =13;int M2 =12;int M3 =11;int M4 =10;bool Obstacle =false;int FLAG;////////// ///////////////EINDE////////////////////////////////// ////////////////////////////////Q LEERPARAMETERS/////////////// ////////////////////////////float ALPHA =0,1; // LEERSNELHEIDfloat GAMMA =0,5; // KORTINGSFACTORfloat EPSILON =0,90; //EXPLORATIE PARAMETERint BELONING; // BELONING VOOR HET UITVOEREN VAN EEN ACTIE in EPISODES =100; int STATE; // HUIDIGE STAAT VAN DE ROBOTint-ACTIE =0; //ACTIE UITGEVOERD DOOR DE ROBOT (0:FORWARD,1:BACKWARD,2;STOP,3:LEFT)float PROB; //GEBRUIKT VOOR EPSILON DECAY bool ACTION_TAKEN =false; //DEZE VARIABELEN VERTELLEN ONS OF EEN ACTIE IS GENOMEN OF NIET IN NEXT_STATE; // VOLGENDE STAAT VAN DE ROBOTconst int STATES =10; // AANTAL STATEN IN OMGEVING int ACTIES [4] ={1,2,3,4};const int NUMBER_OF_ACTIES =4; //TOTAAL WE HEBBEN 4 ACTIE VOORUIT, ACHTERUIT, LINKS EN STOP/*DIT IS DE Q MATRIX OF Q-TABEL. DIT IS IN BASIS HET DAGBOEK DAT DE ROBOT ZAL BEKIJKEN ALVORENS EEN ACTIE UIT TE VOEREN. GEBASEERD OP DE ACTIE ZAL DE ROBOT BELONING VERDIENEN EN DE Q-WAARDE WORDT IN DEZE Q-TABEL BIJGEWERKT. HIER HEB IK 10 STATEN BESCHOUWD. IK BEN AANGESTELD DAT ALLE STATEN VERSCHILLEND ZIJN, OOK AL ZIJN ZE HETZELFDE. IN BASIS OBSTAKEL VERMIJDEN ROBOT BEVAT SLECHTS TWEE STATEN. Bijvoorbeeld:1:WANNEER HET OBSTAKEL VERWIJDERT 2:WANNEER HET DICHTBIJ HET OBSTAKEL BENT, HIER OM MEER TE ILLUSTREREN 10 VERSCHILLENDE STATEN DIE DEZELFDE/VERSCHILLENDE ACTIE VERWACHTEN.*/float Q[STATES][NUMBER_OF_ACTTIONS] ={{0.0,0.0,0.0,0.0}, // HET BELANGRIJKSTE VAN ALLES IS DE Q-TABEL. {0.0,0.0,0.0,0.0}, //HET WORDT GEVORMD DOOR STATEN ALS HAAR RIJEN {0.0,0.0,0.0,0.0}, //EN COLLUMNS ALS HET AANTAL ACTIES {0.0,0.0,0.0,0.0}, / /INITIALISEERD NAAR NUL IN HET BEGIN {0.0,0.0,0.0,0.0}, // DIT WORDT IN DE TOEKOMST BIJGEWERKT. {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}};/*DIT IS EEN BELONINGSMATRIX OF BELONINGSTABEL. DIT IS VERANTWOORDELIJK VOOR HET GEVEN VAN BELONING AAN ROBOT VOOR HET UITVOEREN VAN BEPAALDE ACTIE. HET BEWAART DE BELONING VOOR ELKE ACTIE DIE IN DE STAAT WORDT GENOMEN. DE BELONING ZAL POSITIEF ZIJN INDIEN DE UITGEVOERDE ACTIE GOED EN NEGATIEF IS ALS DE ACTIE SLECHTE RESULTATEN OPLEIDT.*/int REWARDS[STATES][NUMBER_OF_ACTTIONS] ={{-10,-2,-1,10}, {-10,-2 ,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10, -2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {- 10,-2,-1,10}}; ////////////////////////////////////////////EINDE///// ////////////////////////////////////////////////// ////////////Q LEREN UPDATE PARAMETERS////////////float Q_OLD;float Q_NEW;float Q_MAX;///////////// /////////////END//////////////////////////void setup() { Serial.begin (9600 ); pinMode (TRIG_PIN, UITGANG); pinMode(ECHO_PIN,INPUT); pinMode (M1, UITGANG); pinMode (M2, UITGANG); pinMode (M3, UITGANG); pinMode (M4, UITGANG); randomSeed (analogRead (A0)); STAAT =0; Serial.println("TRAINING BEGINT OVER 5 SECONDEN:"); vertraging (5000);} ////////////////////////////ROBOT'S FUNCTIES////////////// ///////////////////void Forward(){digitalWrite(M1,LOW); digitalWrite (M2, HOOG); digitalWrite (M3, LAAG); digitalWrite (M4, HOOG); }void Backward(){ digitalWrite(M1,HIGH); digitalWrite (M2, LAAG); digitalWrite (M3, HOOG); digitalWrite(M4,LOW);}void Left(){ digitalWrite(M1,HIGH); digitalWrite (M2, LAAG); digitalWrite (M3, LAAG); digitalWrite(M4,HIGH);}nietig Rechts(){ digitalWrite(M1,LOW); digitalWrite (M2, HOOG); digitalWrite (M3, HOOG); digitalWrite(M4,LOW);}void Stop(){ digitalWrite(M1,LOW); digitalWrite (M2, LAAG); digitalWrite (M3, LAAG); digitalWrite(M4,LOW);}bool Obstacle_Avoider(){ digitalWrite(TRIG_PIN, HIGH); vertraging Microseconden (10); digitalWrite(TRIG_PIN, LAAG); duur =pulseIn(ECHO_PIN, HOOG); afstand =(duur/2)/29.1; if (afstand <15) { Obstakel =waar; } if(distance>15) { Obstacle =false; } vertraging(10); terugkeer Obstakel;}////////////////////////////////////////////END/ ////////////////////////////////////////////////// ////////////////////////////ROBOT'S Q LEERFUNCTIES////////////////// //////////////////float RANDOM(float EXPLORATION_PARAMETER){ /*DEZE FUNCTIE VINDT EEN WILLEKEURIG NUMMER DAT BESLIST OF EEN ACTIE WILLEKEURIG IS OF VANAF Q_TABLE*/ float RANDOM_VARIABLE; zweven WAARSCHIJNLIJKHEID; RANDOM_VARIABLE =willekeurig (0,100); KANS =RANDOM_VARIABLE/100; return PROBABILITY;}float DECAY(float PARAMETER){ /*DEZE FUNCTIE WORDT GEBRUIKT OM EPSILON(EXPLORATION PARAMETER) MET TIJD TE VERMINDEREN. AAN HET EINDE KRIJG JE EPSILON EN DE ROBOT LEERT OBSTAKELS OP ZIJN EIGEN PARAMETER TE VERMIJDEN */ PARAMETER =*0,98; //PARAMETER HIER IS DE EPSILON return PARAMETER;}int GET_STATE(){int STATE_NUMBER; STATE_NUMBER =willekeurig (0,10); return STATE_NUMBER;}float MAX(float Q_Table[][4],int NEXT_S){ /*DEZE FUNCTIE VINDT HET GROOTSTE AANTAL IN Q_TABLE[NEXT_STATE]. DE BELANGRIJKSTE ROL VAN DEZE FUNCTIE IS HET VINDEN VAN Q_MAX PARAMETER*/float LIST[4]; vlotter N1; vlotter N2; zweven MAX_VALUE=0.0; zweven DIFF; for(int b =0; b<=3; b++) { LIST[b] =Q[NEXT_S][b]; } for(int j =0; j<=2; j++) { if(MAX_VALUE>LIST[j]) { N1 =MAX_VALUE; } else { N1 =LIJST[j]; } N2 =LIJST[j+1]; DIFF =N1-N2; if (DIFF> 0) { MAX_VALUE =N1; } else { MAX_VALUE =N2; } } return MAX_VALUE;}int ARGMAX(float Q_Table[][4],int S){ /*DEZE FUNCTIE VINDT DE INDEX VAN DE GROOTSTE Q-WAARDE IN Q TABLE[STATE]*/ float ARRAY[4]; vlotter N1; vlotter N2; zweven MAX_VALUE =0.0; zweven DIFF; vlotter NUMMER; int MAX_INDEX; for(int u=0; u<=3; u++) { ARRAY[u] =Q_Table[S][u]; } for(int p =0; p<=2; p++) { if(MAX_VALUE>ARRAY[p]) { N1 =MAX_VALUE; } anders { N1 =ARRAY[p]; } N2 =ARRAY[p+1]; DIFF =N1-N2; if (DIFF> 0) { MAX_VALUE =N1; } else { MAX_VALUE =N2; } } for(int r =0; r<=3;r++) { AANTAL =ARRAY[r]; if(NUMBER ==MAX_VALUE) { MAX_INDEX =r; pauze; } } return MAX_INDEX;}void Update(float Q_TABLE[][4] , int S, int NEXT_S, int A, int ACTIES[], int R, float LEARNING_RATE, float DISCOUNT_FACTOR){ /*DEZE FUNCTIE UPDATES DE Q-TABEL EN Q-WAARDEN. DEZE UPDATE BLIJFT GEBEUREN TOT DE HOOFDLUS EINDIGT. AAN HET EINDE VAN DE EPISODEN IS DE Q-TABEL GEVULD MET VERSCHILLENDE WAARDEN. HOE HOGER DE WAARDEN, HOE GROTERE BELANG DE ACTIE IN DIE BEPAALDE STAAT HEEFT. "Q_OLD" IS OUDE WAARDE DIE DE Q MATRIX HEEFT. DIT IS DE WAARDE DIE EVENTUEEL WORDT BIJGEWERKT. Q_NEW IS DE NIEUWE Q_VALUE DIE WORDT BEREKEND DOOR DE Q LEERFORMULE. DE HIER GEBRUIKTE Q LEERFORMULE IS GEBASEERD OP DE BELLMAN-VERGELIJKING GEBRUIKT EEN TEMPORAL VERSCHIL LEERAANPAK. NEXT_S); Q_NEW =(1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX); Serial.print("Q VALUE:"); Serial.println(Q_NEW); Q_TABLE[S][A] =Q_NEW }//////////////////////////////////////////////// ///////////EINDE////////////////////////////////////// ////////////////////////////////////////////////// ////////////////BEGIN VAN HOOFDLUS////////////////////////////// ///////////////////void loop() { ////////////////////////// ///////////////OPLEIDING////////////////////////////////// ////////// for(int I =0; ISchema's
obstakel_avoiding_robot_using_ai_DcoMCWIOFm.fzz
Productieproces
- Arrow Electronics kondigt Artificial Intelligence Experience Tour aan
- Een mobiele robot met op zicht gebaseerde obstakelvermijding
- Bosch voegt kunstmatige intelligentie toe aan industrie 4.0
- Is kunstmatige intelligentie fictie of rage?
- Kunstmatige intelligentie krijgt enorme Kubernetes-boost
- Kunstmatige intelligentie speelt een grote rol in het IoT
- Het is vroeg voor kunstmatige intelligentie in ICS Cybersecurity
- Kunstmatige intelligentie voorspelt het gedrag van kwantumsystemen
- Kunstmatige intelligentie gebruiken om ontbossing te volgen
- Kunstmatige Intelligentie Robots
- Kunstmatige intelligentie is geen app; Het is een methodologie