Kazalo:

Projekt Roomba MATLAB: 5 korakov
Projekt Roomba MATLAB: 5 korakov

Video: Projekt Roomba MATLAB: 5 korakov

Video: Projekt Roomba MATLAB: 5 korakov
Video: Matlab Simulation for iRobot Create Maze Exploration 2024, November
Anonim
Projekt Roomba MATLAB
Projekt Roomba MATLAB

Sedanji načrt, ki ga ima NASA za rover Mars, je, da bo zbiralec podatkov in bo hodil po Marsu ter zbiral vzorce tal, ki jih bo prinesel nazaj na Zemljo, da bodo znanstveniki lahko videli, ali je na planetu obstajala kakšna prejšnja oblika življenja. Poleg tega rover pošlje znanstvenikom posnetke, ki jim lahko pomagajo pri navigaciji po roverju in odpravijo morebitne težave.

Ideja naše skupine za naš projekt je, da bi rover naredil enako kot rover NASA, ki bo leta 2020 zapustil Zemljo, hkrati pa naj kartira zemljepis zemlje. Roomba bi lahko zaznala pečine in se ustavila, preden pade, nato pa se vrnila nazaj, obrnila in spremenila smer, da ne bi padla in se poškodovala. Naša druga ideja, vključena v naš projekt, je, da roomba lahko izriše mejnike, ki jih vidi, in prikaže ploskev vsakič, ko je zanka končana in je njen potek potekal.

Ta navodila so namenjena vsem, ki bi radi ustvarili isto vrsto kode za svojo roombo.

1. korak: 1. korak: potrebni materiali

Korak: Potrebni materiali
Korak: Potrebni materiali
Korak: Potrebni materiali
Korak: Potrebni materiali

Boste potrebovali:

  1. Roomba
  2. MATLAB
  3. Ta datoteka za zagon roombe
  4. Ravna površina
  5. Površina mize, ki deluje kot "pečina"

2. korak: 2. korak: Nastavitev/pridobivanje kode za Roombo

2. korak: Nastavitev/pridobivanje kode za Roombo
2. korak: Nastavitev/pridobivanje kode za Roombo

Ko vnesete datoteke, bo vaš zaslon videti tako.

Korak 3: Korak 3: Nastavitev senzorjev pečine/LED luči

Ta koda bo vaši roombi natančno povedala, pod kakšnim kotom naj zavije, preverila bo podatke o bateriji, roombi povedala, kako hitro naj gre, in preverila osebo skozi kamero roombe. Opozoril bo tudi, če identificira osebo, in se ustavil, preden se odpravi s pečine.

% poskusite rob.setLEDDigits ('') x = 0; y = 0; theta = 0; ovira = ; cikel = 1; AngCorr = @(x) x + 3,059.*X.^0,4205; %Funkcija za popravljanje kotov zavoja med rob.getBatteryInfo.percent> 15 rob.setLEDDigits ('') rob.setDriveVelocity (0,1) %Pojdi %Preveri osebo, če AA_checkperson (rob) rob.beep end %Preverite senzor pečine, če AA_cliffcheck (rob) rob.stop rob.setLEDDigits ('Cliff') premor (0,5) ovira (cikel) = 2; AA_cliffbeep (rob) %Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) konec

4. korak: 4. korak: Preverjanje ovir

S to kodo bo roomba preveril, ali so okoli nje predmeti, in preveril senzor udarcev, da se prepriča, da se ustavi, preden se poškoduje.

%Preverite senzor svetlobe, če je AA_lightcheck (rob) rob.stop rob.setLEDDigits ('Wall') premor (0,5) ovira (cikel) = 1; %Wall AA_wallbeep (rob) %Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) end %Preverite senzor udarcev, če je AA_bumpcheck (rob) rob.stop rob.setLEDDigits ('Wall') premor (0,5) ovira (cikel) = 1; %Wall AA_wallbeep (rob) %Back Up And Turn rob.moveDistance (-. 15) rob.turnAngle (30) end %Če ni, če je prazna (ovira) ovira (cikel) = 0; sicer če je dolžina (ovira) <ciklična ovira (cikel) = 0; konec

5. korak: 5. korak: načrtovanje

5. korak: načrtovanje
5. korak: načrtovanje

Ta koda bo vašemu roombi povedala, naj začrta, kaj naleti na svoji poti. Zaplet, kot je ta, se bo pojavil po ustavitvi roombe.

%Pridobite položaj d = rob.getDistance; če je cikel == 1 teta (cikel) = 0; x (cikel) = d.*cosd (theta (cikel)); % celotne prevožene poti v x y (cikel) = d.*sind (theta (cikel)); % skupne razdalje, prepotovane v y else theta (cikel) = theta (cikel-1) + rob.getAngle; x (cikel) = d.*cosd (theta (cikel)) + x (cikel-1); % celotne prevožene poti v x y (cikel) = d.*sind (theta (cikel)).*d + y (cikel-1); %skupni prevoženi poraz v y koncu %Stanje prekinitve, če rob.getButtons.clean break end %Povečanje cikla cikla = cikel + 1; end rob.stop za i = 1: cikel, če ovira (i) == 1 %Zidna ploskev (x (i), y (i), 'Marker', 'kvadrat', 'MarkerEdgeColor', 'r') drugače če je ovira (i) == 2 %Načrt pečine (x (i), y (i), 'Marker', 'o', 'MarkerEdgeColor', 'k') končno besedilo (.9, 0.9, sprintf ('Square = Wall) nCircle = Cliff '),' Units ',' normalized ') zadrži % Signal stiske, medtem ko je pravi rob.pips prekinitev (3) če rob.getButtons.clean break end % catch % rob.stop % end

Priporočena: