Cuprins:

IRobot Create-Mars Expedition Rover Mark I: 4 pași
IRobot Create-Mars Expedition Rover Mark I: 4 pași

Video: IRobot Create-Mars Expedition Rover Mark I: 4 pași

Video: IRobot Create-Mars Expedition Rover Mark I: 4 pași
Video: NASA's Curiosity landing- 1 of her creator's POV 2024, Iulie
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Acest instructable vă va învăța cum să configurați iRobot Create utilizând codarea MatLab. Robotul dvs. va avea capacitatea de a căuta minerale distingând forme, de a manevra terenul accidentat prin utilizarea senzorilor de stâncă și are capacitatea de a fi controlat manual printr-un feed live.

Pasul 1: consumabile

Provizii
Provizii

Pentru acest proiect, veți avea nevoie de un iRobot Create, care este o versiune programabilă a aspiratorului robot Roomba. Robotul este echipat cu toți senzorii necesari pentru acest proiect, în special senzori de lovire, senzori de stâncă și senzori „Light Bump”. De asemenea, veți avea nevoie de o cameră video Raspberry Pi, utilizată pentru comunicații fără fir, programare live și flux video live. În cele din urmă, veți avea nevoie de o montură imprimată 3D pentru Raspberry Pi și cameră.

Pasul 2: Dezvoltați codificarea pentru a satisface rezultatul dorit

Dezvoltați codificarea pentru a satisface rezultatul dorit
Dezvoltați codificarea pentru a satisface rezultatul dorit

După ce v-ați conectat Roomba, va trebui să creați un cod Matlab care să vă ofere ieșirile dorite după intrările dorite.

Codul poate fi văzut aici:

% Roomba Project% Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal)% 4/11/19% Descrierea problemei: Creați un rover pentru a ajuta oamenii în timpul% explorării / locuirii lui Marte. % Metodă de soluție: Căutați materie organică (verde) folosind% bare de protecție ușoare, senzori de stâncă și cameră pentru a verifica dacă există materie organică. Permiteți% roverului să navigheze pe teren accidentat prin utilizarea barei de protecție, a senzorilor% de stâncă și a senzorilor de înălțime a roții. Permiteți oamenilor să controleze roverul de la o distanță de siguranță și să caute manual minerale. choice = {'LIFE', 'TEREN ROUGH', 'CONTROL UTILIZATOR'}; % Trei opțiuni în meniul de dialog Setare = meniu ('', alegeri) dacă Setare> 0% Dacă opțiunea aleasă solicită confirmarea utilizatorului alegeri2 = {'Da', 'Nu'}% Creați o matrice de celule pentru "da" sau "Nu "choice Confirmare = meniu (['Ai ales"' alegeri {Setare} '"mod.'], alegeri2)% Confirmă alegerea setării utilizatorului dacă Confirmă == 1 dacă Setare == 1% Verifică dacă a fost aleasă setarea" LIFE "i = 0 în timp ce i == 0 r.setLEDDigits (num2str ('LIFE'))% Afișați 'LIFE' pe LED pentru i = 1: 100 r.setDriveVelocity (0.05)% Mutați roomba înainte la 0.05 m / sy = r.getCliffSensors % Recuperați și stocați valorile senzorului de stâncă în structura celulei "y" l = r.getLightBumpers% Recuperați și stocați valorile bumpului de lumină în structura "f" dacă l. Stânga> 100% Verificați dacă bara de protecție a stânga este acoperită r.moveDistance (-0,05)% Mutați roomba înapoi 0,05 metri r.turnAngle (20)% Rotiți roomba cu 20 de grade CCW img = r.getImage% Obțineți imaginea de la camera de plăcintă cu rasberry pe roomba rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif l.leftFront> 100% Verificare este stânga / față bara de protecție este acoperită r.moveDistance (-0.05)% Mută roomba înapoi 0,05 metri img = r.getImage% Obțineți imaginea de la camera de rasberry pie pe roomba și stocați-o în variabila 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif l.leftCenter> 100% Verificați dacă bara de protecție a luminii din stânga / centru este acoperită r.moveDistance (-0,05)% Mutați roomba înapoi 0,05 metri img = r.getImage% Obțineți imaginea de la camera de rasberry pie pe roomba și stocați în variabila 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif l.rightCenter> 100% Verificați dacă bara de protecție a luminii din dreapta / centru este acoperită r.moveDistance (-0,05)% Mutați roomba înapoi 0,05 metri img = r.getImage% Obțineți imaginea de la camera de rasberry pie pe roomba și stocați în variabila 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif l.rightFront> 100% Verificați dacă bara de protecție a luminii dreapta / față este acoperită r.moveDistance (-0,05)% Mutați roomba înapoi 0,05 metri img = r.getImage% Obțineți imaginea de la camera de plăcintă cu rasberry pe roomba și stocați-o în variabila 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif l.right> 100% Verificați dacă bara de protecție a luminii drepte este acoperită r.moveDistance (-0,05)% Mutați roomba înapoi 0,05 metri r.turnAngle (-20)% Rotiți roomba 20 grade CW img = r.getImage% Obțineți imaginea de la aparat de fotografiat rasberry pie pe roomba și depozitați în variabila „img” rect = [100 0 150 150]; img = imcrop (img, rect)% decupare imagine pentru a focaliza pe centru roșu = medie (medie (img (:,:, 1)))% intensitate medie roșie verde = medie (medie (img (:,:, 2)))% intensitate medie verde albastru = medie (medie (img (:,:, 3)))% intensitate medie albastră dacă verde> roșu && verde> albastru% Verificați dacă planta este în imagine d = msgbox (['Viața a fost găsită! ']); % Afișați o casetă de mesaj care spune „Viața a fost găsită!” waitfor (d); end elseif y.leftFront <1500% Verificați dacă porțiunea stânga / față a roomba este în afara stâncii r.moveDistance (-0,1, 0,05)% Mutați roomba înapoi 0,1 metri la 0,05 m / s r.turnAngle (-5)% Rotiți roomba 5 grade CW altfel dacă y.rightFront <1500% Verificați dacă porțiunea dreaptă / frontală a roomba este în afara stâncii r.moveDistance (-0,1, 0,05)% Mutați roomba înapoi 0,1 metri la 0,05 m / s r.turnAngle (5)% Rotiți roomba 5 grade CCW elseif y.stânga <1000% Verificați dacă partea stângă a roomba este în afara stâncii r.moveDistance (-0,05, 0,05)% Mutați roomba înapoi 0,05 metri la 0,05 m / s r.turnAngle (-10)% Rotiți roomba 10 grade CW elseif y.right0% Executați dacă butonul este apăsat dacă Continuați == 1 i = 0% Continuați să căutați viața altceva i = 1% Sfârșit modul LIFE sfârșit sfârșit elseif Setare == 2% Verificați dacă a fost aleasă setarea "TEREN ROUGH" i = 0 în timp ce i == 0 r.setLEDDigits (num2str ('RGH'))% Afișați 'Rough' pe LED Display pentru i = 1: 1000 r.setDriveVelocity (0.05)% Setați viteza de acționare roomba la 0.05 m / sx = r.getBumpers% Preluați și stocați valorile senzorului barei de protecție în structura "x" y = r.get CliffSensors% Recuperați și stocați valorile senzorului de stâncă în structura „y” dacă x.right == 1% Verificați dacă bara de protecție dreaptă este apăsată r.turnAngle (10)% Rotire roomba 10 grade CCW elseif x.left == 1% Verificați dacă stânga bara de protecție este apăsată r.turnAngle (-10)% Rotiți cameraba 10 grade CW elseif x.front == 1% Verificați dacă bara de protecție față este apăsată r.turnAngle (20)% Rotiți cameraba 20 grade CCW elseif x.rightWheelDrop == 1% Verificați dacă roata dreaptă a scăzut r.turnAngle (-20)% Rotiți cameraba 20 grade CW elseif x.leftWheelDrop == 1% Verificați dacă roata stângă a scăzut r.turnAngle (20)% Rotiți cameraba 20 grade CCW elseif y.stângaFront < 1500% Verificați dacă porțiunea din stânga față a roomba este în afara stâncii r.moveDistance (-0,05, 0,05)% Mutați roomba înapoi 0,05 metri la 0,05 m / s r.turnAngle (-5)% Rotiți roomba 5 grade CW altfel dacă y. dreapta Față < 1500% Verificați dacă porțiunea din față dreaptă a roomba este în afara stâncii r.moveDistance (-0,05, 0,05)% Mutați roomba înapoi 0,05 metri la 0,05 m / s r.turnAngle (5)% Rotiți roomba 5 grade CCW altfel dacă y.stânga <1000 % Verificați dacă porțiunea stângă o f roomba este în afara stâncii r.moveDistance (-0,05, 0,05)% Mutați roomba înapoi 0,05 metri la 0,05 m / s r.turnAngle (-10)% Rotiți roomba 10 grade CW altfel dacă y.right0 dacă Continuați == 1 i = 0 % Continuare teren accidentat altul i = 1% Terminare teren accidentat sfârșit sfârșit altfel% Mod manual i = 0 r.setLEDDigits (num2str ('USER'))% Afișează 'USER' pe afișaj LED d = msgbox (['Săgeți - Mutare; S - Stop Rover; ESC - Control utilizator final; A - Localizați resursa ']); waitfor (d); în timp ce i == 0 r.showCamera% Deschideți alimentarea live a camerei cu rasberry pie în fereastră separată D = getkey (1)% Recuperați tasta apăsată de utilizator, stocați valoarea ASCII ca variabilă D dacă D == 30% Verificați dacă săgeata „sus” are a fost apăsat r.setDriveVelocity (0,1)% Trimite roomba înainte la 0,2 m / s altfel dacă D == 28% Verifică dacă a fost apăsată săgeata „stânga” r.setDriveVelocity (0)% Oprește roomba să se miște înainte sau înapoi r.turnAngle (15, 0,05)% Rotiți roomba 45 grade CCW la 0,05 m / s altfel dacă D == 31% Verificați dacă a fost apăsată săgeata "în jos" r.setDriveVelocity (-0,1)% Mutați roomba înapoi la 0,2 m / s altfel D == 29% Verificați dacă este apăsată săgeata „dreapta” r.setDriveVelocity (0)% Opriți roomba să se deplaseze înainte sau înapoi r.turnAngle (-15, 0,05)% Rotiți roomba 45 grade CW la 0,05 m / s altfel dacă D == 27% Verificați dacă s-a apăsat tasta „esc” (evadare) i = 1% Schimbați valoarea variabilei „i” pentru a ieși din bucla d = msgbox ('Ieșirea din „Control utilizator”')% Anunțați utilizatorul că modul manual se părăsește elseif D == 115% Verificați dacă a fost apăsată tasta „s” r.setDriveVelocity (0)% Opriți camera din mers înainte sau înapoi elseif D == 97% Verificați dacă „a” a fost apăsat image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found')% Afișează dacă resursa dreptunghiulară a detectat waitfor (d); % Așteptați ca utilizatorul să închidă caseta de mesaj "d" elseif K == 0 d = msgbox ('Not Resource:(')% Afișați dacă resursa dreptunghiulară nu a fost detectată waitfor (d);% Așteptați ca utilizatorul să închidă caseta de mesaj "d" end else d = msgbox ('Nu este o cheie de intrare validă.')% Afișați dacă utilizatorul închide meniul "alegeți setarea" waitfor (d);% Așteptați ca utilizatorul să închidă caseta de mesaje "d" end waitfor (d);% Așteptați utilizatorul să închidă caseta de mesaje "d" end end end else d = msgbox ('Goodbye')% Spune la revedere dacă opțiunile sunt închise end waitfor (d);

Pasul 3: Testare

Testarea
Testarea

Odată ce codul dvs. a fost scris, va trebui să vă testați Roomba. Deși codul dvs. poate părea corect, multe dintre valorile dvs., în special pentru culoare sau formă, vor trebui schimbate pentru a recunoaște corect obiectele pe care ați dori să le identifice Roomba.

Pasul 4: Observați ieșirile vizuale

Observați ieșirile vizuale
Observați ieșirile vizuale
Observați ieșirile vizuale
Observați ieșirile vizuale

Va fi foarte evident dacă ați programat sau nu Roomba pe baza rezultatelor sale vizuale.

Rezultatele includ:

  • Detectarea formei: capacitatea Roomba de a distinge în mod corespunzător formele pentru a găsi mineralele corecte
  • Manevre de teren accidentat: evită stâncile sau zonele întunecate
  • Mod manual: Feed live și capacitatea de a controla Roomba
  • Imagini: Imagini de minerale
  • Viață găsită !: O casetă de text MatLab care înseamnă că planta dvs. a identificat viața organică.

Acesta este sfârșitul tutorialului nostru, bucurați-vă de noul dvs. Mars Expedition Rover!

Recomandat: