Sadržaj:
- Korak 1: Potrebne komponente
- Korak 2: Postavite staze
- Korak 3: Postavljanje okruženja
- Korak 4: Programiranje GiggleBot -a
- Korak 5: Pustite ga da radi
Video: Sljedbenik linije GiggleBot pomoću Pythona: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Ovaj put u MicroPythonu programiramo Dexter Industries GiggleBot da slijedi crnu liniju pomoću ugrađenog senzora za praćenje linija.
GiggleBot mora biti uparen s BBC micro: bitom kako bi se mogao pravilno kontrolirati.
Ako je ovaj vodič za vas previše napredan i programiranje GiggleBot -a je za sada previše, uvijek možete proći kroz početni vodič koji vam pokazuje kako se ovdje može programirati robot u MakeCode -u. Povezani vodič vodi vas kroz same osnove.
Korak 1: Potrebne komponente
Potrebne su sljedeće hardverske komponente:
- x3 AA baterije - u mom slučaju koristim punjive baterije koje imaju sveukupno niži napon.
- Dexter Industries GiggleBot robot za micro: bit.
- BBC mikro: bit.
Naravno, potreban vam je i mikro USB kabel za programiranje BBC micro: bita - ovaj kabel općenito dolazi u paket BBC micro: bita ili uvijek možete koristiti onaj koji se koristi za punjenje (Android) pametnih telefona.
Nabavite GiggleBot za micro: bit ovdje
Korak 2: Postavite staze
Morat ćete proći kroz štampanje nekih pločica i dizajniranje vlastitih pjesama. Možete koristiti naše vlastite pločice kako biste bili 100% sigurni da ponavljate naše uvjete. Ili, ako se osjećate avanturistički, možete upotrijebiti crnu traku i sami je napraviti. Evo PDF -a za pločice koje smo koristili.
Gornji zapis sastoji se od sljedećeg broja različitih pločica:
- 12 pločica tipa #1.
- 5 pločica tipa #2.
- 3 šablona pločica tipa #5.
- 3 predloška tipa pločice #6 - ovdje ćete završiti s jednom dodatnom pločicom.
Zatim ih odštampajte i izrežite. Pokušajte ih postaviti kao na gornjoj fotografiji i imajte na umu da se na desnoj gornjoj strani staze dvije pločice moraju preklapati jedna s drugom - to se očekuje u slučaju da se pitate radite li nešto pogrešno.
Korak 3: Postavljanje okruženja
Da biste mogli programirati BBC micro: bit u MicroPythonu, morate postaviti uređivač za njega (Mu Editor) i postaviti GiggleBot MicroPython Runtime kao vrijeme izvođenja. Da biste to učinili, morate slijediti upute na ovoj stranici. Od ovog trenutka koristi se verzija v0.4.0 vremena izvođenja.
Korak 4: Programiranje GiggleBot -a
Prije nego što prijeđemo na to, vrijeme izvođenja GiggleBot MicroPython sadrži klasično vrijeme izvođenja za BBC micro: bit i druge biblioteke koje podržavaju GiggleBot i druge senzore Dexter Industries.
Nakon što ga postavite, otvorite sljedeću skriptu u uređivaču Mu i kliknite na Flash. Ovo će aktivirati GiggleBot MicroPython Runtime i skriptu koju ste upravo otvorili na svom BBC micro: bit -u. Skripta je takođe prikazana dole.
Nakon što je proces bljeskanja gotov, složite BBC micro: bit u GiggleBot s neopikselima ploče prema naprijed, postavite ga na stazu i uključite.
Primijetite da su u skripti PID i ostale 2 konstante (zadana vrijednost brzine i minimalna konstanta brzine) već postavljene.
Napomena: Sljedećoj skripti možda nedostaju razmaci, a čini se da je to zbog nekog problema u prikazivanju GitHub gista. Kliknite na suštinu da biste se prebacili na njenu stranicu GitHub gdje možete kopirati i zalijepiti kôd.
GiggleBot PID Line Follower - Podešen sa NeoPixels
iz microbit uvoza* |
iz gigglebot uvoza* |
from utime import sleep_ms, ticks_us |
import ustruct |
# inicijalizira GB neopiksela |
neo = init () |
# tajming |
update_rate = 50 |
# dobitak/konstanta (pod pretpostavkom da je napon baterije oko 4,0 volta) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
trigger_point = 0.3 |
min_brzina_procent = 0,3 |
osnovna_brzina = 70 |
zadana vrijednost = 0,5 |
last_position = zadata vrijednost |
integral = 0,0 |
run_neopixels = Tačno |
center_pixel = 5# gdje se središnji piksel osmijeha nalazi na GB |
# tirkizna = tuple (mapa (lambda x: int (x / 5), (64, 224, 208))) # boja koju ćete koristiti za iscrtavanje greške s neopikselima |
# tirkizna = (12, 44, 41) # što je upravo gornja tirkizna komentirana iznad ovoga |
error_width_per_pixel = 0.5/3# max greška podijeljena s brojem segmenata između svakog neopiksela |
defupper_bound_linear_speed_reducer (aps_pogreška, okidač_točka, gornja granica, najmanja_motorna_ snaga, najveća_motorna_moć): |
globalna osnovna_brzina |
ako je aps_pogreška> = okidač_točka: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = gornja granica - tačka okidača |
# y1 = 1.0 |
# x = aps_pogreška - okidač_točka |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# isto kao |
y = (abs_error - trigger_point) / (upper_bound - trigger_point) |
snaga motora = osnovna brzina * (najmanja snaga motora + (1- godina) * (najveća snaga motora - najmanja snaga motora)) |
povratak snage motora |
drugo: |
povratna osnovna brzina * najveća_motorna snaga |
run = False |
prethodna_pogreška = 0 |
whileTrue: |
# ako pritisnete dugme a, počnite da pratite |
ako je button_a.is_pressed (): |
run = True |
# ali ako je pritisnuto dugme b, zaustavite pratioce linija |
if button_b.is_pressed (): |
run = False |
integral = 0,0 |
prethodna_pogreška = 0.0 |
pixels_off () |
stop () |
sleep_ms (500) |
ako je run isTrue: |
# pročitajte linijske senzore |
start_time = ticks_us () |
desno, lijevo = senzor za čitanje (LINE_SENSOR, OBA) |
# linija je s lijeve strane kada je pozicija <0,5 |
# linija je s desne strane kada je položaj> 0,5 |
# linija je u sredini kada je pozicija = 0,5 |
# to je ponderisana aritmetička sredina |
probaj: |
položaj = desno /lebdi (lijevo + desno) |
osimZeroDivisionError: |
položaj = 0,5 |
# raspon mora biti (0, 1), a ne [0, 1] |
ako je pozicija == 0: pozicija = 0,001 |
ako je pozicija == 1: pozicija = 0.999 |
# koristite PD kontroler |
greška = položaj - zadata vrijednost |
integral += greška |
ispravak = Kp * greška + Ki * integral + Kd * (greška - prethodna_pogreška) |
prethodna_pogreška = greška |
# izračunajte brzine motora |
motor_brzina = gornja_graničena_linearna_brzina_reducer (abs (greška), zadana vrijednost * okidač_točka, zadana vrijednost, min_brzina_procent, 1,0) |
leftMotorSpeed = brzina_motora + korekcija |
rightMotorSpeed = brzina_motora - ispravka |
# osvetli neopiksele prema datoj grešci |
ako je run_neopixels isTrueand 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 (greška)> error_width_per_pixel * i: |
ako je greška <0: |
# neo [center_pixel + i] = tirkizna |
neo [center_pixel + i] = (12, 44, 41) |
drugo: |
# neo [center_pixel - i] = tirkizna |
neo [center_pixel + i] = (12, 44, 41) |
drugo: |
postotak = 1- (greška_širina_po_pikselu * i -abs (greška)) / greška_širine_po_pikselu |
# osvetljava trenutni piksel |
ako je greška <0: |
# neo [center_pixel + i] = tuple (mapa (lambda x: int (x * postotak), tirkizna)) |
neo [center_pixel + i] = (int (64* posto /5), int (224* posto /5), int (208* posto /5)) |
drugo: |
# neo [center_pixel - i] = tuple (mapa (lambda x: int (x * postotak), tirkizna)) |
neo [center_pixel - i] = (int (64* posto /5), int (224* posto /5), int (208* posto /5)) |
break |
neo.show () |
probaj: |
# isjecite brzine motora |
ako je ostavljenoMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
ako je rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
ako je ostavljenoMotorSpeed <-100: |
leftMotorSpeed = -100 |
ako je rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# aktivirajte motore |
set_speed (leftMotorSpeed, rightMotorSpeed) |
drive () |
# print ((greška, brzina_motora)) |
osim: |
# u slučaju da upadnemo u neki problem koji nije moguće riješiti |
pass |
# i održavati frekvenciju petlje |
end_time = ticks_us () |
delay_diff = (end_time - start_time) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
spavanje (1000.0/ update_rate - delay_diff) |
pogledajte rawgigglebot_tuned_line_follower.py hostirano sa ❤ na GitHub -u
Korak 5: Pustite ga da radi
Postoje dva dugmeta na BBC mikro: bit: dugme A i dugme B:
- Pritisak na dugme A postavlja GiggleBot da prati liniju (ako postoji).
- Pritiskom na dugme B zaustavljate GiggleBot i resetujete sve tako da ga možete ponovo koristiti.
Preporučuje se da ne podižete GiggleBot dok slijedi liniju, a zatim ga vratite na njega jer bi se greška pri izračunavanju mogla akumulirati i potpuno poremetiti rutu robota. Ako želite da ga podignete, pritisnite dugme B, a zatim kada ga vratite ponovo pritisnite A.
Preporučuje se:
Sljedbenik linije na Tinkercadu: 3 koraka
Line Follower na Tinkercad-u: A-Line Follower Robot, kao što ime sugerira, je automatizirano vođeno vozilo koje slijedi vizualnu liniju ugrađenu na pod ili strop. Obično je vizualna linija put kojim ide robot za praćenje linija i to će biti crna linija na kojoj
Jednostavan sljedbenik linije pomoću Arduina: 5 koraka
Jednostavan sljedbenik linija pomoću Arduina: Arduino robot sljedbenik linija U ovom vodiču ćemo raspravljati o radu robota koji slijedi Arduino, koji će slijediti crnu liniju u bijeloj pozadini i ispravno skrenuti kad god dosegne krivulje na svom putu. Arduino Line Follower Co
Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: 6 koraka
Dio 3: GPIO: ARM sklop: Sljedbenik linije: TI-RSLK: Zdravo. Ovo je sljedeća rata u kojoj nastavljamo koristiti ARM sklop (umjesto jezika višeg nivoa). Inspiracija za ovaj Instructable je Lab 6 kompleta za učenje robotskih sistema Texas Instruments Robotics System ili TI-RSLK. Koristit ćemo mikrofon
Sljedbenik linije GoPiGo3: 8 koraka
GoPiGo3 sljedbenik linija: U ovom vodiču uzimamo sljedbenika linija i koristimo ga na GoPiGo3 kako bismo slijedili crnu liniju
Sljedbenik linije pomoću Arduina - Lako uradi sam projekat: 6 koraka
Sljedbenik linije pomoću Arduina | Easy DIY Project: U ovom vodiču ćemo napraviti linijskog sljedbenika koristeći potrebne Arduino dijelove: Chasis: BO Motori i kotači: https://amzn.to/2Yjh9I7 L298n Upravljački program motora: https://amzn.to/2IWNMWF IR senzor : https://amzn.to/2FFtFu3 Arduino Uno: https://amzn.to/2FyTrjF J