Mundarija:

IRobot Create-Mars ekspeditsiyasi Rover Mark I: 4 qadam
IRobot Create-Mars ekspeditsiyasi Rover Mark I: 4 qadam

Video: IRobot Create-Mars ekspeditsiyasi Rover Mark I: 4 qadam

Video: IRobot Create-Mars ekspeditsiyasi Rover Mark I: 4 qadam
Video: Introducing the iRobot Create 3 Educational Robot 2024, Noyabr
Anonim
IRobot Create-Mars ekspeditsiyasi Rover Mark I
IRobot Create-Mars ekspeditsiyasi Rover Mark I

Bu ko'rsatma sizga MatLab kodlash yordamida iRobot Create ni sozlashni o'rgatadi. Sizning robotingiz shakllarni farqlash orqali minerallarni qidirish, jarlik datchiklari yordamida qo'pol erlarni manevr qilish va jonli kanal orqali qo'lda boshqarish qobiliyatiga ega bo'ladi.

1 -qadam: materiallar

Ta'minotlar
Ta'minotlar

Ushbu loyiha uchun sizga iRobot Create kerak bo'ladi, bu Roomba robot changyutgichining dasturlashtiriladigan versiyasi. Robot ushbu loyiha uchun zarur bo'lgan barcha datchiklar bilan jihozlangan, xususan, zarba sensori, jarlik sensori va "Light Bump" sensori. Shuningdek, sizga Raspberry Pi va videokamera kerak bo'ladi, u simsiz aloqa, jonli dasturlash va jonli video tasmasi uchun ishlatiladi. Va nihoyat, sizga Raspberry Pi va kamera uchun 3D bosma moslama kerak bo'ladi.

2 -qadam: kerakli natijani qondirish uchun kodlashni ishlab chiqish

Istalgan natijani qondirish uchun kodlashni ishlab chiqish
Istalgan natijani qondirish uchun kodlashni ishlab chiqish

Roomba -ni ulaganingizdan so'ng, siz kerakli kirishlaringizdan so'ng kerakli natijalarni beradigan Matlab kodini yaratishingiz kerak bo'ladi.

Kodni bu erda ko'rish mumkin:

%Roomba loyihasi%Brenten Arnold (barnol15); Julianne Korn (218 -yil qdp); Mayk Heal (mheal) %4/11/19 %Muammoning tavsifi: Marsni kashf qilish/yashash paytida odamlarga yordam beradigan rover yarating. %Yechish usuli: organik moddalarni tekshirish uchun %yorug'lik bamperlari, jarlik sensorlar va kamera yordamida organik (yashil) moddalarni qidiring. %Bemper, jarlik %datchiklari va g'ildirak balandligi datchiklari yordamida roverning qo'pol erlarda harakatlanishiga ruxsat bering. Odamlarga roverni %xavfsiz masofadan boshqarishga va minerallarni qo'lda qidirishga imkon bering. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Dialog menyusidagi uchta variant Sozlama = menyu ('', tanlovlar), agar Sozlama> 0 %Agar tanlangan variant foydalanuvchidan tasdiqlash variantlarini so'rash2 = {'Ha', 'Yo'q'} %"Ha" yoki "Yo'q" katakchalarini yarating. "tanlash Tasdiq = menyu (['Siz tanlagan' 'tanlovlar {Sozlash}'" rejimini. '], tanlovlar2) %Foydalanuvchi sozlamalarini tasdiqlang, agar Tasdiq == 1 bo'lsa Sozlash == 1 %"LIFE" sozlamasi tanlanganligini tekshiring i I == 0 r.setLEDDigits (num2str ('LIFE')) %i = 1 uchun LEDda "LIFE" ni ko'rsatish: r.setDriveVelocity (0.05) %xona xonasini 0,05 m/sy = r.getCliffSensors oldinga siljiting. %"Y" hujayra tuzilmasida jarlik sensori qiymatlarini olish va saqlash) %Roomba -ni 0,05 metr orqaga siljiting r.turnAngle (20) %Roomba -ni 20 daraja aylantiring CCW img = r.getImage %rasberry pirogli kameradan rasmni oling roomba rect = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif l.leftFront> 100 %Tekshirish chapda/old yorug'lik bamperi bilan qoplangan r.moveDistance (-0.05) %Roombani orqaga siljiting 0.05 metr img = r.getImage %Rasmli pirojnoe kamerasidan rasmni oling va o'zgarmaydigan img-da saqlang. 'to'g'ri = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif l.leftCenter> 100 %Chap/markaz yorug'lik bamperining yopilganligini tekshiring r.moveDistance (-0.05) %Roomba-ni 0,05 metr orqaga siljiting 'to'g'ri = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif l.rightCenter> 100 %o'ng/markaz yorug'lik bamperining yopilganligini tekshiring r.moveDistance (-0.05) %roomba-ni 0,05 metr orqaga siljiting img = r.getImage %rasberry pirogli kameradan rasm oling 'to'g'ri = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif l.rightFront> 100 %o'ng/old yorug'lik bamperining yopilganligini tekshiring r.moveDistance (-0.05) %roomba-ni 0,05 metr orqaga siljiting img = r.getImage %rasberry pirogli kameradan rasm oling 'to'g'ri = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif l.right> 100 %O'ng yorug'lik bamperining yopilganligini tekshiring r.moveDistance (-0.05) %Xonani orqaga siljiting 0.05 metr r.turnAngle (-20) %Xonani 20 daraja CW ga aylantiring img = r.getImage %Rasmni oling rasber pirog kamerasi roomba va saqlansin 'img' rect = [100 0 150 150]; img = imcrop (img, to'g'ri) %kesish tasviri markazga qaratiladi qizil = o'rtacha (o'rtacha (img (:,,, 1))) %o'rtacha qizil qizg'ish yashil = o'rtacha (o'rtacha (img (:,:, 2)))) %o'rtacha yashil intensivligi ko'k = o'rtacha (o'rtacha (img (:,:, 3)))) %o'rtacha ko'k intensivligi yashil bo'lsa> qizil && yashil> ko'k %O'simlik rasmda ekanligini tekshiring d = msgbox (['Hayot topildi! ']); %"Hayot topildi!" Degan xabar qutisini ko'rsatish. kutish (d); end elseif y.leftFront <1500 %Roombaning chap/old qismi jarlikdan tashqarida ekanligini tekshiring gradus CW boshqa y. o'ngFront <1500 %Roombaning o'ng/old qismi jarlikdan o'chirilganligini tekshiring r. Harakat (-0.1, 0.05) %0,05 m/s tezlikda xonani 0,1 metr orqaga siljiting r.turnAngle (5) %Roomba 5 ni aylantirish daraja CCW boshqa y.chap <1000 %Roombaning chap tomoni jarlikdan o'chirilganligini tekshiring r. Harakat (-0.05, 0.05) %Xonani 0,05 m/s tezlikda 0,05 metr orqaga siljitish Burilish burchagi (-10) %Xonani 10 daraja burish CW elseif y.right0 %Davom etish == 1 i = 0 %Agar hayot tugmachasini bosish davom etsa i = 1 %LIFE rejimining oxiri end end if if Setting == 2 %"ROUGH TERRAIN" sozlamasi tanlanganligini tekshiring. i = 0 esa i == 0 r.setLEDDigits (num2str ('RGH')) %LED displeyda "qo'pol" ni ko'rsatish i = 1: 1000 r.setDriveVelocity (0.05) %Roomba haydovchi tezligini 0,05 m/sx = ga o'rnating. r.getBampers %"x" y = r.get tuzilmasida bamper sensori qiymatlarini olish va saqlash. CliffSensors %"y" tuzilmasida jarlik sensori qiymatlarini qaytarib oling va saqlang, agar x.right == 1 %O'ng tampon bosilganligini tekshiring r.turnAngle (10) %Xonani 10 gradusga aylantiring, aks holda x.left == 1 %Chapda tekshiring bamper bosiladi r.turnAngle (-10) %Xonani 10 daraja CW ga aylantiring, aks holda x.front == 1 %Old tampon bosilganligini tekshiring r.turnAngle (20) %Xonani 20 darajaga aylantiring, aks holda x.rightWheelDrop == 1 % O'ng g'ildirak tushganligini tekshiring r.turnAngle (-20) %Xonani 20 daraja CW ga aylantiring, aks holda x.leftWheelDrop == 1 %Chap g'ildirak chapga tushganligini tekshiring r.turnAngle (20) %Xonani 20 gradusga aylantiring, aks holda y.leftFront < 1500 %Roombaning oldingi chap qismi jarlikdan tashqarida ekanligini tekshiring r.moveDistance (-0.05, 0.05) %Roombani 0.05 m/s tezlikda 0,05 metr orqaga burang. 1500 %Roombaning o'ng old qismi jarlikdan o'chirilganligini tekshiring r.moveDistance (-0.05, 0.05) %0,05 m/s tezlikda 0,05 metr orqaga buriling. %Chap qismi o ekanligini tekshiring f roomba jarlikdan tashqarida r.moveDistance (-0.05, 0.05)%0,05 m/s tezlikda 0,05 metr orqaga harakatlaning %Dag'al erni davom ettirish boshqa i = 1 %qo'pol erni tugatish oxiri boshqa %qo'lda rejim i = 0 r.setLEDDigits (num2str ('USER')) %LED displeyda "USER" ni ko'rsatish d = msgbox (['o'q tugmalari - Ko'chirish; S - Roverni to'xtatish; ESC - oxirgi foydalanuvchilarni boshqarish; A - Manbani toping ']); kutish (d); i == 0 r.showCamera %rasberry pirogi kamerasini jonli kanalini alohida oynada ochish D = getkey (1) %Foydalanuvchi bosgan kalitni olish, D == 30 %bo'lsa, ASCII qiymatini D o'zgaruvchisi sifatida saqlang. bosildi r.setDriveVelocity (0.1) %Roombani oldinga 0,2 m/s tezlikda yuborish boshqa D == 28 %"chap" o'qi bosilganligini tekshiring r.setDriveVelocity (0) %Roombani oldinga yoki orqaga harakatlanishini to'xtating r.turnAngle (15), 0,05) %Xonani 45 daraja 0,05 m/s tezlikda aylantiring, aks holda D == 31 %"pastga" o'qi bosilganligini tekshiring r.setDriveVelocity (-0.1) %Roombani 0,2 m/s orqaga siljiting, aks holda D == 29 % "O'ng" o'qi bosilganligini tekshiring r.setDriveVelocity (0) %Roomba oldinga yoki orqaga harakatlanishini to'xtating r.turnAngle (-15, 0,05) %Xonani 45 daraja CW ga 0,05 m/s tezlikda aylantiring, aks holda D == 27 %Tekshiring "esc" (qochish) tugmachasi bosildi i = 1 %"i" o'zgaruvchining qiymatini pastadirdan chiqish uchun o'zgartirish 115 %"s" tugmasi bosilganligini tekshiring r.setDriveVelocity (0) %Roomba -ni to'xtatish oldinga yoki orqaga boshqa DIF == 97 %"a" bosilganligini tekshiring image = r.getImage; imwrite (image, 'image.png') W = Tasniflash (rasm) K = rejimi (V), agar K == 3 d = msgbox ('Resurs topildi') %To'rtburchaklar manba (d) kutayotganini aniqlasa ko'rsatish; %Foydalanuvchining "d" xabar qutisini yopishini kuting, aks holda K == 0 d = msgbox ('Manba emas:(') %To'rtburchakli manba aniqlanmasa, ko'rsatiladi waitfor (d); %Foydalanuvchi xabar qutisini yopishini kuting "d" end else d = msgbox ('Noto'g'ri kalit kiritish.') %Foydalanuvchi "d sozlamalarni tanlash" menyusini yopsa, ko'rsatish (d); %Foydalanuvchi "d" kutish tugashini kutish (d); %Kutish foydalanuvchi "d" xabar qutisini yopadi end end end else d = msgbox ('Xayr!') %Variantlar yopilguncha xayrlashadi (d);

3 -qadam: Sinov

Sinov
Sinov

Sizning kodingiz yozilgandan so'ng, siz Roomba -ni sinab ko'rishingiz kerak bo'ladi. Sizning kodingiz to'g'ri ko'rinishi mumkin bo'lsa -da, sizning Roomba aniqlamoqchi bo'lgan ob'ektlarni to'g'ri tanib olish uchun sizning ko'pgina qadriyatlaringizni, ayniqsa rang yoki shaklni o'zgartirish kerak bo'ladi.

4 -qadam: Vizual natijalarga e'tibor bering

Vizual natijalarga e'tibor bering
Vizual natijalarga e'tibor bering
Vizual natijalarga e'tibor bering
Vizual natijalarga e'tibor bering

Siz Roomba -ni vizual chiqishlari asosida muvaffaqiyatli dasturlashtirganingiz yoki qilmaganligingiz aniq bo'ladi.

Chiqishlarga quyidagilar kiradi:

  • Shaklni aniqlash: Roombaning to'g'ri minerallarni topish uchun shakllarni to'g'ri ajratish qobiliyati
  • Tuproqli manevrlar: jarliklardan yoki qorong'i joylardan saqlaning
  • Qo'lda rejim: jonli ovqatlanish va Roomba -ni boshqarish qobiliyati
  • Rasmlar: minerallar rasmlari
  • Hayot topildi!: MatLab matn qutisi sizning o'simlik organik hayotni aniqlaganligini bildiradi.

Bizning darsligimiz shu bilan tugadi, yangi Mars Expedition Rover -dan bahramand bo'ling!

Tavsiya: