Inhoudsopgave:

Roomba met MATLAB - Ajarnpa
Roomba met MATLAB - Ajarnpa

Video: Roomba met MATLAB - Ajarnpa

Video: Roomba met MATLAB - Ajarnpa
Video: Roomba Lineup Explained - 2022 Edition - 692 vs i3 EVO+ vs j7+ vs s9+ 2024, November
Anonim
Roomba met MATLAB
Roomba met MATLAB

Dit project maakt gebruik van MATLAB en een iRobot Create2 programmeerbare robot. Door onze kennis van MATLAB op de proef te stellen, zijn we in staat om de Create2 te programmeren om beelden te interpreteren en signalen te detecteren. De functionaliteit van de robot hangt voornamelijk af van de MATLAB mobiele app en een Raspberry Pi-cameramodule.

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

1. iRobot Create, versie 2

- Dit is een programmeerbare robot die eruitziet als een Roomba. Houd er rekening mee dat dit product van iRobot geen vacuüm is. Het is bedoeld voor aangepaste programmering door de gebruiker.

2. MATLAB 2017a

- De meeste oudere versies zijn compatibel met de onderstaande code. MATLAB identificeert een opdracht die niet compatibel is met de versie die je hebt en stelt een best passende opdracht voor.

3. Raspberry Pi 3 Model B, versie 1.2

- Controleer welke Raspberry Pi compatibel is met uw iRobot. Zie deze link voor meer hulp: https://www.irobotweb.com/~/media/MainSite/PDFs/A… Deze instructable gaat ervan uit dat je met een voorgeprogrammeerde Raspberry Pi werkt. Houd er rekening mee dat u met een voorgeprogrammeerde Pi moet werken om de volgende stappen te laten werken. Als u een voorgeprogrammeerde Pi gebruikt, kunt u al uw codering alleen in MATLAB uitvoeren.

4. Cameramodule V2 (voor Raspberry Pi)

- Je zou verrast kunnen zijn; ondanks zijn grootte is de Raspberry Pi-cameramodule van zeer goede kwaliteit. Het is de goedkoopste en meest compatibele optie voor dit project.

Optioneel: 3D-geprinte standaard. Dit wordt gebruikt om de camera te stabiliseren. Het heeft geen invloed op de functionaliteit van de robot, maar het helpt u bij het coderen als u beeldgegevens wilt gebruiken voor kleur- en/of objectherkenning.

Stap 2: Configuratie

Configuratie
Configuratie
Configuratie
Configuratie

1. Aansluiten Raspberry Pi en cameramodule (Hardware)

- Om de Raspberry Pi van stroom te voorzien, moet u een mannelijke micro-USB aansluiten op de vrouwelijke voedingspoort op de microcontroller. Optioneel: Er kan een spanningsregelaar worden gebruikt om ervoor te zorgen dat de spanning niet hoger is dan 5V. Nadat je de Raspberry Pi van stroom hebt voorzien, kun je hem op je robot aansluiten door mannelijk uiteinde USB a van het moederbord naar USB-poort A op de microcontroller te voeren.

- Nadat de Pi op de Roomba is aangesloten, is de camera klaar om te worden geïnstalleerd. De cameramodule zal veel kleiner zijn dan je zou verwachten. Merk op dat de lens op een sensor is gemonteerd en dat er een wit lint uit de camera steekt. Verwijder of scheur het lint NIET! Dit is de kabel die je nodig hebt om hem op de Raspberry Pi aan te sluiten. Houd eerst het uiteinde van het lint vast en zoek de zilveren connectoren en de blauwe kabel. Deze bevinden zich aan weerszijden. Zoek vervolgens de sleuf tussen de ethernet- en HDMI-poorten op uw Raspberry Pi. Merk op dat er een klein, wit slotje overheen zit. Til het slot langzaam op, maar verwijder het niet uit de sleuf, omdat het zal knappen en permanent beschadigd kan raken. Zodra je het slot hebt opgeheven, pak je het lint en kijk je naar de zilveren connectoren naar de HDMI-poort. De blauwe kant zal naar de Ethernet-poort wijzen. Schuif het lint langzaam in de sleuf terwijl het nog ontgrendeld is. U hoeft hem niet in de sleuf te forceren. Duw de vergrendeling na het inbrengen weer naar beneden. Als je camera goed vastzit, moet je (zachtjes) aan het lint kunnen trekken en spanning voelen. Het lint mag niet los zitten. Nadat je je camera op de Pi hebt aangesloten, merk je misschien hoe los deze is. Daarom hebben we een 3D-geprinte houder gebruikt om hem stabiel te houden. Het is uw keuze om te bepalen welke materialen u wilt gebruiken om uw camera stil te houden voor hoogwaardige beeldvorming.

2. De juiste bestanden installeren en Roomba aansluiten op uw computer Nadat al uw hardware is geconfigureerd, kunt u doorgaan met het installeren van MATLAB samen met de bijbehorende m-bestanden waarmee u met de robot kunt communiceren. Open hiervoor MATLAB en maak een nieuwe map om alle gerelateerde bestanden bij elkaar te houden. Gebruik dit script om de vereiste bestanden te installeren/bijwerken:

- Alle bestanden zouden nu in uw aangemaakte map moeten verschijnen. Klik met de rechtermuisknop in het venster Huidige map en selecteer 'Toevoegen aan pad' om dat pad toe te voegen aan de lijst met mappen waar MATLAB naar bestanden zoekt. Zorg ervoor dat al uw bestanden zich in het juiste pad bevinden.

3. Zodra de bestanden zijn geïnstalleerd, kunt u nu verbinding maken met uw robot. Begin met het inschakelen van uw robot en vervolgens een harde reset direct na het opstarten (vergeet niet uw robot elke keer voor en na gebruik hard te resetten). Verbind vervolgens zowel je robot als laptop met hetzelfde wifi-netwerk. Hierna zullen we via MATLAB met de voorgeprogrammeerde Raspberry Pi spreken door de Roomba te bellen met zijn opgegeven naam en de functie roomba. Ik zou bijvoorbeeld verbinding maken met robot 28 door de volgende regel te gebruiken: R = roomba(28).

- Merk op hoe ik het object aan een variabele R heb toegewezen. Ik heb nu toegang tot de bijbehorende Roomba-functies vanuit het installatiebestand door de variabele R als een structuur te behandelen.

- R.turnAngle(90) Als alles goed ging, zou er een muziektoon moeten spelen die de verbinding bevestigt.

Stap 3: MATLAB-logica

Het PDF-document onderaan deze stap is een gedetailleerd logisch stroomschema voor ons coderingsproces in MATLAB. We hebben de klif-, licht- en lichtstootsensoren geactiveerd zodat de robot met ons kan communiceren wanneer hij een object in zijn directe omgeving detecteert. Wanneer de robot bijvoorbeeld vooruit beweegt, scannen zijn lichtsensoren naar objecten op zijn pad volgens de vector waarop hij zich voortbeweegt. We hebben een afstandsdrempel voor de robot gekozen, zodat wanneer hij een object nadert, hij zal omkeren in plaats van ermee te botsen. Onze robot is ook geconfigureerd met Twitter, wat we hebben gespecificeerd in ons coderingsproces (dit wordt hieronder weergegeven).

Om de ervaring te verbeteren, hebben we gebruik gemaakt van de MATLAB-applicatie op onze mobiele apparaten, zodat we de bewegingen van de robot kunnen besturen door onze telefoons te kantelen. Dit is een optionele activiteit, omdat je de robot zeker kunt laten bewegen door in plaats daarvan de opdracht moveDistance in het MATLAB-codesegment te gebruiken. Houd er rekening mee dat het gebruik van MATLAB-commando's om uw robot te besturen de voorkeur heeft als u nauwkeurig wilt zijn. Als je je robot zo wilt richten dat de camera een foto maakt op een specifieke locatie, is het misschien beter om de bewegingen van de robot te coderen in MATLAB. Hoewel het onderhoudend is, is het niet wenselijk om de MATLAB-toepassing te gebruiken om uw robot te besturen vanwege de nauwkeurigheid.

De code beveelt de Roomba om een basisinstelling uit te voeren en vervolgens door te gaan met een continue lus. In eerste instantie zal de laptop een koppeling met de Roomba tot stand brengen met behulp van het Roomba()-commando. Het stelt ook de Twitter-verbinding in met de opdracht webwrite() in MATLAB. De lus bevat vijf logische hoofdstromen, afhankelijk van de omgeving rondom de Roomba. De Roomba controleert eerst of er obstakels zijn en past zich naar achteren aan als hij merkt dat hij wordt gehinderd. Ingebed in die lus is het tweede pad dat gebruikers waarschuwt als de Roomba wordt meegesleept. Een belangrijk hulpmiddel in de harde oorlogszone op Mars. Nadat de Roomba heeft vastgesteld dat zijn positie veilig is, kijkt hij naar het mobiele apparaat om de volgende beweging te bepalen. Als het mobiele apparaat naar voren wordt gekanteld, berekent het een basissnelheid afhankelijk van de ernst van de rolmeting en past het vervolgens de individuele wielsnelheden aan om te draaien op basis van de hellingsgraad. De telefoon kan de Roomba ook achteruit bewegen. Een neutrale status van een mobiel apparaat geeft de laatste twee paden door. Een rustende Roomba zoekt naar een buitenaardse vlag en waarschuwt de gebruiker dienovereenkomstig.

Hieronder vindt u onze code (ingevuld in MATLAB 2017a)

%inputs: Oriëntatiegegevens van een met wifi verbonden apparaat, camera

%informatie, sensorgegevens

%outputs: beweging wordt bestuurd door het met wifi verbonden apparaat en de beweging

% wordt op veiligheid gecontroleerd door sensorgegevens uit te lezen. Als de camera detecteert:

% een buitenaardse vlag, dan reageert de roomba door de vijandelijke vlag te tweeten

% is gespot.

%doel: ons apparaat leeft zonder doel, behalve om degenen te beschermen die

% heeft het gemaakt, het dient zijn maker en doet

% precies wat het is verteld.

%Gebruik: in wezen zal het programma op zichzelf draaien.

alles wissen, alles sluiten, clc

%Initialiseren van objecten en variabelen

r=roomba(28);

m=mobiledev;

%use response = webwrite(hostnaam, data)

hostname = 'https://api.thingspeak.com/apps/thingtweet/1/statuses/update';

API='SGZCTNQXCWAHRCT5';

tweet='RoboCop is operationeel… in afwachting van commando';

data = strcat('api_key=', API, '&status=', tweet);

response=webwrite(hostnaam, data);

%constant lopende lus

terwijl 1==1

%structuren met relevante gegevens

o=m.oriëntatie; %oriëntatie van mobiel apparaat

light=r.getLightBumpers(); %Lichtbumper Waarden

a = r.getCliffSensors(); %Cliff-sensorwaarden

hobbel = r.getBumpers(); %Bumpersensoren

%controleer bumpers

if bump.right==1 || bump.left==1 ||bump.front==1

r.moveDistance(-.2,.2);

%controleer lichtsensoren

elseif light.left>60 || licht.leftFront>60 || light.leftCenter>60 || licht.rechts>60 || licht.rechtsVoor>60 || licht.rechtsCentrum>60

r.moveDistance(-.2,.2);

%controleer afgrondsensoren

%Anti-Diefstal Signaal en melding

elseif a.left<300 && a.right<300 && a.leftFront<300 && a.rightFront<300

r.stop();

r.piep();

tweet='RoboCop is opgeheven!'

data = strcat('api_key=', API, '&status=', tweet);

response=webwrite(hostnaam, data);

%Normale werking om klif te vermijden

elseif a.links<300 || a.rechts<300 || a.linksvoor<300 || a.rechtsvoor<300

r.moveDistance(-.2,.2);

%Roomba heeft de controles doorstaan en zal nu normaal werken.

%Aanvankelijk wordt de rol van het apparaat gemeten en wordt een basis

%snelheid die vervolgens wordt gebruikt om de wielsnelheid te berekenen

%Voorwaartse beweging

elseif o(3)>=0 && o(3)<=60

basisVel=(-.5/60)*(o(3)-60);

if o(2)>=-70 && o(2)<0

r.setDriveVelocity(baseVel+(.3/50)*abs(o(2)), baseVel-(.3/50)*abs(o(2)));

andersif o(2)=0

r.setDriveVelocity(baseVel-(.3/50)*abs(o(2)), baseVel+(.3/50)*abs(o(2)));

anders r.stop

einde

%Achterwaartse beweging

elseif o(3)>100 && o(3)<150

r.setDriveVelocity(-.2, -.2)

r.piep();

r.piep();

%rustende roomba zoekt naar de buitenaardse vlag gemarkeerd als fluorescerend

%groen stuk papier

anders

r.stop

img=r.getImage(); %neem afbeelding

drempel = greythresh(img(200:383,:, 2))+.1; %calc groen niveau

als drempel>.42

tweet='Vijand gespot!!'

data = strcat('api_key=', API, '&status=', tweet);

response=webwrite(hostnaam, data);

anders

r.stop

einde

einde

einde

Stap 4: Conclusie

Onthoud dat je het script mag gebruiken dat we hierboven hebben geschreven, maar je kunt het altijd aanpassen aan je behoeften. Het hoeft niet te worden bestuurd door uw telefoon! (Het maakt het echter wel leuker.) Kies welke methode je het liefst gebruikt om je robot te besturen. Rijd rond met je robot en geniet!

Aanbevolen: