Turinys:

„GiggleBot“linijos sekėjas naudojant „Python“: 5 žingsniai
„GiggleBot“linijos sekėjas naudojant „Python“: 5 žingsniai

Video: „GiggleBot“linijos sekėjas naudojant „Python“: 5 žingsniai

Video: „GiggleBot“linijos sekėjas naudojant „Python“: 5 žingsniai
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Liepa
Anonim
„GiggleBot“linijos sekėjas naudojant „Python“
„GiggleBot“linijos sekėjas naudojant „Python“
„GiggleBot“linijos sekėjas naudojant „Python“
„GiggleBot“linijos sekėjas naudojant „Python“
„GiggleBot“linijos sekėjas naudojant „Python“
„GiggleBot“linijos sekėjas naudojant „Python“

Šį kartą „MicroPython“programuojame „Dexter Industries GiggleBot“sekti juodą liniją, naudojant įmontuotą linijos sekimo jutiklį.

Kad „GiggleBot“būtų tinkamai valdomas, jis turi būti suporuotas su „BBC micro: bit“.

Jei ši pamoka jums yra per daug pažengusi, o „GiggleBot“programavimo kol kas per daug, visada galite pereiti prie pradinio vadovo, kuriame parodyta, kaip robotą galima užprogramuoti „MakeCode“čia. Susieta pamoka padės išsiaiškinti pagrindinius dalykus.

1 žingsnis: reikalingi komponentai

Būtini komponentai
Būtini komponentai

Reikalingi šie aparatūros komponentai:

  1. x3 AA baterijos - mano atveju aš naudoju įkraunamas baterijas, kurių bendra įtampa yra mažesnė.
  2. „Dexter Industries GiggleBot“robotas, skirtas „micro: bit“.
  3. BBC mikro: bit.

Žinoma, jums taip pat reikia mikro USB kabelio, kad programuotumėte „BBC micro: bit“- šis kabelis paprastai yra „BBC micro: bit“pakuotėje arba visada galite naudoti tą, kuris naudojamas („Android“) išmaniesiems telefonams įkrauti.

Gaukite „GiggleBot for micro: bit“čia

2 žingsnis: nustatykite takelius

Nustatykite takelius
Nustatykite takelius

Turėsite pereiti prie kai kurių plytelių spausdinimo ir savo takelių kūrimo. Galite naudoti mūsų pačių plyteles, kad būtumėte 100% tikri, jog kartojate mūsų sąlygas. Arba, jei jaučiatės nuotykių kupinas, galite panaudoti juodą juostą ir pasidaryti savo. Čia yra mūsų naudojamų plytelių PDF.

Aukščiau pateiktą takelį sudaro šis skaičius skirtingų plytelių:

  • 12 1 tipo plytelių.
  • 5 2 tipo plytelės.
  • 3 plytelių tipo #5 šablonai.
  • 3 6 tipo plytelių šablonai - čia turėsite vieną papildomą plytelę.

Toliau spausdinkite ir supjaustykite. Pabandykite juos išdėstyti kaip aukščiau esančioje nuotraukoje ir atminkite, kad dešinėje viršutinėje takelio pusėje 2 plytelės turi persidengti viena su kita - to tikimasi tuo atveju, jei jums įdomu, ar darote kažką ne taip.

3 žingsnis: nustatykite aplinką

Aplinkos nustatymas
Aplinkos nustatymas

Kad galėtumėte programuoti „BBC micro: bit“„MicroPython“, turite nustatyti jo redaktorių („Mu Editor“) ir nustatyti „GiggleBot MicroPython Runtime“vykdymo laiką. Norėdami tai padaryti, turite vadovautis šiame puslapyje pateiktomis instrukcijomis. Šiuo metu naudojama vykdymo laiko versija v0.4.0.

4 žingsnis: „GiggleBot“programavimas

Prieš pradėdami dirbti, „GiggleBot MicroPython“vykdymo metu yra klasikinis „BBC micro: bit“ir kitų bibliotekų veikimo laikas, palaikantis „GiggleBot“ir kitus „Dexter Industries“jutiklius.

Nustatę, atidarykite šį scenarijų „Mu“redaktoriuje ir spustelėkite „Flash“. Taip mirksės „GiggleBot MicroPython Runtime“ir scenarijus, kurį ką tik atidarėte savo „BBC micro: bit“. Scenarijus taip pat parodytas žemiau.

Baigę mirksėti, sudėkite BBC mikro: bitą į „GiggleBot“taip, kad plokštės neopikseliai būtų nukreipti į priekį, padėkite jį ant takelio ir įjunkite.

Atkreipkite dėmesį, kad scenarijuje PID ir kitos 2 konstantos (greičio nuostata ir minimalios greičio konstantos) jau yra nustatytos.

Pastaba: šiame scenarijuje gali nebūti tarpų ir atrodo, kad tai įvyko dėl tam tikrų problemų rodant „GitHub Gists“. Spustelėkite esmę, kad pateksite į jo „GitHub“puslapį, kuriame galite nukopijuoti ir įklijuoti kodą.

„GiggleBot“PID linijos sekėjas - suderintas su „NeoPixels“

iš mikrobitų importo*
iš „Gigglebot“importo*
iš utime importuoti sleep_ms, ticks_us
importo ustruktūra
# inicijuoti GB neopikselius
neo = init ()
# laikas
update_rate = 50
# prieaugis/konstanta (darant prielaidą, kad akumuliatoriaus įtampa yra apie 4,0 voltų)
Kp = 25,0
Ki = 0,5
Kd = 35,0
trigerio taškas = 0,3
min_speed_percent = 0.3
bazinis greitis = 70
nustatytoji vertė = 0,5
last_position = nustatytoji vertė
integralas = 0,0
run_neopixels = Tiesa
centre_pikselis = 5#, kur centrinis šypsenos pikselis yra GB
# turquoise = tuple (žemėlapis (lambda x: int (x / 5), (64, 224, 208))) # spalva, naudojama norint piešti klaidą naudojant neopikselius
# turquoise = (12, 44, 41) # tai yra aukščiau nurodyta turkio spalva
error_width_per_pixel = 0.5/3# max klaida, padalyta iš segmentų skaičiaus tarp kiekvieno neopikselio
defupper_bound_linear_speed_reducer (abs_error, trigger_point, viršutinė_bound, mažiausia_motor_power, didžiausia_motor_power):
pasaulinis bazinis greitis
jei abs_error> = trigger_point:
# x0 = 0,0
# y0 = 0,0
# x1 = viršutinė riba - trigerio taškas
# y1 = 1,0
# x = abs_error - trigger_point
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# taip pat kaip
y = (abs_error - trigger_point) / (viršutinė_bound - trigger_point)
variklio galia = bazinis greitis * (mažiausia_variklio galia + (1 -y) * (didžiausia_variklio galia - mažiausia_variklio galia))
grąžinti variklio energiją
Kitas:
grąžinti bazinį greitį * didžiausią_motorinę galią
paleisti = klaidinga
ankstesnė klaida = 0
o tiesa:
# jei paspausite mygtuką a, pradėkite sekti
jei mygtukas_a.paspaudžiamas ():
paleisti = tiesa
# bet jei paspaudžiamas mygtukas b, sustabdykite linijos sekimą
jei mygtukas_b.is_pressed ():
paleisti = klaidinga
integralas = 0,0
ankstesnė klaida = 0,0
pixels_off ()
sustabdyti()
miego_ms (500)
jei paleisti isTrue:
# perskaitykite linijos jutiklius
pradžios_ laikas = erkės_ (()
dešinėn, kairėn = skaitymo jutiklis (LINE_SENSOR, Abi)
# eilutė yra kairėje, kai padėtis <0,5
# eilutė yra dešinėje, kai padėtis> 0,5
# eilutė yra viduryje, kai padėtis = 0,5
# tai svertinis aritmetinis vidurkis
bandyti:
padėtis = dešinė /plūdė (kairė + dešinė)
išskyrus „ZeroDivisionError“:
padėtis = 0,5
# diapazonas turi būti (0, 1), o ne [0, 1]
jei pozicija == 0: pozicija = 0,001
jei pozicija == 1: pozicija = 0,999
# naudokite PD valdiklį
klaida = padėtis - nustatytoji vertė
integralas += klaida
taisymas = Kp * klaida + Ki * integralas + Kd * (klaida - ankstesnė klaida)
previous_error = klaida
# apskaičiuokite variklio greitį
variklio greitis = viršutinis_prilygtas_linijinis_sumažėjimo greitis
leftMotorSpeed = motor_speed + korekcija
rightMotorSpeed = motor_speed - korekcija
# apšvieskite neopikselius pagal nurodytą klaidą
jei run_neopixels isTrueand total_counts %3 == 0:
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08':
neo = (0, 0, 0)
i inb '\ x00 / x01 / x02 / x03':
ifabs (klaida)> error_width_per_pixel * i:
jei klaida <0:
# neo [centre_pixel + i] = turkis
neo [centre_pixel + i] = (12, 44, 41)
Kitas:
# neo [centras_pikselis - i] = turkis
neo [centre_pixel + i] = (12, 44, 41)
Kitas:
procentas = 1- (error_width_per_pixel * i -abs (klaida)) / error_width_per_pixel
# užsidega dabartinis pikselis
jei klaida <0:
# neo [centre_pixel + i] = kortelė (žemėlapis (lambda x: int (x * procentas), turkis))
neo [centro_pikselis + i] = (int (64* proc. /5), int (224* proc. /5), int (208* proc. /5))
Kitas:
# neo [centre_pixel - i] = kortelė (žemėlapis (lambda x: int (x * procentas), turkis))
neo [centro_pikselis - i] = (int (64* proc. /5), int (224* proc. /5), int (208* proc. /5))
pertrauka
neo.show ()
bandyti:
# sumažinkite variklio greitį
jei kairėMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
jei rightMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - dešinėMotorSpeed +100
jei kairėMotorSpeed <-100:
leftMotorSpeed = -100
jei teisingaiMotorSpeed <-100:
rightMotorSpeed = -100
# įjunkite variklius
set_speed (leftMotorSpeed, rightMotorSpeed)
vairuoti ()
# spausdinti ((klaida, variklio greitis))
išskyrus:
# jei patektume į neištaisomą problemą
praeiti
# ir palaikykite ciklo dažnį
pabaigos_ laikas = erkės_ (()
delay_diff = (pabaigos laikas - pradžios laikas) /1000
if1000.0/ update_rate - delay_diff> 0:
miego režimas (1000.0/ update_rate - delay_diff)

peržiūrėti rawgigglebot_tuned_line_follower.py, kurį priglobė „GitHub“❤

5 veiksmas: leiskite jam veikti

„BBC micro: bit“yra 2 mygtukai: mygtukas A ir mygtukas B:

  • Paspaudus mygtuką A, „GiggleBot“seka eilutę (jei yra).
  • Paspaudus mygtuką B, „GiggleBot“sustabdomas ir viskas nustatoma iš naujo, kad galėtumėte vėl jį naudoti.

Labai patariama nepakelti „GiggleBot“, kai ji eina po linijos, ir tada vėl ją uždėti ant jo, nes apskaičiuojama klaida gali kauptis ir visiškai sujaukti roboto maršrutą. Jei norite jį pakelti, paspauskite mygtuką B, o tada, kai įdėsite atgal, dar kartą paspauskite A.

Rekomenduojamas: