Satura rādītājs:

IRobot Create-Mars Expedition Rover Mark I: 4 soļi
IRobot Create-Mars Expedition Rover Mark I: 4 soļi

Video: IRobot Create-Mars Expedition Rover Mark I: 4 soļi

Video: IRobot Create-Mars Expedition Rover Mark I: 4 soļi
Video: Посадка Марсохода Perseverance- История Изнутри 2024, Novembris
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Šī pamācība iemācīs jums iestatīt iRobot Create, izmantojot MatLab kodēšanu. Jūsu robotam būs iespēja meklēt minerālus, nošķirot formas, manevrēt nelīdzenā reljefā, izmantojot klints sensorus, un to var manuāli vadīt, izmantojot tiešo plūsmu.

1. solis: Piegādes

Piegādes
Piegādes

Šim projektam jums būs nepieciešams iRobot Create, kas ir Roomba robotu putekļsūcēja programmējama versija. Robots ir aprīkots ar visiem šim projektam nepieciešamajiem sensoriem, īpaši trieciena sensoriem, klints sensoriem un "Light Bump" sensoriem. Jums būs nepieciešama arī Raspberry Pi un videokamera, ko izmanto bezvadu sakariem, tiešraides programmēšanai un tiešraides video plūsmai. Visbeidzot, jums būs nepieciešams 3D drukāts stiprinājums Raspberry Pi un kamerai.

2. darbība. Izstrādājiet kodēšanu, lai apmierinātu vēlamo rezultātu

Izstrādājiet kodēšanu, lai apmierinātu vēlamo rezultātu
Izstrādājiet kodēšanu, lai apmierinātu vēlamo rezultātu

Kad esat pievienojis savu Roomba, jums būs jāizveido Matlab kods, kas pēc vēlamās ievades sniegs vēlamos rezultātus.

Kods redzams šeit:

%Roomba projekts%Brentens Arnolds (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Problēmas apraksts: Izveidojiet roveri, lai palīdzētu cilvēkiem Marsa izpētes/apdzīvošanas laikā. %Risinājuma metode: meklējiet organiskās (zaļās) vielas, izmantojot %gaismas buferus, klints sensorus un kameru, lai pārbaudītu organisko vielu klātbūtni. Ļaujiet %roverim pārvietoties nelīdzenā apvidū, izmantojot buferus, klints %sensorus un riteņu augstuma sensorus. Ļaujiet cilvēkiem kontrolēt roveri no %drošā attālumā un manuāli meklēt minerālus. options = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Trīs opcijas dialoga izvēlnē Setting = menu ('', options) if Setting> 0 %Ja izvēlēta opcija, lūdziet lietotāja apstiprinājuma izvēli2 = {'Jā', 'Nē'} %Izveidojiet šūnu masīvu "jā" vai "Nē" "izvēle Apstiprināt = izvēlne (['Jūs izvēlējāties' 'iespējas {Iestatījums}' 'režīms.'], iespējas2) %Apstipriniet lietotāja iestatījuma izvēli, ja Apstiprināt == 1 ja Iestatījums == 1 %Pārbaudiet, vai ir izvēlēts iestatījums" LIFE "i = 0, kamēr i == 0 r.setLEDDigits (num2str ('LIFE')) %Parādīt 'LIFE' uz LED, ja i = 1: 100 r.setDriveVelocity (0.05) %Virziet telpu uz priekšu pie 0.05 m/sy = r.getCliffSensors %Iegūt un uzglabāt klints sensora vērtības šūnu struktūrā "y" l = r.getLightBumpers %Iegūt un saglabāt gaismas trieciena vērtības struktūrā "f", ja l.left> 100 %Pārbaudiet, vai kreisās gaismas buferis ir pārklāts r.moveDistance (-0.05) %Pārvietot roomba atpakaļ 0,05 metri r.turnAngle (20) %Pagriezt roomba par 20 grādiem CCW img = r.getImage %Iegūt attēlu no aveņu pīrāga kameras uz roomba rect = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļa = vidējais (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai attēls ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif l.leftFront> 100 %Pārbaude ir pa kreisi/priekšējais gaismas buferis ir pārklāts 'taisna = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļa = vidējais (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai augs ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif l.leftCenter> 100 %Pārbaudiet, vai kreisais/centrālais gaismas buferis ir pārklāts 'taisna = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļā = vidējā (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai augs ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif l.rightCenter> 100 %Pārbaudiet, vai labais/centrālais gaismas buferis ir pārklāts 'taisna = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļā = vidējā (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai augs ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif l.rightFront> 100 %Pārbaudiet, vai labais/priekšējais gaismas buferis ir pārklāts 'taisna = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļa = vidējais (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai augs ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif l.right> 100 %Pārbaudiet, vai labais gaismas buferis ir pārklāts aveņu pīrāga kamera Roomba un uzglabā mainīgā 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %apgrieztā attēla, lai fokusētos uz sarkano centru = vidējais (vidējais (img (:,:, 1))) %vidējā sarkanā intensitāte zaļā = vidējā (vidējais (img (:,:, 2))) %vidējā zaļā intensitāte zila = vidējais (vidējais (img (:,:, 3))) %vidējā zilā intensitāte, ja zaļa> sarkana && zaļa> zila %Pārbaudiet, vai attēls ir attēlā d = msgbox (['Dzīve atrasta! ']); %Parādiet ziņojumu lodziņu ar uzrakstu "Dzīve atrasta!" gaidīt (d); end elseif y.leftFront <1500 %Pārbaudiet, vai roomba kreisā/priekšējā daļa nav no klints r.moveDistance (-0,1, 0,05) %Pārvietojiet roomba atpakaļ 0,1 metru pie 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 grādi CW cits, ja ir pa labi Priekšējā puse <1500 %Pārbaudiet, vai roomba labā/priekšējā daļa nav no klints r.moveDistance (-0,1, 0,05) %Pārvietojiet roomba atpakaļ 0,1 metru pie 0,05 m/s r grādi CCW cits, ja kreisais <1000 %Pārbaudiet, vai roomba kreisā puse nav no klints r.moveDistance (-0,05, 0,05) %Pārvietojiet roomba atpakaļ 0,05 metrus ar ātrumu 0,05 m/s CW elseif y.right0 %Palaist, ja tiek nospiesta poga, ja Turpināt == 1 i = 0 %Turpināt mūža meklēšanu i = 1 %Beigt DZĪVES režīmu beigu beigas beigu citu i = 0, kamēr i == 0 r.setLEDDigits (num2str ('RGH')) %Displejs 'Rough' uz LED displeja, ja i = 1: 1000 r.setDriveVelocity (0.05) %Iestatiet roomba piedziņas ātrumu uz 0.05 m/sx = r.getBumpers %Izgūst un saglabā bufera sensora vērtības struktūrā "x" y = r.get CliffSensors %Iegūstiet un saglabājiet klints sensoru vērtības struktūrā "y", ja x.pa labi == 1 %Pārbaudiet, vai ir nospiests labais buferis r.turnAngle (10) %Pagriezt istabu par 10 grādiem CCW cits x buferis ir nospiests r.turnAngle (-10) %Rotate roomba 10 ° CW elseif x.front == 1 %Pārbaudiet, vai ir nospiests priekšējais buferis r.turnAngle (20) %Pagrieziet istabu par 20 grādiem CCW elseif x.rightWheelDrop == 1 % Pārbaudiet, vai labais ritenis nav nokritis r.turnAngle (-20) %Pagrieziet istabu par 20 grādiem CW, ja x.leftWheelDrop == 1 %Pārbaudiet, vai kreisais ritenis ir nokritis r.turnAngle (20) %Pagrieziet istabu par 20 grādiem CCW y.leftFront < 1500 %Pārbaudiet, vai roomba priekšējā kreisā daļa nav novietota no klints r.move 1500 %Pārbaudiet, vai roomba labā priekšējā daļa nav novietota no klints. Attālums (-0,05, 0,05) %Pārvietojiet roomba atpakaļ 0,05 metrus atpakaļ pie 0,05 m/s griešanās leņķis (5) %Pagrieziet roomba par 5 grādiem CCW, ja kreisā puse ir mazāka par 1000 %Pārbaudiet, vai kreisā daļa ir o f roomba ir izslēgta no klints r.moveDistance (-0.05, 0.05)%Virziet roomba atpakaļ par 0.05 metriem ar ātrumu 0.05 m/s r.turnAngle (-10)%Pagrieziet roomba par 10 grādiem CW, ja ir labi 0, ja turpināt == 1 i = 0 %Turpināt nelīdzenu reljefu citādi i = 1 %Beigt nelīdzenu reljefu beigu beigu galu % %Manuālais režīms i = 0 r.setLEDDigits (num2str ('USER')) %Parādīt 'USER' uz LED displeja d = msgbox (['Arrow Keys - Pārvietot; S - Stop Rover; ESC - galalietotāja kontrole; A - Atrodiet resursu ']); gaidīt (d); kamēr i == 0 r.showCamera %Atveriet aveņu pīrāga kameras tiešraides plūsmu atsevišķā logā D = getkey (1) %Lietotāja nospiesta izguves taustiņš, saglabājiet ASCII vērtību kā mainīgo D, ja D == 30 %Pārbaudiet, vai augšupvērstā bultiņa tika nospiests r.setDriveVelocity (0,1) %Nosūtīt roomba uz priekšu ar 0,2 m/s elseif D == 28 %Pārbaudiet, vai ir nospiesta bultiņa "pa kreisi" r.setDriveVelocity (0) %Apturiet Roomba no pārvietošanās uz priekšu vai atpakaļ., 0.05) %Pagriezt roomba par 45 grādiem CCW pie 0.05 m/s elseif D == 31 %Pārbaudiet, vai ir nospiesta bultiņa "uz leju" r.setDriveVelocity (-0,1) %Pārvietojiet Roomba atpakaļ ar ātrumu 0,2 m/s cits D == 29 % Pārbaudiet, vai ir nospiesta bultiņa "pa labi". tika nospiests taustiņš "esc" (evakuācijas taustiņš) 115 %Pārbaudiet, vai ir nospiests taustiņš "s" r.setDriveVelocity (0) %Stop roomba no iet uz priekšu vai atpakaļ elseif D == 97 %Pārbaudiet, vai ir nospiests "a" image = r.getImage; imwrite (attēls, 'image.png') W = Klasificēt (attēls) K = režīms (W), ja K == 3 d = msgbox ('Resurss atrasts') %Parādīt, ja taisnstūrveida resurss tiek atklāts gaidīšanai (d); %Pagaidiet, kamēr lietotājs aizver ziņojumu lodziņu "d" elseif K == 0 d = msgbox ('Not Resource:(') %Parādīt, ja taisnstūra formas resurss nav konstatēts gaidot (d); %Pagaidiet, līdz lietotājs aizver ziņojumu lodziņu "d" end else d = msgbox ('Nav derīga atslēgas ievade.') %Parādīt, ja lietotājs aizver izvēlni "izvēlieties iestatījumu" gaidīt (d); %Pagaidiet, līdz lietotājs aizver ziņojumu lodziņu "d" beigu gaidīšanas laiks (d); %Pagaidiet lietotājs, lai aizvērtu ziņojumu lodziņu "d" beigas beigu beigās d = msgbox ('Goodbye') %Atvadās, ja opcijas ir aizvērtas, gaidot (d);

3. darbība: pārbaude

Testēšana
Testēšana

Kad kods ir uzrakstīts, jums būs jāpārbauda Roomba. Lai gan jūsu kods var šķist pareizs, daudzas vērtības, īpaši attiecībā uz krāsu vai formu, būs jāmaina, lai pareizi atpazītu objektus, kurus vēlaties, lai jūsu Roomba identificētu.

4. darbība. Ievērojiet vizuālos rezultātus

Ievērojiet vizuālos rezultātus
Ievērojiet vizuālos rezultātus
Ievērojiet vizuālos rezultātus
Ievērojiet vizuālos rezultātus

Būs ļoti skaidrs, vai esat veiksmīgi ieprogrammējis savu Roomba, pamatojoties uz tā vizuālajiem rezultātiem.

Rezultāti ietver:

  • Formas noteikšana: Roomba spēja pareizi atšķirt formas, lai atrastu pareizos minerālus
  • Manevri nelīdzenā reljefā: izvairās no klintīm vai tumšiem apgabaliem
  • Manuālais režīms: tiešraide un iespēja kontrolēt Roomba
  • Attēli: minerālu attēli
  • Dzīve atrasta!: Tekstlodziņš MatLab, kas norāda, ka jūsu augs ir identificējis organisko dzīvību.

Ar to mūsu apmācība ir beigusies, izbaudiet savu jauno Mars Expedition Rover!

Ieteicams: