Mundarija:

Python yordamida GiggleBot liniyasi izdoshi: 5 qadam
Python yordamida GiggleBot liniyasi izdoshi: 5 qadam

Video: Python yordamida GiggleBot liniyasi izdoshi: 5 qadam

Video: Python yordamida GiggleBot liniyasi izdoshi: 5 qadam
Video: PYTHON ๐Ÿ DASTURLASH TILIDA OVOZLI DASTUR | GAPIRADIGAN DASTUR | JARVIS 2024, Noyabr
Anonim
Python yordamida GiggleBot liniyasi izdoshi
Python yordamida GiggleBot liniyasi izdoshi
Python yordamida GiggleBot liniyasi izdoshi
Python yordamida GiggleBot liniyasi izdoshi
Python yordamida GiggleBot liniyasi izdoshi
Python yordamida GiggleBot liniyasi izdoshi

Bu safar biz MicroPython-da Dexter Industries GiggleBot-da o'rnatilgan chiziqli kuzatuvchi sensori yordamida qora chiziqni kuzatib borishni dasturlashtirmoqdamiz.

GiggleBot mos ravishda boshqarilishi uchun BBC mikro: bit bilan bog'lanishi kerak.

Agar bu darslik siz uchun juda rivojlangan bo'lsa va GiggleBot -ni dasturlash hozircha juda ko'p bo'lsa, siz har doim robotni MakeCode -da qanday dasturlash mumkinligini ko'rsatadigan boshlang'ich darsidan o'tishingiz mumkin. Bog'langan o'quv qo'llanma sizga asosiy bilimlarni beradi.

1 -qadam: kerakli komponentlar

Kerakli komponentlar
Kerakli komponentlar

Quyidagi apparat komponentlari talab qilinadi:

  1. x3 AA batareyalari - menimcha, umuman past kuchlanishli qayta zaryadlanuvchi batareyalardan foydalanayapman.
  2. Micro: bit uchun Dexter Industries GiggleBot roboti.
  3. BBC mikro: bit.

Albatta, BBC micro: bit dasturlash uchun sizga mikro USB kabeli ham kerak bo'ladi - bu kabel odatda BBC micro: bit paketida bo'ladi yoki siz har doim (Android) smartfonlarini zaryad qilish uchun ishlatishingiz mumkin.

Micro: GiggleBot -ni bu erdan oling

2 -qadam: treklarni sozlash

Treklarni sozlash
Treklarni sozlash

Siz ba'zi plitkalarni bosib chiqarishingiz va o'z treklaringizni loyihalashingiz kerak bo'ladi. Siz bizning shartlarimizni takrorlayotganingizga 100% ishonch hosil qilish uchun o'z kafellarimizdan foydalanishingiz mumkin. Yoki o'zingizni sarguzashtli his qilsangiz, qora lentani ishlatib, o'zingiz qilishingiz mumkin. Mana biz ishlatgan plitkalar uchun PDF.

Yuqoridagi trek quyidagi plitalardan iborat:

  • โ„–1 turdagi 12 ta plitka.
  • โ„–2 turdagi 5 ta plitka.
  • โ„–5 plitka tipidagi 3 ta shablon.
  • 6 -sonli 3 ta plitka shablonlari - bu erda siz bitta qo'shimcha kafelga ega bo'lasiz.

Keyin ularni chop eting va kesib oling. Ularni yuqoridagi rasmdagi kabi joylashtirishga harakat qiling va shuni yodda tutingki, yo'lning o'ng yuqori qismida 2 ta plitka bir -birining ustiga chiqib ketishi kerak - agar siz noto'g'ri ish qilyapsizmi deb o'ylayotgan bo'lsangiz.

3 -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.

4 -qadam: GiggleBot dasturlash

Ishga kirishdan oldin, GiggleBot MicroPython ish vaqti BBC micro: bit va boshqa kutubxonalar uchun GiggleBot va boshqa Dexter Industries sensorlarini qo'llab -quvvatlash uchun klassik ish vaqtini o'z ichiga oladi.

Uni o'rnatgandan so'ng, Mu tahrirlovchisida quyidagi skriptni oching va Flash -ni bosing. Bu GiggleBot MicroPython Runtime -ni va BBC micro: bit -da ochgan skriptni o'chirib qo'yadi. Skript ham quyida ko'rsatilgan.

Yonish jarayoni tugagach, BBC micro: bit -ni GiggleBot -ga taxtaning neopiksellari oldinga qaragan holda joylashtiring, uni yo'lga qo'ying va yoqing.

E'tibor bering, skriptda PID va boshqa 2 ta sobit (tezlikni sozlash nuqtasi va minimal tezlik konstantalari) allaqachon o'rnatilgan.

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.

GiggleBot PID liniyasi izdoshi - NeoPixels bilan sozlangan

mikrobit importidan*
gigglebot importidan*
utime import dan sleep_ms, ticks_us
ustruct import
# GB neopiksellarini ishga tushirish
neo = boshlang'ich ()
# vaqt
update_rate = 50
# daromad/doimiy (batareya quvvati 4,0 volt atrofida bo'lsa)
Kp = 25.0
Ki = 0,5
Kd = 35.0
trigger_point = 0.3
min_speed_percent = 0.3
tayanch_ tezlik = 70
belgilangan nuqta = 0,5
last_position = belgilangan nuqta
integral = 0,0
run_neopixels = To'g'ri
center_pixel = 5# bu erda tabassumning markaziy pikseli GBda joylashgan
# firuza = tuple (xarita (lambda x: int (x / 5), (64, 224, 208))) # neopixel bilan xato chizish uchun foydalanish uchun rang
# turkuaz = (12, 44, 41) # aynan yuqoridagi turkuaz bu haqda sharh bergan
error_width_per_pixel = 0.5/3# max xato har bir neopiksel orasidagi segmentlar soniga bo'linadi
defupper_bound_linear_speed_reducer (abs_error, trigger_point, yuqori_bog'li, eng kichik_motor_kuch, eng yuqori_motor_kuch):
global bazaviy tezlik
agar abs_error> = trigger_point:
# x0 = 0,0
# y0 = 0,0
# x1 = yuqori_bog'langan - tetik_ nuqtasi
# y1 = 1.0
# x = abs_error - ishga tushirish nuqtasi
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# bilan bir xil
y = (abs_error - trigger_point) / (yuqori_bog'langan - trigger_nuqtasi)
vosita kuchi = tayanch tezligi * (eng kichik_motor_kuvvati + (1- y) * (eng yuqori_motor_ kuchi - eng kichik_motor_ kuchi))
motor kuchini qaytaring
boshqa:
qaytish base_speed * eng yuqori_motor_power
ishga tushirish = noto'g'ri
oldingi_xato = 0
whileTrue:
# agar a tugmasi bosilsa, ta'qib qilishni boshlang
agar button_a.is_pressed ():
yugurish = To'g'ri
# lekin b tugmasi bosilsa, chiziq izdoshini to'xtating
agar button_b.is_pressed () bo'lsa:
ishga tushirish = noto'g'ri
integral = 0,0
oldingi_xato = 0,0
pixel_off ()
STOP()
uyqu (500)
agar run isTrue bo'lsa:
# chiziqli sensorlarni o'qing
start_time = ticks_us ()
o'ng, chap = o'qish_sensori (LINE_SENSOR, BOTH)
Chiziq chap tomonda, <0.5 pozitsiyasi
pozitsiya> 0,5 bo'lganda # qator o'ngda
pozitsiya = 0,5 bo'lganda # qator o'rtada
# bu o'rtacha arifmetik o'rtacha
harakat qilib ko'ring:
pozitsiya = o'ng /suzish (chap + o'ng)
ZeroDivisionError tashqari:
pozitsiya = 0,5
# diapazon [0, 1] emas, [0, 1] bo'lishi kerak
agar pozitsiya == 0: pozitsiya = 0,001
agar pozitsiya == 1: pozitsiya = 0.999
# PD tekshirgichidan foydalaning
xato = pozitsiya - belgilangan nuqta
integral += xato
tuzatish = Kp * xato + Ki * integral + Kd * (xato - oldingi_xato)
oldingi_xato = xato
# vosita tezligini hisoblash
motor_ tezligi = yuqori_bog'langan_linear_speed_reducer (abs (xato), sozlash nuqtasi * tetik_nuqtasi, sozlash nuqtasi, min_speed_percent, 1.0)
leftMotorSpeed = motor_ tezligi + tuzatish
rightMotorSpeed = motor_speed - tuzatish
# berilgan xato bo'yicha neopixellarni yoritadi
agar run_neopixels isTrueand total_counts %3 == 0 bo'lsa:
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' uchun:
neo = (0, 0, 0)
i inb '\ x00 / x01 / x02 / x03' uchun:
ifabs (xato)> error_width_per_pixel * i:
agar xato <0:
# neo [markaz_piksel + i] = turkuaz
neo [center_pixel + i] = (12, 44, 41)
boshqa:
# neo [markaz_piksel - i] = turkuaz
neo [center_pixel + i] = (12, 44, 41)
boshqa:
foiz = 1- (error_width_per_pixel * i -abs (xato)) / error_width_per_pixel
# joriy pikselni yoqing
agar xato <0:
# neo [center_pixel + i] = tuple (xarita (lambda x: int (x * foiz), firuza))
neo [markaz_piksel + i] = (int (64* foiz /5), int (224* foiz /5), int (208* foiz /5))
boshqa:
# neo [center_pixel - i] = tuple (xarita (lambda x: int (x * foiz), firuza))
neo [center_pixel - i] = (int (64* foiz /5), int (224* foiz /5), int (208* foiz /5))
tanaffus
neo.show ()
harakat qilib ko'ring:
# vosita tezligini qisqartiring
leftMotorSpeed> 100 bo'lsa:
chapMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - chapMotorSpeed +100
rightMotorSpeed> 100 bo'lsa:
o'ngMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - o'ngMotorSpeed +100
chapdaMotorSpeed <-100:
chapMotorSpeed = -100
agar rightMotorSpeed <-100:
o'ngMotorSpeed = -100
# motorlarni ishga tushiring
set_speed (chapMotorSpeed, o'ngMotorSpeed)
haydash ()
# chop etish ((xato, motor tezligi))
bundan tashqari:
# hal qilinmaydigan muammoga duch kelsak
o'tish
# va pastadir chastotasini saqlang
end_time = ticks_us ()
delay_diff = (end_time - start_time) /1000
if1000.0/ update_rate - delay_diff> 0:
uxlash (1000.0/ update_rate - delay_diff)

rawgigglebot_tuned_line_follower.py faylini GitHub โค tomonidan joylashtirilganini ko'rish

5 -qadam: uni ishga tushirish

BBC mikro -da ikkita tugma mavjud: bit: A tugmasi va B tugmasi:

  • A tugmachasini bosish GiggleBot -ni chiziq bo'ylab harakatlanishini belgilaydi (agar mavjud bo'lsa).
  • B tugmachasini bosish GiggleBot -ni to'xtatadi va hamma narsani qayta o'rnatadi, shunda siz uni qayta ishlatishingiz mumkin.

GiggleBotni ketma -ket ketayotganda ko'tarmaslik, keyin uni qayta qo'yish tavsiya etiladi, chunki hisoblash xatosi to'planib, robotning yo'nalishini butunlay buzishi mumkin. Agar siz uni ko'tarishni xohlasangiz, B tugmachasini bosing va keyin uni qayta qo'yganingizda A tugmasini yana bosing.

Tavsiya: