Innholdsfortegnelse:

MATLAB -kontrollert Roomba: 5 trinn
MATLAB -kontrollert Roomba: 5 trinn

Video: MATLAB -kontrollert Roomba: 5 trinn

Video: MATLAB -kontrollert Roomba: 5 trinn
Video: Getting Started with MATLAB 2024, Juli
Anonim
MATLAB kontrollert Roomba
MATLAB kontrollert Roomba
MATLAB kontrollert Roomba
MATLAB kontrollert Roomba

Målet med dette prosjektet er å bruke MATLAB så vel som en modifisert iRobot programmerbar robot. Gruppen vår kombinerte kodingskunnskapene våre for å lage et MATLAB -skript som bruker mange funksjoner i iRobot, inkludert klippesensorer, støtfangersensorer, lyssensorer og kameraet. Vi brukte disse sensor- og kameramålingene som innganger, slik at vi kunne lage visse utganger vi ønsker ved hjelp av MATLAB -kodefunksjoner og sløyfer. Vi bruker også MATLAB -mobilenheten og gyroskopet som en måte å koble til iRobot og kontrollere den.

Trinn 1: Deler og materialer

Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer
Deler og materialer

MATLAB 2018a

-2018 -versjonen av MATLAB er den mest foretrukne versjonen, hovedsakelig fordi den fungerer best med koden som kobles til mobilenheten. Imidlertid kan det meste av koden vår tolkes i de fleste MATLAB -versjoner.

iRobot Opprett enhet

-Denne enheten er en spesialprodusert enhet som er eneste formål for programmering og koding. (Det er ikke et faktisk vakuum)

Raspberry Pi (med kamera)

- Dette er et ikke-dyrt datakort som fungerer som hjernen til iRobot. Den kan være liten, men den er i stand til mange ting. Kameraet er et ekstra tillegg. Den bruker også bringebær pi for å få alle funksjonene og kommandoene. Kameraet avbildet ovenfor er montert på et 3D -trykt stativ, laget av Engineering Fundamentals -avdelingene ved University of Tennessee

Trinn 2: Roomba -databasefil

Roomba -databasefil
Roomba -databasefil

Det er en hovedfil du trenger for å bruke de riktige funksjonene og kommandoene for din roomba. Denne filen er der du skrev kode som trekker funksjoner fra for å gjøre driften av din roomba mer håndterbar.

Du kan laste ned filen på denne lenken eller den nedlastbare filen nedenfor

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Trinn 3: Koble til Roomba

Først må du sørge for at roboten din er koblet til bringebær -pi -kortet ved å bruke en mikro -USB -plugg. Deretter må du koble datamaskinen og roboten til riktig WiFi. Når dette er gjort, kan du slå på roboten og koble til den ved hjelp av den angitte kommandoen i robotdatabasefilen. (Nullstill alltid roboten din før og etter at du bruker den). For eksempel bruker vi kommandoen "r.roomba (19)" for å koble til roboten vår, og tilordne variabelen r til enheten vår. Dette refererer tilbake til databasefilen, som setter opp variabelen vår som en struktur som vi kan referere til når som helst.

Trinn 4: Koden

Koden
Koden
Koden
Koden

Vi har vedlagt hele koden nedenfor, men her er en kort oversikt som fremhever de viktige elementene i skriptet vårt. Vi brukte alle sensorene, så vel som kameraet for å maksimere robotens potensial fullt ut. Vi inkluderte også kode som tillot oss å koble en mobil enhet til roboten vår og bruke gryoskopet til å kontrollere den manuelt.

Vi startet med den enkle kommandoen "r.setDriveVelocity (.06)" som setter robotens hastighet fremover til.06 m/s. Dette er bare for å få roboten i bevegelse på forhånd

Deretter starter vårt hovedskript med en stund -sløyfe som henter dataene til den gitte roboten ved å lage strukturer som vi kan referere til og bruke i betingede utsagn nedenfor, slik at vi kan fortelle roboten å utføre en bestemt kommando basert på strukturdata leser roboten med sine sensorer. Vi setter den opp slik at roboten leser klippesensorene og følger en svart bane

mens true % while loop går til noe "false" oppstår (i dette tilfellet fortsetter det uendelig) data = r.getCliffSensors; data2 = r.getBumpers; % henter data kontinuerlig om klippesensorverdiene og tildeler dem en variabel % img = r.getImage; % Tar et bilde fra det monterte kameraet % image (img); % Viser bildet som ble tatt % red_mean = mean (mean (img (:,:, 1))); % Tar gjennomsnittsverdien for den grønne fargen hvis data.rightFront <2000 r.turnAngle (-2); % snur Roomba omtrent 0,2 grader CW når verdien for høyre kliffesensor foran faller under 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % forteller Roomba å fortsette fremover med ca. 0,2 m/s hvis begge verdier fra høyre foran og venstre frontsensor faller under 2000 % r.turnAngle (0); % ber Roomba om ikke å snu hvis de ovennevnte betingelsene er sanne

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Etter denne mens loop, skriver vi inn en annen mens loop som utløser dataene som er innhentet gjennom kameraet. Og vi bruker en if -setning inne i denne mens loop som gjenkjenner et bilde ved hjelp av et bestemt program (alexnet), og når det identifiserer bildet, utløser det umiddelbart fjernkontrollen til den mobile enheten

anet = alexnet; % Tilordner alexnet deep learning til en variabel mens true % Infinite while loop img = r.getImage; img = forstørrelse (img, [227, 227]); label = classify (anet, img); hvis etikett == "papirhåndkle" || label == "kjøleskap" label = "vann"; sluttbilde (img); tittel (røyke (etikett)); drawow;

Mens -sløyfen som lar oss kontrollere enheten med telefonen, henter dataene fra telefonens gyroskop, og vi kobler den til en matrise som kontinuerlig strømmer data tilbake til MATLAB på datamaskinen. Vi bruker en if -setning som leser dataene til matrisen og gir en utgang som beveger enheten basert på visse verdier av telefonens gyroskop. Det er viktig å vite at vi brukte orienteringssensorene til den mobile enheten. Den en etter tre matrisen nevnt ovenfor er kategorisert etter hvert element i telefonens orienteringssensorer, som er azimut, tonehøyde og side. If -setningene skapte forhold som angav når siden overstiger verdiene 50 eller faller under -50, så beveger roboten en viss avstand fremover (positiv 50) eller bakover (negativ 50). Og det samme gjelder pitch -verdien. Hvis pitch -verdien overstiger verdien av 25 faller under -25, svinger roboten i en vinkel på 1 grader (positiv 25) eller negativ 1 grader (negativ 25)

mens sann pause (.1) % Pause på.5 sekunder før hver verdi tas Controller = iphone. Orientation; % Tilordner matrisen for verdiene for orienteringen til iPhone til en variabel Azimuthal = Controller (1); % Tilordner matrisens første verdi til en variabel Pitch = Controller (2); % Tilordner matrisens andre verdi til en variabel (vipp forover og bakover når iPhone holdes sidelengs) Side = Controller (3); % Tilordner matrisens tredje verdi til en variabel (vipp til venstre og høyre når iPhone holdes sidelengs) % Forårsaker en utgang basert på telefonens retning hvis Side> 130 || Side 25 r.moveDistance (-. 1) % Flytter Roomba omtrent 0,1 meter bakover hvis iPhone er vippet bakover minst 25 grader nedover side 25 r.turnAngle (-1) % Svinger Roomba omtrent 1 grad CCW hvis iPhone er vippet til venstre minst 25 grader ellers hvis Pitch <-25 r.turnAngle (1) % Vri Roomba omtrent 1 grad CW hvis iPhone er vippet minst 25 grader ende

Dette er bare høydepunktene i de viktigste delene av koden vår, som vi inkluderte hvis du raskt trenger å kopiere og lime inn en seksjon til din fordel. Imidlertid er hele koden vedlagt nedenfor om nødvendig

Trinn 5: Konklusjon

Denne koden som vi skrev er spesielt designet for roboten vår, så vel som vår overordnede visjon om prosjektet. Målet vårt var å bruke alle våre MATLAB -kodingskunnskaper for å lage et godt designskript som bruker de fleste av robotens funksjoner. Å bruke telefonkontrolleren er ikke så vanskelig som du kanskje tror, og vi håper koden vår kan hjelpe deg med å bedre forstå konseptet bak koding av en iRobot.

Anbefalt: