Satura rādītājs:
- 1. solis: Piegādes
- 2. darbība. Izstrādājiet kodēšanu, lai apmierinātu vēlamo rezultātu
- 3. darbība: pārbaude
- 4. darbība. Ievērojiet vizuālos rezultātus
Video: IRobot Create-Mars Expedition Rover Mark I: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Šī 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
Š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
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
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
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:
Iron Man Mark II ķivere: 4 soļi
Iron Man Mark II ķivere: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que dirce el cableado, alimentado por 4 baterijas AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido. Kasko: Servomotores para el cierre y apert
Galīgā alus tenisa mašīna - PongMate CyberCannon Mark III: 6 soļi (ar attēliem)
PongMate CyberCannon Mark III: Ievads Izmantojot jauno CyberCannon, jebkura persona var kļūt par visvairāk baidīto spēlētāju pie alus tenisa galda. Kā ir šis p
Slave Trigger Flash Mark II: 6 soļi (ar attēliem)
Slave Trigger Flash Mark II: Šajā pamācībā es paskaidrošu, kā izveidot īstu (optisku) vergu zibspuldzi ar minimālu sastāvdaļu skaitu. Internetā var atrast daudz sarežģītu dizainu, šis dizains ir ļoti vienkāršs un darbojas labi gaišā un vājā apgaismojumā
IRobot Create komandu moduļa izmantošana ar Linux: 4 soļi
IRobot Create komandu moduļa izmantošana ar Linux: Tā kā iRobot nav nodrošinājis Linux lietotājiem iespēju izmantot komandu moduli, man tas bija jāizdomā pašam. Nebaidieties, tas tiešām nav grūti. Viss, kas jums jādara, ir palaist pāris skriptus. Sāksim, vai ne?
Mark I Super Psyllium Passivia skaļruņi: 6 soļi (ar attēliem)
Mark I Super Psyllium Passivia skaļruņi: iedvesmojoties no skaļruņu dizaina daudzajiem norādījumiem, kas ir labāks veids, kā iekļūt skaņas mākslā, nekā izveidot YAS (vēl viens runātājs)! Mēs esam regulāri cilvēki šeit, Regularity Audio Labs, un mums bija šie brīnišķīgie tukšie konteineri