Tartalomjegyzék:
- 1. lépés: Kellékek
- 2. lépés: Fejlesszen kódolást a kívánt eredmény kielégítésére
- 3. lépés: Tesztelés
- 4. lépés: Figyelje meg a vizuális kimeneteket
Videó: IRobot Create-Mars Expedition Rover Mark I: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
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
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
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
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
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:
Iron Man Mark II sisak: 4 lépés
Iron Man Mark II sisak: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que Conduce El Cableado, alimentado por 4 battery AA AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido. y apert
Mark Twain House kísértetjárta: 5 lépés
Mark Twain -ház kísérteties: A pletykák szerint a Mark Twain -házat kísérti a híres szerző. Ebben az utasításban " felfedeztem " egy régi fénykép, amely minden kétséget kizáróan bizonyítja, hogy Twain szelleme valóban kísérti ezt a történelmi régi otthont
Az Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 lépés (képekkel)
Az Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Bevezetés A PongMate CyberCannon Mark III a legújabb és legfejlettebb sörpong technológia, amelyet valaha is eladtak a nagyközönségnek. Az új CyberCannon segítségével bárki a félelmetes játékos lehet a sörpong asztalnál. Hogy van ez a p
Az IRobot Create parancsmoduljának használata Linux alatt: 4 lépés
Az IRobot Create parancsmoduljának használata Linux alatt: Mivel az iRobot nem biztosította a linux felhasználók számára a parancsmodul használatát, magamnak kellett rájönnöm. Ne ijedjen meg, ez egyáltalán nem nehéz. Mindössze annyit kell tennie, hogy futtat egy pár szkriptet. Kezdjük el, jó?
IRobot Create létrehozása festésre: 6 lépés (képekkel)
IRobot Create létrehozása festékre: Ez egy robotikai projekt, amelyet valószínűleg olyan személy fejezhet be, akinek egyáltalán nincs tapasztalata a robotokkal. Ezt azért mondom, mert mielőtt elkezdtem volna, nem volt tapasztalatom a robotokkal kapcsolatban. Vagy programokat írni. Valójában tudtam, hogyan kell festeni, és ez volt az