Satura rādītājs:

MATLAB kontrolējamā Roomba: 5 soļi
MATLAB kontrolējamā Roomba: 5 soļi

Video: MATLAB kontrolējamā Roomba: 5 soļi

Video: MATLAB kontrolējamā Roomba: 5 soļi
Video: Fuzzy and Neuro-Fuzzy Vehicle Navigation in MATLAB | Obstacle Avoidance and path planning in MATLAB 2024, Jūlijs
Anonim
MATLAB kontrolējama Roomba
MATLAB kontrolējama Roomba
MATLAB kontrolējama Roomba
MATLAB kontrolējama Roomba

Šī projekta mērķis ir izmantot MATLAB, kā arī modificētu programmējamu robotu iRobot. Mūsu grupa apvienoja mūsu kodēšanas prasmes, lai izveidotu MATLAB skriptu, kurā izmantotas daudzas iRobot funkcijas, tostarp klints sensori, bufera sensori, gaismas sensori un kamera. Mēs izmantojām šos sensoru un kameru rādījumus kā ieejas, ļaujot mums izveidot noteiktus rezultātus, kurus vēlamies, izmantojot MATLAB koda funkcijas un cilpas. Mēs arī izmantojam mobilo ierīci MATLAB un žiroskopu, lai izveidotu savienojumu ar iRobot un to kontrolētu.

1. darbība: detaļas un materiāli

Daļas un materiāli
Daļas un materiāli
Daļas un materiāli
Daļas un materiāli
Daļas un materiāli
Daļas un materiāli
Daļas un materiāli
Daļas un materiāli

MATLAB 2018a

-MATLAB 2018. gada versija ir vispiemērotākā versija, galvenokārt tāpēc, ka tā vislabāk darbojas ar kodu, kas savieno ar mobilo ierīci. Tomēr lielāko daļu mūsu koda var interpretēt lielākajā daļā MATLAB versiju.

iRobot izveides ierīce

-Šī ierīce ir speciāli izgatavota ierīce, kuras vienīgais mērķis ir programmēšana un kodēšana. (Tas nav īsts vakuums)

Raspberry Pi (ar kameru)

- Šī ir dārga datora plate, kas darbojas kā iRobot smadzenes. Tas var būt mazs, bet spēj uz daudzām lietām. Kamera ir papildu papildinājums. Tas arī izmanto aveņu pi, lai iegūtu visas savas funkcijas un komandas. Iepriekš redzamā kamera ir uzstādīta uz 3D drukāta statīva, ko izveidojuši Tenesī Universitātes Inženierzinātņu pamati.

2. darbība: Roomba datu bāzes fails

Roomba datu bāzes fails
Roomba datu bāzes fails

Ir galvenais fails, kas jums būs nepieciešams, lai izmantotu roomba pareizās funkcijas un komandas. Šajā failā jūs rakstījāt kodu, lai iegūtu funkcijas, lai padarītu jūsu roomba vadāmāku.

Jūs varat lejupielādēt failu šajā saitē vai lejupielādējamo failu zemāk

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

3. darbība. Savienojuma izveide ar Roomba

Pirmkārt, jums ir jāpārliecinās, ka jūsu robots ir savienots ar jūsu aveņu pi plati, izmantojot mikro USB spraudni. Tad jums ir pareizi jāpievieno dators un robots tam pašam WiFi. Kad tas ir izdarīts, varat ieslēgt robotu un izveidot savienojumu ar to, izmantojot robota datu bāzes failā norādīto komandu. (Vienmēr stingri atiestatiet robotu pirms un pēc tā lietošanas). Piemēram, mēs izmantojam komandu "r.roomba (19)", lai izveidotu savienojumu ar mūsu robotu, piešķirot mūsu ierīcei mainīgo r. Tas attiecas uz datubāzes failu, kas mūsu mainīgo nosaka kā struktūru, uz kuru varam atsaukties jebkurā brīdī.

4. solis: kods

Kods
Kods
Kods
Kods

Tālāk ir pievienots pilns kods, taču šeit ir īss pārskats, kas izceļ mūsu skripta svarīgos elementus. Mēs izmantojām visus sensorus, kā arī kameru, lai pilnībā palielinātu mūsu robota potenciālu. Mēs iekļāvām arī kodu, kas ļāva mums savienot mobilo ierīci ar mūsu robotu un izmantot tā gryoskopu, lai to manuāli kontrolētu.

Mēs sākām ar vienkāršu komandu "r.setDriveVelocity (.06)", kas nosaka robota kustības ātrumu uz.06 m/s. Tas ir tikai tāpēc, lai robotu iepriekš kustinātu

Pēc tam mūsu galvenais skripts tiek sākts ar cikla ciklu, kas izgūst konkrētā robota datus, izveidojot struktūras, uz kurām mēs varam atsaukties un izmantot nosacījuma paziņojumos zemāk, tādējādi ļaujot mums pateikt robotam izpildīt noteiktu komandu, pamatojoties uz struktūras datiem robots lasa ar saviem sensoriem. Mēs to uzstādījām tā, lai robots nolasītu savus klints sensorus un dotos pa melnu ceļu

kamēr true % while cilpa iet, līdz notiek kaut kas "nepatiess" (šajā gadījumā tas turpinās bezgalīgi) data = r.getCliffSensors; data2 = r.getBumpers; % nepārtraukti izgūst datus par klints sensora vērtībām un piešķir tos mainīgajam % img = r.getImage; % Uzņem attēlu no uzstādītās kameras % image (img); % Parāda uzņemto attēlu % red_mean = vidējais (vidējais (img (:,:, 1))); % Tiek ņemta zaļās krāsas vidējā vērtība, ja data.rightFront <2000 r.turnAngle (-2); % pagriež Roomba par aptuveni, 2 grādiem CW, kad priekšējo kraujas sensoru vērtība nokrītas zem 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % liek Roomba turpināt virzīties uz priekšu ar aptuveni 0,2 m/s, ja abas labās un kreisās puses priekšējo sensoru vērtības nokrītas zem 2000 % r.turnAngle (0); % liek Roomba negriezties, ja iepriekš minētie nosacījumi ir patiesi

elseif dati2.pareizi == 1 r.moveDistance (-. 12); r.pagrieziena leņķis (160); r.setDriveVelocity (.05); elseif data2.pa kreisi == 1 r.moveDistance (-. 2); r.pagrieziena leņķis (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.pagrieziena leņķis (160); r.setDriveVelocity (.05);

Pēc šīs cikla cilpas mēs ievadām citu cikla cilpu, kas aktivizē ar kameru iegūtos datus. Mēs izmantojam if paziņojumu šajā cilpā, kas atpazīst attēlu, izmantojot īpašu programmu (alexnet), un, kad tas identificē attēlu, tas nekavējoties iedarbina mobilās ierīces tālvadības pulti

anet = alexnet; % Piešķir alexnet dziļo mācīšanos mainīgajam, kamēr patiess % Bezgalīgs, kamēr cilpa img = r.getImage; img = neizmērojams (img, [227, 227]); etiķete = klasificēt (anet, img); ja etiķete == "papīra dvielis" || etiķete == "ledusskapis" etiķete = "ūdens"; beigu attēls (img); nosaukums (char (etiķete)); izvilkts;

Kaut arī cilpa, kas ļauj mums kontrolēt ierīci ar tālruni, izgūst šos datus no tālruņa žiroskopa, un mēs pievienojam tos matricai, kas nepārtraukti straumē datus atpakaļ datora MATLAB. Mēs izmantojam paziņojumu if, kas nolasa matricas datus un dod izvadi, kas pārvieto ierīci, pamatojoties uz noteiktām tālruņa žiroskopa vērtībām. Ir svarīgi zināt, ka mēs izmantojām mobilās ierīces orientācijas sensorus. Iepriekš minēto matricu pa trim klasificē pēc katra tālruņa orientācijas sensoru elementa, kas ir azimuts, piķis un sāns. Ja paziņojumi radīja apstākļus, kas norādīja, kad puse pārsniedz vērtības 50 vai nokrītas zem -50, tad robots pārvieto noteiktu attālumu uz priekšu (pozitīvs 50) vai atpakaļ (negatīvs 50). Un tas pats attiecas uz piķa vērtību. Ja piķa vērtība pārsniedz 25 kritumu vērtību zem -25, robots griežas 1 grādu leņķī (pozitīvs 25) vai negatīvā 1 grādā (negatīvs 25)

kamēr patiesa pauze (.1) % Pauze.5 sekundes pirms katras vērtības iegūšanas Kontrolieris = iphone. Orientation; % Piešķir matricu iPhone orientācijas vērtībām mainīgajam Azimuthal = Controller (1); % Piešķir matricas pirmo vērtību mainīgajam Pitch = Controller (2); % Piešķir matricas otro vērtību mainīgajam (noliekt uz priekšu un atpakaļ, kad iPhone tiek turēts uz sāniem) Side = Controller (3); % Piešķir trešajai matricas vērtībai mainīgo (noliekt pa kreisi un pa labi, kad iPhone tiek turēts uz sāniem) % Izraisa izvadi, pamatojoties uz tālruņa orientāciju, ja sāns> 130 || Sānu 25 r.moveDistance (-. 1) % Pārvieto Roomba atpakaļ aptuveni.1 metru, ja iPhone ir pagriezts atpakaļ vismaz par 25 grādiem, ja sāns 25 r.turnAngle (-1) % Pagriež Roomba aptuveni par 1 grādu CCW, ja iPhone ir sasvērts pa kreisi vismaz par 25 grādiem, ja cits solis <-25 apgriezieni. leņķis (1) % Pagriež Roomba aptuveni par 1 grādu CW, ja iPhone ir noliekts vismaz par 25 grādiem

Šie ir tikai galvenie mūsu koda elementi, kurus mēs iekļāvām, ja jums ir nepieciešams ātri nokopēt un ielīmēt sadaļu jūsu labā. Tomēr viss mūsu kods ir pievienots zemāk, ja nepieciešams

5. darbība. Secinājums

Šis mūsu uzrakstītais kods ir īpaši izstrādāts mūsu robotam, kā arī mūsu vispārējam projekta redzējumam. Mūsu mērķis bija izmantot visas mūsu MATLAB kodēšanas prasmes, lai izveidotu labi izstrādātu skriptu, kas izmantotu lielāko daļu robota funkciju. Tālruņa kontroliera lietošana nav tik grūta, kā jūs domājat, un mēs ceram, ka mūsu kods var palīdzēt jums labāk izprast iRobot kodēšanas jēdzienu.

Ieteicams: