Talaan ng mga Nilalaman:
- Hakbang 1: Pagkuha ng Mga Aklatan
- Hakbang 2: Pagsulat ng mga Program
- Hakbang 3: Code
- Hakbang 4: Pagpapatakbo ng Code
Video: Mars Roomba Project UTK: 4 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
DISCLAIMER: GAGAGAWA LANG ITO KUNG ANG ROOMBA AY NA-SET SA A
Napaka-tiyak na Paraan, ANG INSTRUCTABLE NA ITO AY NILIKHA PARA SA AT GINAWA NG GAMIT NG UNIVERSITY OF TENNESSEE STUDENTS AND FACULTY
Ginagamit ang code na ito upang mag-set up ng isang Roomba upang magpatakbo ng lokal na nakasulat at nai-save na code sa MATLAB. Hindi ito gagana kung hindi mo makuha ang mga kinakailangang aklatan mula sa website ng University of Tennessee. Kung mayroon kang mga aklatan maaari mong magamit ang mga ito upang mai-program ang iyong sariling Roomba gamit ang mga pag-andar sa silid-aklatan. Itinuturo sa iyo ng Instructable na ito kung paano i-install ang mga aklatan, lumikha ng isang folder para sa lahat ng code, at kung paano i-code at gamitin ang program na aming ibinigay sa ibaba.
Mga Kinakailangan na Materyales:
· Roomba
· MATLAB
· Raspberry Pi at Pi Camera
Hakbang 1: Pagkuha ng Mga Aklatan
Sa website ng engineering may ibinigay na toolbox / library, i-download ito at ilagay ito sa isang bagong folder. Ang folder na ito ay dapat na naglalaman ng lahat ng mga file ng proyekto sa trabaho bilang, ang anumang pagpapaandar na ginamit sa isang program na iyong ginawa ay kailangang mag-refer sa library. Matapos mong magawa ito maaari kang magsimulang magtrabaho sa iyong mga programa
Hakbang 2: Pagsulat ng mga Program
Mayroong ilang mga pag-andar na maaaring magamit sa programa, ang mga pagpapaandar na ito ay maaaring ma-access sa pamamagitan ng paggamit ng utos na "doc roomba". Gamit ang mga pagpapaandar na ito, makokontrol mo ang iyong Roomba sa maraming iba't ibang paraan. Ang code na ibinigay sa ibaba ay gumagamit ng mga sensor ng paga, sensor ng light bar, camera, at cliff sensor sa iba't ibang paraan upang lumikha ng isang mars rover. Ginamit namin ang mga sensor ng paga upang matukoy kapag ang Roomba ay tumama sa isang bagay, kapag nangyari ito ang robot ay babaliktad, paikot, at magpatuloy na gumalaw. Bago mag-hit ang Roomba ng isang bagay, matutukoy ng light bar ang bagay at babagal ang Roomba upang kapag bumagsak ito sa object upang maisaaktibo ang sensor ng bula ang Roomba ay hindi gaanong nasisira / naapektuhan ng epekto. Ang camera ay naghahanap ng tubig o lava sa ibabaw, kung walang natagpuang likido pagkatapos ay ang robot ay magpapatuloy sa paghahanap, kung may natagpuang tubig pagkatapos ay ang mensahe ng robot sa mga operator. Ang mga sensor ng bangin ay idinisenyo upang ihinto ang robot kung papalapit ito sa isang bangin. Kung ang robot ay may pakiramdam ng isang bangin ito ay babaliktad at lumingon upang maiwasan ang pagkahulog.
Hakbang 3: Code
Kopyahin at i-paste ito sa isang MATLAB file na matatagpuan sa parehong folder tulad ng mga aklatan
functionMainRoombaFile (r)
r.setDriveVelocity (0.1, 0.1)
habang totoo% Infinte habang loop upang mapanatili ang pagpapatakbo ng code
dontFall = cliffCheck (r)% Nagtatalaga ng variable na 'dontFall' sa pagpapaandar na 'cliffCheck'
kung dontFall% kung pahayag upang magpatuloy sa code pagkatapos na makumpleto ang 'cliffCheck'
r.setDriveVelocity (0.1, 0.1)% Pinapanatili ang paggalaw ng Roomba pagkatapos makumpleto ang 'cliffCheck'
magtatapos ang% end 'dontFall' kung pahayag
bumper = bumpcheck (r)% Nagtatalaga ng variable na 'bumper' sa pagpapaandar na 'bumpcheck'
kung bumper% kung ang pahayag upang magpatuloy sa code pagkatapos ng 'bumpcheck' ay kumpleto na
r.setDriveVelocity (0.1, 0.1)% Pinapanatili ang paggalaw ng Roomba pagkatapos makumpleto ang 'bumpcheck'
magtatapos ang% end 'bumper' kung pahayag
likido = LiquidCheck (r)% Nagtatalaga ng mga variable na 'likido' sa pagpapaandar na 'LiquidCheck'
kung ang mga likido% kung ang pahayag upang magpatuloy sa code pagkatapos na makumpleto ang 'LiquidCheck'
r.setDriveVelocity (0.1, 0.1)% Pinapanatili ang paggalaw ng Roomba pagkatapos makumpleto ang 'LiquidCheck'
ang pagtatapos ng% ay magtatapos sa 'mga likido' kung pahayag
lightbumper = lightcheck (r)% Nagtatalaga ng variable na 'lightbumper' sa pagpapaandar na 'lightcheck'
i-pause (0.1)% Sandaling i-pause upang maiwasan ang tuluy-tuloy na pag-ulit ng loop
magtatapos ang% end infinite habang loop
nagtatapos sa paggana ng end%
function bumper = bumpcheck (r)% Lumilikha ng function na 'bumpcheck'
bumpdata = r.getBumpers% Itinatalaga ang lahat ng data mula sa bumper hanggang sa variable na 'bumpdata'
bumper = bumpdata. tama || bumpdata.kaliwa || bumpdata.front% Lumilikha ng isang nakaimbak na variable, 'bumper', para sa iba't ibang mga bumper
kung bumpdata.kano> 0% Kung ang pahayag na sanhi upang mangyari ang iba't ibang mga pag-andar ng roomba kung bumper ang Bumper
r.stop% Itigil ang Roomba
r.moveDistance (-0.3, 0.2)% Reverses Roomba 0.3m
r.turnAngle (90, 0.5)% Paikutin ang Roomba ng 90 degree nang mas mabilis hangga't maaari
magtapos
kung bumpdata.front> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (randi (270), 0.5)% Paikutin ang Roomba sa isang random na agwat sa pagitan ng 0 at 270 degree nang mas mabilis hangga't maaari
magtapos
kung bumpdata.kaliwa> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (-90, 0.5)% Paikutin ang Roomba -90 degree nang mas mabilis hangga't maaari
magtapos
magtapos
function lightbumper = lightcheck (r)% Lumilikha ng function na 'lightcheck'
lightdata = r.getLightBumpers% Itinatalaga ang lahat ng data mula sa light bump sensor sa variable na 'lightdata'
lightbumper = lightdata.kaliwa || lightdata. tama || lightdata. RightCenter || lightdata.leftCenter% Lumilikha ng isang nakaimbak na variable, 'lightbumper', para sa iba't ibang mga light bumper
kung lightbumper% Kung pahayag upang tawagan ang data ng lightbumper mula sa itaas
kung lightdata.kaliwa> 10% Kung ang pahayag na sanhi upang mangyari ang iba't ibang mga pag-andar ng roomba kung ang light bumper ay nakakaramdam ng higit sa 10 mga halaga
r.setDriveVelocity (0.05, 0.05)% Pinapabagal ang roomba upang maghanda para sa paga
pagtatapos% magtatapos pauna kung pahayag
kung lightdata. RightCenter> 10
r.setDriveVelocity (0.05, 0.05)
magtapos
kung lightdata. tama> 10
r.setDriveVelocity (0.05, 0.05)
magtapos
kung lightdata.leftCenter> 10
r.setDriveVelocity (0.05, 0.05)
magtapos
magtatapos ang% light 'lightbumper' kung pahayag
natapos ang pagtatapos ng paggana ng lightcheck
function dontFall = cliffCheck (r)% Lumilikha ng function na 'cliffCheck'
data = r.getCliffSensors; % Nagtatalaga ng lahat ng data mula sa cliff sensor patungo sa variable na 'data'
dontFall = data.kaliwa <1020 || data.leftFront <1020 || data. RightFront <1020 || data. Right <1020% Lumilikha ng isang naka-imbak na variable, 'dontFall', para sa iba't ibang mga sensor ng cliff
kung dontFall% Kung pahayag upang tawagan ang data ng cliff sensor mula sa itaas
kung data.left <1010% Kung ang pahayag na sanhi ng iba't ibang mga pag-andar ng roomba ay nangyari kung ang sensor ng cliff ay nakakaramdam ng mas mababa sa 1010 na halaga
r.stop
r.moveDistance (-0.2, 0.2)% Reverses Roomba 0.2m
r.turnAngle (-90, 0.5)% Paikutin ang Roomba -90 degree nang mas mabilis hangga't maaari
kung hindi man ang data.leftFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Paikutin ang Roomba ng 90 degree nang mas mabilis hangga't maaari
kung hindi man ang data. RightFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Paikutin ang Roomba ng 90 degree nang mas mabilis hangga't maaari
kung hindi man ang data. tama <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Paikutin ang Roomba ng 90 degree nang mas mabilis hangga't maaari
magtapos
magtapos
magtapos
mga likido sa pag-andar = LiquidCheck (r)% Lumilikha ng paggana ng 'LiquidCheck'
habang ang tunay na% ay nagsisimulang walang katapusan na loop para sa pag-calibrate
img = r.getImage; % basahin ang camera off ng robot
imahe (img)% ipinapakita ang imahe sa isang window ng figure
binabasa ng red_mean = mean (mean (img (200, 150, 1)))% ang average na halaga ng mga pulang pixel
blue_mean = ibig sabihin (ibig sabihin (mean (img (200, 150, 3)))% binabasa ang average na halaga ng mga asul na pixel
likido = red_mean || blue_mean% Lumilikha ng isang nakaimbak na variable, 'mga likido', para sa iba't ibang mga variable ng kulay
kung likido% Kung pahayag upang tawagan ang data ng imahe mula sa itaas
kung red_mean> 170% Kung ang pahayag na sanhi upang mangyari ang iba't ibang mga pag-andar ng roomba kung ang camera ay nakakita ng isang ibig sabihin ng pulang kulay na mas malaki sa 170
ihinto ni r.stop ang roomba
r.setLEDCenterColor (255)% nagtatakda ng bilog sa kulay pula
r.setLEDDigits (); % i-clear ang display
f = waitbar (0, '* INCOMING MESSAGE *'); Lumilikha si% ng isang waitbar para sa isang mensahe sa paglo-load
r.setLEDDigits ('HOT'); % nagtatakda ng LED display upang maglabas ng 'PANAHON'
i-pause (0.5)% Maikling Pag-pause upang basahin ang impormasyong hindi naaayon
r.setLEDDigits ('LAVA'); % nagtatakda ng LED display upang i-output ang 'LAVA'
i-pause (0.5)
waitbar (.33, f, '* INCOMING MESSAGE *'); Lumilikha ang% ng pagtaas sa waitbar
r.setLEDDigits ('HOT');
i-pause (0.5)
r.setLEDDigits ('LAVA');
i-pause (0.5)
waitbar (.67, f, '* INCOMING MESSAGE *'); Lumilikha ang% ng pagtaas sa waitbar
r.setLEDDigits ('HOT');
i-pause (0.5)
r.setLEDDigits ('LAVA');
waitbar (1, f, '* INCOMING MESSAGE *'); % nakumpleto ang waitbar
i-pause (1)
isara (f)% isinasara ang waitbar
r.setLEDDigits (); % nililimas ang LED display
isara ang lahat% Isinasara ang lahat ng nakaraang windows
axes ('Colour', 'none', 'XColor', 'none', 'YColor', 'none')% Inaalis ang window ng plot ng mga palakol at tsart
y = 0.5; Itinatakda ni% ang y-posisyon ng teksto sa window ng paglalagay
x = 0.06; Itinatakda ni% ang x-posisyon ng teksto sa window ng paglalagay
pamagat ('MULA SA MARS ROOMBA', 'fontsize', 32)% Nagdaragdag ng isang pamagat sa window ng paglalagay
quadeqtxt = 'DANGER LAVA'; % Itinatakda ang variable na 'quadeqtxt' sa output 0
teksto (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % ipinapakita ang teksto ng quadeq sa window ng paglalagay
r.moveDistance (-0.2, 0.2)% baligtarin ang roomba 0.2m
r.turnAngle (180, 0.5)% lumiliko sa roomba 180 degree nang mas mabilis hangga't maaari
r.setLEDCenterColor (128, 128); Itinatakda ng% ang roomba center na LED sa orange
isara ang lahat ng% magsasara ng natitirang bukas na windows
kung hindi man blue_mean> 175% Kung ang pahayag na sanhi upang mangyari ang iba't ibang mga pag-andar ng roomba kung nakikita ng camera ang isang ibig sabihin ng asul na kulay na mas malaki sa 175
ihinto ni r.stop ang roomba
r.setLEDCenterColor (255)% nagtatakda ng bilog sa kulay pula
r.setLEDDigits (); % i-clear ang display
f = waitbar (0, '* INCOMING MESSAGE *'); Lumilikha si% ng isang waitbar para sa isang mensahe sa paglo-load
r.setLEDDigits ('LOOK'); % nagtatakda ng LED display upang i-output ang 'LOOK'
i-pause (0.5)% Maikling Pag-pause upang basahin ang impormasyong hindi naaayon
r.setLEDDigits ('WATR'); % nagtatakda ng LED display upang i-output ang 'WATR'
i-pause (0.5)
waitbar (.33, f, '* INCOMING MESSAGE *'); Lumilikha ang% ng pagtaas sa waitbar
r.setLEDDigits ('LOOK');
i-pause (0.5)
r.setLEDDigits ('WATR');
i-pause (0.5)
waitbar (.67, f, '* INCOMING MESSAGE *'); Lumilikha si% ng pagtaas sa waitbar
r.setLEDDigits ('LOOK');
i-pause (0.5)
r.setLEDDigits ('WATR');
waitbar (1, f, '* INCOMING MESSAGE *'); % nakumpleto ang waitbar
i-pause (1)
isara (f)% isinasara ang waitbar
r.setLEDDigits (); % nililimas ang LED display
isara ang lahat% Isinasara ang lahat ng nakaraang windows
axes ('Colour', 'none', 'XColor', 'none', 'YColor', 'none')% Inaalis ang window ng plot ng mga palakol at tsart
y = 0.5; Itinatakda ni% ang y-posisyon ng teksto sa window ng paglalagay
x = 0.06; Itinatakda ni% ang x-posisyon ng teksto sa window ng paglalagay
pamagat ('MULA SA MARS ROOMBA', 'fontsize', 32)% Nagdaragdag ng isang pamagat sa window ng paglalagay
quadeqtxt = 'NAPUNONG TUBIG'; % Itinatakda ang variable na 'quadeqtxt' sa output 0
teksto (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % ipinapakita ang teksto ng quadeq sa window ng paglalagay
r.moveDistance (-0.2, 0.2)% baligtarin ang roomba 0.2m
r.turnAngle (180, 0.5)% lumiliko sa roomba 180 degree nang mas mabilis hangga't maaari
r.setLEDCenterColor (128, 128); Itinatakda ng% ang roomba center na LED sa orange
isara ang lahat ng% magsasara ng natitirang bukas na windows
magtatapos ang% end 'red_mean' kung pahayag
ang pagtatapos ng% ay magtatapos sa 'mga likido' kung pahayag
Ang end% ay nagsasara ng walang katapusan habang loop
nagtatapos sa pagtatapos ng% function na 'LiquidCheck'
Hakbang 4: Pagpapatakbo ng Code
Matapos mong makopya at mai-paste ang code sa MATLAB dapat kang kumonekta sa Roomba. Kapag nakakonekta ang Roomba dapat mong pangalanan ang variable r. Ginagamit ng mga pagpapaandar ang variable r kapag tumutukoy sa Roomba, kaya't ang Roomba ay dapat na tinukoy bilang variable r. Matapos patakbuhin ang code ang Roomba ay dapat tumakbo tulad ng itinuro.
Inirerekumendang:
Ginagawang Ang iyong Roomba Sa isang Mars Rover: 5 Hakbang
Ginagawang Ang iyong Roomba Sa isang Mars Rover:
Robot Project UTK 2017: 3 Mga Hakbang
Robot Project UTK 2017: Mission: Ang aming koponan ng mga inhinyero ay tinanggap ng Froogle, isang pundasyong Nonprofit para sa pagpapaunlad ng teknolohiyang bukas na mapagkukunan, upang makabuo ng isang makabagong Human Helping Mars Rover.-Out na mga koponan " rover " ay isang roomba na naka-code upang maipatupad ang isang serye o
Mars Roomba: 6 na Hakbang
Mars Roomba: Gagabayan ka ng Tagubilin na ito sa mga direksyon ng pagpapatakbo ng isang Raspberry Pi na kinokontrol na Roomba vacuum bot. Ang operating system na gagamitin namin ay sa pamamagitan ng MATLAB
Roomba MATLAB Project: 5 Hakbang
Roomba MATLAB Project: Ang kasalukuyang plano na mayroon ang NASA para sa Mars rover ay para itong maging isang data collector at gumala sa paligid ng Mars, nangongolekta ng mga sample ng lupa upang maibalik sa Earth upang makita ng mga siyentista kung mayroong mga nakaraang form ng buhay sa ang planeta. Karagdagang
UTK EF 230 MarsRoomba Project Fall 2018: 5 Hakbang
UTK EF 230 MarsRoomba Project Fall 2018: Sa kasalukuyan, ang Mars rovers ay ginagamit upang mangolekta ng data sa ibabaw ng Mars sa pamamagitan ng iba't ibang mga pamamaraan, sa pangwakas na pagtatapos ng karagdagang kaalaman tungkol sa potensyal ng planeta para sa buhay na microbial. Pangunahin na ginagamit ng mga Rovers ang mga tool sa pagkuha ng litrato at pagsusuri sa lupa para sa data c