Sadržaj:

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

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

Video: Napravite Lidar-vođenog robota sa GiggleBotom: 8 koraka
Video: 9 гениальных деревообрабатывающих инструментов, которые сделают вашу жизнь проще 2024, Novembar
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 pokušavamo GiggleBot -u riješiti poteškoće labirinta.

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

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

Vaš posao je da možete upravljati GiggleBotom samo gledajući ono što je prikazano na drugom BBC micro: bitu. Za kontrolu GiggleBot -a koriste se dugmad na daljinskom BBC micro: bit -u.

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

Korak 1: Potrebne komponente

Potrebne komponente
Potrebne komponente

Trebat će nam:

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

Ovdje nabavite robota GiggleBot za BBC micro: bit!

Korak 2: Sklapanje robota

Sklapanje robota
Sklapanje robota
Sklapanje robota
Sklapanje robota

Da bi GiggleBot bio spreman za programiranje, moramo ga sastaviti, iako ne treba mnogo 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 prič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, koristio 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 pomoću Grove kabela 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: Kreirajte vlastiti labirint - izborno

Kreirajte vlastiti labirint - izborno
Kreirajte 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 zaista ovisi o vama.

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

Korak 4: Postavljanje okruženja

Postavljanje okruženja
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 5: Programiranje GiggleBot -a - I dio

Prvo, postavimo GiggleBot skriptu. Ova skripta će natjerati GiggleBot da rotira svoj servo motor za 160 stepeni (80 stepeni u svakom smjeru), dok će istovremeno uzeti 10 očitanja sa senzora udaljenosti po okretu.

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

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 sa daljinskim upravljanjem baziran na LIDAR-u

iz gigglebot uvoza*
from distance_sensor import DistanceSensor
iz stanja mirovanja za uvoz mikrobita
from utime import ticks_us, sleep_us
import ustruct
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
rotate_steps = 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
radar_index = 0
set_servo (DESNO, 0)
whileTrue:
# čitanje s radara
ako ticks_us () - last_read_time> time_per_step:
# očitavanje sa senzora udaljenosti
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
ispis (radar_index)
# uradite logiku za okretanje servo s lijeva na desno
ako je radar_index == rotirati_korake -1 i servo_rotate_direction == 0:
set_servo (DESNO, 0)
servo_rotate_direction = 1
elif radar_index == 0i servo_rotate_direction == 1:
set_servo (DESNO, rotate_span)
servo_rotate_direction = 0
drugo:
radar_index += 1 ako je servo_rotate_direction == 0else-1
# i pošaljite vrijednosti radara
radio.send_bytes (radar)
probaj:
# čitanje naredbi robota
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# i aktivirajte motore ako postoje primljene naredbe
set_speed (lmotor, rmotor)
drive ()
osimTypeError:
pass

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

Korak 6: Programiranje daljinskog upravljača - II dio

Ostaje da se uradi programiranje drugog BBC micro: bita koji deluje kao daljinski.

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

U isto vrijeme, 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 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 sa daljinskim upravljanjem na bazi LIDAR -a - daljinski kod

iz microbit uvoza sleep, display, button_a, button_b
import ustruct
uvoz radio
uvoz matematike
radio.on ()
rotate_steps = 10
rotate_span = 160# u stupnjevima
rotate_step = rotate_span / rotate_steps
max_distance = 50# u centimetrima
side_length_leds = 3 # mereno u # piksela
radar = bajtr (niz rotacije_koraci)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
spremljeni_xar = bajtrni niz (rotacijski_koraci)
sačuvani_godina = bajtrni niz (rotacijski_koraci)
brzina_motora = 50
whileTrue:
status = radio.receive_bytes_into (radar)
ako status nije Nijedan:
# display.clear ()
za c, val inenumerate (radar):
ako je radar [c] <= maksimalna_daljenost:
# izračunajte 2d koordinate svake udaljenosti
angle = rotate_steps / (rotate_steps -1) * rotate_step * c
kut += (180- rotacija_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 ekran
x_c = x_c * (side_length_leds -1) / max_distance
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 tačno gdje se nalaze LED diode
if x_c - math.floor (x_c) <0,5:
x_c = math.floor (x_c)
drugo:
x_c = math.ceil (x_c)
if y_c - math.floor (y_c) <0,5:
y_c = math.floor (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 (lista (zip (xar, yar, radar)))
stateA = button_a.is_pressed ()
stanjeB = button_b.is_pressed ()
ako stateA i stateB:
radio.send_bytes (ustruct.pack ('bb', brzina_motora, brzina_motora))
print ('naprijed')
ako stanjeA a ne stanjeB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
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))
print ('stop')

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

Korak 7: Tumačenje udaljenog ekrana

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

  1. Pritisnite dugme A i dugme B da biste pomerili GiggleBot napred.
  2. Pritisnite dugme A da biste okrenuli GiggleBot ulijevo.
  3. Pritisnite dugme B da biste okrenuli GiggleBot udesno.

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

Preporučuje se: