Mundarija:
- 1 -qadam: kutubxonalarni olish
- 2 -qadam: Dasturlarni yozish
- 3 -qadam: kod
- 4 -qadam: Kodni ishga tushirish
Video: Mars Roomba loyihasi UTK: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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:
Robot loyihasi UTK 2017: 3 qadam
Robot loyihasi UTK 2017: Vazifa: Bizning muhandislar jamoasi Froogle tomonidan ochiq manbali texnologiyalarni ishlab chiqish uchun notijorat jamg'armasi tomonidan Mars Roverga yordam beradigan innovatsion Inson yordamchi jamoasini ishga yollashdi. bu biz bir qator o'yinlarni kodlash uchun kodlagan xona
Arduino avtomatlashtirilgan ekranli ekran loyihasi uchun qadam dvigatel va haydovchini tanlash: 12 qadam (rasmlar bilan)
Arduino avtomatlashtirilgan ekranli ekran loyihasi uchun qadam dvigateli va haydovchini tanlash: Ushbu yo'riqnomada men avtomatlashtirilgan ekran pardasi prototipi uchun qadam dvigateli va haydovchini tanlash uchun qilgan qadamlardan o'taman. Soyali ekranlar - qo'lda krankirovka qilingan mashhur va arzon modellar, va men ularni almashtirmoqchi edim
Roomba MATLAB loyihasi: 5 qadam
Roomba MATLAB loyihasi: NASA Mars sayyorasi uchun hozirgi rejasi - bu ma'lumot yig'uvchi bo'lish va Mars atrofida aylanib yurish, Yerga qaytarish uchun tuproq namunalarini to'plash, shunda olimlar oldingi hayot shakllari bor yoki yo'qligini ko'rishlari mumkin. sayyora. Qo'shimcha
UTK EF 230 MarsRoomba Project Fall 2018: 5 qadam
UTK EF 230 MarsRoomba Project Fall 2018: Hozirgi vaqtda Mars sayyoralari Mars yuzasida ma'lumotlarni turli usullar bilan to'plash uchun ishlatiladi, bu oxirigacha sayyoraning mikroblar hayoti salohiyati haqida ko'proq ma'lumotga ega bo'ladi. Roverlar asosan ma'lumot olish uchun fotosurat va tuproqni tahlil qilish vositalaridan foydalanadilar
Roomba loyihasi: 5 qadam (rasmlar bilan)
Roomba loyihasi: Bu ko'rsatma Janubiy Floridadagi universitetda (www.makecourse.com) Makecourse loyihasi talablarini bajarish uchun yaratilgan. Bu ko'rsatma Roomba loyihamni yig'ish uchun zarur bo'lgan barcha zarur bosqichlarni va komponentlarni o'z ichiga oladi