Innehållsförteckning:

MATLAB -kontrollerad Roomba: 5 steg
MATLAB -kontrollerad Roomba: 5 steg

Video: MATLAB -kontrollerad Roomba: 5 steg

Video: MATLAB -kontrollerad Roomba: 5 steg
Video: HBFS Line Follower - Next Generation of Robots 2024, Juli
Anonim
MATLAB kontrollerad Roomba
MATLAB kontrollerad Roomba
MATLAB kontrollerad Roomba
MATLAB kontrollerad Roomba

Målet med detta projekt är att använda både MATLAB och en modifierad iRobot programmerbar robot. Vår grupp kombinerade våra kodningskunskaper för att skapa ett MATLAB -skript som använder många funktioner i iRobot, inklusive klippsensorer, stötfångarsensorer, ljussensorer och kameran. Vi använde dessa sensor- och kameravläsningar som ingångar, så att vi kunde skapa vissa utgångar som vi vill använda med MATLAB -kodfunktioner och loopar. Vi använder också MATLAB -mobilenheten och gyroskopet som ett sätt att ansluta till iRobot och styra den.

Steg 1: Delar och material

Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material
Delar och material

MATLAB 2018a

-2018 -versionen av MATLAB är den mest föredragna versionen, mest för att den fungerar bäst med koden som ansluts till den mobila enheten. De flesta av våra koder kan dock tolkas i de flesta MATLAB -versioner.

iRobot Skapa enhet

-Denna enhet är en specialtillverkad enhet som enda syfte är för programmering och kodning. (Det är inte ett verkligt vakuum)

Raspberry Pi (med kamera)

- Det här är ett dyrt datorkort som fungerar som hjärnan i iRobot. Den kan vara liten, men kan många saker. Kameran är ett extra tillägg. Den använder också hallon pi för att få alla dess funktioner och kommandon. Kameran på bilden ovan är monterad på ett 3D -tryckt stativ, skapat av Engineering Fundamentals -avdelningarna vid University of Tennessee

Steg 2: Roomba -databasfil

Roomba -databasfil
Roomba -databasfil

Det finns en huvudfil som du behöver för att använda rätt funktioner och kommandon för din roomba. Den här filen är där du skrev koden hämtar funktioner från för att göra driften av din roomba mer hanterbar.

Du kan ladda ner filen på denna länk eller den nedladdningsbara filen nedan

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

Steg 3: Ansluter till Roomba

Först måste du se till att din robot är ansluten till ditt hallon pi -kort med hjälp av en mikro -USB -kontakt. Då måste du korrekt ansluta din dator och robot till samma WiFi. När detta har gjorts kan du slå på din robot och ansluta till den med det angivna kommandot i robotdatabasfilen. (Återställ alltid din robot hårt före och efter att du har använt den). Till exempel använder vi kommandot "r.roomba (19)" för att ansluta till vår robot och tilldela variabeln r till vår enhet. Detta refererar tillbaka till databasfilen, som sätter upp vår variabel som en struktur som vi kan referera till när som helst.

Steg 4: Koden

Koden
Koden
Koden
Koden

Vi har bifogat hela koden nedan, men här är en kort översikt som belyser de viktiga elementen i vårt manus. Vi använde alla sensorer samt kameran för att maximera vår robots potential fullt ut. Vi inkluderade också kod som tillät oss att ansluta en mobil enhet till vår robot och använda dess gryoskop för att manuellt styra den.

Vi började med det enkla kommandot "r.setDriveVelocity (.06)" som sätter robotens framhastighet till.06 m/s. Detta är bara för att få roboten i rörelse i förväg

Sedan startas vårt huvudskript med en stundslinga som hämtar data från den givna roboten genom att skapa strukturer som vi kan referera till och använda i villkorliga uttalanden nedan, så att vi kan berätta för roboten att utföra ett visst kommando baserat på strukturdata roboten läser med sina sensorer. Vi ställer in den så att roboten läser sina klippsensorer och följer en svart väg

medan true % medan loop går tills något "falskt" inträffar (i detta fall fortsätter det oändligt) data = r.getCliffSensors; data2 = r.getBumpers; % hämtar data kontinuerligt om klippsensorns värden och tilldelar dem en variabel % img = r.getImage; % Tar en bild från den monterade kameran % image (img); % Visar bilden som togs % red_mean = medelvärde (medelvärde (img (:,:, 1))); % Tar medelvärdet för den gröna färgen om data.rightFront <2000 r.turnAngle (-2); % vrider Roomba ungefär 0,2 grader CW när värdet för höger främre klippsensorer faller under 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % uppmanar Roomba att fortsätta framåt med cirka 0,2 m/s om båda värdena från höger fram- och vänster frontsensorer faller under 2000 % r.turnAngle (0); % uppmanar Roomba att inte vända sig om ovanstående villkor är sanna

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);

Efter denna medan loop, anger vi en annan while loop som utlöser data som erhållits genom kameran. Och vi använder en if -sats i denna medan loop som känner igen en bild med ett specifikt program (alexnet), och när den identifierar bilden utlöser den omedelbart den mobila enhetens fjärrkontroll

anet = alexnet; % Tilldelar alexnet deep learning till en variabel medan true % Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); label = classify (anet, img); om etikett == "pappershandduk" || label == "kylskåp" label = "vatten"; slutbild (img); titel (char (etikett)); drawow;

While loop som gör att vi kan styra enheten med vår telefon hämtar data från telefonens gyroskop och vi ansluter den till en matris som kontinuerligt strömmar data tillbaka till MATLAB på datorn. Vi använder en if -sats som läser matrisens data och ger en utgång som flyttar enheten baserat på vissa värden i telefonens gyroskop. Det är viktigt att veta att vi använde orienteringssensorerna för den mobila enheten. Den en efter tre matrisen som nämns ovan kategoriseras av varje element i telefonens orienteringssensorer, som är azimut, tonhöjd och sida. If -uttalandena skapade förhållanden som angav när sidan överskrider värdena 50 eller faller under -50, då rör sig roboten ett visst avstånd framåt (positivt 50) eller bakåt (negativt 50). Och detsamma gäller pitchvärdet. Om pitchvärdet överstiger värdet 25 av faller under -25, vänder roboten i en vinkel på 1 grader (positiv 25) eller negativ 1 grader (negativ 25)

medan sann paus (.1) % Paus på.5 sekunder innan varje värde tas Controller = iphone. Orientation; % Tilldelar matrisen för värdena för iPhone -orienteringen till en variabel Azimuthal = Controller (1); % Tilldelar matrisens första värde till en variabel Pitch = Controller (2); % Tilldelar matrisens andra värde till en variabel (luta framåt och bakåt när iPhone hålls i sidled) Sida = Controller (3); % Tilldelar matrisens tredje värde till en variabel (luta åt vänster och höger när iPhone hålls i sidled) % Orsakar en utgång baserad på telefonens orientering om Sida> 130 || Sida 25 r.moveDistance (-. 1) % Flyttar Roomba cirka 0,1 meter bakåt om iPhone lutas bakåt minst 25 grader annars om sidan 25 r.turnAngle (-1) % Vänder Roomba cirka 1 grad CCW om iPhone lutas åt vänster minst 25 grader annars om Pitch <-25 r.turnAngle (1) % Vänder Roomba cirka 1 grad CW om iPhone lutar minst 25 grader

Det här är bara höjdpunkterna i de viktigaste delarna av vår kod, som vi inkluderade om du snabbt behöver kopiera och klistra in ett avsnitt till din fördel. Hela vår kod är dock bifogad nedan om det behövs

Steg 5: Slutsats

Den här koden som vi skrev är speciellt utformad för vår robot samt vår övergripande vision av projektet. Vårt mål var att använda alla våra MATLAB -kodningskunskaper för att skapa ett väldesignat manus som använder de flesta av robotens funktioner. Att använda telefonkontrollen är inte så svårt som du kanske tror, och vi hoppas att vår kod kan hjälpa dig att bättre förstå konceptet bakom kodning av en iRobot.

Rekommenderad: