Mundarija:

GiggleBot yordamida Lidar boshqaradigan robot yarating: 8 qadam
GiggleBot yordamida Lidar boshqaradigan robot yarating: 8 qadam

Video: GiggleBot yordamida Lidar boshqaradigan robot yarating: 8 qadam

Video: GiggleBot yordamida Lidar boshqaradigan robot yarating: 8 qadam
Video: 中韩棒球赛拉斯维加斯赌场失误赌徒乐疯,入境美国查价值观哈佛留学生照样驱逐 Error from LV Bellagio makes huge loss, no F1 visa w/o US value 2024, Noyabr
Anonim
GiggleBot yordamida Lidar boshqaradigan robot yarating
GiggleBot yordamida Lidar boshqaradigan robot yarating
GiggleBot yordamida Lidar boshqaradigan robot yarating
GiggleBot yordamida Lidar boshqaradigan robot yarating
GiggleBot yordamida Lidar boshqaradigan robot yarating
GiggleBot yordamida Lidar boshqaradigan robot yarating

Ushbu qo'llanmada biz GiggleBot -ga labirintning qiyinchiliklarini engishga yordam beramiz.

Biz GiggleBot -ga servo o'rnatamiz, unga masofa sensori o'rnatamiz. Yugurish paytida servo oldinga va orqaga buriladi, shunda masofa sensori har bir to'siqqa qadar bo'lgan masofani o'lchaydi. Bu, odatda, ancha qimmat bo'lgan LIDAR sensoriga o'xshaydi.

Shu bilan birga, GiggleBot bu ma'lumotni BBCning 5-dan 5-gacha matritsasida to'siqlarga nisbatan o'rnini ko'rsatadigan BBC-ning uzoqdagi mikro: bitiga yuboradi.

Sizning vazifangiz - GiggleBot -da faqat BBC -ning boshqa mikro: bitida ko'rsatilgan narsalarga qarab harakat qilish. GiggleBot -ni boshqarish uchun BBC mikro: bitli masofadagi tugmalar ishlatiladi.

Bu kulgili tuyuladi! Keling, boshlaylik, to'g'rimi?

1 -qadam: kerakli komponentlar

Kerakli komponentlar
Kerakli komponentlar

Bizga kerak bo'ladi:

  1. GiggleBot.
  2. BBC micro: bit uchun batareya to'plami. U BBC micro: bit bilan birga keladi.
  3. GiggleBot uchun x3 AA batareyalar.
  4. Masofa sensorini GiggleBot -ga ulash uchun Grove kabeli.
  5. DexterIndustries -dan Servo to'plami.
  6. x3 BBC mikro: bit. Biri GiggleBot uchun, ikkinchisi esa robotni uzoqdan boshqarardi.
  7. DexterIndustries dan masofa sensori.

BBC micro uchun GiggleBot robotini oling: bu erda bit!

2 -qadam: Robotni yig'ish

Robotni yig'ish
Robotni yig'ish
Robotni yig'ish
Robotni yig'ish

GiggleBot -ni dasturlashga tayyor qilish uchun biz uni yig'ishimiz kerak, lekin ko'p narsa qilish kerak emas.

3 ta AA batareyasini GiggleBot ostidagi bo'linmasiga joylashtiring.

Servo paketini yig'ing. GiggleBot -ning oldingi ulagichlariga servo o'rnatish uchun uning oxirgi teshigidan foydalaning. O'z o'rnida yanada mustahkam bo'lishi uchun siz vintni va/yoki simni ishlatishingiz mumkin. Yoki uni taxtaga issiq yopishtirishingiz mumkin. Mening holatimda, servo qo'lni GiggleBot taxtasiga bog'lash uchun vint va qisqa sim ishlatilgan.

Servo qo'lini servoga o'rnatayotganda, servo allaqachon 80 holatiga o'rnatilganligiga ishonch hosil qiling. Buni gigglebot.set_servo (gigglebot. RIGHT, 80) raqamiga qo'ng'iroq qilib qilishingiz mumkin. Bu haqda bu erda ko'proq o'qishingiz mumkin.

Keyin masofa sensori servo paketining old tomoniga joylashtiriladi va yuqoridagi misolda bo'lgani kabi tuzatiladi.

Nihoyat, masofa sensori Grove kabeli bilan har qanday 2 I2C portiga va servo dvigatelni GiggleBot -da o'tirgan o'ng portga ulang - bu erda to'g'ri port ko'rsatilgan.

3 -qadam: O'zingizning labirintingizni yarating - ixtiyoriy

O'zingizning labirintingizni yarating - ixtiyoriy
O'zingizning labirintingizni yarating - ixtiyoriy

Bunday holda, men NASCAR -ga o'xshash yopiq pastadir yo'lini yaratish uchun bir nechta qutilarni ishlatganman.

Bu bosqichda siz chindan ham ijodiy bo'lishingiz va xohlaganingizcha burishingiz mumkin, yoki buni juda uzoq qilishingiz mumkin, chunki bu sizga bog'liq.

Yoki siz trekni umuman xohlamasangiz, masalan, GiggleBot -ni oshxonaga yoki yashash xonasiga qo'yishingiz mumkin - bu etarli darajada yaxshi bo'lishi kerak, chunki siz hali ham chetlab o'tishingiz kerak bo'lgan devorlar va to'siqlar ko'p.

4 -qadam: Atrof -muhitni sozlash

Atrof -muhitni sozlash
Atrof -muhitni sozlash

Siz MicroPython -da BBC micro: bit dasturlash imkoniyatiga ega bo'lishingiz uchun unga muharrir (Mu muharriri) o'rnatishingiz va GiggleBot MicroPython ish vaqtini uning ish vaqti sifatida belgilashingiz kerak. Buning uchun siz ushbu sahifadagi ko'rsatmalarga amal qilishingiz kerak. Hozirgi vaqtda ish vaqtining v0.4.0 versiyasi ishlatiladi.

5 -qadam: GiggleBot dasturlash - I qism

Birinchidan, GiggleBot skriptini o'rnatamiz. Bu skript GiggleBot -ni servo dvigatelini 160 gradusga (har bir yo'nalishda 80 daraja) aylantirishga majbur qiladi, shu bilan birga masofa sensori har burilishda 10 o'qishni oladi.

Yoqilganda, GiggleBot masofadan boshqarish pultidan buyruq olinmaguncha yonida bo'ladi. Faqat 3 ta buyruq bo'lishi mumkin: oldinga, chapga yoki o'ngga.

Eslatma: Quyidagi skriptda bo'sh joylar etishmayotgan bo'lishi mumkin va bu GitHub Gistlarini ko'rsatishda ba'zi muammolarga bog'liq bo'lishi mumkin. Sizni GitHub sahifasiga olib borish uchun mohiyatni bosing, u erda siz kodni nusxa ko'chirishingiz mumkin.

Masofadan boshqariladigan LIDAR-ga asoslangan GiggleBot

gigglebot importidan*
masofa sensori importidan DistanceSensor
microbit import uyqusidan
vaqtidan import ticks_us, sleep_us
ustruct import
radio import qilish
# robot harakatlanayotgan bo'lsa to'xtating
STOP()
# radio yoqish
radio.on ()
# masofa sensori obyekti
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# soniyalarda o'lchanadi
rotate_span = 160# daraja bilan o'lchanadi
rotate_steps = 10
qo'shimcha xarajatlar = 1.05# foizlarda aniqlanadi
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radar = baytray (rotate_steps)
servo_rotate_direction = 0# 0 yuqoriga ko'tarilish uchun (0-> 160) va aks holda 1
radar_index = 0
set_servo (O'ng, 0)
whileTrue:
# radardan o'qing
agar ticks_us () - last_read_time> time_per_step:
# masofa sensori orqali o'qiladi
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
chop etish (radar_index)
# servoni chapdan o'ngga aylantirish mantig'ini bajaring
agar radar_index == rotate_steps -1 va servo_rotate_direction == 0 bo'lsa:
set_servo (O'ng, 0)
servo_rotate_direction = 1
elif radar_index == 0 va servo_rotate_direction == 1:
set_servo (O'ng, aylantirish_span)
servo_rotate_direction = 0
boshqa:
radar_index += 1if servo_rotate_direction == 0else-1
# va radar qiymatlarini yuboring
radio.send_bytes (radar)
harakat qilib ko'ring:
# robot buyruqlarini o'qish
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# va qabul qilingan buyruqlar bo'lsa, dvigatellarni ishga tushiring
to'siq tezligi (lmotor, rmotor)
haydash ()
exceptTypeError:
o'tish

GitHub tomonidan ❤ bilan uyushtirilgan rawgigglebot_lidar_robot.py faylini ko'rish

6 -qadam: Masofadan boshqarish pultini dasturlash - II qism

Qolgan narsa - masofadan boshqarish pulti vazifasini bajaradigan 2 -chi BBC mikro: bitini dasturlash.

Masofadan boshqarish pulti 5x5 pikselli ekranida to'siqlarga nisbatan masofani ko'rsatish uchun ishlatiladi. Eng ko'p 10 piksel yoqilgan bo'ladi.

Shu bilan birga, masofadan boshqarish pulti sizga GiggleBot -ni 2 tugmachasini bosib masofadan boshqarish imkoniyatini beradi: oldinga, chapga va o'ngga.

Eslatma: Quyidagi skriptda bo'sh joylar etishmayotgan bo'lishi mumkin va bu GitHub Gistlarini ko'rsatishda ba'zi muammolarga bog'liq bo'lishi mumkin. Sizni GitHub sahifasiga olib borish uchun mohiyatni bosing, u erda siz kodni nusxa ko'chirishingiz mumkin.

Masofadan boshqarish LIDAR -ga asoslangan GiggleBot - Masofaviy kod

microbit import uyqu, displey, button_a, button_b
ustruct import
radio import qilish
matematikani import qilish
radio.on ()
rotate_steps = 10
rotate_span = 160# daraja
rotate_step = rotate_span / rotate_steps
max_distance = 50# santimetrda
side_length_leds = 3 # piksellar sonida o'lchanadi
radar = baytray (rotate_steps)
xar = baytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = baytray (rotate_steps)
najot_yar = baytray (rotate_steps)
motor tezligi = 50
whileTrue:
holat = radio.receive_bytes_into (radar)
holati Yo'q bo'lsa:
# display.clear ()
c uchun, val qiymatsiz (radar):
agar radar [c] <= max_distance:
# har bir masofaning 2d koordinatalarini hisoblang
burchak = rotate_steps / (rotate_steps -1) * rotate_step * c
burchak += (180- aylantirish_span) /2.0
x_c = math.cos (burchak * math.pi /180.0) * radar [c]
y_c = math.sin (burchak * math.pi /180.0) * radar [c]
# 5x5 mikrobitli displeyga mos keladigan masofalarni o'lchash
x_c = x_c * (yon_ uzunlik_leds -1) / maksimal_ masofa
y_c = y_c * (yon uzunlik_leds +1) / maksimal_ masofa
# koordinatalarni qayta joylashtirish
x_c += (yon_ uzunlik_leds -1)
y_c = (yon_ uzunlik_leds +1) - y_c
# dumaloq koordinatalar aynan LEDlar qaerda
agar x_c - math.floor (x_c) <0,5:
x_c = math.floor (x_c)
boshqa:
x_c = math.ceil (x_c)
agar y_c - math.floor (y_c) <0,5:
y_c = matematik.for (y_c)
boshqa:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
boshqa:
xar [c] = 0
yar [c] = 0
display.clear ()
x, y inzip uchun (xar, yar):
display.set_pixel (x, y, 9)
# chop etish (ro'yxat (zip (xar, yar, radar))))
davlatA = tugma_a.is_pressed ()
stateB = button_b.is_pressed ()
agar stateA va stateB bo'lsa:
radio.send_bytes (ustruct.pack ("bb", motor tezligi, motor tezligi))
bosib chiqarish ("oldinga")
agar davlatA va davlat B bo'lmasa:
radio.send_bytes (ustruct.pack ("bb", motor tezligi, -motor_speed))
bosib chiqarish ("chapda")
agar davlat A va davlat B bo'lmasa:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
chop etish ("o'ng")
if emas davlatA va davlat B emas:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
chop etish ("to'xtatish")

rawgigglebot_lidar_remote.py faylini GitHub tomonidan ❤ bilan ko'rish

7 -qadam: Masofaviy ekranni talqin qilish

"loading =" dangasa "GiggleBotni boshqaradi, sizda quyidagi variantlar mavjud:

  1. GiggleBotni oldinga siljitish uchun A va B tugmachalarini bosing.
  2. GiggleBotni chapga burish uchun A tugmachasini bosing.
  3. GiggleBot -ni o'ngga aylantirish uchun B tugmachasini bosing.

Eng yaqin to'siqlar qaysi yo'nalishda aniqlanganini ko'rish uchun masofadan boshqarish pultining (siz ushlab turadigan BBC mikro: bit) ekraniga qarang. Siz GiggleBot -ni uzoqdan boshqarmasdan boshqarishingiz kerak.

Tavsiya: