Obsah:

Roomba MATLAB Project: 5 krokov
Roomba MATLAB Project: 5 krokov
Anonim
Projekt Roomba MATLAB
Projekt Roomba MATLAB

Súčasný plán, ktorý má NASA pre rover Mars, je, že bude zberateľom údajov a bude sa túlať po Marse a zbierať vzorky pôdy, ktoré by priviedol späť na Zem, aby vedci zistili, či na planéte existovali nejaké predchádzajúce formy života. Rover tiež posiela obrázky vedcom, aby im pomohli navigovať v roveri a vyriešiť prípadné problémy.

Myšlienka našej skupiny na náš projekt je, aby rover urobil to isté, čo rover NASA, ktorý opustí Zem v roku 2020, ale aby tiež zmapoval geografiu krajiny. Roomba by dokázala vycítiť útesy a zastaviť sa skôr, ako spadne, a potom cúvať, otáčať sa a meniť smer tak, aby nespadla a nepoškodila sa. Našou ďalšou myšlienkou integrovanou do nášho projektu je, aby roomba dokázala vykresliť orientačné body, ktoré vidí, a zobraziť sprisahanie vždy, keď je slučka dokončená a prebieha jej priebeh.

Tento návod je pre kohokoľvek iného, kto by chcel pre svoj roomba vytvoriť rovnaký typ kódu.

Krok 1: Krok 1: Potrebný materiál

Krok 1: Potrebný materiál
Krok 1: Potrebný materiál
Krok 1: Potrebný materiál
Krok 1: Potrebný materiál

Budete potrebovať:

  1. Roomba
  2. MATLAB
  3. Tento súbor na spustenie Roomba
  4. Rovný povrch
  5. Povrch stola, ktorý má pôsobiť ako „útes“

Krok 2: Krok 2: Nastavenie/získanie kódu pre robot Roomba

Krok 2: Nastavenie/získanie kódu pre robot Roomba
Krok 2: Nastavenie/získanie kódu pre robot Roomba

Po zadaní súborov bude vaša obrazovka vyzerať takto.

Krok 3: Krok 3: Nastavenie senzorov útesu/LED svetiel

Tento kód povie vašej robote Roomba, aký uhol sa má otočiť, skontroluje informácie o batérii, oznámi vašej izbe, ako rýchlo má ísť, a skontroluje osobu prostredníctvom kamery Roomba. Zaznie tiež zvukový signál, ak identifikuje osobu, a zastaví sa, než sa spustí z útesu.

% skúste rob.setLEDDigits ('') x = 0; y = 0; theta = 0; prekážka = ; cyklus = 1; AngCorr = @(x) x + 3,059.*X.^0,4205; %Funkcia na opravu uhlov otáčania pri rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0,1) %Choďte %Skontrolujte osobu, ak AA_checkperson (rob) rob.beep end %Skontrolujte snímač útesu, ak AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Cliff') pauza (0,5) prekážka (cyklus) = 2; AA_cliffbeep (rob) %Zálohovanie a otáčanie rob.moveDistance (-. 15) rob.turnAngle (30) end

Krok 4: Krok 4: Kontrola prekážok

Tento kód dostane robota Roomba na kontrolu položiek okolo neho a skontroluje nárazový snímač, aby sa ubezpečil, že sa zastaví skôr, ako sa poškodí.

%Skontrolujte svetelný senzor, ak AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') pauza (0,5) prekážka (cyklus) = 1; %Wall AA_wallbeep (rob) %Back Up and Turn rob.moveDistance (-. 15) rob.turnAngle (30) end %Check Bump Sensor if AA_bumpcheck (rob) rob.stop rob.setLEDDigits ('Wall') pause (0.5) prekážka (cyklus) = 1; %Wall AA_wallbeep (rob) %Back Up and Turn rob.moveDistance (-. 15) rob.turnAngle (30) end %Ak nie je, ak je prázdny (prekážka) prekážka (cyklus) = 0; elseif dĺžka (prekážka) <prekážka cyklu (cyklus) = 0; koniec

Krok 5: Krok 5: Plotovanie

Krok 5: Plotovanie
Krok 5: Plotovanie

Tento kód povie vašej roombe, aby vykreslila, s čím sa na svojej ceste stretne. Dej, ako je tento, sa objaví potom, čo sa roomba zastaví.

%Získať pozíciu d = rob.getDistance; ak cyklus == 1 theta (cyklus) = 0; x (cyklus) = d.*cosd (theta (cyklus)); % celkovej prejdenej vzdialenosti za x y (cyklus) = d.*sind (theta (cyklus)); % celkovej prejdenej vzdialenosti v y else theta (cyklus) = theta (cyklus-1) + rob.getAngle; x (cyklus) = d.*cosd (theta (cyklus)) + x (cyklus-1); % celkovej prejdenej vzdialenosti za x y (cyklus) = d.*sind (theta (cyklus)).*d + y (cyklus-1); %celkovej prejdenej vzdialenosti za koniec y %Podmienka prerušenia, ak rob.getButtons.čistý koniec prestávky %Prírastkový cyklus cyklus = cyklus + 1; end rob.stop for i = 1: cycle if překážka (i) == 1 %Wall plot (x (i), y (i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif překážka (i) == 2 %Cliff plot (x (i), y (i), 'Marker', 'o', 'MarkerEdgeColor', 'k') end text (.9, 0,9, sprintf ('Square = Wall) nCircle = Cliff '),' Units ',' normalized ') hold on end % Distress Signal true true rob.beep pause (3) if rob.getButtons.clean break end end % catch % rob.stop % end

Odporúča: