Mundarija:

Mars Roomba loyihasi UTK: 4 qadam
Mars Roomba loyihasi UTK: 4 qadam

Video: Mars Roomba loyihasi UTK: 4 qadam

Video: Mars Roomba loyihasi UTK: 4 qadam
Video: AMA record with community manager Oleg. PARALLEL FINANCE 2024, Noyabr
Anonim
Mars Roomba UTK loyihasi
Mars Roomba UTK loyihasi
Mars Roomba UTK loyihasi
Mars Roomba UTK loyihasi

Ogohlantirishlar: bu faqat xonada o'rnatilgan bo'lsa ishlaydi

Juda aniq usul, bu ko'rsatma TENNESSEE STUDENTLAR VA FAKULTETLAR UNIVERSITETI tomonidan yaratilgan va ishlatishga mo'ljallangan.

Bu kod MATLAB -da yozilgan va saqlangan kodni ishlatish uchun Roomba -ni sozlash uchun ishlatiladi. Agar Tennessi universiteti veb -saytidan kerakli kutubxonalarni ololmasangiz, bu ishlamaydi. Agar sizda kutubxonalar bo'lsa, siz ularni kutubxonadagi funktsiyalarni ishlatib, o'zingizning Roomba dasturlash uchun ishlatishingiz mumkin. Bu ko'rsatma sizga kutubxonalarni o'rnatishni, barcha kodlar uchun papka yaratishni, quyida biz taqdim etgan dasturni qanday kodlashni va ishlatishni o'rgatadi.

Kerakli materiallar:

· Xotin

· MATLAB

· Raspberry Pi va Pi kamerasi

1 -qadam: kutubxonalarni olish

Muhandislik veb -saytida asboblar qutisi/kutubxona mavjud, uni yuklab oling va yangi papkaga joylashtiring. Bu papkada barcha loyiha ishchi fayllari bo'lishi kerak, chunki dasturda ishlatiladigan har qanday funksiya kutubxonaga tegishli bo'lishi kerak. Buni amalga oshirgandan so'ng, siz dasturlar ustida ishlashni boshlashingiz mumkin

2 -qadam: Dasturlarni yozish

Dasturda ishlatilishi mumkin bo'lgan juda ko'p funktsiyalar mavjud, ularga "doc roomba" buyrug'i yordamida kirish mumkin. Ushbu funktsiyalar yordamida siz Roomba -ni turli yo'llar bilan boshqarishingiz mumkin. Quyida berilgan kodda mars -roverni yaratish uchun turli yo'llar bilan zarba sensori, yorug'lik sensori, kamera va jarlik sensori ishlatiladi. Biz zarba sensorlaridan foydalanib, Roomba ob'ektga urilganda, bu sodir bo'lganda, robot orqaga qaytadi, orqaga buriladi va harakatni davom ettiradi. Roomba ob'ektga urilishidan oldin, yorug'lik chizig'i ob'ektni aniqlab oladi va Roombani sekinlashtiradi, shunda u zarba sezgichini ishga tushirish uchun ob'ektga urilganda, Roomba kamroq shikastlanadi/ta'sir qiladi. Kamera sirtdan suv yoki lavani qidiradi, agar suyuqlik topilmasa, robot qidirishni davom ettiradi, agar suv topilsa, robot operatorlarga xabar yuboradi. Jarlik datchiklari robotni jarlikka yaqinlashganda to'xtatish uchun mo'ljallangan. Agar robot jarlikni sezsa, u orqaga buriladi va yiqilmaslik uchun aylanadi.

3 -qadam: kod

Buni nusxalash va kutubxonalar bilan bir papkada joylashgan MATLAB faylga joylashtirish

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

kodning ishlashini davom ettirish uchun haqiqiy % Infinte while loop

dontFall = cliffCheck (r) % "dontFall" o'zgaruvchisini "cliffCheck" funktsiyasiga tayinlaydi.

if dontFall % if iborasi "cliffCheck" tugagandan so'ng kodda davom etishi kerak

r.setDriveVelocity (0.1, 0.1) % "CliffCheck" tugagandan so'ng Roombani harakatda ushlab turadi.

end % if if "dontFall" tugaydi

bumper = bumpcheck (r) % 'bumpcheck' funktsiyasiga 'bamper' o'zgaruvchisini belgilaydi

if bumper % if iborasi "bumpcheck" tugagandan so'ng kodda davom etishi kerak

r.setDriveVelocity (0.1, 0.1) % "to'siq" tugagandan so'ng Roombani harakatda ushlab turadi.

end % if "ifoda" tugaydi

suyuqliklar = LiquidCheck (r) % "LiquidCheck" funktsiyasiga o'zgarmaydigan "suyuqliklar" ni tayinlaydi.

agar suyuqliklar % if iborasi "LiquidCheck" tugagandan so'ng kodda davom etishi kerak

r.setDriveVelocity (0.1, 0.1) % "LiquidCheck" tugagandan so'ng Roombani harakatda ushlab turadi.

end % "suyuqliklar" if ifodasini tugatadi

lightbamper = lightcheck (r) % "lightbamp" o'zgaruvchisini "lightcheck" funktsiyasiga tayinlaydi.

pauza (0,1) % Uzluksiz tsiklning takrorlanishiga yo'l qo'ymaslik uchun qisqa pauza

end % loop cheksiz tugaydi

end % end funksiyasi

bumper = bumpcheck (r) % "bumpcheck" funktsiyasini yaratadi

bumpdata = r.getBumpers % Barcha ma'lumotlarni bamperdan "bumpdata" o'zgaruvchisiga tayinlaydi.

bamper = bumpdata.right || bumpdata.left || bumpdata.front % Har xil bamperlar uchun "bamper" saqlanadigan o'zgaruvchini yaratadi

if bumpdata.right> 0 % Bumper urilsa, Roomba funktsiyasining bajarilishiga sabab bo'ladigan ifoda

r.stop % Roombani to'xtatadi

r.moveDistance (-0.3, 0.2) % Roomba 0.3m teskari

r.turnAngle (90, 0,5) % Roombani iloji boricha 90 gradusga aylantiradi

oxiri

agar bumpdata.front> 0 bo'lsa

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0,5) % Roombani tasodifiy oraliqda 0 dan 270 darajagacha imkon qadar tez aylantiradi.

oxiri

agar bumpdata.left> 0 bo'lsa

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0,5) % Roomba -90 gradusni iloji boricha tez aylantiradi

oxiri

oxiri

lightbamper = lightcheck (r) % "Lightcheck" funktsiyasini yaratadi

lightdata = r.getLightBampers % Yorug'lik sensori barcha ma'lumotlarini o'zgaruvchan "lightdata" ga tayinlaydi.

lightbamper = lightdata.left || nurdata.haqli || lightdata.rightCenter || lightdata.leftCenter % Har xil yorug'lik bamperlari uchun saqlanadigan o'zgaruvchini yaratadi, "lampochka".

if lightbumper % Agar lightbumper ma'lumotlarini yuqoridan chaqirish uchun if

if lightdata.left> 10 % if ifoda, agar tampon 10 qiymatdan katta his qilsa, xonaning turli funktsiyalari bajariladi.

r.

end % if iborasi tugaydi

agar lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

oxiri

agar lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

oxiri

agar lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

oxiri

end % if "ifori" tugaydi

end %lightcheck funktsiyasini tugatadi

dontFall = cliffCheck (r) % funktsiyasi "cliffCheck" funktsiyasini yaratadi

ma'lumotlar = r.getCliffSensors; % Jarlik sensori ichidagi barcha ma'lumotlarni o'zgarmaydigan "ma'lumotlarga" belgilaydi.

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Har xil jarlik sensorlar uchun "dontFall" saqlanadigan o'zgaruvchini yaratadi.

if dontFall % If operatori jarlik sensori ma'lumotlarini yuqoridan chaqiradi

if data.left <1010 % Agar jarlik sensori 1010dan past qiymatlarni sezsa, xonaning turli funktsiyalari bajarilishiga olib keladigan ifoda.

r.stop

r.moveDistance (-0.2, 0.2) % Roomba 0,2m teskari

r.turnAngle (-90, 0,5) % Roomba -90 gradusni iloji boricha tez aylantiradi

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Roombani iloji boricha 90 gradusga aylantiradi

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Roombani iloji boricha 90 gradusga aylantiradi

elseif data.right <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Roombani iloji boricha 90 gradusga aylantiradi

oxiri

oxiri

oxiri

suyuqliklar funktsiyasi = LiquidCheck (r) % "LiquidCheck" funktsiyasini yaratadi

haqiqiy %kalibrlash uchun cheksiz tsiklni boshlaydi

img = r.getImage; % robotning kamerasini o'qiydi

image (img) % tasvirni rasm oynasida ko'rsatadi

red_mean = o'rtacha (o'rtacha (img (200, 150, 1)))% qizil piksellarning o'rtacha miqdorini o'qiydi

blue_mean = o'rtacha (o'rtacha (img (200, 150, 3)))% ko'k piksellarning o'rtacha miqdorini o'qiydi

suyuqliklar = red_mean || blue_mean % Har xil rang o'zgaruvchilari uchun "suyuqliklar" saqlanadigan o'zgaruvchisini yaratadi

if suyuqliklar % If ifodasi tasvir ma'lumotlarini yuqoridan chaqiradi

if red_mean> 170 % Agar kamera 170 dan katta o'rtacha qizil rangni ko'rsa, xonaning turli funktsiyalari bajarilishiga olib keladigan ifoda.

r.stop % roomba -ni to'xtatadi

r.setLEDCenterColor (255) % aylanani qizil rangga o'rnatadi

r.setLEDDigits (); % displeyni tozalaydi

f = kutish paneli (0, '*KIRISH XABARI*'); % yuklanayotgan xabar uchun kutish paneli yaratadi

r.setLEDDigits ("issiq"); % LED displeyini "HOT" chiqishiga o'rnatadi.

pauza (0,5) %Qisqa pauza tarqatilgan ma'lumotni o'qish uchun

r.setLEDDigits ('LAVA'); % LED displeyini "LAVA" chiqishiga o'rnatadi.

pauza (0,5)

kutish paneli (.33, f, '*INCOMING MESSAGE*'); %kutish panelida o'sish hosil qiladi

r.setLEDDigits ("issiq");

pauza (0,5)

r.setLEDDigits ('LAVA');

pauza (0,5)

kutish paneli (.67, f, '*INCOMING MESSAGE*'); % kutish panelida o'sish hosil qiladi

r.setLEDDigits ("issiq");

pauza (0,5)

r.setLEDDigits ('LAVA');

kutish paneli (1, f, '*KIRISH XABARI*'); %kutish panelini to'ldiradi

pauza (1)

close (f) %kutish panelini yopadi

r.setLEDDigits (); % LED displeyini tozalaydi

hammasini yopish %oldingi barcha oynalarni yopadi

o'qlar ("Rang", "hech kim", "XColor", "hech kim", "YColor", "hech kim")) % o'qlar va jadvalning chizilgan oynasini tozalaydi

y = 0,5; % chizma oynasida matnning y-pozitsiyasini o'rnatadi

x = 0,06; % matn chizish oynasidagi x-pozitsiyasini o'rnatadi

sarlavha ('FROM MARS ROOMBA', 'fontsize', 32) % Chizma oynasiga sarlavha qo'shadi

quadeqtxt = 'XAVFLI LAVA'; % "Quadeqtxt" o'zgaruvchisini 0 chiqishiga o'rnatadi

matn (x, y, quadeqtxt, 'tarjimon', 'lateks', 'shrift o'lchami', 36); % chizma oynasida kvadq matnini ko'rsatadi

r.moveDistance (-0.2, 0.2) %xona 0,2m teskari

r.turnAngle (180, 0,5) %xonani iloji boricha 180 gradusga buradi

r.setLEDCenterColor (128, 128); % Roomba markazidagi LEDni to'q sariq rangga o'rnatadi

hamma %yopish qolgan ochiq oynalarni yopadi

elseif blue_mean> 175 % Kamera 175 dan katta o'rtacha ko'k rangni ko'rsa, xonaning turli funktsiyalarini bajarishga sabab bo'ladi.

r.stop % roomba -ni to'xtatadi

r.setLEDCenterColor (255) % aylanani qizil rangga o'rnatadi

r.setLEDDigits (); % displeyni tozalaydi

f = kutish paneli (0, '*KIRISH XABARI*'); % yuklanayotgan xabar uchun kutish paneli yaratadi

r.setLEDDigits ("KO'RISH"); % LED displeyini "LOOK" chiqishiga o'rnatadi.

pauza (0,5) %Qisqa pauza tarqatilgan ma'lumotni o'qish uchun

r.setLEDDigits ('WATR'); % LED displeyini "WATR" chiqishiga o'rnatadi.

pauza (0,5)

kutish paneli (.33, f, '*INCOMING MESSAGE*'); %kutish panelida o'sish hosil qiladi

r.setLEDDigits ("KO'RISH");

pauza (0,5)

r.setLEDDigits ('WATR');

pauza (0,5)

kutish paneli (.67, f, '*INCOMING MESSAGE*'); % kutish panelida o'sish hosil qiladi

r.setLEDDigits ("KO'RISH");

pauza (0,5)

r.setLEDDigits ('WATR');

kutish paneli (1, f, '*KIRISH XABARI*'); %kutish panelini to'ldiradi

pauza (1)

close (f) %kutish panelini yopadi

r.setLEDDigits (); % LED displeyini tozalaydi

hammasini yopish %oldingi barcha oynalarni yopadi

o'qlar ("Rang", "hech kim", "XColor", "hech kim", "YColor", "hech kim")) % o'qlar va jadvalning chizilgan oynasini tozalaydi

y = 0,5; % chizma oynasida matnning y-pozitsiyasini o'rnatadi

x = 0,06; % matn chizish oynasidagi x-pozitsiyasini o'rnatadi

sarlavha ('FROM MARS ROOMBA', 'fontsize', 32) % Chizma oynasiga sarlavha qo'shadi

quadeqtxt = 'SUV topildi'; % "Quadeqtxt" o'zgaruvchisini 0 chiqishiga o'rnatadi

matn (x, y, quadeqtxt, 'tarjimon', 'lateks', 'shrift o'lchami', 36); % chizma oynasida kvadq matnini ko'rsatadi

r.moveDistance (-0.2, 0.2) %xona 0,2m teskari

r.turnAngle (180, 0,5) %xonani iloji boricha 180 gradusga buradi

r.setLEDCenterColor (128, 128); % Roomba markazidagi LEDni to'q sariq rangga o'rnatadi

hamma %yopish qolgan ochiq oynalarni yopadi

end %if 'ifoda "red_mean" tugaydi

end %"suyuqliklar" if ifodasini tugatadi

end % loop cheksiz yopiladi

end % end funktsiyalari "LiquidCheck"

4 -qadam: Kodni ishga tushirish

Kodni MATLAB -ga nusxalash va joylashtirishdan so'ng siz Roomba -ga ulanishingiz kerak. Roomba ulangandan so'ng siz r o'zgaruvchisini nomlashingiz kerak. Funksiyalar Roomba haqida gapirganda r o'zgaruvchisini ishlatadi, shuning uchun Roomba r o'zgaruvchisi sifatida aniqlanishi kerak. Kodni ishga tushirgandan so'ng, Roomba ko'rsatmalarga muvofiq ishlashi kerak.

Tavsiya: