Sommario:

Roomba Progetto MATLAB: 5 passaggi
Roomba Progetto MATLAB: 5 passaggi

Video: Roomba Progetto MATLAB: 5 passaggi

Video: Roomba Progetto MATLAB: 5 passaggi
Video: MATLAB в FPGA за 5 шагов 2024, Novembre
Anonim
Roomba Progetto MATLAB
Roomba Progetto MATLAB

L'attuale piano che la NASA ha per il rover su Marte è che sia un raccoglitore di dati e si aggiri intorno a Marte, raccogliendo campioni del suolo da riportare sulla Terra in modo che gli scienziati possano vedere se c'erano forme di vita precedenti sul pianeta. Inoltre, il rover invia immagini agli scienziati, in modo che possano aiutare a navigare nel rover e risolvere eventuali problemi.

L'idea del nostro gruppo per il nostro progetto è che il rover faccia lo stesso del rover della NASA che lascerà la Terra nel 2020, ma che anche mappare la geografia della terra. Il roomba sarebbe in grado di percepire le scogliere e fermarsi prima di cadere, quindi tornare indietro, girare e cambiare rotta in modo che non cada e non venga danneggiato. L'altra nostra idea integrata nel nostro progetto è che roomba sia in grado di tracciare i punti di riferimento che vede e mostrare un grafico ogni volta che il ciclo è terminato e il suo corso è stato eseguito.

Questa istruzione è per chiunque altro desideri creare lo stesso tipo di codice per il proprio roomba.

Passaggio 1: Passaggio 1: Materiali necessari

Passaggio 1: materiali necessari
Passaggio 1: materiali necessari
Passaggio 1: materiali necessari
Passaggio 1: materiali necessari

Avrai bisogno:

  1. un roomba
  2. MATLAB
  3. Questo file per eseguire roomba
  4. Una superficie piana
  5. Una superficie del tavolo per fungere da "scogliera"

Passaggio 2: Passaggio 2: Configurazione/acquisizione del codice per Roomba

Passaggio 2: configurazione/ottenimento del codice per Roomba
Passaggio 2: configurazione/ottenimento del codice per Roomba

Il tuo schermo sarà simile a questo una volta inseriti i file.

Passaggio 3: Passaggio 3: impostazione dei sensori di dislivello/luci a LED

Questo codice dirà al tuo roomba esattamente quale angolo girare, controllerà le informazioni sulla batteria, dirà al tuo roomba quanto velocemente andare e per controllare una persona attraverso la fotocamera di roomba. Emetterà anche un segnale acustico se identifica una persona e si fermerà prima di precipitare da un dirupo.

% prova rob.setLEDDigits('') x=0; y=0; theta=0; ostacolo = ; ciclo = 1; CorrAng = @(x)x + 3.059.*x.^0.4205; %Funzione per correggere gli angoli di virata mentre 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') pause(0.5) ostacolo(ciclo) = 2; AA_cliffbeep(rob) %Backup e rotazione rob.moveDistance(-.15) rob.turnAngle(30) end

Passaggio 4: Passaggio 4: Verifica degli ostacoli

Questo codice otterrà il roomba per verificare la presenza di oggetti attorno ad esso e controllerà il sensore di collisione per assicurarsi che si fermi prima che si danneggi.

%Check sensore di luce se AA_lightcheck(rob) rob.stop rob.setLEDDigits('Wall') pause(0.5) ostacolo(ciclo) = 1; %Wall AA_wallbeep(rob) %Back Up e Turn rob.moveDistance(-.15) rob.turnAngle(30) end %Check Bump Sensor if AA_bumpcheck(rob) rob.stop rob.setLEDDigits('Wall') pause(0.5) ostacolo(ciclo) = 1; %Wall AA_wallbeep(rob) %Back Up e Turn rob.moveDistance(-.15) rob.turnAngle(30) end %If nessuno if isempty(ostacle) ostacolo(cycle) = 0; elseif lunghezza(ostacolo) < ciclo ostacolo(ciclo) = 0; fine

Passaggio 5: Passaggio 5: Tracciare

Passaggio 5: plottaggio
Passaggio 5: plottaggio

Questo codice dirà al tuo roomba di tracciare ciò che incontra nel suo viaggio. Una trama come questa apparirà dopo che il roomba si è fermato.

%Ottieni posizione d = rob.getDistance; se ciclo == 1 theta(ciclo) = 0; x(ciclo) = d.*cosd(theta(ciclo)); % distanza totale percorsa in x y(ciclo) = d.*sind(theta(ciclo)); % distanza totale percorsa in y else theta(cycle) = theta(cycle-1) + rob.getAngle; x(ciclo) = d.*cosd(theta(ciclo)) + x(ciclo-1); % distanza totale percorsa in x y(ciclo) = d.*sind(theta(ciclo)).*d + y(ciclo-1); % distanza totale percorsa in y end %Break condition if rob.getButtons.clean break end %Increment cycle cycle = cycle + 1; end rob.stop for i = 1:cycle if ostacolo(i) == 1 %Wall plot(x(i), y(i), 'Marker', 'square', 'MarkerEdgeColor', 'r') elseif ostacolo (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 mentre true rob.beep pause(3) if rob.getButtons.clean break end % catch % rob.stop % end

Consigliato: