Talaan ng mga Nilalaman:

Kinokontrol na Roomba ng MATLAB: 5 Mga Hakbang
Kinokontrol na Roomba ng MATLAB: 5 Mga Hakbang

Video: Kinokontrol na Roomba ng MATLAB: 5 Mga Hakbang

Video: Kinokontrol na Roomba ng MATLAB: 5 Mga Hakbang
Video: Grimace Shake Drive Thru Order 360° Animation POV 2024, Hulyo
Anonim
Kinokontrol na Roomba ng MATLAB
Kinokontrol na Roomba ng MATLAB
Kinokontrol na Roomba ng MATLAB
Kinokontrol na Roomba ng MATLAB

Ang layunin ng proyektong ito ay upang magamit ang MATLAB pati na rin ang isang binagong iRobot programmable robot. Pinagsama ng aming pangkat ang aming mga kasanayan sa pag-cod upang lumikha ng isang script ng MATLAB na gumagamit ng maraming mga pag-andar ng iRobot, kabilang ang mga sensor ng bangin, mga sensor ng bumper, light sensor, at camera. Ginamit namin ang mga pagbabasa ng sensor at camera na ito bilang mga input, na pinapayagan kaming lumikha ng ilang mga output na nais naming gamitin ang mga function at MAT loop code at loop. Ginagamit din namin ang MATLAB mobile device at gyroscope bilang isang paraan upang kumonekta sa iRobot at makontrol ito.

Hakbang 1: Mga Bahagi at Materyales

Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan
Mga Bahagi at Kagamitan

MATLAB 2018a

-Ang 2018 na bersyon ng MATLAB ay ang pinaka ginustong bersyon, karamihan dahil ito ang pinakamahusay na gumagana sa code na kumokonekta sa mobile device. Gayunpaman, ang karamihan sa aming code ay maaaring bigyang kahulugan sa karamihan ng mga bersyon ng MATLAB.

iRobot Lumikha ng Device

-Ang aparatong ito ay isang espesyal na ginawang aparato na nag-iisang layunin ay para sa pag-program at pag-coding. (Hindi ito isang aktwal na vacuum)

Raspberry Pi (may camera)

- Ito ay isang hindi mahal na computer board na gumagana bilang utak ng iRobot. Maaari itong maging maliit, ngunit may kakayahang maraming mga bagay. Ang camera ay isang karagdagang add on. Gumagamit din ito ng raspberry pi upang makuha ang lahat ng mga pag-andar at utos nito. Ang camera na nakalarawan sa itaas ay naka-mount sa isang naka-print na stand ng 3D, nilikha ng mga kagawaran ng Engineering Fundamentals sa University of Tennessee

Hakbang 2: Roomba Database File

Roomba Database File
Roomba Database File

Mayroong pangunahing file na kakailanganin mo upang magamit ang tamang mga pag-andar at utos para sa iyong roomba. Ang file na ito ay kung saan ka sumulat ng code ay kumukuha ng mga pagpapaandar upang gawing mas mapamahalaan ang pagpapatakbo ng iyong roomba.

Maaari mong i-download ang file sa link na ito o ang nada-download na file sa ibaba

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

Hakbang 3: Pagkonekta sa Roomba

Una, dapat mong tiyakin na nakakonekta ang iyong robot sa iyong board na raspberry pi sa pamamagitan ng paggamit ng isang micro USB plug. Pagkatapos ay kailangan mong ikonekta nang maayos ang iyong computer at robot sa parehong WiFi. Kapag nagawa na ito, maaari mong paganahin ang iyong robot at kumonekta dito gamit ang ibinigay na utos sa file ng database ng robot. (Laging mahirap i-reset ang iyong robot bago at pagkatapos mong gamitin ito). Halimbawa, ginagamit namin ang utos na "r.roomba (19)" upang kumonekta sa aming robot, na nagtatalaga ng variable r sa aming aparato. Tumutukoy ito pabalik sa database file, na nagtatakda ng aming variable bilang isang istraktura na maaari naming sanggunian sa anumang naibigay na sandali.

Hakbang 4: Ang Code

Ang Code
Ang Code
Ang Code
Ang Code

Ikinabit namin ang buong code sa ibaba, ngunit narito ang isang maikling pangkalahatang ideya na nagpapakita ng mga mahahalagang elemento sa aming script. Ginamit namin ang lahat ng mga sensor, pati na rin ang camera upang ganap na ma-maximize ang potensyal ng aming robot. Nagsama rin kami ng code na pinapayagan kaming ikonekta ang isang mobile device sa aming robot at gamitin ang gryoscope nito upang manu-manong kontrolin ito.

Nagsimula kami sa simpleng utos na "r.setDriveVelocity (.06)" na nagtatakda sa pasulong na bilis ng robot sa.06 m / s. Ito ay upang mapalipat muna ang robot

Pagkatapos, ang aming pangunahing iskrip ay sinimulan ng isang habang loop na kumukuha ng data ng ibinigay na robot sa pamamagitan ng paglikha ng mga istraktura na maaari naming sanggunian at gamitin sa mga kondisyong pahayag sa ibaba, kaya pinapayagan kaming sabihin sa robot na magpatupad ng isang tiyak na utos batay sa data ng istraktura nagbabasa ang robot ng mga sensor nito. Na-set up namin ito upang mabasa ng robot ang mga sensor ng talampas nito at sumunod sa isang itim na landas

habang ang tunay na% habang ang loop ay napupunta hanggang sa isang bagay na "maling" nangyayari (sa kasong ito ito ay magpapatuloy nang walang hanggan) data = r.getCliffSensors; data2 = r.getBumpers;% kinukuha ng tuloy-tuloy ang data tungkol sa mga halaga ng cliff sensor at itinalaga ang mga ito sa isang variable% img = r.getImage; % Kumuha ng larawan mula sa naka-mount na camera% na imahe (img); % Ipinapakita ang imahe na nakuha% red_mean = ibig sabihin (ibig sabihin (img (:,:, 1)));% Kinukuha ang average na halaga para sa berdeng kulay kung data.rightFront <2000 r.turnAngle (-2); % lumiliko ang Roomba humigit-kumulang na.2 degree CW sa sandaling ang halaga para sa mga kanang front cliff sensor ay nahuhulog sa ibaba 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data. RightFront r.moveDistance (.1); Sinasabi ni% sa Roomba na magpatuloy na humigit-kumulang na.2 m / s kung ang parehong mga halaga mula sa kanang harap at kaliwang harap na sensor ay nahuhulog sa ibaba 2000% r.turnAngle (0); Sinasabi ni% sa Roomba na huwag lumiko kung ang nabanggit na mga kundisyon ay totoo

kung hindi man data2. kanang == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); kung hindi man data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); kung hindi man data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Pagkatapos nito habang loop, nagpasok kami ng isa pang habang loop na nagpapalitaw ng data na nakuha sa pamamagitan ng camera. At gumagamit kami ng isang kung pahayag sa loob nito habang loop na kumikilala sa isang imahe gamit ang isang tukoy na programa (alexnet), at sa sandaling makilala nito ang imahe ay agad nitong pinalitaw ang remote control ng mobile device

anet = alexnet; % Nagtatalaga ng malalim na pag-aaral ng alexnet sa isang variable habang totoo% Walang Hanggan habang loop img = r.getImage; img = imresize (img, [227, 227]); label = uriin (anet, img); kung tatak == "papel na tuwalya" || lagda == "refrigerator" label = "tubig"; pagtatapos ng imahe (img); pamagat (char (label)); drawnow;

Ang loop habang pinapayagan kaming kontrolin ang aparato sa aming telepono ay kukunin ang data na iyon mula sa gyroscope ng telepono at isaksak namin ito sa isang matrix na patuloy na nag-stream ng data pabalik sa MATLAB sa computer. Gumagamit kami ng isang pahayag kung binabasa ang data ng matrix at nagbibigay ng isang output na gumagalaw ng aparato batay sa ilang mga halaga ng gyroscope ng telepono. Mahalagang malaman na ginamit namin ang mga sensor ng Orientation ng mobile device. Ang isa-tatlong matrix na nabanggit sa itaas ay ikinategorya ng bawat elemento ng mga orientation sensor ng telepono, na azimuth, pitch, at panig. Ang kung pahayag ay lumikha ng mga kundisyon na nakasaad kapag ang panig ay lumampas sa mga halagang 50 o bumagsak sa ibaba -50, pagkatapos ang robot ay gumagalaw ng isang tiyak na distansya pasulong (positibong 50) o paatras (negatibong 50). At ang parehong napupunta para sa halaga ng pitch. Kung ang halaga ng pitch ay lumampas sa halaga ng 25 ng pagbagsak sa ibaba -25, ang robot ay lumiliko sa isang anggulo ng 1 degree (positibo 25) o negatibong 1 degree (negatibong 25)

habang ang tunay na pag-pause (.1)% Pag-pause ng.5 segundo bago makuha ang bawat halaga Controller = iphone. Orientation; % Nagtatalaga ng matrix para sa mga halaga ng oryentasyon ng iPhone sa isang variable na Azimuthal = Controller (1); % Nagtatalaga ng unang halaga ng matrix sa isang variable na Pitch = Controller (2); % Nagtatalaga ng pangalawang halaga ng matrix sa isang variable (ikiling pasulong at paatras kapag ang iPhone ay gaganapin patagilid) Side = Controller (3); % Nagtatalaga ng pangatlong halaga ng matrix sa isang variable (ikiling ang kaliwa at kanan kapag ang iPhone ay gaganapin patagilid)% Nagdudulot ng isang output batay sa oryentasyon ng telepono kung Side> 130 || Side 25 r.moveDistance (-. 1)% Inililipat ang Roomba paatras ng tinatayang.1 metro kung ang iPhone ay ikiling paatras ng hindi bababa sa 25 degress elseif sa Side 25 r.turnAngle (-1)% Binabago ang Roomba humigit-kumulang na 1 degree CCW kung ang iPhone ay ikiling kaliwa ng hindi bababa sa 25 degree na iba pa kung Pitch <-25 r.turnAngle (1)% Binabaling ang Roomba humigit-kumulang na 1 degree CW kung ang iPhone ay ikiling ng hindi bababa sa 25 degree end

Narito lamang ang mga highlight ng mga pangunahing piraso ng aming code, na isinama namin kung kailangan mong mabilis na kopyahin at i-paste ang isang seksyon para sa iyong pakinabang. Gayunpaman, ang aming buong code ay nakakabit sa ibaba kung kinakailangan

Hakbang 5: Konklusyon

Ang code na aming isinulat ay partikular na idinisenyo para sa aming robot pati na rin ang aming pangkalahatang paningin sa proyekto. Ang aming layunin ay gamitin ang lahat ng aming mga kasanayan sa pag-coding ng MATLAB upang makagawa ng isang mahusay na disenyo ng script na gumagamit ng karamihan sa mga tampok ng robot. Ang paggamit ng tagokontrol ng telepono ay hindi mahirap tulad ng naisip mo, at inaasahan namin na ang iyong code ay makakatulong sa iyo na mas maunawaan ang konsepto sa likod ng pag-cod ng isang iRobot.

Inirerekumendang: