Kazalo:

GiggleBot Line Follower z uporabo Pythona: 5 korakov
GiggleBot Line Follower z uporabo Pythona: 5 korakov

Video: GiggleBot Line Follower z uporabo Pythona: 5 korakov

Video: GiggleBot Line Follower z uporabo Pythona: 5 korakov
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, November
Anonim
GiggleBot Line Follower Uporaba Python
GiggleBot Line Follower Uporaba Python
GiggleBot Line Follower Uporaba Python
GiggleBot Line Follower Uporaba Python
GiggleBot Line Follower Uporaba Python
GiggleBot Line Follower Uporaba Python

Tokrat v MicroPythonu programiramo Dexter Industries GiggleBot, da sledi črni črti z vgrajenim senzorjem sledilca linij.

GiggleBot mora biti seznanjen z BBC micro: bit, da ga lahko ustrezno nadzirate.

Če je ta vadnica za vas preveč napredna in je zaenkrat programiranje GiggleBota preveč, lahko vedno preidete na začetno vadnico, ki vam pokaže, kako lahko robot programirate v MakeCode tukaj. Povezana vadnica vas bo vodila skozi same osnove.

Korak: Potrebne komponente

Potrebne komponente
Potrebne komponente

Potrebne so naslednje komponente strojne opreme:

  1. x3 AA baterije - v mojem primeru uporabljam baterije za ponovno polnjenje, ki imajo na splošno nižjo napetost.
  2. Robot Dexter Industries GiggleBot za micro: bit.
  3. BBC mikro: bit.

Seveda potrebujete tudi mikro USB kabel za programiranje BBC micro: bit - ta kabel je običajno v paketu BBC micro: bit ali pa lahko vedno uporabite tistega, ki se uporablja za polnjenje (Android) pametnih telefonov.

Pridobite GiggleBot za micro: bit tukaj

2. korak: Nastavite skladbe

Nastavite skladbe
Nastavite skladbe

Morali boste iti skozi tiskanje ploščic in oblikovanje lastnih skladb. Uporabite lahko lastne ploščice, da boste 100% prepričani, da ponavljate naše pogoje. Če pa se počutite pustolovsko, lahko uporabite črni trak in si ga naredite sami. Tukaj je PDF za ploščice, ki smo jih uporabili.

Zgornja skladba je sestavljena iz naslednjega števila različnih ploščic:

  • 12 ploščic tipa #1.
  • 5 ploščic tipa #2.
  • 3 predloge ploščic tipa 5.
  • 3 predloge ploščic tipa 6 - tukaj boste dobili eno dodatno ploščico.

Nato jih natisnite in izrežite. Poskusite jih postaviti tako, kot je na zgornji fotografiji. Upoštevajte, da se morata na desni zgornji strani proge 2 ploščici prekrivati drug z drugim - to je pričakovano, če se sprašujete, ali delate kaj narobe.

3. korak: Nastavitev okolja

Nastavitev okolja
Nastavitev okolja

Če želite programirati BBC micro: bit v MicroPythonu, morate zanj nastaviti urejevalnik (urejevalnik Mu) in kot čas izvajanja nastaviti GiggleBot MicroPython Runtime. Za to morate slediti navodilom na tej strani. Od tega trenutka se uporablja različica v0.4.0 izvajalnega okolja.

4. korak: Programiranje programa GiggleBot

Preden se lotimo tega, čas izvajanja GiggleBot MicroPython vsebuje klasičen čas delovanja za BBC micro: bit in druge knjižnice za podporo GiggleBot in drugih senzorjev Dexter Industries.

Ko ga nastavite, odprite naslednji skript v urejevalniku Mu in kliknite Flash. To bo utripalo čas izvajanja GiggleBot MicroPython in skript, ki ste ga pravkar odprli v svojem BBC micro: bit. Spodaj je prikazan tudi skript.

Ko je postopek utripanja končan, zložite BBC micro: bit v GiggleBot tako, da so neopiksli plošče obrnjeni naprej, ga postavite na stezo in ga vklopite.

Upoštevajte, da sta v skriptu PID in drugi 2 konstanti (nastavljena vrednost hitrosti in najmanjša konstanta hitrosti) že nastavljeni.

Opomba: V tem skriptu morda manjkajo presledki, kar je verjetno posledica neke težave pri prikazovanju GitHub Gists. Kliknite na bistvo, da se pomaknete na njegovo stran GitHub, kjer lahko kopirate in prilepite kodo.

GiggleBot PID Line Follower - Uglašeno z NeoPixels

iz uvoza microbit*
od gigglebot import*
iz utime uvoz sleep_ms, ticks_us
uvozni ustruct
# inicializirajte neopiksele GB
neo = init ()
# časovni razpored
update_rate = 50
# dobiček/konstanta (ob predpostavki, da je napetost akumulatorja okoli 4,0 voltov)
Kp = 25,0
Ki = 0,5
Kd = 35,0
sprožilna točka = 0,3
min_hitrost_odstotka = 0,3
osnovna_hitrost = 70
nastavljena vrednost = 0,5
last_position = nastavljena vrednost
integral = 0,0
run_neopixels = Res
center_pixel = 5#, kjer je osrednja slikovna pika nasmeha na GB
# turquoise = tuple (zemljevid (lambda x: int (x / 5), (64, 224, 208))) # barvo za risanje napake z neopiksli
# turquoise = (12, 44, 41) # kar je ravno zgornja turkizna komentirana nad tem
error_width_per_pixel = 0,5/3# največja napaka, deljena s številom segmentov med vsakim neopikselom
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, najmanjša_motor_power, najvišja_motor_power):
globalna osnovna_hitrost
če abs_napaka> = sprožilna točka:
# x0 = 0,0
# y0 = 0,0
# x1 = zgornja meja - sprožilna točka
# y1 = 1,0
# x = abs_error - točka sprožilca
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# enako kot
y = (abs_error - trigger_point) / (upper_bound - trigger_point)
moč motorja = osnovna hitrost * (najmanjša moč motorja + (1- let) * (najvišja moč motorja - najmanjša moč motorja))
vrnitev moči motorja
drugače:
vrni osnovno hitrost * najvišjo moč motorja
run = False
prejšnja_napaka = 0
medtem ko res:
# če pritisnete gumb a, začnite slediti
če je gumb_a.is_pressed ():
run = True
# če pa pritisnete gumb b, ustavite sledilnik vrstice
če je button_b.is_pressed ():
run = False
integral = 0,0
prejšnja_napaka = 0,0
pixels_off ()
stop ()
sleep_ms (500)
če je runTrue:
# preberite linijske senzorje
start_time = ticks_us ()
desno, levo = senzor za branje (LINE_SENSOR, OBA)
# vrstica je na levi, ko je položaj <0,5
# vrstica je na desni, ko je položaj> 0,5
# vrstica je na sredini, ko je položaj = 0,5
# to je utežena aritmetična sredina
poskusi:
položaj = desno /plavajoče (levo + desno)
razenZeroDivisionError:
položaj = 0,5
# obseg mora biti (0, 1) in ne [0, 1]
če je položaj == 0: položaj = 0,001
če je položaj == 1: položaj = 0,999
# uporabite krmilnik PD
napaka = položaj - nastavljena vrednost
integral += napaka
popravek = Kp * napaka + Ki * integral + Kd * (napaka - prejšnja_napaka)
previous_error = napaka
# izračunajte hitrost motorja
motor_speed = zgornja_meja_linearna_speed_reducer (abs (napaka), nastavljena vrednost * sprožilna točka, nastavljena vrednost, min_speed_percent, 1,0)
leftMotorSpeed = hitrost motorja + popravek
rightMotorSpeed = hitrost_motorja - popravek
# osvetli neopiksle glede na podano napako
če je run_neopixelsTrueand total_counts %3 == 0:
za i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08':
neo = (0, 0, 0)
za i inb '\ x00 / x01 / x02 / x03':
ifabs (napaka)> error_width_per_pixel * i:
če je napaka <0:
# neo [center_pixel + i] = turkizna
neo [center_pixel + i] = (12, 44, 41)
drugače:
# neo [center_pixel - i] = turkizna
neo [center_pixel + i] = (12, 44, 41)
drugače:
odstotek = 1- (širina_napake_za_piks * i -abs (napaka)) / širina_napake_za_piks
# osvetli trenutno slikovno piko
če je napaka <0:
# neo [center_pixel + i] = tuple (zemljevid (lambda x: int (x * odstotek), turkizna))
neo [center_pixel + i] = (int (64* odstotkov /5), int (224* odstotkov /5), int (208* odstotkov /5))
drugače:
# neo [center_pixel - i] = tuple (zemljevid (lambda x: int (x * odstotek), turkizna))
neo [center_pixel - i] = (int (64* odstotkov /5), int (224* odstotkov /5), int (208* odstotkov /5))
prekiniti
neo.show ()
poskusi:
# izrežite hitrosti motorja
če je levoMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
če je desnoMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - desnoMotorSpeed +100
če je levoMotorSpeed <-100:
leftMotorSpeed = -100
če je desnoMotorSpeed <-100:
rightMotorSpeed = -100
# aktivirajte motorje
set_speed (leftMotorSpeed, rightMotorSpeed)
pogon ()
# print ((napaka, hitrost motorja))
razen:
# v primeru, da pridemo v neko težavo, ki je ni mogoče odpraviti
prehod
# in vzdržujte frekvenco zanke
end_time = ticks_us ()
delay_diff = (end_time - start_time) /1000
if1000.0/ update_rate - delay_diff> 0:
spanje (1000.0/ update_rate - delay_diff)

oglejte si rawgigglebot_tuned_line_follower.py, ki ga gosti ❤ GitHub

5. korak: Pustite ga zagnati

Na BBC micro: bit: gumb A in gumb B sta 2 gumba:

  • S pritiskom na gumb A nastavite GiggleBot, da sledi vrstici (če obstaja).
  • S pritiskom na gumb B ustavite GiggleBot in ponastavite vse, tako da ga lahko znova uporabite.

Zelo priporočljivo je, da GiggleBota ne dvignete, medtem ko sledi vrstici, in ga nato postavite nazaj, ker bi se napaka pri izračunu lahko kopičila in popolnoma zmotila pot robota. Če ga želite dvigniti, pritisnite gumb B in nato, ko ga postavite nazaj, znova pritisnite A.

Priporočena: