Cuprins:
- Pasul 1: consumabile
- Pasul 2: Dezvoltați codificarea pentru a satisface rezultatul dorit
- Pasul 3: Testare
- Pasul 4: Observați ieșirile vizuale
Video: IRobot Create-Mars Expedition Rover Mark I: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
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
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
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
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
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:
Casca Iron Man Mark II: 4 pași
Iron Man Mark II Helmet: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotores for the cierre y apert
Mark Twain House Haunting: 5 pași
Casa Mark Twain Haunting: Casa Mark Twain este zvonită că ar fi bântuită de celebrul autor. În acest instructabil, am „descoperit” o fotografie veche care demonstrează fără îndoială că fantoma lui Twain bântuie într-adevăr această casă veche istorică
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 pași (cu imagini)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Introducere PongMate CyberCannon Mark III este cea mai nouă și mai avansată tehnologie de bere pong care a fost vândută vreodată publicului. Cu noul CyberCannon, orice persoană poate deveni cel mai temut jucător de la masa de bere pong. Cum este asta p
Utilizarea modulului de comandă IRobot Create cu Linux: 4 pași
Utilizarea modulului de comandă IRobot Create cu Linux: Deoarece iRobot nu a oferit utilizatorilor linux o modalitate de a utiliza modulul de comandă, a trebuit să-mi dau seama singur. Nu vă lăsați intimidați, nu este deloc greu, într-adevăr. Tot ce trebuie să faceți este să rulați câteva scripturi. Să începem, nu-i așa?
Modificarea unui IRobot Create to Paint: 6 pași (cu imagini)
Modificarea unui IRobot Create to Paint: Acesta este un proiect de robotică care probabil ar putea fi finalizat de cineva care nu are deloc experiență cu roboții. Spun asta pentru că, înainte de a începe, nu aveam experiență cu roboții. Sau scrierea de programe. De fapt, știam să pictez și asta a fost