Obsah:

Roomba MATLAB Project: 5 kroků
Roomba MATLAB Project: 5 kroků

Video: Roomba MATLAB Project: 5 kroků

Video: Roomba MATLAB Project: 5 kroků
Video: roomba simulation in V-REP 2024, Listopad
Anonim
Roomba MATLAB Project
Roomba MATLAB Project

Současný plán, který má NASA pro Mars rover, je, aby to byl sběrač dat a potuloval se po Marsu a sbíral vzorky půdy, které by přivedl zpět na Zemi, aby vědci mohli zjistit, zda na planetě existovaly nějaké předchozí formy života. Rover navíc posílá zpět obrázky vědcům, aby jim mohli pomoci s navigací v roveru a opravit případné problémy, které by mohly mít.

Myšlenkou naší skupiny na náš projekt je, aby rover udělal totéž jako rover NASA, který v roce 2020 opustí Zemi, ale aby také zmapoval geografii země. Roomba by dokázala vycítit útesy a zastavit se, než spadne, a pak couvat, otáčet se a měnit směr tak, aby nespadla a nebyla poškozena. Naší další myšlenkou integrovanou do našeho projektu je, aby roomba dokázala vykreslit orientační body, které vidí, a zobrazit zápletku pokaždé, když je smyčka dokončena a její běh byl spuštěn.

Tento návod je určen pro kohokoli jiného, kdo by chtěl pro svůj roomba vytvořit stejný typ kódu.

Krok 1: Krok 1: Potřebné materiály

Krok 1: Potřebné materiály
Krok 1: Potřebné materiály
Krok 1: Potřebné materiály
Krok 1: Potřebné materiály

Budete potřebovat:

  1. Roomba
  2. MATLAB
  3. Tento soubor ke spuštění roomba
  4. Rovný povrch
  5. Povrch stolu, který bude fungovat jako „útes“

Krok 2: Krok 2: Nastavení/Získání kódu pro robot Roomba

Krok 2: Nastavení/Získání kódu pro Roomba
Krok 2: Nastavení/Získání kódu pro Roomba

Po zadání souborů bude vaše obrazovka vypadat takto.

Krok 3: Krok 3: Nastavení snímačů útesu/LED světel

Tento kód sdělí vašemu robotovi Roomba přesně, jaký úhel má otočit, zkontroluje informace o baterii, řekne vašemu robotu, jak rychle má jet, a pomocí kamery Roomba zjistí osobu. Bude také pípat, pokud identifikuje osobu, a zastaví se, než se vydá z útesu.

% zkuste rob.setLEDDigits ('') x = 0; y = 0; theta = 0; překážka = ; cyklus = 1; AngCorr = @(x) x + 3,059.*X.^0,4205; %Funkce pro opravu úhlů otáčení při rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0,1) %Go %Check for Person if AA_checkperson (rob) rob.beep end %Check Cliff Sensor if AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Cliff') pauza (0,5) překážka (cyklus) = 2; AA_cliffbeep (rob) %Back Up and Turn rob.moveDistance (-. 15) rob.turnAngle (30) end

Krok 4: Krok 4: Kontrola překážek

Tento kód získá robota Roomba ke kontrole položek kolem něj a zkontroluje nárazový senzor, aby se ujistil, že se zastaví, než se sám poškodí.

%Zkontrolujte světelný senzor, pokud AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') pauza (0,5) překáž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) překážka (cyklus) = 1; %Wall AA_wallbeep (rob) %Back Up and Turn rob.moveDistance (-. 15) rob.turnAngle (30) end %If none if isempty (překážka) překážka (cyklus) = 0; elseif délka (překážka) <překážka cyklu (cyklus) = 0; konec

Krok 5: Krok 5: Vykreslování

Krok 5: Vykreslování
Krok 5: Vykreslování

Tento kód řekne vašemu roomba, aby vykreslil, s čím se na své cestě setká. Děj, jako je tento, se objeví poté, co se roomba zastaví.

%Získejte pozici d = rob.getDistance; pokud cyklus == 1 theta (cyklus) = 0; x (cyklus) = d.*cosd (theta (cyklus)); % celkové ujeté vzdálenosti za x y (cyklus) = d.*sind (theta (cyklus)); % celkové ujeté vzdálenosti v y jinak theta (cyklus) = theta (cyklus-1) + rob.getAngle; x (cyklus) = d.*cosd (theta (cyklus)) + x (cyklus-1); % celkové ujeté vzdálenosti za x y (cyklus) = d.*sind (theta (cyklus)).*d + y (cyklus-1); %celkové ujeté vzdálenosti za konec y %Podmínka přerušení, pokud rob.getButtons.clean konec přestávky %Přírůstkový 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 (0,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

Doporučuje: