Inhoudsopgave:

MATLAB-gestuurde Roomba: 5 stappen
MATLAB-gestuurde Roomba: 5 stappen

Video: MATLAB-gestuurde Roomba: 5 stappen

Video: MATLAB-gestuurde Roomba: 5 stappen
Video: Controlling Irobot Create from MATLAB GUI 2024, Juli-
Anonim
MATLAB Gecontroleerde Roomba
MATLAB Gecontroleerde Roomba
MATLAB Gecontroleerde Roomba
MATLAB Gecontroleerde Roomba

Het doel van dit project is om zowel MATLAB als een aangepaste iRobot programmeerbare robot te gebruiken. Onze groep combineerde onze codeervaardigheden om een MATLAB-script te maken dat veel functies van de iRobot gebruikt, waaronder de klifsensoren, bumpersensoren, lichtsensoren en de camera. We gebruikten deze sensor- en camera-uitlezingen als input, waardoor we bepaalde outputs kunnen creëren die we willen met behulp van MATLAB-codefuncties en loops. We gebruiken ook het MATLAB mobiele apparaat en de gyroscoop als een manier om verbinding te maken met de iRobot en deze te bedienen.

Stap 1: Onderdelen en materialen

Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen
Onderdelen en materialen

MATLAB 2018a

-De 2018-versie van MATLAB heeft de meeste voorkeur, vooral omdat deze het beste werkt met de code die verbinding maakt met het mobiele apparaat. De meeste van onze code kan echter worden geïnterpreteerd in de meeste MATLAB-versies.

iRobot Apparaat maken

-Dit apparaat is een speciaal gemaakt apparaat dat uitsluitend bedoeld is voor programmeren en coderen. (Het is geen echt vacuüm)

Raspberry Pi (met camera)

- Dit is een niet-duur computerbord dat werkt als het brein van de iRobot. Het is misschien klein, maar is tot veel in staat. De camera is een extra toevoeging. Het gebruikt ook de raspberry pi om al zijn functies en commando's te verkrijgen. De hierboven afgebeelde camera is gemonteerd op een 3D-geprinte standaard, gemaakt door de Engineering Fundamentals-afdelingen van de Universiteit van Tennessee

Stap 2: Roomba-databasebestand

Roomba-databasebestand
Roomba-databasebestand

Er is een hoofdbestand dat u nodig hebt om de juiste functies en opdrachten voor uw roomba te gebruiken. Dit bestand is waar uw geschreven code functies uit put om de bediening van uw roomba beter beheersbaar te maken.

U kunt het bestand downloaden via deze link of het downloadbare bestand hieronder

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

Stap 3: Verbinding maken met Roomba

Eerst moet u ervoor zorgen dat uw robot is aangesloten op uw Raspberry Pi-bord met behulp van een micro-USB-stekker. Dan moet je je computer en robot goed met dezelfde wifi verbinden. Zodra dit is gebeurd, kunt u uw robot inschakelen en verbinding maken met de gegeven opdracht in het robotdatabasebestand. (Reset uw robot altijd hard voor en nadat u hem gebruikt). We gebruiken bijvoorbeeld het commando "r.roomba(19)" om verbinding te maken met onze robot, waarbij we de variabele r toewijzen aan ons apparaat. Dit verwijst terug naar het databasebestand, dat onze variabele instelt als een structuur waarnaar we op elk moment kunnen verwijzen.

Stap 4: De code

De code
De code
De code
De code

We hebben de volledige code hieronder bijgevoegd, maar hier is een kort overzicht dat de belangrijke elementen in ons script benadrukt. We hebben alle sensoren en de camera gebruikt om het potentieel van onze robot volledig te benutten. We hebben ook een code toegevoegd waarmee we een mobiel apparaat met onze robot konden verbinden en de gryoscoop ervan konden gebruiken om hem handmatig te bedienen.

We begonnen met het eenvoudige commando "r.setDriveVelocity(.06)" dat de voorwaartse snelheid van de robot instelt op 0,06 m/s. Dit is alleen om de robot vooraf in beweging te krijgen

Vervolgens begint ons hoofdscript met een while-lus die de gegevens van de gegeven robot ophaalt door structuren te maken waarnaar we kunnen verwijzen en die we kunnen gebruiken in voorwaardelijke instructies hieronder, waardoor we de robot kunnen vertellen dat hij een bepaald commando uitvoert op basis van de structuurgegevens de robot leest met zijn sensoren. We hebben het zo ingesteld dat de robot zijn klifsensoren leest en een zwart pad volgt

terwijl true % while loop gaat totdat er iets "false" optreedt (in dit geval gaat het oneindig door) data = r.getCliffSensors; data2 = r.getBumpers;% haalt continu gegevens op over de waarden van de klifsensoren en wijst deze toe aan een variabele % img = r.getImage; % Neemt een foto van de gemonteerde camera % image(img); % Toont de genomen afbeelding % red_mean = mean(mean(img(:,:, 1)));% Neemt de gemiddelde waarde voor de groene kleur als data.rightFront < 2000 r.turnAngle(-2); % draait de Roomba ongeveer 0,2 graad CW zodra de waarde voor de klifsensoren rechtsvoor onder de 2000 r.setDriveVelocity(.05) komt; elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % vertelt de Roomba om vooruit te blijven gaan met ongeveer 0,2 m/s als beide waarden van de sensoren rechtsvoor en linksvoor onder 2000 % r.turnAngle(0) komen; % vertelt de Roomba om niet te draaien als de bovengenoemde voorwaarden waar zijn

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

Na deze while-lus komen we in een andere while-lus die de gegevens activeert die via de camera zijn verkregen. En we gebruiken een if-statement in deze while-lus die een afbeelding herkent met behulp van een specifiek programma (alexnet), en zodra deze de afbeelding identificeert, wordt de afstandsbediening van het mobiele apparaat onmiddellijk geactiveerd

anet = alexnet; % Wijst alexnet deep learning toe aan een variablewhile true % Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); label = classificeren (anet, img); if label == "papieren handdoek" || label == "koelkast" label = "water"; eind afbeelding (img); titel (char (label)); getekend;

De while-lus waarmee we het apparaat met onze telefoon kunnen bedienen, haalt die gegevens op uit de gyroscoop van de telefoon en we pluggen deze in een matrix die continu gegevens terugstroomt naar MATLAB op de computer. We gebruiken een if-statement dat de gegevens van de matrix leest en een uitvoer geeft die het apparaat beweegt op basis van bepaalde waarden van de gyroscoop van de telefoon. Het is belangrijk om te weten dat we de oriëntatiesensoren van het mobiele apparaat hebben gebruikt. De hierboven genoemde één bij drie matrix is gecategoriseerd door elk element van de oriëntatiesensoren van de telefoon, namelijk azimut, toonhoogte en zijkant. De if-statements creëerden voorwaarden die stelden dat wanneer de zijde de waarden 50 overschrijdt of onder de -50 komt, de robot een bepaalde afstand vooruit (positief 50) of achteruit (negatief 50) beweegt. En hetzelfde geldt voor de toonhoogte. Als de pitchwaarde de waarde van 25 overschrijdt of onder -25 komt, draait de robot in een hoek van 1 graad (positief 25) of min 1 graad (negatief 25)

while true pause(.1) % Pauze van 0,5 seconden voordat elke waarde wordt genomen Controller=iphone. Oriëntatie; % Wijst de matrix voor de waarden van de oriëntatie van de iPhone toe aan een variabele Azimuthal=Controller(1); % Wijst de eerste waarde van de matrix toe aan een variabele Pitch=Controller(2); % Wijst de tweede waarde van de matrix toe aan een variabele (naar voren en naar achteren kantelen wanneer de iPhone zijwaarts wordt gehouden) Side=Controller(3); % Wijst de derde waarde van de matrix toe aan een variabele (naar links en rechts kantelen wanneer de iPhone zijwaarts wordt gehouden) % Veroorzaakt een uitvoer op basis van de oriëntatie van de telefoon als Zijde > 130 || Zijde 25 r.moveDistance(-.1) % Beweegt de Roomba ongeveer 0,1 meter naar achteren als de iPhone minstens 25 graden naar achteren wordt gekanteld elseif Zijde 25 r.turnAngle(-1) % Draait de Roomba ongeveer 1 graad linksom als de iPhone is minimaal 25 graden naar links gekanteld, anders als Pitch < -25 r.turnAngle(1) % Draait de Roomba ongeveer 1 graad naar rechts als de iPhone minimaal 25 graden is gekanteld

Dit zijn slechts de hoogtepunten van de belangrijkste delen van onze code, die we hebben toegevoegd als u snel een gedeelte moet kopiëren en plakken voor uw voordeel. Onze volledige code is echter hieronder bijgevoegd indien nodig

Stap 5: Conclusie

Deze code die we hebben geschreven, is speciaal ontworpen voor onze robot en voor onze algemene visie op het project. Ons doel was om al onze MATLAB-coderingsvaardigheden te gebruiken om een goed ontwerpscript te maken dat de meeste functies van de robot gebruikt. Het gebruik van de telefooncontroller is niet zo moeilijk als je misschien denkt, en we hopen dat onze code je kan helpen het concept achter het coderen van een iRobot beter te begrijpen.

Aanbevolen: