Sisukord:

GiggleBot Line'i jälgija häälestamine - täiustatud: 7 sammu
GiggleBot Line'i jälgija häälestamine - täiustatud: 7 sammu

Video: GiggleBot Line'i jälgija häälestamine - täiustatud: 7 sammu

Video: GiggleBot Line'i jälgija häälestamine - täiustatud: 7 sammu
Video: GiggleBot Line Follower — запрограммируйте робота micro:bit с помощью Line Follower. 2024, November
Anonim
GiggleBot Line'i jälgija häälestamine - täiustatud
GiggleBot Line'i jälgija häälestamine - täiustatud

Selles väga lühikeses juhendis häälestate oma GiggleBoti musta joone järgi. Selles teises õpetuses GiggleBot Line Follower kodeerisime häälestusväärtused kõvasti selle stsenaariumi järgi töötamiseks. Võib -olla soovite muuta selle paremaks käitumiseks, pakkudes muud kasu.

Selles õpetuses näitame teile kahte skripti, mida saab mõlemad laadida erinevatele BBC mikro: bitidele, nii et üks neist pannakse GiggleBot'i ja teisega kasutatakse kahte nuppu menüü läbimiseks ja erinevate häälestamiseks. parameetrid. Nende uuendatud parameetrite saatmine toimub raadio kaudu.

Samm: nõutavad komponendid

Teil on vaja järgmist:

  1. GiggleBot robot micro: bitile.
  2. x3 AA patareid
  3. x2 BBC mikro: bitid - üks GiggleBoti jaoks ja teine parameetrite häälestamiseks kaugjuhtimispult.
  4. Aku BBC micro: bitile - nagu see, mis kuulub BBC micro: bit paketti.

Hankige GiggleBot Robot BBC mikro: bitile siit

2. samm: lugude ja keskkonna seadistamine

Rajade ja keskkonna seadistamine
Rajade ja keskkonna seadistamine
Rajade ja keskkonna seadistamine
Rajade ja keskkonna seadistamine

Samuti peate oma rajad tegelikult üles ehitama (alla laadima, printima, lõikama ja lindistama) ning seejärel seadistama keskkonna (IDE ja käitusaeg).

Kuna see õpetus on väga seotud selle teise õpetusega pealkirjaga GiggleBot Line Follower, minge sinna ja järgige samme 2 ja 3 ning tulge siis siia tagasi.

IDE puhul saate kasutada Mu -redaktorit ja käitusaja jaoks peate alla laadima GiggleBot MicroPython Runtime. Käitusaja saab alla laadida selle dokumentatsioonist siit. Minge dokumentatsiooni peatükki Alustamine ja järgige neid keskkonna seadistamise juhiseid. Sellest hetkest alates kasutatakse käitusaja versiooni v0.4.0.

Samm: seadistage GiggleBot

Enne GiggleBoti käitusaja vilkumist veenduge, et olete valinud GiggleBoti jaoks soovitud kiiruse ja värskendamiskiiruse: vaikimisi on kiiruseks seatud 100 (baaskiiruse muutuja) ja värskendussageduseks 70 (muutuja update_rate).

Praegust juurutamist arvestades on suurim saavutatav värskendussagedus 70 ja kui run_neopixels on seatud väärtusele True, on saavutatav ainult 50. Nii et mõnes mõttes võiks öelda, et uuenduste vaikeväärtus on täpselt selle serva ees, mida BBC micro: bit suudab teha.

Lihtsalt teadmiseks võib joone jälgija andur uuendusi tagastada 100 korda sekundis.

Märkus. Järgmisel skriptil võib olla tühikuid ja see näib olevat tingitud mõnest probleemist GitHubi esitusviiside kuvamisel. GitHubi lehele viimiseks klõpsake põhisisu, kus saate koodi kopeerida ja kleepida.

GiggleBot PID Line jälgija tuuner (selle häälestamiseks on vaja kaugjuhtimispulti) - xjfls23

mikrobitite impordist*
gigglebot'i impordist*
utime impordist sleep_ms, ticks_us
impordi raadio
impordi ustruktuur
# lähtestage raadio ja GB neopikslid
raadio.on ()
neo = init ()
# ajastus
update_rate = 70
# vaikimisi võimendusväärtused
Kp = 0,0
Ki = 0,0
Kd = 0,0
seadeväärtus = 0,5
päästiku_punkt = 0,0
min_kiiruse_protsent = 0,2
baaskiirus = 100
viimane_asend = seadeväärtus
integraal = 0,0
run_neopixels = Vale
center_pixel = 5# kus naeratuse keskne piksel asub GB -l
# türkiissinine = tuple (kaart (lambda x: int (x / 5), (64, 224, 208))) # värv, mida kasutatakse vea joonistamiseks neopikslitega
# türkiis = (12, 44, 41) # mis on täpselt ülaltoodud türkiissinine
error_width_per_pixel = 0,5/3# max viga jagatud segmentide arvuga iga neopikseli vahel
defupper_bound_linear_speed_reducer (abs_error, trigger_point, ülemine_bound, väikseim_mootori võimsus, kõrgeim_mootori_võimsus):
globaalne baaskiirus
kui abs_error> = trigger_point:
# x0 = 0,0
# y0 = 0,0
# x1 = ülemine_piir - päästiku_punkt
# y1 = 1,0
# x = abs_error - trigger_point
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# sama nagu
y = (abs_error - trigger_point) / (ülemine_piir - trigger_point)
mootori_võimsus = baaskiirus * (väikseim_mootori_võimsus + (1 -a) * (suurim_mootori_võimsus - väikseim_mootori_võimsus))
tagastada mootor_võimsus
muidu:
tagastage baaskiirus * suurim_mootori_võimsus
joosta = vale
eelmine_viga = 0
kokku_aeg = 0,0
kokku_arv = 0
Kuigi tõsi:
# kui vajutate nuppu a, alustage järgimist
kui button_a.is_pressed ():
joosta = Tõsi
# aga kui nuppu b vajutatakse, peatage joone järgija
kui button_b.is_pressed ():
joosta = vale
integraal = 0,0
eelmine_viga = 0,0
display.scroll ('{} - {}'. vorming (kokku_aeg, kokku_arv), viivitus = 100, oota = vale)
kokku_aeg = 0,0
kokku_arv = 0
pixels_off ()
peatus ()
uni_ms (500)
kui run isTrue:
# loe liiniandureid
algus_aeg = puugid_ (()
# kontrollige, kas oleme uuendanud Kp/Kd võimendusi kaugjuhtimispuldiga
proovige:
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.recept_bytes ())
set_eyes ()
Välja arvatudTüüpViga:
üle andma
parem, vasak = lugemisandur (LINE_SENSOR, MÕLEM)
# rida on vasakul, kui positsioon <0,5
# rida on paremal, kui positsioon> 0,5
# rida on keskel, kui positsioon = 0,5
# see on kaalutud keskmine aritmeetiline
proovige:
asend = parem /ujuk (vasak + parem)
välja arvatud ZeroDivisionError:
positsioon = 0,5
kui positsioon == 0: positsioon = 0,001
kui positsioon == 1: positsioon = 0,999
# kasutage PD -kontrollerit
viga = asukoht - seadeväärtus
integraal += viga
parandus = Kp * viga + Ki * integraal + Kd * (viga - eelmine_viga)
eelmine_viga = viga
# arvutage mootori kiirused
mootorikiirus = ülemine_piiratud_jooneline_kiiruse vähendaja (abs (viga), seadeväärtus * käivituspunkt, seadepunkt, minikiiruse protsent, 1.0)
leftMotorSpeed = mootorikiirus + parandus
rightMotorSpeed = mootor_kiirus - parandus
# süttige neopikslid, et näidata, mis suunas GiggleBot peab liikuma
kui 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' jaoks:
ifabs (viga)> error_width_per_pixel * i:
kui viga <0:
neo [center_pixel + i] = (12, 44, 41)
muidu:
neo [center_pixel - i] = (12, 44, 41)
muidu:
protsent = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel
# süttib praegune piksel
kui viga <0:
# neo [center_pixel + i] = tuple (kaart (lambda x: int (x * protsent), türkiissinine))
neo [center_pixel + i] = (int (12* protsenti), int (44* protsenti), int (41* protsenti))
muidu:
# neo [center_pixel - i] = tuple (kaart (lambda x: int (x * protsent), türkiissinine))
neo [keskpiksel - i] = (int (12* protsenti), int (44* protsenti), int (41* protsenti))
murda
neo.show ()
proovige:
# klammerda mootorid
kui vasakuleMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
kui õigeMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100
kui vasakule Mootorikiirus <-100:
leftMotorSpeed = -100
kui õigeMotorSpeed <-100:
rightMotorSpeed = -100
# käivitage mootorid
set_speed (leftMotorSpeed, rightMotorSpeed)
sõitma ()
# print ((viga, mootori kiirus))
välja arvatud:
# juhuks, kui satume mõne parandamatu probleemi juurde
üle andma
# ja säilitage silmuse sagedus
end_time = ticks_us ()
delay_diff = (lõpuaeg - algusaeg) /1000
kokku_aeg += viivitusdif
kokku_arv += 1
if1.0/ update_rate - delay_diff> 0:
unerežiim (1.0/ update_rate - delay_diff)

vaata rawgigglebot_line_follower_tuner.py, mille hostiks on GitHub ❤

4. samm: tuuneri seadistamine (kaugjuhtimispult)

Järgmine asi, mida peame tegema, on käivitada tööaeg + skript teisele BBC mikro: bitile. See teine mikro: bit toimib GiggleBoti kaugjuhtimispuldina, mida kasutatakse järgmiste parameetrite häälestamiseks:

  1. Kp = proportsionaalne võimendus PID -regulaatori jaoks.
  2. Ki = PID -regulaatori lahutamatu võimendus.
  3. Kd = PID -regulaatori tuletisvõimendus.
  4. trigger_point = GiggleBoti minimaalse ja maksimaalse kiiruse vaheline protsentides väljendatud punkt, kus kiirus hakkab lineaarselt vähenema, kuni saavutab minimaalse kiiruse.
  5. min_speed_percent = minimaalne kiirus protsentides maksimaalsest kiirusest.

Ülejäänud kaks ülejäänud muutujat, mida saab häälestada, on GiggleBoti skriptis otse kõvasti kodeeritud: update_rate ja base_speed, mis tähistab maksimaalset kiirust. Nagu dokumentatsioonis kirjeldatud, on GiggleBoti jaoks seadistatav maksimaalne kiirus 100, mis on ka meie GiggleBoti vaikeväärtus.

Märkus. Järgmisel skriptil võib olla tühikuid ja see näib olevat tingitud mõnest probleemist GitHubi esitusviiside kuvamisel. GitHubi lehele viimiseks klõpsake põhisisu, kus saate koodi kopeerida ja kleepida.

GiggleBot kaugjuhtimispuldi jälgija tuuner (vajab teist osa) - xjfls23

mikrobitite impordist*
utime impordist sleep_ms
impordi raadio
impordi ustruktuur
# Esimene element on Kp võimendus
# Teine element on Ki võimendus
# Kolmas element on Kd võimendus
# Neljas element on käivituspunkt mootorite kiiruse vähendamiseks (0 -> 1)
Viies element on mootorite minimaalne kiirus protsentides (0 -> 1)
kasu = [0,0, 0,0, 0,0, 1,0, 0,0]
stepSize = 0,1
# 0 ja 1 esimese elemendi jaoks
# 2 ja 3 teise elemendi jaoks
currentSetting = 0
defshowMenu ():
display.scroll ('{} - {}'. formaat (currentSetting, kasu [int (currentSetting /2)]), delay = 100, wait = False)
raadio.on ()
showMenu ()
Kuigi tõsi:
uuendatud = vale
kui button_a.is_pressed ():
currentSetting = (currentSetting +1) % (2*5)
uuendatud = tõsi
kui button_b.is_pressed ():
if currentSetting %2 == 0:
# võimenduse suurendamine praegusel seadistamisel on 0 või 2 või..
ifint (currentSetting /2) jaotises [0, 2]:
kasu [int (currentSetting /2)] += 10* stepSize
muidu:
kasu [int (currentSetting /2)] += stepSize
muidu:
# suurendage voolu, kui seade on 1 või 3 või..
ifint (currentSetting /2) jaotises [0, 2]:
kasu [int (currentSetting /2)] -= 10* stepSize
muidu:
kasumid [int (currentSetting /2)] -= stepSize
radio.send_bytes (ustruct.pack ('fffff', *kasu))
uuendatud = Tõsi
kui uuendatud:
showMenu ()
uni_ms (200)

vaata rawgigglebot_line_follower_configurator.py, mille hostiks on GitHub ❤

Samm: GiggleBoti häälestamine

GiggleBoti häälestamine
GiggleBoti häälestamine

Asetage GiggleBot rajale, lülitage see sisse ja laske sellel töötada. Vahepeal peate selle pidevalt rajale tagasi panema ja võimendusi/parameetreid häälestama teise BBC mikro: bitiga, mida hoiate käes.

GiggleBoti käivitamiseks vajutage GiggleBoti BBC mikro: bitil nuppu A, selle peatamiseks ja oleku lähtestamiseks vajutage nuppu B.

Kaug -BBC BBC bit: nupu A vajutamine viib teid läbi kõik selle menüü suvandid ja nupp B suurendab/vähendab vastavat väärtust. See on nagu kella seadmine vana auto armatuurlauale. Valikud on järgmised:

  1. 0-1 võimalust on Kp võimenduseks.
  2. Ki võimenduseks on 2-3 võimalust.
  3. Kd võimenduseks on 4-5 võimalust.
  4. 6-7 valikut on etteantud hetke seadmiseks hetkeks, mil mootorid hakkavad aeglustuma.
  5. Minimaalse kiiruse seadmiseks on 8-9 valikut.

Pidage meeles, et paarisarvud menüüs on mõeldud vastavate väärtuste suurendamiseks ja paaritute puhul on see täpselt vastupidine.

Samuti näete GiggleBoti BBC mikro: bitil nuppu B vajutades oma Neopixel -ekraanil viimasest lähtestamisest möödunud millisekundite arvu ja robotite läbitud tsüklite arvu - nende 2 abil saate arvutada roboti värskendamise määr.

Lõpuks ja mis kõige tähtsam, olen välja pakkunud 2 häälestust GiggleBotile. Üks neist on mõeldud siis, kui Neopixeli LED -id on välja lülitatud, ja teine, kui see on teisiti. Neopixeli valgusdioode kasutatakse selleks, et näidata, mis suunas viga on kogunenud.

1. parameetrite häälestamise komplekt (kui NeoPixeli LED -id on välja lülitatud)

  1. Kp = 32,0
  2. Ki = 0,5
  3. Kd = 80,0
  4. trigger_setpoint = 0,3 (mis on 30%)
  5. min_kiiruse_protsent = 0,2 (mis on 20%)
  6. baaskiirus = 100 (ehk maksimaalne kiirus)
  7. update_rate = 70 (töötab @70Hz)

Teine parameetrite häälestamise komplekt (kui NeoPixeli LED -id põlevad)

  1. Kp = 25,0
  2. Ki = 0,5
  3. Kd = 35,0
  4. trigger_setpoint = 0,3 (mis on 30%)
  5. min_kiiruse_protsent = 0,3 (mis on 30%)
  6. baaskiirus = 70 (aka maksimumkiirus)
  7. update_rate = 50 (töötab @50Hz)
  8. Samuti tuleb GiggleBoti BBC mikro: bitile laaditavas skriptis muutuva run_neopixels väärtuseks määrata True. See paneb NeoPixeli LED -id vilkuma nii, et need näitavad, mis suunas viga koguneb.

6. toiming: GiggleBot töötab, kui NeoPixels on välja lülitatud

See on näide GiggleBoti käitamisest eelmises etapis leitud 1. häälestusparameetritega. Selles näites on NeoPixeli LED -id välja lülitatud.

Samm 7: GiggleBot töötab, kui neopikslid on sisse lülitatud

See on näide GiggleBoti käivitamisest koos 5. häälestusparameetrite komplektiga, mis on leitud punktis 5. Selles näites on NeoPixeli LED -id sisse lülitatud.

Pange tähele, kuidas selles näites on GiggleBotil raskem joont järgida - see on sellepärast, et Neopixeli LED -id "söövad" BBC micro: bit CPU aega. Sellepärast pidime vähendama värskendamissagedust 70 -lt 50 -le.

Soovitan: