Turinys:

„MATLAB“valdoma „Roomba“: 5 žingsniai
„MATLAB“valdoma „Roomba“: 5 žingsniai

Video: „MATLAB“valdoma „Roomba“: 5 žingsniai

Video: „MATLAB“valdoma „Roomba“: 5 žingsniai
Video: Mathematics with Python! Sequences 2024, Liepa
Anonim
„MATLAB“valdoma „Roomba“
„MATLAB“valdoma „Roomba“
„MATLAB“valdoma „Roomba“
„MATLAB“valdoma „Roomba“

Šio projekto tikslas yra panaudoti MATLAB ir modifikuotą programuojamą robotą „iRobot“. Mūsų grupė sujungė mūsų kodavimo įgūdžius, kad sukurtume MATLAB scenarijų, kuris naudoja daugybę „iRobot“funkcijų, įskaitant uolų jutiklius, buferio jutiklius, šviesos jutiklius ir fotoaparatą. Šiuos jutiklių ir fotoaparatų rodmenis naudojome kaip įvestis, leidžiančius sukurti tam tikrus norimus išėjimus, naudojant MATLAB kodo funkcijas ir kilpas. Mes taip pat naudojame MATLAB mobilųjį įrenginį ir giroskopą kaip būdą prisijungti prie „iRobot“ir jį valdyti.

1 žingsnis: dalys ir medžiagos

Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos

MATLAB 2018a

-2018 m. MATLAB versija yra labiausiai pageidaujama versija, daugiausia todėl, kad ji geriausiai veikia su kodu, jungiančiu prie mobiliojo įrenginio. Tačiau dauguma mūsų kodo gali būti interpretuojami daugelyje MATLAB versijų.

„iRobot“sukūrimo įrenginys

-Šis įrenginys yra specialiai sukurtas įrenginys, kurio vienintelis tikslas yra programuoti ir koduoti. (Tai nėra tikras vakuumas)

Raspberry Pi (su kamera)

- Tai nebrangi kompiuterio plokštė, kuri veikia kaip „iRobot“smegenys. Jis gali būti mažas, bet gali daug ką. Fotoaparatas yra papildomas priedas. Ji taip pat naudoja aviečių pi, kad gautų visas savo funkcijas ir komandas. Aukščiau pavaizduota kamera yra sumontuota ant 3D atspausdinto stovo, sukurto Tenesio universiteto Inžinerijos pagrindų departamentų.

2 veiksmas: „Roomba“duomenų bazės failas

„Roomba“duomenų bazės failas
„Roomba“duomenų bazės failas

Yra pagrindinis failas, kurio jums reikės, kad galėtumėte naudoti tinkamas „roomba“funkcijas ir komandas. Šiame faile jūs parašėte kodą, kuris semiasi funkcijų, kad būtų lengviau valdyti „roomba“.

Failą galite atsisiųsti naudodami šią nuorodą arba atsisiųstą failą žemiau

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

3 veiksmas: prisijunkite prie „Roomba“

Pirmiausia turite įsitikinti, kad jūsų robotas yra prijungtas prie jūsų aviečių pi plokštės, naudojant mikro USB kištuką. Tada jums reikia tinkamai prijungti kompiuterį ir robotą prie to paties „WiFi“. Kai tai bus padaryta, galite įjungti robotą ir prisijungti prie jo naudodami nurodytą komandą roboto duomenų bazės faile. (Visada iš naujo nustatykite robotą prieš ir po jo naudojimo). Pavyzdžiui, mes naudojame komandą „r.roomba (19)“prisijungdami prie savo roboto, priskirdami kintamąjį r mūsų įrenginiui. Tai reiškia duomenų bazės failą, kuris nustato mūsų kintamąjį kaip struktūrą, kurią galime nurodyti bet kuriuo momentu.

4 žingsnis: Kodas

Kodas
Kodas
Kodas
Kodas

Žemiau pridėjome visą kodą, tačiau čia yra trumpa apžvalga, kurioje pabrėžiami svarbūs mūsų scenarijaus elementai. Mes panaudojome visus jutiklius ir fotoaparatą, kad maksimaliai išnaudotume savo roboto galimybes. Mes taip pat įtraukėme kodą, kuris leido mums prijungti mobilųjį įrenginį prie mūsų roboto ir naudoti jo gryoskopą rankiniu būdu jį valdyti.

Pradėjome nuo paprastos komandos „r.setDriveVelocity (.06)“, kuri nustato roboto judėjimo į priekį greitį iki.06 m/s. Tai tik tam, kad robotas judėtų iš anksto

Tada mūsų pagrindinis scenarijus pradedamas nuo laiko ciklo, kuris nuskaito tam tikro roboto duomenis, sukurdamas struktūras, kurias galime nurodyti ir naudoti toliau pateiktose sąlyginiuose teiginiuose, taip leisdami mums pasakyti robotui vykdyti tam tikrą komandą, pagrįstą struktūros duomenimis robotas skaito su savo jutikliais. Mes jį nustatėme taip, kad robotas perskaitytų savo skardžio jutiklius ir eitų juodu keliu

o tiesa % while ciklas eina tol, kol įvyksta kažkas „klaidingo“(šiuo atveju tai tęsiasi be galo) data = r.getCliffSensors; data2 = r.getBumpers; % nuolat nuskaito duomenis apie uolos jutiklio vertes ir priskiria juos kintamajam % img = r.getImage; % Fotografuoja iš sumontuotos kameros % image (img); % Rodo vaizdą, kuris buvo padarytas % red_mean = vidurkis (vidurkis (img (:,:, 1))); % Paima vidutinę žalios spalvos reikšmę, jei data.rightFront <2000 r.turnAngle (-2); % pasuka „Roomba“maždaug.2 laipsnių CW, kai dešiniojo priekinio skardžio jutiklių vertė nukrenta žemiau 2000 aps.r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % nurodo „Roomba“judėti į priekį maždaug 0,2 m/s greičiu, jei abi dešiniojo ir kairiojo priekinio jutiklių vertės nukrenta žemiau 2000 % r.turnAngle (0); % nurodo „Roomba“nesisukti, jei minėtos sąlygos yra teisingos

elseif data2.teisė == 1 r.moveDistance (-. 12); r.pasukimo kampas (160); r.setDriveVelocity (.05); elseif data2.kairė == 1 r.moveDistance (-. 2); r.pasukimo kampas (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.pasukimo kampas (160); r.setDriveVelocity (.05);

Po šios ciklo mes įvedame kitą ciklo ciklą, kuris suaktyvina per kamerą gautus duomenis. Mes naudojame „if“teiginį šioje ciklo viduje, kuris atpažįsta vaizdą naudodamas konkrečią programą („alexnet“), ir kai jis identifikuoja vaizdą, jis iš karto suaktyvina mobiliojo įrenginio nuotolinio valdymo pultą

anet = alexnet; % Priskiria „alexnet“gilųjį mokymąsi kintamajam, o tiesa - begalinis, o ciklas img = r.getImage; img = nemažas (img, [227, 227]); etiketė = klasifikuoti (anet, img); jei etiketė == "popierinis rankšluostis" || etiketė == "šaldytuvas" etiketė = "vanduo"; pabaigos vaizdas (img); pavadinimas (char (etiketė)); ištrauktas;

Nors ciklas, leidžiantis valdyti įrenginį savo telefonu, nuskaito tuos duomenis iš telefono giroskopo ir mes prijungiame juos prie matricos, kuri nuolat perduoda duomenis atgal į kompiuterio MATLAB. Mes naudojame teiginį if, kuris skaito matricos duomenis ir suteikia išvestį, kuri perkelia įrenginį pagal tam tikras telefono giroskopo vertes. Svarbu žinoti, kad naudojome mobiliojo įrenginio orientacijos jutiklius. Aukščiau paminėta viena iš trijų matricų yra suskirstyta į kategorijas pagal kiekvieną telefono orientacijos jutiklių elementą, kuris yra azimutas, žingsnis ir šonas. Jei teiginiai sukūrė sąlygas, kurios nurodė, kai pusė viršija 50 reikšmes arba nukrenta žemiau -50, tada robotas juda tam tikrą atstumą į priekį (teigiamas 50) arba atgal (neigiamas 50). Tas pats pasakytina apie pikio vertę. Jei žingsnio vertė viršija 25 kritimų žemiau -25 vertę, robotas pasisuka 1 laipsnio (teigiamas 25) arba neigiamo 1 laipsnio (neigiamas 25) kampu

o tikroji pauzė (.1) %.5 sekundžių pertrauka prieš kiekvieną reikšmę. Kontrolierius = iphone. Orientation; % Priskiria „iPhone“orientacijos verčių matricą kintamajam Azimuthal = Controller (1); % Priskiria pirmąją matricos vertę kintamajam Pitch = Controller (2); % Priskiria antrąją matricos vertę kintamajam (pakreipkite į priekį ir atgal, kai „iPhone“laikomas šonu) Side = Controller (3); % Priskiria trečiąją matricos vertę kintamajam (pakreipus kairėn ir dešinėn, kai „iPhone“laikomas šone) % Sukuria išvestį pagal telefono orientaciją, jei šonas> 130 || Šonas 25 r.moveDistance (-. 1) % Perkelia „Roomba“atgal maždaug.1 metrą, jei „iPhone“yra pakreiptas atgal bent 25 laipsniais, jei šonas 25 r.turnAngle (-1) % Jei „iPhone“pasuka „Roomba“maždaug 1 laipsnio kampu yra pakreiptas į kairę bent 25 laipsnius, jei pakreipimas <-25 apsisukimų kampas (1) % „Roomba“pasukama maždaug 1 laipsniu CW, jei „iPhone“pakreiptas bent 25 laipsnių kampu

Tai tik svarbiausi mūsų kodo elementai, kuriuos įtraukėme, jei jums reikia greitai nukopijuoti ir įklijuoti skiltį savo naudai. Tačiau, jei reikia, visas mūsų kodas pridedamas žemiau

5 žingsnis: Išvada

Šis mūsų parašytas kodas yra specialiai sukurtas mūsų robotui ir bendrai projekto vizijai. Mūsų tikslas buvo panaudoti visus MATLAB kodavimo įgūdžius, kad sukurtume gerai suplanuotą scenarijų, kuriame būtų panaudotos dauguma roboto funkcijų. Naudoti telefono valdiklį nėra taip sunku, kaip galite pamanyti, ir tikimės, kad mūsų kodas padės jums geriau suprasti „iRobot“kodavimo koncepciją.

Rekomenduojamas: