Taula de continguts:

IRobot Create-Mars Expedition Rover Mark I: 4 passos
IRobot Create-Mars Expedition Rover Mark I: 4 passos

Vídeo: IRobot Create-Mars Expedition Rover Mark I: 4 passos

Vídeo: IRobot Create-Mars Expedition Rover Mark I: 4 passos
Vídeo: How to Make a Mars Rover / Rocker bogie Robot - Stair climbing 2024, Juliol
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Aquesta instrucció us ensenyarà a configurar l’iRobot Create mitjançant la codificació MatLab. El vostre robot tindrà la possibilitat de buscar minerals distingint formes, maniobrant terrenys accidentats mitjançant l'ús de sensors de penya-segats i podrà controlar-se manualment mitjançant una alimentació en viu.

Pas 1: subministraments

Subministraments
Subministraments

Per a aquest projecte, necessitareu l’iRobot Create, que és una versió programable de l’aspiradora robot Roomba. El robot ve equipat amb tots els sensors necessaris per a aquest projecte, específicament sensors de cops, sensors de penya-segats i sensors "Light Bump". També necessitareu una càmera de vídeo i Raspberry Pi, que s’utilitzen per a la comunicació sense fils, la programació en directe i el canal de vídeo en directe. Per últim, necessitareu un muntatge imprès en 3D per al Raspberry Pi i la càmera.

Pas 2: desenvolupeu la codificació per satisfer el resultat desitjat

Desenvolupeu la codificació per satisfer el resultat desitjat
Desenvolupeu la codificació per satisfer el resultat desitjat

Un cop hàgiu connectat el Roomba, haureu de crear un codi Matlab que us proporcionarà les sortides desitjades després de les entrades desitjades.

El codi es pot veure aquí:

Projecte% Roomba% Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal)% 4/11/19% Descripció del problema: creeu un rover per ajudar els humans durant la% exploració / habitació de mars. % Mètode de solució: cerqueu matèria orgànica (verda) mitjançant l'ús de% para-xocs de llum, sensors de penya-segats i càmera per comprovar si hi ha matèria orgànica. Permetre que% rover navegi per terrenys accidentats mitjançant l'ús de para-xocs,% de penya-segats i sensors d'alçada de la roda. Permeteu als humans controlar el motor des de% a una distància segura de distància i cercar minerals manualment. decisions = {'LIFE', 'TERRA ROUGH', 'CONTROL DE L'USUARI'}; % Tres opcions al menú de diàleg Configuració = menú ('', eleccions) si Configuració> 0% Si l'opció escollida demana confirmació de l'usuari decisions2 = {'Sí', 'No'}% Crea una matriu de cel·les per a "sí" o "No" "choice Confirma = menú (['Heu triat"' eleccions {Mode} '"".'], decisions2)% Confirmeu l'opció de configuració de l'usuari si Confirma == 1 si Configura == 1% Comproveu si s'ha seleccionat la configuració "VIDA" i = 0 mentre i == 0 r.setLEDDigits (num2str ('LIFE'))% Mostra 'LIFE' en LED per a i = 1: 100 r.setDriveVelocity (0,05)% Avançar roomba a 0,05 m / sy = r.getCliffSensors % Recuperar i emmagatzemar els valors del sensor de penya-segat a l'estructura de la cel·la "y" l = r.getLightBumpers% Recuperar i emmagatzemar els valors de la protecció de la llum a l'estructura "f" si esquerra> 100% Comproveu si el parachoques de llum esquerre està cobert r.moveDistance (-0,05)% Mou roomba cap enrere 0,05 metres r.turnAngle (20)% Gira roomba 20 graus CCW img = r.getImage% Obtén la imatge de la càmera de pastís de raspberry a roomba rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif l.leftFront> 100% Check is left / front light para-xocs està cobert r.moveDistance (-0,05)% Mou roomba cap enrere 0,05 metres img = r.getImage% Obtén la imatge de la càmera de pastís de raspberry a roomba i emmagatzema a la variable 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif l.leftCenter> 100% Comproveu si el para-xocs de llum esquerre / central està cobert r.moveDistance (-0,05)% Moveu roomba cap enrere 0,05 metres img = r.getImage% Obteniu imatge de la càmera de pastís de raspberry a roomba i guardeu-la a la variable 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif l.rightCenter> 100% Comproveu si està cobert el para-xocs de llum dret / central r.moveDistance (-0,05)% Moveu roomba cap enrere 0,05 metres img = r.getImage% Obteniu imatge de la càmera de pastís de raspberry a roomba i guardeu-la a la variable 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif l.rightFront> 100% Comproveu si el para-xocs de llum dret / frontal està cobert r.moveDistance (-0,05)% Moveu roomba cap enrere 0,05 metres img = r.getImage% Obteniu imatge de la càmera de pastís de raspberry a roomba i guardeu-la a la variable 'img 'rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif l.right> 100% Comproveu si el parachoques de llum dret està cobert r.moveDistance (-0,05)% Moveu roomba cap enrere 0,05 metres r.turnAngle (-20)% Gireu roomba 20 graus CW img = r.getImage% Obteniu imatge de càmera de pastís de raspberry a roomba i emmagatzema a la variable 'img' rect = [100 0 150 150]; img = imcrop (img, rect)% retalla la imatge per centrar-se en el centre vermell = mitjana (mitjana (img (:,:, 1)))% intensitat vermella mitjana verd = mitjana (mitjana (img (:,:, 2)))% intensitat mitjana blava = mitjana (mitjana (img (:,:, 3)))% intensitat mitjana blava si verd> vermell && verd> blau% Comproveu si la planta és a la imatge d = msgbox (['Life found! ']); % Mostra un quadre de missatge que diu "La vida s'ha trobat!" waitfor (d); end elseif y.leftFront <1500% Comproveu si la porció esquerra / frontal de roomba està fora del penya-segat r.moveDistance (-0,1, 0,05)% Moveu roomba cap enrere 0,1 metres a 0,05 m / s r.turnAngle (-5)% Gireu roomba 5 graus CW elseif y.rightFront <1500% Comproveu si la porció dreta / frontal de roomba està fora del penya-segat r.moveDistance (-0,1, 0,05)% Moveu roomba cap enrere 0,1 metres a 0,05 m / s r.turnAngle (5)% Gira roomba 5 graus CCW elseif y.ft <1000% Comproveu si el costat esquerre de roomba està fora del penya-segat r.moveDistance (-0,05, 0,05)% Moveu roomba cap enrere 0,05 metres a 0,05 m / s r.turnAngle (-10)% Gireu roomba 10 graus CW elseif y.right0% Executa si es prem el botó si Continua == 1 i = 0% Continua cercant la vida més i = 1% Finalitza el mode LIFE end end end elseif Configuració == 2% Comprova si s'ha seleccionat l'opció "ROUGH TERRAIN" i = 0 mentre i == 0 r.setLEDDigits (num2str ('RGH'))% Mostra 'Rough' a la pantalla LED per a = 1: 1000 r.setDriveVelocity (0,05)% Estableix la velocitat de la unitat roomba a 0,05 m / sx = r.getBumpers% Recupereu i emmagatzemeu els valors del sensor de para-xocs a l'estructura "x" y = r.get CliffSensors% Recupereu i emmagatzemeu els valors del sensor de penya-segat a l'estructura "y" si x.right == 1% Comproveu si es prem el para-xocs dret r.turnAngle (10)% Gireu l'habitació 10 graus CCW elseif x.left == 1% Comproveu si queda el para-xocs es prem r.turnAngle (-10)% Gira la sala de 10 graus CW elseif x.front == 1% Comprova si es prem el para-xocs frontal r.turnAngle (20)% Gira la sala de 20 graus CCW elseif x.rightWheelDrop == 1% Comproveu si la roda dreta ha caigut r.turnAngle (-20)% Gireu la cambra de 20 graus CW elseif x.leftWheelDrop == 1% Comproveu que la roda esquerra hagi caigut r.turnAngle (20)% Gireu la roda de 20 graus CCW elseif y.leftFront < 1500% Comproveu si la porció frontal esquerra de roomba està fora del penya-segat r.moveDistance (-0,05, 0,05)% Moveu roomba cap enrere 0,05 metres a 0,05 m / s r.turnAngle (-5)% Gireu roomba 5 graus CW else si y. RightFront < 1500% Comproveu si la porció frontal dreta de roomba està fora del penya-segat r.moveDistance (-0,05, 0,05)% Moveu roomba cap enrere 0,05 metres a 0,05 m / s r.turnAngle (5)% Gireu roomba 5 graus CCW en cas contrari si es deixa <1000 % Comproveu si queda la porció o f roomba està fora del penya-segat r.moveDistance (-0,05, 0,05)% Mou roomba cap enrere 0,05 metres a 0,05 m / s r.turnAngle (-10)% Gira roomba 10 graus CW elseif y.right0 si Continua == 1 i = 0 % Continuar terreny accidentat else i = 1% Finalitzar terreny accidentat end end end% Mode manual i = 0 r.setLEDDigits (num2str ('USER'))% Mostrar 'USER' a la pantalla LED d = msgbox (['Tecles de fletxa - Mou; S - Stop Rover; ESC - Control de l'usuari final; A - Localitza el recurs ']); waitfor (d); mentre jo == 0 r.showCamera% Obre el feed en viu de la càmera de pastís de raspberry en una finestra independent D = getkey (1)% Recupera la tecla premuda per l'usuari, emmagatzema el valor ASCII com a variable D si D == 30% Comprova si la fletxa "amunt" té s'ha premut r.setDriveVelocity (0,1)% Envia roomba cap endavant a 0,2 m / s en cas contrari si D == 28% Comprova si s'ha premut la fletxa "esquerra" r.setDriveVelocity (0)% Deixa que roomba passi cap endavant o cap enrere r.turnAngle (15, 0,05)% Gira roomba 45 graus CCW a 0,05 m / s elseif D == 31% Comprova si es va prémer la fletxa "avall" r.setDriveVelocity (-0,1)% Mou roomba cap enrere a 0,2 m / s elseif D == 29% Comproveu si es prem la fletxa "dreta" r.setDriveVelocity (0)% Deixeu que roomba avanci o retrocedeixi r.turnAngle (-15, 0,05)% Gireu roomba 45 graus CW a 0,05 m / s altrament si D == 27% Comproveu si es va prémer la tecla "esc" (escapar) i = 1% Canvia el valor de la variable "i" per sortir del bucle d = msgbox ('S'està sortint del "Control d'usuari"')% Feu saber a l'usuari que s'està sortint del mode manual elseif D == 115% Comproveu si s'ha premut la tecla "s" r.setDriveVelocity (0)% Deixa d'habitació de avançar o retrocedir elseif D == 97% Comproveu si s'ha premut "a" image = r.getImage; imwrite (image, 'image.png') W = Classifica (imatge) K = mode (W) si K == 3 d = msgbox ('Recurs trobat')% Visualitza si el recurs rectangular ha estat detectat espera (d); % Espereu que l'usuari tanqui el quadre de missatge "d" elseif K == 0 d = msgbox ('No és un recurs:(')% Visualitzeu si el recurs rectangular no s'ha detectat waitfor (d);% Espereu que l'usuari tanqui el quadre de missatge "d" end else d = msgbox ('No és una entrada de clau vàlida.')% Mostra si l'usuari tanca el menú "trieu configuració" waitfor (d);% Espereu que l'usuari tanqui el quadre de missatge "d" end waitfor (d);% Espereu l'usuari per tancar el quadre de missatge "d" end end end else d = msgbox ('Adéu')% S'acomiada si les opcions estan tancades end waitfor (d);

Pas 3: proves

Proves
Proves

Un cop escrit el vostre codi, haureu de provar el Roomba. Tot i que el vostre codi pot semblar correcte, caldrà canviar molts dels vostres valors, especialment pel que fa al color o a la forma, per reconèixer adequadament els objectes que voleu que identifiqui el vostre Roomba.

Pas 4: observeu les sortides visuals

Observeu les sortides visuals
Observeu les sortides visuals
Observeu les sortides visuals
Observeu les sortides visuals

Serà molt evident si heu programat o no amb èxit el Roomba en funció de les seves sortides visuals.

Les sortides inclouen:

  • Detecció de formes: la capacitat de Roomba de distingir adequadament les formes per trobar els minerals correctes
  • Maniobres de terreny accidentat: evita penya-segats o zones fosques
  • Mode manual: feed en directe i la possibilitat de controlar Roomba
  • Imatges: imatges de minerals
  • Life Found !: Un quadre de text MatLab que significa que la vostra planta ha identificat la vida orgànica.

Aquest és el final del nostre tutorial, gaudiu del vostre nou Mars Expedition Rover.

Recomanat: