Tartalomjegyzék:

MATLAB vezérelt Roomba: 5 lépés
MATLAB vezérelt Roomba: 5 lépés

Videó: MATLAB vezérelt Roomba: 5 lépés

Videó: MATLAB vezérelt Roomba: 5 lépés
Videó: Robot+Arduino+Xbee+RFID... 2024, Július
Anonim
MATLAB vezérelt Roomba
MATLAB vezérelt Roomba
MATLAB vezérelt Roomba
MATLAB vezérelt Roomba

A projekt célja a MATLAB és egy módosított iRobot programozható robot használata. Csoportunk egyesítette kódolási készségeinket, hogy létrehozzon egy MATLAB szkriptet, amely az iRobot számos funkcióját használja, beleértve a sziklaérzékelőket, lökhárító érzékelőket, fényérzékelőket és a kamerát. Ezeket az érzékelő és a kamera leolvasásait használtuk bemenetként, lehetővé téve számunkra, hogy a kívánt kimeneteket a MATLAB kódfunkciók és ciklusok segítségével hozzuk létre. A MATLAB mobil eszközt és giroszkópot is használjuk az iRobothoz való csatlakozáshoz és vezérléshez.

1. lépés: Alkatrészek és anyagok

Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok

MATLAB 2018a

-A MATLAB 2018 -as verziója a legelőnyösebb verzió, leginkább azért, mert a legjobban működik a mobilkészülékhez csatlakozó kóddal. Kódunk nagy része azonban a MATLAB verziók többségében értelmezhető.

iRobot eszköz létrehozása

-Ez az eszköz egy speciális eszköz, amelynek egyetlen célja a programozás és a kódolás. (Ez nem valódi vákuum)

Raspberry Pi (kamerával)

- Ez egy nem drága számítógépes tábla, amely az iRobot agyaként működik. Lehet, hogy kicsi, de sok mindenre képes. A kamera további kiegészítő. Ezenkívül a málna pi -t használja az összes funkció és parancs eléréséhez. A fenti képen látható kamera egy 3D nyomtatott állványra van felszerelve, amelyet a Tennessee Egyetem Mérnöki Alapjai osztálya készített.

2. lépés: Roomba adatbázis fájl

Roomba adatbázis fájl
Roomba adatbázis fájl

Van egy fő fájl, amire szüksége lesz a roomba megfelelő funkcióinak és parancsainak használatához. Ez az a fájl, ahonnan kódot írt, amiből funkciókat merít, hogy jobban kezelhető legyen a roomba.

A fájl letölthető ezen a linken, vagy az alábbi letölthető fájl

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

3. lépés: Csatlakozás a Roomba -hoz

Először győződjön meg arról, hogy a robot mikro USB -csatlakozóval van csatlakoztatva a málna pi kártyához. Ezután megfelelően csatlakoztatnia kell a számítógépet és a robotot ugyanahhoz a WiFi -hez. Ha ez megtörtént, bekapcsolhatja a robotot, és csatlakozhat hozzá a robotadatbázis -fájlban megadott paranccsal. (Használat előtt és után mindig alaphelyzetbe kell állítani a robotot.) Például az "r.roomba (19)" parancsot használva csatlakozunk robotunkhoz, hozzárendelve az r változót a készülékünkhöz. Ez visszautal az adatbázisfájlra, amely a változónkat olyan struktúrának állítja be, amelyre bármikor hivatkozhatunk.

4. lépés: A kód

A kód
A kód
A kód
A kód

Az alábbiakban csatoltuk a teljes kódot, de itt van egy rövid áttekintés, amely kiemeli a szkriptünk fontos elemeit. Az összes érzékelőt és a kamerát is felhasználtuk, hogy maximálisan kihasználjuk robotunk potenciálját. Tartalmaztuk azt a kódot is, amely lehetővé tette számunkra, hogy mobileszközt csatlakoztassunk robotunkhoz, és annak gryoszkópját használva manuálisan vezéreljük.

Az egyszerű "r.setDriveVelocity (.06)" paranccsal kezdtük, amely a robot előrehaladási sebességét.06 m/s -ra állítja. Ez csak azért van, hogy a robot előre mozogjon

Ezután a fő szkriptünket egy while ciklussal indítjuk, amely lekéri az adott robot adatait olyan struktúrák létrehozásával, amelyekre hivatkozhatunk és felhasználhatjuk az alábbi feltételes utasításokban, így lehetővé téve számunkra, hogy elmondjuk a robotnak, hogy hajtson végre egy bizonyos parancsot a strukturális adatok alapján a robot olvas az érzékelőivel. Úgy állítottuk be, hogy a robot leolvassa sziklaérzékelőit, és fekete utat kövessen

míg true % while ciklus addig megy, amíg valami "hamis" nem történik (ebben az esetben végtelenül megy) data = r.getCliffSensors; data2 = r.getBumpers; % folyamatosan lekér adatokat a sziklaérzékelő értékeiről, és hozzárendeli őket egy változóhoz % img = r.getImage; % Képet készít a beépített kamerából % image (img); % Megjeleníti a készített képet % red_mean = átlagos (átlag (img (:,:, 1))); % A zöld szín átlagos értékét veszi fel, ha data.rightFront <2000 r.turnAngle (-2); % a Roomba -t kb.2 ° CW -ra fordítja, ha a jobb első sziklaérzékelők értéke 2000 r alá csökken. setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % azt mondja a Roomba -nak, hogy folytassa az előrehaladást kb.2 m/s sebességgel, ha a jobb első és a bal első szenzor értékei 2000 % alá esnek. r.turnAngle (0); % azt mondja a Roomba -nak, hogy ne forduljon, ha a fent említett feltételek teljesülnek

elseif adatok2.jobb == 1 r.moveDistance (-. 12); r.fordulószög (160); r.setDriveVelocity (.05); elseif data2.bal == 1 r.moveDistance (-. 2); r.fordulószög (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.fordulószög (160); r.setDriveVelocity (.05);

A while ciklus után egy másik while ciklusba lépünk, amely aktiválja a kamerán keresztül kapott adatokat. És használunk egy if utasítást ezen a cikluson belül, amely felismeri a képet egy adott program (alexnet) segítségével, és miután azonosította a képet, azonnal aktiválja a mobileszköz távirányítóját

anet = alexnet; % Az alexnet mély tanulást hozzárendeli egy változóhoz igaz % Végtelen, míg ciklus img = r.getImage; img = mérettelen (img, [227, 227]); címke = osztályozni (anet, img); ha címke == "papírtörlő" || label == "hűtőszekrény" label = "víz"; végkép (img); cím (char (címke)); vontatott;

A while ciklus, amely lehetővé teszi számunkra, hogy a készüléket telefonnal vezéreljük, lekéri ezeket az adatokat a telefon giroszkópjából, és csatlakoztatjuk azokat egy mátrixhoz, amely folyamatosan továbbítja az adatokat a számítógép MATLAB -jába. Egy if utasítást használunk, amely beolvassa a mátrix adatait, és olyan kimenetet ad, amely a telefon giroszkópjának bizonyos értékei alapján mozgatja az eszközt. Fontos tudni, hogy a mobil eszköz orientációs érzékelőit használtuk. A fent említett egyenként három mátrixot a telefon orientációs érzékelőinek minden eleme kategorizálja, az azimut, a hangmagasság és az oldal. Ha az állítások olyan feltételeket hoztak létre, amelyek azt állították, hogy az oldal meghaladja az 50 értéket, vagy -50 alá esik, akkor a robot egy bizonyos távolságot előre (pozitív 50) vagy hátra (negatív 50) mozgat. És ugyanez vonatkozik a hangmagasság értékére is. Ha a hangmagasság értéke meghaladja a -25 alá esés 25 értékét, a robot 1 fokos (pozitív 25) vagy negatív 1 fokos (negatív 25) szögben fordul

míg igaz szünet (.1) %.5 másodperces szünet minden érték felvétele előtt Vezérlő = iphone. Orientation; % Az iPhone tájolásának értékeihez tartozó mátrixot hozzárendeli az Azimuthal = Controller (1) változóhoz; % A mátrix első értékét a Pitch = Controller (2) változóhoz rendeli; % A mátrix második értékét hozzárendeli egy változóhoz (billentés előre és hátra, ha az iPhone -t oldalra tartja) Side = Controller (3); % A mátrix harmadik értékét hozzárendeli egy változóhoz (balra és jobbra döntve, ha az iPhone oldalra kerül) % Kimenetet okoz a telefon tájolása alapján, ha az oldal> 130 || Oldal 25 r.moveDistance (-. 1) % A Roomba hátrafelé mozgatása kb. 1 méter, ha az iPhone legalább 25 fokkal hátra van billentve, ha oldal 25 r.turnAngle (-1) % Körülbelül 1 fokkal elfordítja a Roomba-t, ha az iPhone balra van döntve legalább 25 fokkal, ha a dőlésszög <-25 fordulat. fordulat

Ezek csak a legfontosabb elemei kódunk főbb részeinek, amelyeket akkor vettünk fel, ha gyorsan másolnia és beillesztenie kell egy részt a javára. Szükség esetén azonban a teljes kódot az alábbiakban csatoljuk

5. lépés: Következtetés

Ez a kód, amelyet írtunk, kifejezetten a robotunk számára készült, valamint a projekt általános elképzelései. Célunk az volt, hogy minden MATLAB kódolási készségünket felhasználjuk egy jól megtervezett szkript elkészítéséhez, amely a robot legtöbb funkcióját hasznosítja. A telefonvezérlő használata nem olyan nehéz, mint gondolná, és reméljük, hogy a kódunk segít jobban megérteni az iRobot kódolásának koncepcióját.

Ajánlott: