Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Trenutni plan koji NASA ima za Mars rover je da on bude sakupljač podataka i da luta po Marsu, prikupljajući uzorke tla kako bi se vratio na Zemlju kako bi naučnici mogli vidjeti postoje li neki prethodni oblici života na planeti. Osim toga, rover šalje naučnike slike kako bi im pomogli u navigaciji i riješili sve probleme koje bi mogao imati.
Ideja naše grupe za naš projekt je da rover učini isto što i NASA -in rover koji će napustiti Zemlju 2020. godine, ali i da ucrta geografiju kopna. Roomba bi mogla osjetiti litice i zaustaviti se prije nego što padne, a zatim se vratiti, okrenuti i promijeniti kurs kako ne bi pala i oštetila se. Naša druga ideja integrirana u naš projekt je da roomba može iscrtati orijentire koje vidi i prikazati zaplet svaki put kada se petlja završi i ako se njen tok pokrene.
Ovo uputstvo je za svakoga ko bi želio stvoriti istu vrstu koda za svoju roombu.
Korak 1: Korak 1: Potrebni materijali
Trebat će vam:
- Roomba
- MATLAB
- Ova datoteka za pokretanje roombe
- Ravna površina
- Površina stola koja djeluje kao "litica"
Korak 2: Korak 2: Postavljanje/dobijanje koda za Roombu
Vaš zaslon će izgledati ovako nakon što unesete datoteke.
Korak 3: Korak 3: Postavljanje senzora litica/LED svjetala
Ovaj kôd će vašem roombi točno reći pod kojim kutom treba okrenuti, provjeriti podatke o bateriji, reći mu koliko brzo treba ići i provjeriti ima li ljudi kroz kameru roombe. Takođe će se oglasiti zvučnim signalom ako identifikuje osobu, i zaustaviće se pre silaska sa litice.
% pokušajte rob.setLEDDigits ('') x = 0; y = 0; theta = 0; prepreka = ; ciklus = 1; AngCorr = @(x) x + 3,059.*X.^0,4205; %Funkcija za ispravljanje uglova okretanja dok rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0.1) %Idi %Provjeri osobu ako AA_checkperson (rob) rob.beep end %Provjeri senzor litice ako je AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Cliff') pauza (0.5) prepreka (ciklus) = 2; AA_cliffbeep (rob) %Sigurnosno kopiranje i okretanje rob.moveDistance (-. 15) rob.turnAngle (30) end
Korak 4: Korak 4: Provjeravanje prepreka
Ovaj kôd će roombu provjeriti ima li oko nje stavki, te će provjeriti senzor udara kako bi se uvjerio da se zaustavlja prije nego što se ošteti.
%Provjerite senzor svjetla ako je AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') pauza (0,5) prepreka (ciklus) = 1; %Wall AA_wallbeep (rob) %Sigurnosno kopiranje i okretanje rob.moveDistance (-. 15) rob.turnAngle (30) end %Provjerite senzor udarca ako AA_bumpcheck (rob) rob.stop rob.setLEDDigits ('Wall') pauzira (0.5) prepreka (ciklus) = 1; %Zid AA_wallbeep (rob) %Nazad i skrenite rob.moveDistance (-. 15) rob.turnAngle (30) end %Ako nema ako je prazna (prepreka) prepreka (ciklus) = 0; inače, ako je dužina (prepreka) <prepreka ciklusa (ciklus) = 0; kraj
Korak 5: Korak 5: Iscrtavanje
Ovaj kôd će reći vašoj roombi da iscrta šta će naići na svom putovanju. Zavjera poput ove pojavit će se nakon što se roomba zaustavi.
%Dobijte poziciju d = rob.getDistance; ako je ciklus == 1 teta (ciklus) = 0; x (ciklus) = d.*cosd (theta (ciklus)); % ukupnog pređenog puta u x y (ciklus) = d.*sind (theta (ciklus)); % ukupnog pređenog puta u y else theta (ciklus) = theta (ciklus-1) + rob.getAngle; x (ciklus) = d.*cosd (theta (ciklus)) + x (ciklus-1); % ukupnog pređenog puta u x y (ciklus) = d.*sind (theta (ciklus)).*d + y (ciklus-1); %ukupni pređeni put na kraju y %Stanje prekida ako rob.getButtons.clean break end %Povećanje ciklusa ciklusa = ciklus + 1; kraj rob.stop za i = 1: ciklus ako je prepreka (i) == 1 %Zidna ploha (x (i), y (i), 'Marker', 'kvadrat', 'MarkerEdgeColor', 'r') inače prepreka (i) == 2 %Grafikon litice (x (i), y (i), 'Marker', 'o', 'MarkerEdgeColor', 'k') krajnji tekst (.9, 0.9, sprintf ('Kvadrat = Zid) nCircle = Cliff '),' Units ',' normalized ') držite na kraju % Signal opasnosti dok je istinita rob.beep pauza (3) ako rob.getButtons.clean break end % catch % rob.stop % end