Orodha ya maudhui:

Mradi wa Mars Roomba UTK: Hatua 4
Mradi wa Mars Roomba UTK: Hatua 4

Video: Mradi wa Mars Roomba UTK: Hatua 4

Video: Mradi wa Mars Roomba UTK: Hatua 4
Video: История спасение дикого кабанчика. Кабанчик нуждался в помощи. 2024, Julai
Anonim
Mradi wa Mars Roomba UTK
Mradi wa Mars Roomba UTK
Mradi wa Mars Roomba UTK
Mradi wa Mars Roomba UTK

KANUSHO: HII ITAFANYA KAZI PEKEE IKIWA ROOMBA INAWEKWA KWENYE A

NJIA MAALUMU SANA, HII INAELEZWA ILIUMBWA KWA AJILI YA KUTUMIWA KUTUMIWA NA CHUO KIKUU CHA WANAFUNZI WA TENNESSEE NA UWEZO.

Nambari hii inatumiwa kuanzisha Roomba ili kuendesha nambari iliyoandikwa na kuhifadhiwa ndani ya MATLAB. Hii haitafanya kazi ikiwa huwezi kupata maktaba muhimu kutoka kwa wavuti ya Chuo Kikuu cha Tennessee. Ikiwa una maktaba basi unaweza kuzitumia kupanga Roomba yako mwenyewe ukitumia kazi kwenye maktaba. Hii ya kufundisha hukufundisha jinsi ya kusanikisha maktaba, tengeneza folda ya nambari yote, na jinsi ya kuweka nambari na kutumia programu ambayo tumetoa hapa chini.

Vifaa vinavyohitajika:

· Roomba

· MATLAB

· Kamera ya Raspberry Pi na Pi

Hatua ya 1: Kupata Maktaba

Kwenye wavuti ya uhandisi kuna kisanduku cha zana / maktaba iliyotolewa, ipakue na uweke kwenye folda mpya. Folda hii lazima iwe na faili zote za kazi ya mradi kama, kazi yoyote inayotumiwa katika programu unayofanya itahitaji kurejelea maktaba. Baada ya kufanya hivyo unaweza kuanza kufanya kazi kwenye programu zako

Hatua ya 2: Kuandika Programu

Kuna kazi kadhaa ambazo zinaweza kutumika katika programu, kazi hizi zinaweza kupatikana kwa kutumia amri "doc roomba". Kutumia kazi hizi, unaweza kudhibiti Roomba yako kwa njia nyingi tofauti. Nambari iliyopewa hapa chini hutumia sensorer za mapema, sensorer za baa nyepesi, kamera, na sensorer za mwamba kwa njia tofauti kuunda rover ya mars. Tulitumia sensorer za mapema kugundua wakati Roomba inapiga kitu, wakati hii itatokea roboti itageuka, kugeuka, na kuendelea kusonga. Kabla ya Roomba kugonga kitu, taa ya taa itagundua kitu na itapunguza Roomba ili itakapogonga kitu ili kuamsha sensorer mapema Roomba isiharibike / kuathiriwa na athari. Kamera inatafuta maji au lava juu ya uso, ikiwa hakuna kioevu kilichopatikana basi roboti itaendelea kutafuta, ikiwa kuna maji yaliyopatikana basi roboti itatuma ujumbe kwa waendeshaji. Sensorer za mwamba zimeundwa kusimamisha roboti ikiwa inakaribia mwamba. Roboti ikihisi mwamba itabadilika na kugeuka kuepusha kuanguka.

Hatua ya 3: Kanuni

Nakili na ubandike hii kwenye faili ya MATLAB ambayo iko kwenye folda sawa na maktaba

kaziMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

wakati kweli% Infinte wakati kitanzi kuweka nambari inayoendesha

dontFall = cliffCheck (r)% Hutoa tofauti 'dontFall' kwa kazi 'cliffCheck'

ikiwa dontFall% ikiwa taarifa ya kuendelea kwa nambari baada ya 'cliffCheck' imekamilika

r.setDriveVelocity (0.1, 0.1)% Inaweka Roomba ikisonga baada ya 'CliffCheck' kukamilika

mwisho% inaisha 'dontFall' ikiwa taarifa

bumper = bumpcheck (r)% Hutoa 'bumper' inayobadilika kwa kazi 'bumpcheck'

ikiwa bumper% ikiwa taarifa ya kuendelea kwa nambari baada ya 'bumpcheck' imekamilika

r.setDriveVelocity (0.1, 0.1)% Inaweka Roomba ikisonga baada ya 'bumpcheck' kukamilika

mwisho% inaisha 'bumper' ikiwa ni taarifa

liquids = LiquidCheck (r)% Inapeana 'vinywaji' tofauti kwa kazi 'LiquidCheck'

ikiwa kimiminika ikiwa taarifa itaendelea kwa kificho baada ya 'LiquidCheck' kukamilika

r.setDriveVelocity (0.1, 0.1)% Inaweka Roomba ikisonga baada ya 'LiquidCheck' kukamilika

mwisho% huisha 'vinywaji' ikiwa ni taarifa

lightbumper = lightcheck (r)% Inachagua 'lightbumper' inayobadilika kwa kazi 'lightcheck'

pause (0.1)% Pumzika kwa muda mfupi ili kuzuia uboreshaji wa kitanzi unaoendelea

mwisho% huisha bila mwisho wakati kitanzi

mwisho% inaisha kazi

kazi bumper = bumpcheck (r)% Inaunda kazi ya 'bumpcheck'

bumpdata = r.getBumpers% Hutoa data zote kutoka kwa bumper kwenda kwa 'bumpdata' inayobadilika

bumper = bumpdata.kulia || bumpdata.kushoto || bumpdata.front% Inaunda kutofautisha kuhifadhiwa, 'bumper', kwa bumpers tofauti

ikiwa bumpdata.right> 0% Ikiwa taarifa ya kusababisha kazi tofauti za roomba kutokea ikiwa Bumper imepigwa

r.stop% Acha Roomba

r.moveDistance (-0.3, 0.2)% Inarudisha Roomba 0.3m

r. TurnAngle (90, 0.5)% Inazunguka Roomba digrii 90 haraka iwezekanavyo

mwisho

ikiwa bumpdata.mbele> 0

r.acha

r.soveDistance (-0.3, 0.2)

r. TurnAngle (randi (270), 0.5)% Anazungusha Roomba kwa muda mfupi kati ya digrii 0 na 270 haraka iwezekanavyo

mwisho

ikiwa bumpdata.kushoto> 0

r.acha

r.soveDistance (-0.3, 0.2)

r. TurnAngle (-90, 0.5)% Inazunguka Roomba -90 digrii haraka iwezekanavyo

mwisho

mwisho

kazi lightbumper = lightcheck (r)% Inaunda kazi ya 'lightcheck'

lightdata = r.getLightBumpers Hutoa data zote kutoka kwa sensorer ya mapema ili kuwa 'lightdata'

lightbumper = taa nyepesi.kushoto || lightdata. sawa || lightdata.rightCenter || Inaunda tofauti iliyohifadhiwa, 'lightbumper', kwa bumpers tofauti za taa

ikiwa nyepesi% Ikiwa taarifa ya kupiga data nyepesi kutoka hapo juu

ikiwa lightdata. kushoto> 10% Ikiwa taarifa ya kusababisha kazi tofauti za roomba kutokea ikiwa taa nyepesi inahisi zaidi ya maadili 10

r.setDriveVelocity (0.05, 0.05)% Inapunguza roomba kujiandaa kwa mapema

mwisho% inaisha mwanzo ikiwa taarifa

ikiwa lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

mwisho

ikiwa lightdata. sawa> 10

r.setDriveVelocity (0.05, 0.05)

mwisho

ikiwa lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

mwisho

mwisho% inaisha 'lightbumper' ikiwa taarifa

mwisho% inakamilisha kazi ya kukagua taa

function dontFall = cliffCheck (r)% Inaunda kazi ya 'CliffCheck'

data = r.getCliffSensors; Hutoa data zote kutoka kwa sensorer ya mwamba hadi 'data' inayobadilika

dontFall = data. kushoto <1020 || data.leftFront <1020 || data mbele kulia <1020 || data.right <1020% Inaunda tofauti iliyohifadhiwa, 'dontFall', kwa sensorer tofauti za mwamba

ikiwa dontFall% Ikiwa taarifa ya kupiga data ya sensorer kutoka hapo juu

ikiwa data. kushoto <1010% Ikiwa taarifa ya kusababisha kazi tofauti za roomba kutokea ikiwa sensor ya mwamba inahisi chini ya maadili 1010

r.acha

r.moveDistance (-0.2, 0.2)% Inarudisha Roomba 0.2m

r. TurnAngle (-90, 0.5)% Inazunguka Roomba -90 digrii haraka iwezekanavyo

dataif nyingine ikiwa kushotoFront <1010

r.acha

r.soveDistance (-0.3, 0.2)

r. TurnAngle (90, 0.5)% Inazunguka Roomba digrii 90 haraka iwezekanavyo

dataif nyingine ikiwa kulia mbele 1010

r.acha

r.soveDistance (-0.3, 0.2)

r. TurnAngle (90, 0.5)% Inazunguka Roomba digrii 90 haraka iwezekanavyo

dataif nyingine ikiwa ni sawa <1010

r.acha

r.soveDistance (-0.3, 0.2)

r. TurnAngle (90, 0.5)% Inazunguka Roomba digrii 90 haraka iwezekanavyo

mwisho

mwisho

mwisho

kazi liquids = LiquidCheck (r)% Inaunda kazi ya 'LiquidCheck'

wakati kweli% huanza kitanzi kisicho na kipimo cha upimaji

img = r.getImage; inasoma kamera mbali na roboti

picha (img)% inaonyesha picha kwenye dirisha la kielelezo

red_mean = maana (maana (img (200, 150, 1)))% inasoma wastani wa saizi nyekundu

blue_mean = maana (maana (img (200, 150, 3)))% inasoma kiwango cha wastani cha saizi za bluu

vimiminika = maana_ya maana || inaunda tofauti iliyohifadhiwa, 'kimiminika', kwa anuwai ya rangi tofauti

ikiwa vinywaji% Ikiwa taarifa ya kupiga data ya picha kutoka hapo juu

ikiwa red_mean> 170% Ikiwa taarifa ya kusababisha kazi tofauti za roomba kutokea ikiwa kamera itaona rangi nyekundu ya zaidi ya 170

r.stop% inaacha roomba

r.setLEDCenterColor (255)% huweka duara kwa rangi nyekundu

r.setLEDDigits (); Futa onyesho

f = subira ya kusubiri (0, '* UJUMBE UNAOKUWA *)); % huunda upau wa kusubiri ujumbe wa kupakia

r.setLEDDigits ('HOT'); % huweka onyesho la LED kutoa "HOT"

pause (0.5)% Pumzika kwa kifupi kusoma habari iliyotolewa

r.setLEDDigits ('LAVA'); % huweka onyesho la LED kutoa 'LAVA'

pause (0.5)

kusubiri (.33, f, '* UJUMBE UNAOKUWA *); % huunda kuongezeka kwa upau wa kusubiri

r.setLEDDigits ('HOT');

pumzika (0.5)

r.setLEDDigits ('LAVA');

pumzika (0.5)

kusubiri (.67, f, '* UJUMBE UNAOKUWA *'); % huunda kuongezeka kwa upau wa kusubiri

r.setLEDDigits ('HOT');

pumzika (0.5)

r.setLEDDigits ('LAVA');

kusubiri (1, f, '* UJUMBE UNAOKUA *); % inakamilisha upau wa kusubiri

pumzika (1)

karibu (f)% inafunga upau wa kusubiri

r.setLEDDigits (); % inafuta maonyesho ya LED

funga zote% Hufunga madirisha yote ya awali

shoka ('Rangi', 'hakuna', 'XColor', 'hakuna', 'YColor', 'hakuna')% Husafisha dirisha la njama la shoka na chati

y = 0.5; % huweka nafasi ya maandishi kwenye dirisha la kupanga

x = 0.06; % huweka nafasi ya x ya maandishi kwenye dirisha la kupanga

kichwa ('KUTOKA MARS ROOMBA', 'fontsize', 32)% Anaongeza kichwa kwenye dirisha la kupanga njama

quadeqtxt = 'HATARI LAVA'; % Inaweka 'quadeqtxt' inayobadilika hadi pato 0

maandishi (x, y, quadeqtxt, 'mkalimani', 'mpira', 'fontsize', 36); % huonyesha maandishi ya quadeq kwenye dirisha la kupanga

r.moveDistance (-0.2, 0.2)% inabadilisha roomba 0.2m

r. TurnAngle (180, 0.5)% inageuka digrii za roomba 180 haraka iwezekanavyo

r.setLEDCenterColor (128, 128); % huweka kituo cha roomba LED kwa machungwa

funga% zote hufunga windows iliyobaki iliyo wazi

kamaif blue_mean> 175% Ikiwa taarifa ya kusababisha kazi tofauti za roomba kutokea ikiwa kamera itaona rangi ya samawati yenye maana zaidi ya 175

r.stop% huacha roomba

r.setLEDCenterColor (255)% huweka duara kwa rangi nyekundu

r.setLEDDigits (); Futa onyesho

f = subira ya kusubiri (0, '* UJUMBE UNAOKUWA *)); % huunda upau wa kusubiri ujumbe wa kupakia

r.setLEDDigits ('TAZAMA'); % huweka onyesho la LED kutoa "TAZAMA"

pause (0.5)% Pumzika kwa kifupi kusoma habari iliyotolewa

r.setLEDDigits ('WATR'); % huweka onyesho la LED kutoa 'WATR'

pumzika (0.5)

kusubiri (.33, f, '* UJUMBE UNAOKUWA *); % inaunda kuongezeka kwa upau wa kusubiri

r.setLEDDigits ('TAZAMA');

pause (0.5)

r.setLEDDigits ('WATR');

pause (0.5)

kusubiri (.67, f, '* UJUMBE UNAOKUWA *'); % huunda kuongezeka kwa upau wa kusubiri

r.setLEDDigits ('TAZAMA');

pause (0.5)

r.setLEDDigits ('WATR');

kusubiri (1, f, '* UJUMBE UNAOKUA *); % inakamilisha upau wa kusubiri

pumzika (1)

karibu (f)% hufunga upau wa kusubiri

r.setLEDDigits (); % inafuta maonyesho ya LED

funga zote% Hufunga madirisha yote ya awali

shoka ('Rangi', 'hakuna', 'XColor', 'hakuna', 'YColor', 'hakuna')% Hufuta dirisha la njama la shoka na chati

y = 0.5; % huweka nafasi ya maandishi kwenye dirisha la kupanga

x = 0.06; % huweka nafasi ya x ya maandishi kwenye dirisha la kupanga

kichwa ('KUTOKA MARS ROOMBA', 'fontsize', 32)% Anaongeza kichwa kwenye dirisha la kupanga njama

quadeqtxt = 'MAJI YAPATIKANA'; % Inaweka 'quadeqtxt' inayobadilika hadi pato 0

maandishi (x, y, quadeqtxt, 'mkalimani', 'mpira', 'fontsize', 36); % huonyesha maandishi ya quadeq kwenye dirisha la kupanga

r.moveDistance (-0.2, 0.2)% inabadilisha roomba 0.2m

r. TurnAngle (180, 0.5)% inageuka digrii za roomba 180 haraka iwezekanavyo

r.setLEDCenterColor (128, 128); % huweka kituo cha roomba LED kwa machungwa

funga% zote hufunga windows iliyobaki iliyo wazi

mwisho% inaisha 'red_mean' ikiwa ni taarifa

mwisho% huisha 'vinywaji' ikiwa ni taarifa

mwisho% hufunga isiyo na kipimo wakati kitanzi

mwisho% inakamilisha kazi 'LiquidCheck'

Hatua ya 4: Kuendesha Msimbo

Baada ya kunakili na kubandika nambari hiyo kwenye MATLAB lazima uunganishe na Roomba. Mara tu Roomba imeunganishwa lazima utoe jina la ubadilishaji r. Kazi hutumia ubadilishaji r wakati wa kutaja Roomba, kwa hivyo Roomba lazima ifafanuliwe kama variable r. Baada ya kutumia nambari Roomba inapaswa kukimbia kama ilivyoagizwa.

Ilipendekeza: