Tartalomjegyzék:

IRobot Create-Mars Expedition Rover Mark I: 4 lépés
IRobot Create-Mars Expedition Rover Mark I: 4 lépés

Videó: IRobot Create-Mars Expedition Rover Mark I: 4 lépés

Videó: IRobot Create-Mars Expedition Rover Mark I: 4 lépés
Videó: Посадка Марсохода Perseverance- История Изнутри 2024, Július
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Ez az utasítás megtanítja, hogyan állíthatja be az iRobot Create -t a MatLab kódolás használatával. A robot képes lesz ásványokat keresni az alakok megkülönböztetésével, a sziklás szenzorok segítségével manőverezni a zord terepen, és manuálisan is vezérelhető élő adással.

1. lépés: Kellékek

Kellékek
Kellékek

Ehhez a projekthez szüksége lesz egy iRobot Create -re, amely a Roomba robotporszívó programozható változata. A robot minden, a projekthez szükséges érzékelővel van felszerelve, különösen ütésérzékelőkkel, sziklaérzékelőkkel és "Light Bump" érzékelőkkel. Szükséged lesz egy Raspberry Pi -re és egy videokamerára is, amelyet vezeték nélküli kommunikációra, élő programozásra és élő video -hírcsatornára használnak. Végül szüksége lesz egy 3D nyomtatott tartóra a Raspberry Pi és a kamera számára.

2. lépés: Fejlesszen kódolást a kívánt eredmény kielégítésére

Fejlesszen kódolást a kívánt eredmény kielégítésére
Fejlesszen kódolást a kívánt eredmény kielégítésére

Miután csatlakoztatta a Roomba -t, létre kell hoznia egy Matlab kódot, amely megadja a kívánt kimeneteket a kívánt bemenetek után.

A kód itt látható:

%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Probléma leírása: Hozzon létre egy rover -t, hogy segítse az embereket a Mars felfedezésének/lakásának %-ában. %Megoldási módszer: Keressen szerves (zöld) anyagot %fényütköző, sziklaérzékelő és kamera segítségével, hogy ellenőrizze a szerves anyagokat. Engedélyezze a rover %-ának, hogy lökhárítók, szikla %-os érzékelők és kerékmagasság -érzékelők segítségével navigáljon a durva terepen. Lehetővé teszi az emberek számára, hogy biztonságos távolságból irányítsák a rovert %-ról, és manuálisan keressenek ásványokat. options = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Három lehetőség a párbeszédmenüben Setting = menu ('', options) if Setting> 0 %Ha a választott opció kéri a felhasználó megerősítési lehetőségeit2 = {'Yes', 'No'} %Hozzon létre egy cellatömböt az "yes" vagy a "No" "choice Confirm = menu (['Ön választotta"' options {Setting} '"mód.'], options2) %Erősítse meg a felhasználói beállítások választását, ha Confirm == 1 ha Setting == 1 %Ellenőrizze, hogy az" LIFE "beállítást választotta -e = 0, míg i == 0 r.setLEDDigits (num2str ('LIFE')) %"LIFE" kijelzése a LED -en i = 1: 100 r.setDriveVelocity (0.05) %Mozgassa a Roomba -t előre 0,05 m/sy = r.getCliffSensors %A sziklaérzékelő értékeinek lekérése és tárolása az "y" cellastruktúrában) %A Roomba visszafelé mozgatása 0,05 méter r.turnAngle (20) %A roomba forgatása 20 ° CCW img = r.getImage %Kép beszerzése a málna pite kameráról a roomba rect = [100 0 150 150]; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlagos (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); end elseif l.leftFront> 100 %Ellenőrzés balra/az első lámpa lökhárítója lefedve 'rect = [100 0 150 150]; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlag (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); end elseif l.leftCenter> 100 %Ellenőrizze, hogy a bal/középső lökhárító nincs-e lefedve 'rect = [100 0 150 150]; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlagos (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); end elseif l.rightCenter> 100 %Ellenőrizze, hogy a jobb/középső lökhárító nincs-e lefedve 'rect = [100 0 150 150]; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlagos (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); end elseif l.rightFront> 100 %Ellenőrizze, hogy a jobb/első lökhárító nincs-e lefedve 'rect = [100 0 150 150]; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlagos (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); vége elseif l.right> 100 %Ellenőrizze, hogy a jobb oldali lökhárító nincs-e lefedve. málna pite kamera a Roomba -n, és tárolja az 'img' rect = [100 0 150 150] változóban; img = imcrop (img, rect) %körbevágott kép a középpontba vörös = átlag (átlag (img (:,:, 1))) %átlagos piros intenzitás zöld = átlag (átlag (img (:,:, 2))) %átlagos zöld intenzitás kék = átlag (átlag (img (:,:, 3))) %átlagos kék intenzitás, ha zöld> piros && zöld> kék %Ellenőrizze, hogy a növény szerepel -e a képen d = msgbox (['Élet talált! ']); %Jelenítsen meg egy üzenetdobozt, amelyben az "Élet talált!" várakozás (d); end elseif y.left Elöl <1500 %Ellenőrizze, hogy a roomba bal/elülső része ki van-e kapcsolva a szikla r.moveDistance (-0,1, 0,05) %Mozgassa a roomba hátrafelé 0,1 méterrel 0,05 m/s r.turnAngle (-5) %Roomba forgatása 5 fok CW elseif y.right Elöl <1500 %Ellenőrizze, hogy a roomba jobb/elülső része le van-e állva a szikláról r.moveDistance (-0,1, 0,05) %Mozgassa a roomba-t hátra 0,1 méterrel 0,05 m/s r.turnAngle (5) %Roomba forgatása 5 fok CCW elseif y.left <1000 %Ellenőrizze, hogy a roomba bal oldala nincs-e lefelé a szikláról r.moveDistance (-0.05, 0.05) %A roomba hátrahelyezése 0.05 méterrel 0.05 m/s fordulaton CW elseif y.right0 %Futtatás, ha megnyomja a gombot, ha Folytatás == 1 i = 0 %Folytassa az élet keresését i = 1 %ÉLET vége mód vége vége vége egyébif Beállítás == 2 %Ellenőrizze, hogy a "ROUGH TERRAIN" beállítást választotta -e i = 0, míg i == 0 r.setLEDDigits (num2str ('RGH')) %"Durva" kijelzés a LED kijelzőn az i = 1: 1000 r.setDriveVelocity (0,05) %Állítsa a roomba hajtási sebességét 0,05 m/sx = r.getBumpers %Lökhárító érzékelők értékeinek lekérése és tárolása az "x" szerkezetben y = r.get CliffSensors %A sziklaérzékelő értékeinek lekérése és tárolása az "y" szerkezetben, ha x.jobb == 1 %Ellenőrizze, hogy a jobb oldali lökhárító nincs -e lenyomva lökhárító le van nyomva r.turnAngle (-10) %Forgassa el a szobát 10 fokkal CW elseif x.front == 1 %Ellenőrizze, hogy nincs-e benyomva az első lökhárító r.turnAngle (20) %Forgassa el a szobát 20 fokkal CCW elseif x.rightWheelDrop == 1 % Ellenőrizze, hogy a jobb oldali kerék leesett-e. 1500 %Ellenőrizze, hogy a roomba bal első része le van-e állva a szikláról r.moveTávolság (-0,05, 0,05) %Mozgassa a roomba-t hátra 0,05 méterrel 0,05 m/s fordulaton.urnurn (Angol) (-5) %Forgassa el a roomba-ot 5 ° CW-os irányba, elülső < 1500 %Ellenőrizze, hogy a roomba jobb első része le van-e állva a szikláról. Mozdulat %Ellenőrizze, hogy a bal oldali rész o f roomba ki van kapcsolva a szikláról r.moveTávolság (-0,05, 0,05)%A roomba visszafelé mozgatása 0,05 méterrel 0,05 m/s fordulatszámnál %Durva terep folytatása más i = 1 %Durva terep vége vége vége más %Manuális mód i = 0 r.setLEDDigits (num2str ('USER')) %"USER" megjelenítése a LED kijelzőn d = msgbox (['Nyilak - Mozog; S - Stop Rover; ESC - Végfelhasználói vezérlés; A - Forrás keresése ']); várakozás (d); míg i == 0 r.showCamera %Nyissa meg a málna pite kamera élő hírcsatornáját külön ablakban D = getkey (1) %Felhasználó által megnyomott letöltési gomb, tárolja az ASCII értékét D változóként, ha D == 30 %Ellenőrizze, hogy a "fel" nyíl látható -e megnyomva r.setDriveVelocity (0,1) %Roomba küldése előre 0,2 m/s elseif D == 28 %Ellenőrizze, hogy megnyomta -e a "bal" nyilat r.setDriveVelocity (0) %Állítsa le a roomba előre- vagy hátramozgását r.turnAngle (15, 0.05) %Forgassa el a Roomba-t 45 fokkal CCW irányban, 0,05 m/s elseif D == 31 %Ellenőrizze, hogy megnyomta-e a „le” nyilat. Ellenőrizze, hogy nincs-e megnyomva a "jobb" nyíl. az "esc" (escape) gombot megnyomta i = 1 %Az "i" változó értékének módosítása a kilépési ciklusból 115 %Ellenőrizze, hogy lenyomták -e az "s" gombot r.setDriveVelocity (0) %Stop roomba from előre vagy hátra haladás elseif D == 97 %Ellenőrizze, hogy az "a" megnyomása megtörtént -e image = r.getImage; imwrite (kép, 'image.png') W = Osztályozás (kép) K = mód (W), ha K == 3 d = msgbox ('Resource found') %Megjelenítés, ha a téglalap alakú erőforrás észleli a várakozást (d); %Várja meg, hogy a felhasználó bezárja a "d" üzenetdobozt elseif K == 0 d = msgbox ('Not Resource:(') %Megjelenik, ha a téglalap alakú erőforrás nem észlelve várja a (d); %Várja meg, hogy a felhasználó bezárja a "d" üzenetmezőt end else d = msgbox ('Nem érvényes kulcsbevitel.') %Megjelenítés, ha a felhasználó bezárja a "beállítás kiválasztása" menüt waitfor (d); %Várja meg, hogy a felhasználó bezárja a "d" üzenetdobozt end endfor (d); %Wait to a felhasználó bezárja a "d" üzenetmezőt end end end d = msgbox ('Goodbye') %Elbúcsúzik, ha az opciók zárva vannak várakozás (d);

3. lépés: Tesztelés

Tesztelés
Tesztelés

Miután megírta a kódot, tesztelnie kell a Roomba -t. Bár a kód helyesnek tűnhet, sok értékét, különösen a szín vagy az alak tekintetében, módosítani kell annak érdekében, hogy megfelelően felismerje azokat az objektumokat, amelyeket a Roomba szeretne azonosítani.

4. lépés: Figyelje meg a vizuális kimeneteket

Figyelje meg a vizuális kimeneteket
Figyelje meg a vizuális kimeneteket
Figyelje meg a vizuális kimeneteket
Figyelje meg a vizuális kimeneteket

Nagyon nyilvánvaló lesz, hogy sikeresen programozta -e a Roomba -t a vizuális kimenetek alapján.

A kimenetek a következők:

  • Alakfelismerés: A Roomba képessége, hogy megfelelően megkülönböztesse az alakzatokat a megfelelő ásványok megtalálása érdekében
  • Durva terepmanőverek: Kerüli a sziklákat vagy a sötét területeket
  • Manuális mód: Élő adás és a Roomba vezérlése
  • Képek: Ásványok képei
  • Élet talált!: MatLab szövegmező, amely azt jelzi, hogy a növény azonosította a szerves életet.

Ez az oktatóanyagunk vége, élvezze az új Mars Expedition Rover -t!

Ajánlott: