Mundarija:

Astronavt-yordamchi Roomba: 4 qadam
Astronavt-yordamchi Roomba: 4 qadam

Video: Astronavt-yordamchi Roomba: 4 qadam

Video: Astronavt-yordamchi Roomba: 4 qadam
Video: Ameca самый продвинутый в мире человекоподобный робот 2024, Iyul
Anonim
Astronavtga yordamchi Roomba
Astronavtga yordamchi Roomba

Bu loyiha iRobot Create Version 2 bortidagi Raspberry Pi 3 yordamida amalga oshiriladi. MATLAB robotni sensorlar va kameralar yordamida aniq ko'rsatmalarga amal qilishni dasturlash uchun ishlatiladi. Datchiklar va kameralar, agar biror narsa noto'g'ri ketsa, kosmonavtni kuzatib boradigan va o'z bazasi bilan aloqa qilish imkoniyatini beradigan aniq vazifalarni bajarish uchun ishlatiladi.

1 -qadam: kerakli qismlar

Kerakli qismlar
Kerakli qismlar
Kerakli qismlar
Kerakli qismlar
Kerakli qismlar
Kerakli qismlar
Kerakli qismlar
Kerakli qismlar

1. iRobot 2 -versiyasini yaratish

IRobot Create - bu loyihaning eng muhim qismi, chunki u dasturlashtirilishi mumkin va kelajakda kosmonavtlarga ergashadigan va ularga yordam beradigan haqiqiy rover uchun ajoyib tasvir bo'lishi mumkin

2. Raspberry Pi 3

Raspberry Pi bu loyiha uchun dasturlashtirilgan edi. Kod Pi uchun mo'ljallangan va unga ilova qilingan Pi versiyasi 3 (B modeli). Arduino kabi boshqa dasturlashtiriladigan taxtalardan foydalanish mumkin, ammo arduino va boshqa ko'pgina platalar boshqa bosqichda tasvirlanganidan farqli ravishda kodlashni talab qiladi

3. Raspberry Pi kamera moduli

Ushbu loyiha uchun Raspberry Pi -ga kerak bo'lgan yagona tashqi aloqa - bu kamera moduli. Kamera moduli ushbu loyihaning ajralmas qismi hisoblanadi, chunki Roomba faqat kamerada ko'rgan narsalariga asoslanib vazifalarni bajaradi

4. MATLAB 2018a

MATLAB -ning ikkinchi oxirgi versiyasi, 2018a, ushbu sozlashda ishtirok etgan kodlash uchun ishlatilgan. MATLAB -ning boshqa ko'plab versiyalari bu bilan ishlaydi, chunki Roomba dasturlashi bir muncha vaqtdan beri mavjud

2 -qadam: fayllar va kamera konfiguratsiyasi

Fayl va kamera konfiguratsiyasi
Fayl va kamera konfiguratsiyasi

1. Raspberry Pi va Camera -ning Roomba -ga ulanishi

  • Pi iRobot -ga to'g'ridan -to'g'ri mikro USB orqali ulanishi mumkin. Bu faqat foydalanishga tayyor bo'lishi kerak. Shu bilan birga, uni shu paytgacha taqdimot davomida rasmlarda ko'rsatilgandek, xona xonasiga mahkam joylashtirish tavsiya etiladi.
  • Kamera Raspberry Pi -ga to'g'ridan -to'g'ri ulanadi va kamerani to'g'ridan -to'g'ri ushlab turish uchun biror narsa sotib olish yoki yasash tavsiya etiladi. Agar kamerani ko'rmasa, uni kamerada ushlab turishning ma'nosi yo'q.

2. Fayllar

  • Hamma narsa o'rnatilgandan va ulanganidan so'ng, "Spot" va "Dock" tugmachalarini 10 soniya birga ushlab turish orqali robotning qayta tiklanganiga va ishga tayyor ekanligiga ishonch hosil qiling.
  • Bu erda birinchi navbatda MATLAB kerak. Roomba uchun fayllar birinchi bo'lib o'rnatilishi kerak va bu fayllarni ishga tushirish uchun faqat havolada ko'rsatilgan kod kerak bo'ladi:
  • https://ef.engr.utk.edu/ef230-2017-08//projects/ro…

3 -qadam: Roomba uchun dastlabki test

Ishlayotganiga ishonch hosil qilish uchun xona xonasida ko'plab dastlabki tekshiruvlar o'tkazilishi kerak.

1. Roomba bilan bir xil Wi -Fi tarmog'iga ulanganingizga ishonch hosil qiling. Bu holda, siz hech qachon MATLAB orqali ulana olmaysiz.

2. Sizning xonangiz qaysi raqamga tayinlanganligini bilib oling, shunda siz tanlagan xonaga maxsus ulanishingiz mumkin. Misol uchun, agar sizning xonangizning raqami 30 bo'lsa, siz unga MATLAB -dagi buyruqlar oynasiga roomba (30) yozib ulanasiz.

3. Roomba MATLAB -da tuzilmalar orqali boshqarilishi mumkin. Masalan, agar siz roomba (30) kodini 'r' o'zgaruvchisiga o'rnatgan bo'lsangiz, robot r.moveDistance (0,2, 0,1) buyrug'i bilan oldinga siljishi mumkin.

4. Roomba -ga xabar berish mumkin bo'lgan turli xil buyruqlar mavjud va ularni buyruqlar oynasiga 'doc roomba' yozish orqali ko'rish mumkin.

5. Yorug'lik, zarba va jarlik o'qishlari uchun sensorlar hammasini "doc roomba" da ko'rsatilgan buyruqlar yordamida o'qish mumkin, lekin sensor ma'lumotlarini ko'rish uchun doimiy, aniq menyuni "r.testSensors" yordamida ko'rish mumkin. '.

6. Bularning barchasi sinovdan o'tkazilgandan so'ng, robotning tasvirni yig'ish dasturidan foydalanib, olingan rasmlarni o'qish va ko'rish mumkin. Buning asosiy kodi img = r.getImage va imshow (img) bo'ladi;.

7. Rasmning RGB qiymatlarini red_mean = o'rtacha (o'rtacha (img (:,,, 1))) kodlari bilan topish mumkin;

green_mean = o'rtacha (o'rtacha (img (:,,:, 2))); va blue_mean = o'rtacha (o'rtacha (img (:,,, 3))));.

4 -qadam: MATLAB kodining namunasi

MATLAB kodiga misol
MATLAB kodiga misol

Hozirgi vaqtda siz Mars Rover prototipini insonga yordam berish uchun sensorlar va tasvirni suratga olish dasturidan foydalanishga tayyormiz. Bizning misolimiz - kosmonavtning orqasidan oq rangni kuzatib, unga qarab harakat qilish. Agar sensorlar yuqori qiymatlarni o'qiyotgan bo'lsa, robot signal beradi, shunda kosmonavt robotni qoqilib qolsa, uni qayta o'rnatishi mumkin, yoki agar u jarlikka tiqilib qolsa, uni olib, qayta o'rnatishi mumkin. Biroq, bu xatolarni faqat oqni ko'rgandagina o'qiydi. Oq rangni ko'ra olmagan holda, robot xato rejimiga o'tadi. Ko'rganlariga qarab, uy bazasiga ikki xil elektron pochta xabarlarini yuborish dasturlashtirilgan. Agar u kosmonavtning terining rangini ko'rsa, bu yaxshi emas, shuning uchun agar kosmonavt terisi kostyumida nuqson bo'lsa, u uy bazasini ogohlantiradi. Boshqa xabar, agar kosmonavt ko'zdan g'oyib bo'lsa. Agar kameralarda oq yoki terining rangi ko'rsatilmagan bo'lsa, robot aylanib, boshqa, lekin boshqa elektron pochta xabarini yuboradi. Roomba kosmonavtni ko'ra olmaydigan rasmlar elektron pochta xabarlari bilan birga yuboriladi. Bizning loyihamiz uchun kod quyida ko'rsatilgan:

i = 1 uchun:.1: 3 img = r.getImage; rasm (img) red_mean = o'rtacha (o'rtacha (img (:,,:, 1))); green_mean = o'rtacha (o'rtacha (img (:,,:, 2))); blue_mean = o'rtacha (o'rtacha (img (:,,:, 3)))); if red_mean> 110 && red_mean 110 && blue_mean 110 && green_mean0 || bump.left> 0 || bump.front> 0 r.beep () r.beep () r.beep () r.step elseif cliff.left <10 || cliff.leftFront <10 || cliff.rightFront <10 || shoxrux.hud700 || light.leftFront> 700 || light.leftCenter> 700 || light.rightCenter> 700 || nur.rightFront> 700 || yengil. o'ng> 700 r.bip () r.beep () r.beep () r.beep () r. setDriveVelocity (.3,.2) r.stop end end end green_mean <35 && blue_mean <35 %teri rangini ko'rsatish (kosmonavtning terisining rangiga qarab sozlash kerak) r.beep (); r.beep (); r.beep (); pochta = '[email protected]'; %kostyum o'chirilganligini ko'rsatuvchi elektron pochta xabarini yuboradi psswd = 'ha'; xost = 'smtp.gmail.com'; port = '465'; emailto = '[email protected]'; m_subject = 'mavzu'; m_text = 'test'; setpref ("Internet", "E_mail", pochta); setpref ("Internet", "SMTP_Server", xost); setpref ("Internet", "SMTP_Username", pochta); setpref ("Internet", "SMTP_Password", psswd); rekvizitlar = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pochta); props.setProperty ('mail.smtp.host', xost); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'rost'); props.setProperty ('mail.smtp.debug', 'rost'); props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.port', port); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'noto'g'ri'); sendmail (emailto, 'Yordam!', 'Kosmonavtlar formasi yopiq!', img); tugatish, agar red_mean 135 || yashil_mean 135 || blue_mean 135 uchun j = 1: 2 %, agar oq rang robot tomonidan topilmasa r.turnAngle (360) mail = '[email protected]'; psswd = 'ha'; xost = 'smtp.gmail.com'; port = '465'; emailto = '[email protected]'; m_subject = 'mavzu'; m_text = 'test'; setpref ("Internet", "E_mail", pochta); setpref ("Internet", "SMTP_Server", xost); setpref ("Internet", "SMTP_Username", pochta); setpref ("Internet", "SMTP_Password", psswd); rekvizitlar = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pochta); props.setProperty ('mail.smtp.host', xost); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'rost'); props.setProperty ('mail.smtp.debug', 'rost'); props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.port', port); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'noto'g'ri'); sendmail (emailto, 'Yordam!', 'Kosmonavt topilmaydi!', img); r.stop oxiri oxiri

Shubhasiz, bu erda tartibsiz, lekin nusxa ko'chirilgandan so'ng uni o'chirish kerak. Buning uchun parollar va elektron pochta xabarlari, albatta, ushbu loyihani amalga oshirayotganlar tomonidan taqdim etiladi.

Biroq, bizning misolimiz bu robotni har kimga mos kelishi uchun uni chalkashtirib yuborishning ko'p usullaridan biridir. Ko'p turli xil ishlar qilish mumkin, ularga o'zingiz mos kelasiz.

Tavsiya: