Sisällysluettelo:

GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta
GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta

Video: GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta

Video: GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta
Video: проект микробит, кодирование и технология нежа набор изобретателя 2024, Heinäkuu
Anonim
GiggleBot -linjan seuraaja Pythonin avulla
GiggleBot -linjan seuraaja Pythonin avulla
GiggleBot -linjan seuraaja Pythonin avulla
GiggleBot -linjan seuraaja Pythonin avulla
GiggleBot -linjan seuraaja Pythonin avulla
GiggleBot -linjan seuraaja Pythonin avulla

Tällä kertaa ohjelmoimme MicroPythonissa Dexter Industries GiggleBotin seuraamaan mustaa viivaa sisäänrakennetun linjaseurantatunnistimen avulla.

GiggleBot on yhdistettävä BBC micro: bitin kanssa, jotta sitä voidaan ohjata asianmukaisesti.

Jos tämä opetusohjelma on liian edistynyt sinulle ja GiggleBotin ohjelmointi on toistaiseksi liikaa, voit aina käydä läpi aloitusoppaan, joka näyttää kuinka robotti voidaan ohjelmoida MakeCode -ohjelmassa täällä. Linkitetty opetusohjelma opastaa sinut perusteiden läpi.

Vaihe 1: Tarvittavat komponentit

Pakolliset osat
Pakolliset osat

Seuraavia laitteistokomponentteja tarvitaan:

  1. x3 AA -paristoa - minun tapauksessani käytän ladattavia paristoja, joiden jännite on alhaisempi.
  2. Dexter Industries GiggleBot -robotti micro: bitille.
  3. BBC: n mikro: bitti.

Tietenkin tarvitset myös mikro -USB -kaapelin BBC micro: bit -ohjelmointiin - tämä kaapeli kuuluu yleensä BBC micro: bit -pakettiin tai voit aina käyttää sitä, jota käytetään Android -älypuhelimien lataamiseen.

Hanki GiggleBot for micro: bit täältä

Vaihe 2: Määritä jäljet

Määritä jäljet
Määritä jäljet

Sinun on käytävä läpi joitakin laattoja ja suunniteltava omia kappaleitasi. Voit käyttää omia laattoja, joten olet 100% varma, että toistat olosuhteitamme. Tai jos sinusta tuntuu seikkailunhaluiselta, voit käyttää mustaa teippiä ja tehdä oman. Tässä on PDF käyttämillemme laattoille.

Yllä oleva raita koostuu seuraavasta määrästä erilaisia laattoja:

  • 12 laattaa tyyppiä #1.
  • 5 laattaa tyyppiä #2.
  • 3 laattojen tyyppiä #5.
  • 3 laatatyyppiä #6 - tässä saat yhden ylimääräisen laatan.

Seuraavaksi tulosta ne ja leikkaa ne. Yritä sijoittaa ne kuten yllä olevassa kuvassa ja muista, että radan oikeassa yläkulmassa kahden laatan on oltava päällekkäin toistensa kanssa - tämä on odotettavissa, jos mietit, teetkö jotain väärin.

Vaihe 3: Ympäristön määrittäminen

Ympäristön asettaminen
Ympäristön asettaminen

Jotta voit ohjelmoida BBC: n micro: bitin MicroPythonissa, sinun on määritettävä sen editori (Mu Editor) ja asetettava GiggleBot MicroPython Runtime ajonaikaksi. Tätä varten sinun on noudatettava tämän sivun ohjeita. Tästä hetkestä lähtien ajonaikaista versiota v0.4.0 käytetään.

Vaihe 4: GiggleBot -ohjelman ohjelmointi

Ennen kuin aloitat sen, GiggleBot MicroPython ajonaika sisältää klassisen ajonaikaan BBC micro: bitille ja muille kirjastoille, jotka tukevat GiggleBotia ja muita Dexter Industries Sensoreita.

Kun olet määrittänyt sen, avaa seuraava komentosarja Mu -editorissa ja napsauta Flash. Tämä vilkkuu GiggleBot MicroPython Runtime ja komentosarja, jonka olet juuri avannut BBC: n mikro: bitille. Käsikirjoitus näkyy myös alla.

Kun vilkkuva prosessi on valmis, pinoa BBC micro: bit GiggleBotiin levyn neopikselit eteenpäin, aseta se radalle ja kytke se päälle.

Huomaa, että skriptissä PID ja muut 2 vakioita (nopeuden asetuspiste ja vähimmäisnopeusvakiot) on jo asetettu.

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 -linjan seuraaja - viritetty NeoPixeleillä

mikrobitin tuonnista*
gigglebot -tuonnista*
utime -tuonnista sleep_ms, ticks_us
tuontirakenne
# alustaa GB -neopikselit
neo = init ()
# ajoitus
update_rate = 50
# voittoa/vakioita (olettaen, että akun jännite on noin 4,0 volttia)
Kp = 25,0
Ki = 0,5
Kd = 35,0
liipaisupiste = 0,3
min_nopeus_prosentti = 0,3
perusnopeus = 70
asetuspiste = 0,5
last_position = asetusarvo
integraali = 0,0
run_neopixels = Totta
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
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
pixels_off ()
lopettaa()
uni_ms (500)
jos suoritus on tosi:
# lue linja -anturit
start_time = ticks_us ()
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
# alueen on oltava (0, 1) eikä [0, 1]
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 annetun virheen mukaan
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] = turkoosi
neo [center_pixel + i] = (12, 44, 41)
muu:
# neo [center_pixel - i] = turkoosi
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 (64* prosenttia /5), int (224* prosenttia /5), int (208* prosenttia /5))
muu:
# neo [center_pixel - i] = tuple (kartta (lambda x: int (x * prosenttiosuus), turkoosi))
neo [keskipiste - i] = (int (64* prosenttia /5), int (224* prosenttia /5), int (208* prosenttia /5))
tauko
neo.show ()
yrittää:
# leikkaa moottorin nopeudet
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
if1000.0/ update_rate - delay_diff> 0:
lepotila (1000,0/ päivitysnopeus - viive_diff)

katso rawgigglebot_tuned_line_follower.py, jota ylläpitää GitHub ❤

Vaihe 5: Anna sen toimia

BBC micro: ssa on kaksi painiketta: bitti: painike A ja painike B:

  • Painikkeen A painaminen asettaa GiggleBotin seuraamaan linjaa (jos sellainen on).
  • Painikkeen B painaminen pysäyttää GiggleBotin ja nollaa kaiken, jotta voit käyttää sitä uudelleen.

On erittäin suositeltavaa olla nostamatta GiggleBotia, kun se seuraa viivaa, ja laita se sitten takaisin sille, koska laskentavirhe voi kertyä ja sotkea robotin reitin. Jos haluat nostaa sen, paina painiketta B ja paina sitten uudelleen, kun asetat sen takaisin.

Suositeltava: