Sisällysluettelo:
- Vaihe 1: Tarvittavat komponentit
- Vaihe 2: Jälkien ja ympäristön määrittäminen
- Vaihe 3: GiggleBotin käyttöönotto
- Vaihe 4: Virittimen asentaminen (etä)
- Vaihe 5: GiggleBotin viritys
- Vaihe 6: GiggleBot käynnissä, kun NeoPixels on pois päältä
- Vaihe 7: GiggleBot käynnissä, kun neopikselit on kytketty päälle
Video: GiggleBot -linjan seuraajan viritys - edistynyt: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Tässä hyvin lyhyessä ohjeessa aiot virittää oman GiggleBotisi seuraamaan mustaa viivaa. Tässä toisessa opetusohjelmassa GiggleBot Line Follower me koodasimme viritysarvot toimimaan tämän skenaarion mukaisesti. Haluat ehkä saada sen käyttäytymään paremmin keksimällä muita etuja.
Tässä opetusohjelmassa näytämme sinulle kaksi komentosarjaa, jotka molemmat voidaan ladata eri BBC -mikro -bitteihin niin, että toinen niistä asetetaan GiggleBotiin ja toisen kanssa, kahta painiketta käytetään menun selaamiseen ja erilaisten virittämiseen. parametrit. Nämä päivitetyt parametrit lähetetään radion kautta.
Vaihe 1: Tarvittavat komponentit
Tarvitset seuraavat:
- GiggleBot -robotti micro: bitille.
- x3 AA -paristoa
- x2 BBC micro: bittiä - toinen GiggleBotille ja toinen kauko -ohjaimena parametrien virittämiseen.
- BBC micro: bit -akku - kuten BBC micro: bit -paketti.
Hanki GiggleBot -robotti BBC: n mikro: bitille täältä
Vaihe 2: Jälkien ja ympäristön määrittäminen
Sinun on myös itse rakennettava raitasi (ladattava, tulostettava, leikattava ja teipattava laatat) ja määritettävä sitten ympäristö (IDE ja ajonaikainen).
Koska tämä opetusohjelma liittyy hyvin tähän muuhun opetusohjelmaan nimeltä GiggleBot Line Follower, mene vain sinne ja seuraa vaiheita 2 ja 3 ja palaa sitten tänne.
IDE: n osalta voit käyttää Mu -editoria ja ajon aikana sinun on ladattava GiggleBot MicroPython Runtime. Ajonaika voidaan ladata sen dokumentaatiosta täältä. Siirry asiakirjojen Aloittaminen -lukuun ja noudata näitä ohjeita ympäristön määrittämisestä. Tästä hetkestä lähtien ajonaikaista versiota v0.4.0 käytetään.
Vaihe 3: GiggleBotin käyttöönotto
Ennen kuin suoritusaika vilkkuu GiggleBotille, varmista, että olet valinnut GiggleBotille haluamasi nopeuden ja päivitysnopeuden: nopeus on oletusarvoisesti 100 (base_speed muuttuja) ja päivitysnopeus 70 (update_rate muuttuja).
Nykyinen toteutus huomioon ottaen suurin saavutettavissa oleva päivitysnopeus on 70 ja jos run_neopixels -asetuksena on True, vain 50 on saavutettavissa. Joten tavallaan voit sanoa, että oletuspäivitysnopeus on aivan BBC micro: bitin kynnyksellä.
Ainoastaan tiedoksi, linjan seurantatunnistin voi palauttaa päivitykset 100 kertaa sekunnissa.
Huomautus: Seuraavassa komentosarjassa saattaa olla tyhjiä välilyöntejä, ja tämä näyttää johtuvan jostakin ongelmasta GitHub Gistsin näyttämisessä. Napsauta ydintä viedäksesi sen GitHub-sivulle, jossa voit kopioida ja liittää koodin.
GiggleBot PID Line -seuranta -viritin (vaatii virittämisen kaukosäätimellä) - xjfls23
mikrobitin tuonnista* |
gigglebot -tuonnista* |
utime -tuonnista sleep_ms, ticks_us |
tuoda radio |
tuontirakenne |
# alustavat radio- ja GB -neopikselit |
radio.on () |
neo = init () |
# ajoitus |
update_rate = 70 |
# oletusarvoa |
Kp = 0,0 |
Ki = 0,0 |
Kd = 0,0 |
asetuspiste = 0,5 |
liipaisupiste = 0,0 |
min_nopeusprosentti = 0,2 |
perusnopeus = 100 |
last_position = asetusarvo |
integraali = 0,0 |
run_neopixels = Väärä |
center_pixel = 5# missä hymyn keskipiste sijaitsee GB: ssä |
# turkoosi = tuple (kartta (lambda x: int (x / 5), (64, 224, 208))) # väri, jota käytetään virheen piirtämiseen neopikseleillä |
# turkoosi = (12, 44, 41) # joka on täsmälleen yllä oleva turkoosi, joka kommentoitiin edellä |
error_width_per_pixel = 0.5/3# max virhe jaettuna kunkin neopikselin välisten segmenttien määrällä |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, ylä_raja, pienin_moottorin teho, suurin_moottorin_teho): |
globaali perusnopeus |
jos abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = yläraja - liipaisupiste |
# y1 = 1,0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# sama kuin |
y = (abs_error - trigger_point) / (ylä_raja - trigger_point) |
moottorin_teho = perusnopeus * (pienin_moottorin_teho + (1- y) * (suurin_moottorin_teho - pienin_moottorin_teho)) |
paluu moottorin_teho |
muu: |
paluu base_speed * suurin_moottorin_teho |
run = epätosi |
edellinen_virhe = 0 |
kokonaisaika = 0,0 |
total_counts = 0 |
Vaikka totta: |
# jos painiketta a painetaan, aloita seuranta |
jos button_a.is_pressed (): |
ajaa = totta |
# mutta jos painiketta b painetaan, pysäytä linjan seuraaja |
jos button_b.is_pressed (): |
run = epätosi |
integraali = 0,0 |
edellinen_virhe = 0,0 |
display.scroll ('{} - {}'. muoto (yhteensä_aika, kokonaislukumäärä), viive = 100, odota = epätosi) |
kokonaisaika = 0,0 |
total_counts = 0 |
pixels_off () |
lopettaa() |
uni_ms (500) |
jos suoritus on tosi: |
# lue linja -anturit |
start_time = ticks_us () |
# Tarkista, olemmeko päivittäneet Kp/Kd -vahvistukset kaukosäätimellä |
yrittää: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.recept_bytes ()) |
set_eyes () |
paitsiTyyppiVirhe: |
kulkea |
oikea, vasen = luku_anturi (LINE_SENSOR, MOTH) |
# viiva on vasemmalla, kun asento <0,5 |
# viiva on oikealla, kun sijainti> 0,5 |
# viiva on keskellä, kun asema = 0,5 |
# se on painotettu aritmeettinen keskiarvo |
yrittää: |
sijainti = oikea /kelluva (vasen + oikea) |
paitsi ZeroDivisionError: |
sijainti = 0,5 |
jos sijainti == 0: sijainti = 0,001 |
jos sijainti == 1: sijainti = 0,999 |
# Käytä PD -ohjainta |
virhe = sijainti - asetusarvo |
integraali += virhe |
korjaus = Kp * virhe + Ki * integraali + Kd * (virhe - edellinen_virhe) |
edellinen_virhe = virhe |
# laskea moottorin nopeudet |
moottorin_nopeus = ylempi_rajainen_linja_nopeuden pienennys (abs (virhe), asetuspiste * liipaisupiste, asetuspiste, min_nopeusprosentti, 1.0) |
leftMotorSpeed = moottorin_nopeus + korjaus |
rightMotorSpeed = moottorin_nopeus - korjaus |
# sytytä neopikselit näyttääksesi mihin suuntaan GiggleBotin on mentävä |
jos 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 (virhe)> error_width_per_pixel * i: |
jos virhe <0: |
neo [center_pixel + i] = (12, 44, 41) |
muu: |
neo [center_pixel - i] = (12, 44, 41) |
muu: |
prosenttia = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# sytyttää nykyisen pikselin |
jos virhe <0: |
# neo [center_pixel + i] = tuple (kartta (lambda x: int (x * prosenttiosuus), turkoosi)) |
neo [center_pixel + i] = (int (12* prosenttia), int (44* prosenttia), int (41* prosenttia)) |
muu: |
# neo [center_pixel - i] = tuple (kartta (lambda x: int (x * prosenttiosuus), turkoosi)) |
neo [center_pixel - i] = (int (12* prosenttia), int (44* prosenttia), int (41* prosenttia)) |
tauko |
neo.show () |
yrittää: |
# leikkaa moottorit |
jos vasenMoottorin nopeus> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
jos oikeaMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
jos vasenMoottorin nopeus <-100: |
leftMotorSpeed = -100 |
jos oikeaMotorSpeed <-100: |
rightMotorSpeed = -100 |
# käynnistä moottorit |
set_speed (leftMotorSpeed, rightMotorSpeed) |
ajaa() |
# print ((virhe, moottorin_nopeus)) |
paitsi: |
# jos joudumme korjaamattomaan ongelmaan |
kulkea |
# ja säilytä silmukan taajuus |
end_time = ticks_us () |
delay_diff = (päättymisaika - alkamisaika) /1000 |
total_time += delay_diff |
total_counts += 1 |
if1.0/ update_rate - delay_diff> 0: |
lepotila (1.0/ päivitysnopeus - viiveen_ero) |
katso rawgigglebot_line_follower_tuner.py, jota ylläpitää GitHub ❤
Vaihe 4: Virittimen asentaminen (etä)
Seuraavaksi meidän on tehtävä flash -ajonaikainen skripti toiselle BBC: n mikro: bitille. Tämä toinen mikro: bitti toimii GiggleBotin kaukosäätimenä, jota käytetään seuraavien parametrien virittämiseen:
- Kp = suhteellinen vahvistus PID -säätimelle.
- Ki = kiinteä vahvistus PID -säätimelle.
- Kd = PID -säätimen johdannaisvahvistus.
- trigger_point = GiggleBotin minimi- ja maksiminopeuksien välinen prosentteina ilmaistu piste, jossa nopeus alkaa pienentyä lineaarisesti, kunnes se saavuttaa miniminopeuden.
- min_speed_percent = miniminopeus prosentteina enimmäisnopeudesta.
Muut kaksi muuta säädettävää muuttujaa, jotka voidaan virittää, koodataan suoraan GiggleBot -komentosarjassa: päivitysnopeus ja perusnopeus, joka edustaa suurinta nopeutta. Kuten asiakirjoissa on kuvattu, GiggleBotille asetettava enimmäisnopeus on 100, mikä on myös GiggleBotin oletusarvo.
Huomautus: Seuraavassa komentosarjassa saattaa olla tyhjiä välilyöntejä, ja tämä näyttää johtuvan jostakin ongelmasta GitHub Gistsin näyttämisessä. Napsauta ydintä viedäksesi sen GitHub-sivulle, jossa voit kopioida ja liittää koodin.
GiggleBot Remote PID Line -seuranta -viritin (vaatii toisen osan) - xjfls23
mikrobitin tuonnista* |
utime -tuonnista sleep_ms |
tuoda radio |
tuontirakenne |
# Ensimmäinen elementti on Kp -vahvistus |
# Toinen elementti on Ki -vahvistus |
# Kolmas elementti on Kd -vahvistus |
# Neljäs elementti on moottorin liipaisupiste, joka laskee nopeutta (0 -> 1) |
Viides elementti on moottorien miniminopeus prosentteina ilmaistuna (0 -> 1) |
voitot = [0,0, 0,0, 0,0, 1,0, 0,0] |
stepSize = 0,1 |
# 0 ja 1 1. elementille |
# 2 ja 3 2. elementille |
currentSetting = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. muoto (currentSetting, voitot [int (currentSetting /2)]), delay = 100, wait = False) |
radio.on () |
showMenu () |
Vaikka totta: |
päivitetty = väärä |
jos button_a.is_pressed (): |
currentSetting = (currentSetting +1) % (2*5) |
päivitetty = Totta |
jos button_b.is_pressed (): |
if currentSetting %2 == 0: |
# lisää vahvistusta, kun nykyinen Asetus on 0 tai 2 tai.. |
ifint (currentSetting /2) kohdassa [0, 2]: |
voitot [int (currentSetting /2)] += 10* stepSize |
muu: |
voitot [int (currentSetting /2)] += stepSize |
muu: |
# lisää vahvistusta, kun nykyinen Asetus on 1 tai 3 tai.. |
ifint (currentSetting /2) kohdassa [0, 2]: |
voitot [int (currentSetting /2)] -= 10* stepSize |
muu: |
voitot [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff', *voitot)) |
päivitetty = Totta |
jos päivitetään: |
showMenu () |
uni_ms (200) |
katso rawgigglebot_line_follower_configurator.py, jota ylläpitää GitHub ❤
Vaihe 5: GiggleBotin viritys
Aseta GiggleBot radalle, käynnistä se ja anna sen käydä. Sillä välin sinun on jatkuvasti palautettava se radalle ja säädettävä voitot/parametrit toisella BBC: n mikro: bitillä, jota pidät kädessäsi.
Käynnistä GiggleBot painamalla GiggleBotin BBC micro: bitin painiketta A, pysäyttääksesi sen ja palauttaaksesi sen tilan painamalla painiketta B.
Kaukosäätimen BBC micro: bit -näppäimellä A -painikkeen painaminen vie sinut läpi kaikki valikon vaihtoehdot ja painike B lisää/pienentää vastaavaa arvoa. Se on kuin kellon asettaminen vanhan auton kojelautaan. Vaihtoehdot ovat seuraavat:
- 0-1 vaihtoehtoa ovat Kp-vahvistukselle.
- 2-3 vaihtoehtoa ovat Ki-vahvistukselle.
- 4-5 vaihtoehtoa ovat Kd-vahvistukselle.
- 6-7 vaihtoehtoa ovat asetuspisteen asettaminen hetkelle, jolloin moottorit alkavat hidastua.
- 8-9 vaihtoehtoa ovat vähimmäisnopeuden asettamiseen.
Muista, että parilliset numerot valikossa ovat vastaavien arvojen lisäämiseksi ja parittomille päinvastoin.
Lisäksi kun painat GiggleBotin BBC micro: bitin painiketta B, näet sen Neopixel -valmistetulla näytöllä viimeisen nollauksen jälkeen kuluneet millisekunnit ja kuinka monta kertaa robotti on käynyt läpi - näillä kahdella voit laskea robotin päivitysnopeus.
Lopuksi ja mikä tärkeintä, olen keksinyt kaksi viritystä GiggleBotille. Toinen niistä on tarkoitettu Neopixel -merkkivalojen sammuttamiseen ja toinen silloin, kun on toisin. Neopixel -merkkivaloja käytetään osoittamaan mihin suuntaan virhe on kertynyt.
Ensimmäinen parametrien viritys (kun NeoPixel -merkkivalot eivät pala)
- Kp = 32,0
- Ki = 0,5
- Kd = 80,0
- trigger_setpoint = 0.3 (mikä on 30%)
- min_nopeusprosentti = 0,2 (mikä on 20%)
- base_speed = 100 (eli suurin nopeus)
- update_rate = 70 (käynnissä @70 Hz)
Toinen parametrien viritys (NeoPixel -merkkivalot päällä)
- Kp = 25,0
- Ki = 0,5
- Kd = 35,0
- trigger_setpoint = 0.3 (mikä on 30%)
- min_nopeusprosentti = 0,3 (mikä on 30%)
- base_speed = 70 (eli suurin nopeus)
- update_rate = 50 (käynnissä @50 Hz)
- Myös muuttujan run_neopixels on asetettava arvoon True siinä komentosarjassa, joka ladataan GiggleBotin BBC -mikrobitille. NeoPixel -merkkivalot vilkkuvat siten, että ne osoittavat mihin suuntaan virhe kertyy.
Vaihe 6: GiggleBot käynnissä, kun NeoPixels on pois päältä
Tämä on esimerkki GiggleBotin käyttämisestä ensimmäisellä viritysparametrilla, jotka löytyivät edellisestä vaiheesta. Tässä esimerkissä NeoPixel -merkkivalot ovat sammuneet.
Vaihe 7: GiggleBot käynnissä, kun neopikselit on kytketty päälle
Tämä on esimerkki GiggleBotin suorittamisesta vaiheessa 5 löydetyn toisen viritysparametrisarjan kanssa. Tässä esimerkissä NeoPixel -merkkivalot ovat päällä.
Huomaa, kuinka tässä esimerkissä GiggleBotilla on vaikeampi seurata linjaa - tämä johtuu siitä, että Neopixel -LEDit "syövät" BBC: n mikro: bitin CPU -aikaa. Siksi meidän piti vähentää päivitysnopeutta 70: stä 50: een.
Suositeltava:
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
Pyörivä viritys Pi TV HAT: n avulla: 3 vaihetta
Pyörivä viritys Pi TV: n hatulla: Tässä ohjeessa näytän sinulle, miten voit tuoda analogisen ohjauksen digitaalitelevisioosi käyttämällä kiertokytkintä vaihtaaksesi kanavia Raspberry Pi -käyttöisellä vintage-televisiolla. TV HAT -lisälaite julkaistiin äskettäin ja rakkauteni kääntymykseen
Automaattinen viritys: 7 vaihetta
Automaattinen viritys: Bienvenue dans notre projet Autotune! Notre é quipe va vous pr é sender la r é alisation de ce projet. Notre é quipe est compos é e de 3 é l è ves ing é nieurs de Polytech Sorbonne en EISE4 (4 è me ann
Hyvää syntymäpäivää viritys Circuit Playgroundin avulla: 3 vaihetta
Hyvää syntymäpäivää viritys Circuit Playgroundin avulla: Näin voit pelata Hyvää syntymäpäivää -melodian Adafruitin Arduino -yhteensopivan piirilevyn leikkikentällä
Kuinka tehdä automaattinen viritys (ilmaiseksi!): 4 vaihetta
Kuinka tehdä automaattinen viritys (ilmaiseksi!): Opi Garagebandin avulla luomaan helposti kuulemasi autotune -tehoste. ** EDIT ** Linkki esimerkkiin: http://limelinx.com/files/e7b32e25dda5c5a22ab1bfc8c0eb3acd