Sadržaj:

Napravite Lidar-vođenog robota s GiggleBotom: 8 koraka
Napravite Lidar-vođenog robota s GiggleBotom: 8 koraka

Video: Napravite Lidar-vođenog robota s GiggleBotom: 8 koraka

Video: Napravite Lidar-vođenog robota s GiggleBotom: 8 koraka
Video: 9 гениальных деревообрабатывающих инструментов, которые сделают вашу жизнь проще 2024, Studeni
Anonim
Napravite Lidar-vođenog robota s GiggleBotom
Napravite Lidar-vođenog robota s GiggleBotom
Napravite Lidar-vođenog robota s GiggleBotom
Napravite Lidar-vođenog robota s GiggleBotom
Napravite Lidar-vođenog robota s GiggleBotom
Napravite Lidar-vođenog robota s GiggleBotom

U ovom vodiču tjeramo GiggleBot da se nosi s teškoćama labirinta.

Montiramo servo na GiggleBot na koji pričvršćujemo senzor udaljenosti. Tijekom rada servo će se okretati naprijed -natrag tako da senzor udaljenosti može izmjeriti udaljenost do svake prepreke. Ovo funkcionira poput LIDAR senzora koji je obično puno skuplji.

U isto vrijeme, GiggleBot šalje te podatke udaljenom BBC micro: bit-u koji prikazuje na svojoj matrici 5 x 5 LED diode svoj relativni položaj prema preprekama.

Vaš je posao moći upravljati GiggleBotom samo gledajući ono što je prikazano na drugom BBC micro: bitu. Za upravljanje GiggleBotom koriste se gumbi na daljinskom BBC micro: bit.

To zvuči zabavno! Prijeđimo na to, hoćemo li?

Korak 1: Potrebne komponente

Potrebne komponente
Potrebne komponente

Trebat će nam:

  1. GiggleBot.
  2. Baterija za BBC micro: bit. Dolazi s BBC micro: bit u pakiranju.
  3. x3 AA baterije za GiggleBot.
  4. Grove kabel za povezivanje senzora udaljenosti s GiggleBotom.
  5. Servo komplet iz tvrtke DexterIndustries.
  6. x3 BBC mikro: bitovi. Jedan za GiggleBot i jedan za upravljanje robotom iz daljine.
  7. Senzor udaljenosti iz tvrtke DexterIndustries.

Ovdje nabavite robota GiggleBot za BBC micro: bit!

Korak 2: Sastavljanje robota

Sastavljanje robota
Sastavljanje robota
Sastavljanje robota
Sastavljanje robota

Da bi GiggleBot bio spreman za programiranje, moramo ga sastaviti, iako ne treba puno učiniti.

Umetnite 3 AA baterije u odjeljak ispod GiggleBot -a.

Sastavite servo paket. Na njegov rotirajući krak servo -a, upotrijebite njegovu posljednju rupu da učvrstite servo na prednje konektore GiggleBot -a. Možete upotrijebiti vijak i/ili neku žicu kako biste ga učinili stabilnijim na svom mjestu. Ili ga možete vruće zalijepiti za ploču. U mom slučaju, upotrijebio sam vijak i kratku žicu za vezanje servo kraka na GiggleBot ploču.

Prilikom postavljanja servo kraka na servo, provjerite je li servo već postavljen na položaj 80. To možete učiniti pozivom na adresu gigglebot.set_servo (gigglebot. RIGHT, 80). Više o tome možete pročitati ovdje.

Zatim postavite senzor udaljenosti na prednju stranu servo paketa i popravite ga kao u gornjem primjeru.

Na kraju, spojite senzor udaljenosti Grove kablom na bilo koji od 2 I2C priključka, a servo motor na desni priključak koji se nalazi na GiggleBotu - na njemu se spominje desni priključak.

Korak 3: Izradite vlastiti labirint - izborno

Napravite vlastiti labirint - izborno
Napravite vlastiti labirint - izborno

U ovom slučaju, koristio sam hrpu kutija za stvaranje staze zatvorene petlje, slične NASCAR -ovoj.

U ovom koraku možete postati zaista kreativni i učiniti ga kako želite uvrnutim ili ga učiniti jako dugim jer to doista ovisi o vama.

Ili, ako uopće ne želite pjesmu, možete postaviti GiggleBot u kuhinju ili dnevni boravak na primjer - to bi trebalo biti dovoljno dobro jer postoji mnogo zidova i prepreka koje još morate izbjeći.

Korak 4: Postavljanje okruženja

Postavljanje okoliša
Postavljanje okoliša

Da biste mogli programirati BBC micro: bit u MicroPythonu, morate za njega postaviti uređivač (Mu Editor) i postaviti GiggleBot MicroPython Runtime kao vrijeme izvođenja. Za to morate slijediti upute na ovoj stranici. Od ovog trenutka koristi se verzija v0.4.0 vremena izvođenja.

Korak 5: Programiranje GiggleBota - I. dio

Prvo, postavimo GiggleBot -ovu skriptu. Ova će skripta natjerati GiggleBot da rotira svoj servo motor za 160 stupnjeva (80 stupnjeva u svakom smjeru), dok će u isto vrijeme uzeti 10 očitanja sa senzora udaljenosti po zavoju.

Kada je uključen, GiggleBot će čekati sve dok ne primi naredbu s daljinskog upravljača. Mogu postojati samo 3 naredbe: pomaknite se naprijed, ulijevo ili udesno.

Napomena: Sljedećoj skripti možda nedostaju razmaci, a čini se da je to zbog problema u prikazivanju GitHub gista. Pritisnite suštinu da biste se prebacili na njegovu stranicu GitHub gdje možete kopirati i zalijepiti kôd.

GiggleBot sa daljinskim upravljanjem baziran na LIDAR-u

iz gigglebot uvoza*
from distance_sensor import DistanceSensor
iz mikrobita uvozni san
from utime import ticks_us, sleep_us
uvozni ustrukt
uvoz radio
# zaustavite robota ako se već kreće
Stop()
# omogući radio
radio.on ()
# objekt senzora udaljenosti
ds = Senzor udaljenosti ()
ds.start_continuous ()
rotate_time = 0.7# mjereno u sekundama
rotate_span = 160# mjereno u stupnjevima
rotacija_koraka = 10
nadzemna_kompenzacija = 1,05# definirano u postocima
time_per_step = 10 ** 6* rotate_time / (rotate_steps* nadzemna_kompenzacija)
last_read_time = 0
radar = bajtr (niz rotacije_koraci)
servo_rotate_direction = 0# 0 za kretanje prema gore (0-> 160) i 1 u suprotnom
indeks radara = 0
set_servo (DESNO, 0)
whileTrue:
# čitanje s radara
ako ticks_us () - last_read_time> time_per_step:
# očitavanje s senzora udaljenosti
radar [radarski_indeks] = int (ds.čitani_rang_naprez_kontinuirano () /10)
last_read_time = ticks_us ()
ispis (radar_index)
# učinite logiku za okretanje servo s lijeva na desno
ako je radar_index == rotate_steps -1i servo_rotate_direction == 0:
set_servo (DESNO, 0)
servo_rotate_direction = 1
elif radar_index == 0i smjer servo_rotacije_ = = 1:
set_servo (DESNO, rotate_span)
servo_rotate_direction = 0
drugo:
radarski_indeks += 1ako je servo_rotacijski_smjer == 0else-1
# i poslati vrijednosti radara
radio.send_bytes (radar)
probati:
# čitanje naredbi robota
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# i aktivirajte motore ako postoje primljene naredbe
set_speed (lmotor, rmotor)
voziti()
osimTypeError:
proći

pogledajte rawgigglebot_lidar_robot.py hostirano sa ❤ od strane GitHub -a

Korak 6: Programiranje daljinskog upravljača - dio II

Ostaje učiniti programiranje drugog BBC micro: bita koji djeluje kao daljinski.

Daljinski upravljač služi za prikaz relativne udaljenosti od prepreka na ekranu veličine 5 x 5 piksela. Najviše će biti uključeno 10 piksela.

Istodobno, daljinski upravljač daje vam mogućnost daljinskog upravljanja GiggleBotom pritiskom na njegova 2 gumba: pomaknite se naprijed, ulijevo i udesno.

Napomena: Sljedećoj skripti možda nedostaju razmaci, a čini se da je to zbog problema u prikazivanju GitHub gista. Pritisnite suštinu da biste se prebacili na njegovu stranicu GitHub gdje možete kopirati i zalijepiti kôd.

GiggleBot sa daljinskim upravljanjem baziran na LIDAR -u - kod na daljinu

iz microbit uvoza sleep, display, button_a, button_b
uvozni ustrukt
uvoz radio
uvoz matematike
radio.on ()
rotacija_koraka = 10
rotate_span = 160# u stupnjevima
rotate_step = rotate_span / rotate_steps
max_distance = 50# u centimetrima
side_length_leds = 3 # mjereno u # piksela
radar = bajtr (niz rotacije_koraci)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
spremljeni_xar = bytearray (rotacijski_koraci)
spremljeni_god = bajtrni niz (rotacijski_koraci)
brzina_motora = 50
whileTrue:
status = radio.receive_bytes_into (radar)
ako status nije Nijedan:
# display.clear ()
za c, val bez broja (radar):
ako je radar [c] <= maksimalna_daljenost:
# izračunajte 2d koordinate svake udaljenosti
kut = koraci zakretanja / (koraci zakretanja -1) * korak zakretanja * c
kut += (180- zakretanje_span) /2,0
x_c = math.cos (kut * math.pi /180,0) * radar [c]
y_c = math.sin (kut * math.pi /180,0) * radar [c]
# skalirajte udaljenosti tako da stane na 5x5 mikrobitni zaslon
x_c = x_c * (bočne_dužine_vlake -1) / max_daljenost
y_c = y_c * (side_length_leds +1) / max_distance
# koordinate repozicije
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# okrugle koordinate točno gdje se nalaze LED diode
ako je x_c - matematički pod (x_c) <0,5:
x_c = matematički pod (x_c)
drugo:
x_c = math.ceil (x_c)
if y_c - math.floor (y_c) <0,5:
y_c = matematički pod (y_c)
drugo:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
drugo:
xar [c] = 0
yar [c] = 0
display.clear ()
za x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# ispis (popis (zip (xar, yar, radar)))
stanjeA = gumb_a.is_pressed ()
stanjeB = button_b.is_pressed ()
ako stanjeA i stanjeB:
radio.send_bytes (ustruct.pack ('bb', brzina_motora, brzina_motora))
ispis ("naprijed")
ako stanjeA, a ne stanjeB:
radio.send_bytes (ustruct.pack ('bb', brzina_motora, -motor_brzina))
ispis ('lijevo')
ifnot stanjeA i stanjeB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
ispis ("desno")
ifnot stanjeA i ne stanjeB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
ispis ('stop')

pogledajte rawgigglebot_lidar_remote.py hostirano sa ❤ na GitHubu

Korak 7: Tumačenje udaljenog zaslona

"loading =" lazy "kontrolirati GiggleBot, imate sljedeće mogućnosti:

  1. Pritisnite gumb A i gumb B za pomicanje GiggleBot -a prema naprijed.
  2. Pritisnite gumb A da biste okrenuli GiggleBot ulijevo.
  3. Pritisnite gumb B da biste okrenuli GiggleBot udesno.

Da biste vidjeli u kojem smjeru su otkrivene najbliže prepreke, samo pogledajte zaslon daljinskog upravljača (daljinski BBC mikro: bit koji držite). Trebali biste moći kontrolirati GiggleBot iz daljine, a da ga ne gledate.

Preporučeni: