Talaan ng mga Nilalaman:

IRobot Lumikha-Mars Expedition Rover Mark I: 4 Mga Hakbang
IRobot Lumikha-Mars Expedition Rover Mark I: 4 Mga Hakbang

Video: IRobot Lumikha-Mars Expedition Rover Mark I: 4 Mga Hakbang

Video: IRobot Lumikha-Mars Expedition Rover Mark I: 4 Mga Hakbang
Video: France's contribution to the conquest of space and its impact on our vision of the planet 2024, Hulyo
Anonim
Ang IRobot Create-Mars Expedition Rover na si Mark I
Ang IRobot Create-Mars Expedition Rover na si Mark I

Ituturo sa iyo ang itinuturo na ito kung paano i-set up ang Lumikha ng iRobot sa pamamagitan ng paggamit ng MatLab coding. Ang iyong robot ay may kakayahang maghanap ng mga mineral sa pamamagitan ng pagkilala ng mga hugis, pagmamaneho ng masungit na lupain sa pamamagitan ng paggamit ng mga cliff sensor, at may kakayahang manu-manong kontrolin sa pamamagitan ng live feed.

Hakbang 1: Mga Panustos

Mga gamit
Mga gamit

Para sa proyektong ito, kakailanganin mo ang isang iRobot Lumikha, na isang programmable na bersyon ng Roomba robot vacuum cleaner. Nilagyan ang robot ng lahat ng mga sensor na kinakailangan para sa proyektong ito, partikular ang mga sensor ng paga, sensor ng talampas at sensor na "Light Bump". Kakailanganin mo rin ang isang Raspberry Pi at video camera, na ginagamit para sa wireless na komunikasyon, live na programa, at ang live na video feed. Panghuli, kakailanganin mo ang isang naka-print na 3D na mount para sa Raspberry Pi at camera.

Hakbang 2: Paunlarin ang Coding upang masiyahan ang kanais-nais na Kinalabasan

Paunlarin ang Coding upang masiyahan ang kanais-nais na Kinalabasan
Paunlarin ang Coding upang masiyahan ang kanais-nais na Kinalabasan

Kapag nakakonekta mo na ang iyong Roomba, kakailanganin mong lumikha ng isang Matlab code na magbibigay sa iyo ng iyong nais na mga output pagkatapos ng iyong nais na mga input.

Makikita ang code dito:

% Roomba Project% Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal)% 4/11/19% Paglalarawan ng Suliranin: Lumikha ng isang rover upang tulungan ang mga tao sa panahon ng% paggalugad / tirahan ng mars. % Paraan ng solusyon: Paghahanap ng organikong (berde) na bagay sa pamamagitan ng paggamit ng% light bumpers, cliff sensors at camera upang suriin ang organikong bagay. Payagan ang% ang rover na mag-navigate sa magaspang na lupain sa pamamagitan ng paggamit ng mga bumper, cliff% sensor, at sensor ng taas ng gulong. Paganahin ang mga tao upang makontrol ang rover mula sa% isang ligtas na distansya ang layo at manu-manong maghanap para sa mga mineral. mga pagpipilian = {'BUHAY', 'ROUGH TERRAIN', 'USER CONTROL'}; % Tatlong mga pagpipilian sa menu ng dialogo Setting = menu ('', mga pagpipilian) kung setting> 0% Kung pinili ang pagpipilian humingi ng mga pagpipilian sa kumpirmasyon ng gumagamit2 = {'Oo', 'Hindi'}% Lumikha ng isang cell array para sa "oo" o "Hindi "choice Confirm = menu (['You napili"' options {Setting} '"mode.'], mga pagpipilian2)% Kumpirmahin ang pagpipilian ng setting ng gumagamit kung Kumpirmahin ang == 1 kung ang Pagtatakda == 1% Suriin kung ang setting na" BUHAY "ang napili i = 0 habang ako == 0 r.setLEDDigits (num2str ('BUHAY'))% Ipakita ang 'BUHAY' sa LED para sa i = 1: 100 r.setDriveVelocity (0.05)% Ilipat ang roomba pasulong sa 0.05 m / sy = r.getCliffSensors % Kunin at iimbak ang mga halaga ng sensor ng cliff sa istraktura ng cell na "y" l = r.getLightBumpers% Kunin at iimbak ang mga light bump na halaga sa istrakturang "f" kung l.kaliwa> 100% Suriin kung ang kaliwang ilaw na bumper ay sakop ng r.moveDistance (-0.05)% Ilipat ang roomba pabalik 0.05 metro r.turnAngle (20)% Paikutin ang roomba 20 degree CCW img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Natagpuan ang buhay!" waitfor (d); pagtapos sa iba pa kung kaliwa sa kaliwa> 100% Ang tsek ay natitira / sa harap na ilaw ng bumper ay natakpan r.moveDistance (-0.05)% Ilipat ang roomba pabalik na 0.05 metro img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba at iimbak sa variable 'img 'straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Nahanap ang buhay!" waitfor (d); pagtapos sa iba pa kung l.leftCenter> 100% Suriin kung ang left / center light bumper ay natakpan r.moveDistance (-0.05)% Ilipat ang roomba pabalik na 0.05 metro img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba at iimbak sa variable 'img 'straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Natagpuan ang buhay!" waitfor (d); pagtapos sa iba pa kung l. RightCenter> 100% Suriin kung ang kanan / gitna na ilaw na bumper ay natakpan r.moveDistance (-0.05)% Ilipat ang roomba pabalik na 0.05 metro img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba at iimbak sa variable 'img 'straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Nahanap ang buhay!" waitfor (d); tapusin pa kung l. RightFront> 100% Suriin kung ang kanan / harap na ilaw ng bumper ay natakpan r.moveDistance (-0.05)% Ilipat ang roomba pabalik na 0.05 metro img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba at iimbak sa variable 'img 'straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Nahanap ang buhay!" waitfor (d); pagtapos sa iba pa kung tama> 100% Suriin kung ang tamang ilaw na bumper ay natakpan r.moveDistance (-0.05)% Ilipat ang roomba pabalik na 0.05 metro r.turnAngle (-20)% Paikutin ang roomba 20 degree CW img = r.getImage% Kumuha ng imahe mula sa rasberry pie camera sa roomba at iimbak sa variable 'img' straight = [100 0 150 150]; img = imcrop (img, rect)% na imahe ng pag-crop upang ituon ang center red = mean (mean (img (:,:, 1)))% average red intensity green = mean (mean (img (:,:, 2)))% average green intensity blue = mean (mean (img (:,:, 3)))% average na blue intensity kung berde> pula && berde> asul% Suriin kung ang halaman ay nasa larawan d = msgbox (['Life found! ']); % Ipakita ang isang kahon ng mensahe na nagsasabing "Nahanap ang buhay!" waitfor (d); tapusin pa kung y.leftFront <1500% Suriin kung ang kaliwa / harap na bahagi ng roomba ay nasa talampas r.moveDistansya (-0.1, 0.05)% Ilipat ang roomba pabalik 0.1 metro sa 0.05 m / s r.turnAngle (-5)% Paikutin ang roomba 5 degrees CW elseif y. rightFront <1500% Suriin kung ang kanan / harap na bahagi ng roomba ay nasa cliff r.moveDistansya (-0.1, 0.05)% Ilipat ang roomba pabalik na 0.1 metro sa 0.05 m / s r.turnAngle (5)% Paikutin ang roomba 5 degree CCW kung hindi. kaliwa <1000% Suriin kung ang kaliwang bahagi ng roomba ay wala sa talampas r.moveDistansya (-0.05, 0.05)% Ilipat ang roomba pabalik na 0.05 metro sa 0.05 m / s r.turnAngle (-10)% Paikutin ang roomba 10 degree CW elseif y. Right0% Patakbuhin kung ang pindutan ay pinindot kung Magpatuloy == 1 i = 0% Magpatuloy sa paghahanap para sa buhay iba pa i = 1% End mode ng pagtatapos ng pagtatapos ng pagtatapos ng iba pa Kung ang pagtatakda ng == 2% Suriin kung ang setting na "ROUGH TERRAIN" ay napili i = 0 habang ako == 0 r.setLEDDigits (num2str ('RGH'))% Display 'Rough' sa LED Display para sa i = 1: 1000 r.setDriveVelocity (0.05)% Itakda ang tulin ng drive ng roomba sa 0.05 m / sx = r.getBumpers% Kunin at iimbak ang mga halaga ng bumper sensor sa istrakturang "x" y = r.get CliffSensors% Kunin at iimbak ang mga halaga ng cliff sensor sa istrakturang "y" kung x. Right == 1% Suriin kung ang kanang bamper ay pinindot r.turnAngle (10)% Paikutin ang roomba 10 degree CCW kung hindi x.left == 1% Suriin kung natitira ang bamper ay pinindot r.turnAngle (-10)% Paikutin ang roomba 10 degree CW kung wala x.front == 1% Suriin kung ang front bumper ay pinindot r.turnAngle (20)% Paikutin ang roomba 20 degrees CCW kung hindi x. RightWheelDrop == 1% Suriin kung ang kanang gulong ay bumaba r.turnAngle (-20)% Paikutin ang roomba 20 degree CW kung hindi x.leftWheelDrop == 1% Suriin ang natitirang gulong ay bumagsak r.turnAngle (20)% Paikutin ang roomba 20 degree CCW kung hindi man.leftFront < 1500% Suriin kung ang harap na kaliwang bahagi ng roomba ay nasa talampas r.moveDistansya (-0.05, 0.05)% Ilipat ang roomba paatras 0.05 metro sa 0.05 m / s r.turnAngle (-5)% Paikutin ang roomba 5 degree CW kung hindi man. RightFront < 1500% Suriin kung ang kanang bahagi sa harap ng roomba ay nasa talampas r.moveDistansya (-0.05, 0.05)% Ilipat ang roomba paatras 0.05 metro sa 0.05 m / s r.turnAngle (5)% Paikutin ang roomba 5 degree CCW kung hindi. Kaliwa <1000 % Suriin kung natitirang bahagi o f roomba ay nasa cliff r.moveDistance (-0.05, 0.05)% Ilipat ang roomba pabalik na 0.05 metro sa 0.05 m / s r.turnAngle (-10)% Paikutin ang roomba 10 degrees CW kung hindi man.pagpatuloy == 1 i = 0 % Magpatuloy sa magaspang na lupain i = 1% Tapusin ang magaspang na lupain ng dulo ng dulo ng pagtatapos ng iba pa Manual na Mode i = 0 r.setLEDDigits (num2str ('USER'))% Display 'USER' sa LED Display d = msgbox (['Mga arrow Key - Ilipat; S - Stop Rover; ESC - End User Control; A - Hanapin ang Mapagkukunan ']); waitfor (d); habang ako == 0 r.showCamera% Buksan ang live na feed ng rasberry pie sa magkakahiwalay na window D = getkey (1)% Kunin ang key na pinindot ng gumagamit, itabi ang halaga ng ASCII bilang variable D kung D == 30% Suriin kung ang "pataas" na arrow ay may pinindot r.setDriveVelocity (0.1)% Ipadala ang roomba pasulong sa 0.2 m / s elseif D == 28% Suriin kung ang "kaliwang" arrow ay pinindot r.setDriveVelocity (0)% Itigil ang roomba mula sa pagsulong o pabalik ng r.turnAngle (15, 0.05)% Paikutin ang roomba 45 degrees CCW sa 0.05 m / s pa kung D == 31% Suriin kung ang "pababang" arrow ay pinindot r.setDriveVelocity (-0.1)% Ilipat ang roomba paatras sa 0.2 m / s kung hindi D == 29% Suriin kung ang "kanang" arrow ay pinindot r.setDriveVelocity (0)% Itigil ang roomba mula sa paglipat o pabalik ng r.turnAngle (-15, 0.05)% Paikutin ang roomba 45 degrees CW sa 0.05 m / s kung hindi D == 27% Suriin kung ang "esc" (pagtakas) key ay pinindot i = 1% Baguhin ang halaga ng variable na "i" upang lumabas sa loop d = msgbox ('Lumalabas na "Control ng User"')% Ipaalam sa gumagamit na ang manwal na mode ay lumalabas sa ibang D == 115% Suriin kung ang "s" key ay pinindot r.setDriveVelocity (0)% Itigil ang roomba mula sa pasulong o paatras pa kung D == 97% Suriin kung ang "a" ay pinindot ang imahe = r.getImage; imwrite (imahe, 'image.png') W = Classify (imahe) K = mode (W) kung K == 3 d = msgbox ('Nakita ang mapagkukunan')% Ipakita kung nakita ng isang hugis-parihaba na mapagkukunan ang paghihintay (d); % Hintaying isara ng gumagamit ang kahon ng mensahe "d" elseif K == 0 d = msgbox ('Not Resource:(')% Ipakita kung hindi nakita ang hugis-parihaba na mapagkukunan waitfor (d);% Maghintay para isara ng user ang kahon ng mensahe na "d" magtapos pa d = msgbox ('Hindi wastong key input.')% Ipakita kung isasara ng gumagamit ang "piliin ang setting" na menu waitfor (d);% Hintaying isara ng user ang kahon ng mensahe na "d" end waitfor (d);% Maghintay para sa gumagamit upang isara ang kahon ng mensahe na "d" end end end end d = msgbox ('Paalam')% Paalam kung ang mga pagpipilian ay sarado sa end waitfor (d);

Hakbang 3: Pagsubok

Pagsubok
Pagsubok

Kapag nakasulat na ang iyong code, kakailanganin mong subukan ang iyong Roomba. Kahit na ang iyong code ay maaaring mukhang tama, marami sa iyong mga halaga, lalo na para sa kulay o hugis, ay kailangang baguhin upang makilala nang maayos ang mga bagay na nais mong kilalanin ng iyong Roomba.

Hakbang 4: Pagmasdan ang Mga Visual Output

Pagmasdan ang Mga Visual Output
Pagmasdan ang Mga Visual Output
Pagmasdan ang Mga Visual Output
Pagmasdan ang Mga Visual Output

Malinaw na malinaw kung matagumpay mong na-program ang iyong Roomba batay sa mga visual na output.

Kasama sa mga output ang:

  • Pagtuklas ng Hugis: Ang kakayahan ng Roomba na maayos na makilala ang mga hugis upang makita ang tamang mga mineral
  • Magaspang na Maneuvers ng Terrain: Iwasan ang mga bangin o madilim na lugar
  • Manu-manong Mode: Live feed at ang kakayahang kontrolin ang Roomba
  • Mga larawan: Mga larawan ng mineral
  • Natagpuan ang Buhay !: Isang kahon ng teksto ng MatLab na nagpapahiwatig na kinilala ng iyong halaman ang organikong buhay.

Iyon ang pagtatapos ng aming tutorial, tangkilikin ang iyong bagong Mars Expedition Rover!

Inirerekumendang: