Kazalo:

Naredite robota, ki ga vodi Lidar, z GiggleBotom: 8 korakov
Naredite robota, ki ga vodi Lidar, z GiggleBotom: 8 korakov

Video: Naredite robota, ki ga vodi Lidar, z GiggleBotom: 8 korakov

Video: Naredite robota, ki ga vodi Lidar, z GiggleBotom: 8 korakov
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
Naredite robota, ki ga vodi Lidar, z GiggleBotom
Naredite robota, ki ga vodi Lidar, z GiggleBotom
Naredite robota, ki ga vodi Lidar, z GiggleBotom
Naredite robota, ki ga vodi Lidar, z GiggleBotom
Z GiggleBotom naredite robota, ki ga vodi Lidar
Z GiggleBotom naredite robota, ki ga vodi Lidar

V tej vadnici GiggleBot rešuje težave labirinta.

Na GiggleBot namestimo servo, na katerega pritrdimo senzor razdalje. Med tekom se bo servo vrtil naprej in nazaj, tako da lahko senzor razdalje izmeri razdaljo do vsake ovire. To deluje podobno kot senzor LIDAR, ki je običajno veliko dražji.

Hkrati GiggleBot pošilja te podatke v oddaljeni mikro-bit BBC, ki na svoji matriki LED 5 x 5 prikazuje svoj relativni položaj do ovir.

Vaša naloga je, da lahko krmarite po GiggleBotu le tako, da pogledate, kaj je prikazano na drugem BBC micro: bit. Za nadzor GiggleBota se uporabljajo gumbi na oddaljenem BBC micro: bit.

To se sliši zabavno! Gremo k temu, kajne?

Korak: Potrebne komponente

Potrebne komponente
Potrebne komponente

Potrebovali bomo:

  1. GiggleBot.
  2. Baterijski paket za BBC micro: bit. V paketu je BBC micro: bit.
  3. x3 AA baterije za GiggleBot.
  4. Kabel Grove za povezavo senzorja razdalje z GiggleBotom.
  5. Servo komplet podjetja DexterIndustries.
  6. x3 BBC mikro: bitovi. Enega za GiggleBot in enega za upravljanje robota od daleč.
  7. Senzor razdalje podjetja DexterIndustries.

Pridobite robota GiggleBot za BBC micro: bit tukaj!

2. korak: Sestavljanje robota

Sestavljanje robota
Sestavljanje robota
Sestavljanje robota
Sestavljanje robota

Da bi bil GiggleBot pripravljen za programiranje, ga moramo sestaviti, čeprav ni treba storiti veliko.

3 baterije AA vstavite v predal pod GiggleBot.

Sestavite servo paket. Na njegovo vrtljivo roko servomotorja uporabite zadnjo luknjo, da pritrdite servo na sprednje priključke GiggleBot. Za večjo stabilnost lahko uporabite vijak in/ali nekaj žice. Ali pa ga vroče prilepite na desko. V mojem primeru sem z vijakom in kratko žico privezal servo roko na ploščo GiggleBot.

Ko montirate servo roko na servo, se prepričajte, da je servo že nastavljen na položaj 80. To lahko storite tako, da pokličete gigglebot.set_servo (gigglebot. RIGHT, 80). Več o tem si lahko preberete tukaj.

Nato postavite senzor razdalje na sprednjo stran servo paketa in ga pritrdite kot v zgornjem primeru.

Nazadnje, senzor razdalje s kablom Grove priključite na katero koli od 2 vrat I2C, servo motor pa na desna vrata, ki sedijo na GiggleBotu - na njem so navedena desna vrata.

3. korak: Ustvarite lasten labirint - neobvezno

Ustvarite lasten labirint - izbirno
Ustvarite lasten labirint - izbirno

V tem primeru sem uporabil kup škatel za ustvarjanje proge z zaprto zanko, podobno kot pri NASCAR.

Na tem koraku lahko postanete resnično ustvarjalni in naredite, kako želite, da se zvije, ali pa postane zelo dolgo, ker je res odvisno od vas.

Ali pa, če si sploh ne želite skladbe, lahko na primer postavite GiggleBot v kuhinjo ali dnevno sobo - to bi moralo biti dovolj dobro, ker je veliko sten in ovir, ki se jim morate še izogniti.

4. korak: Nastavitev okolja

Nastavitev okolja
Nastavitev okolja

Če želite programirati BBC micro: bit v MicroPythonu, morate zanj nastaviti urejevalnik (urejevalnik Mu) in kot čas izvajanja nastaviti GiggleBot MicroPython Runtime. Za to morate slediti navodilom na tej strani. Od tega trenutka se uporablja različica v0.4.0 izvajalnega okolja.

5. korak: Programiranje programa GiggleBot - I. del

Najprej nastavimo skript GiggleBot. Ta skript bo naredil, da bo GiggleBot zasukal svoj servo motor za 160 stopinj (80 stopinj v vsako smer), hkrati pa odvzel 10 odčitkov senzorja razdalje na zavoj.

Ko je vklopljen, bo GiggleBot miroval, dokler ne prejme ukaza z daljinskega upravljalnika. Obstajajo lahko samo 3 ukazi: premaknite se naprej, v levo ali v desno.

Opomba: V tem skriptu morda manjkajo presledki, kar je verjetno posledica neke težave pri prikazovanju GitHub Gists. Kliknite na bistvo, da se pomaknete na njegovo stran GitHub, kjer lahko kopirate in prilepite kodo.

GiggleBot na daljavo, ki temelji na LIDAR-u

od gigglebot import*
from distance_sensor import DistanceSensor
iz mikrobnega spanja za uvoz
od utime import ticks_us, sleep_us
uvozni ustruct
uvoz radia
# ustavite robota, če se že premika
stop ()
# omogoči radio
radio.on ()
# predmet senzorja razdalje
ds = Senzor razdalje ()
ds.start_continuous ()
rotate_time = 0.7# merjeno v sekundah
rotate_span = 160# merjeno v stopinjah
rotate_steps = 10
kompenzacija režijskih stroškov = 1,05# definirano v odstotkih
time_per_step = 10 ** 6* rotate_time / (rotate_steps* nadzemna_kompenzacija)
last_read_time = 0
radar = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 za premik navzgor (0-> 160) in 1 drugače
radar_index = 0
set_servo (DESNO, 0)
medtem ko res:
# prebrano z radarja
če ticks_us () - last_read_time> time_per_step:
# branje s senzorja razdalje
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
tiskanje (radar_index)
# naredite logiko za zasuk servomotorja od leve proti desni
če je radar_index == rotate_steps -1 in servo_rotate_direction == 0:
set_servo (DESNO, 0)
servo_rotate_direction = 1
elif radar_index == 0in smer servo_rotate_direct == 1:
set_servo (DESNO, rotate_span)
servo_rotate_direction = 0
drugače:
radar_index += 1 če je servo_rotate_direction == 0else-1
# in pošljite radarske vrednosti
radio.send_bytes (radar)
poskusi:
# preberite ukaze robota
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# in aktivirajte motorje v primeru prejetih ukazov
set_speed (lmotor, rmotor)
pogon ()
razenTypeError:
prehod

oglejte si rawgigglebot_lidar_robot.py, ki ga gosti ❤ GitHub

6. korak: Programiranje daljinskega upravljalnika - II. Del

Ostane le še programiranje drugega BBC micro: bita, ki deluje kot daljinski upravljalnik.

Daljinski upravljalnik se uporablja za prikaz razdalje do ovir na zaslonu velikosti 5 x 5 slikovnih pik. Vklopljenih bo največ 10 slikovnih pik.

Hkrati vam daljinski upravljalnik daje možnost daljinskega upravljanja z GiggleBotom s pritiskom na dva gumba: premaknite se naprej, v levo in v desno.

Opomba: V tem skriptu morda manjkajo presledki, kar je verjetno posledica neke težave pri prikazovanju GitHub Gists. Kliknite na bistvo, da se pomaknete na njegovo stran GitHub, kjer lahko kopirate in prilepite kodo.

GiggleBot na daljavo, ki temelji na LIDAR -u - koda na daljavo

iz uvoza microbit sleep, display, button_a, button_b
uvozni ustruct
uvoz radia
uvoz matematike
radio.on ()
rotate_steps = 10
rotate_span = 160# v stopinjah
rotate_step = rotate_span / rotate_steps
max_distance = 50# v centimetrih
side_length_leds = 3 # merjeno v # pikslih
radar = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
hitrost_motorja = 50
medtem ko res:
status = radio.receive_bytes_into (radar)
če status ni Nič:
# display.clear ()
za c, val nešteto (radar):
če je radar [c] <= največja_razdalja:
# izračunajte 2d koordinate vsake razdalje
kot = vrtljivi_koraki / (vrtljivi_koraki -1) * rotacijski_korak * c
kot += (180-vrtljivi_razpon) /2,0
x_c = math.cos (kot * math.pi /180.0) * radar [c]
y_c = math.sin (kot * math.pi /180.0) * radar [c]
# prilagodite razdalje, da se prilegajo zaslonu 5x5 mikrobit
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# koordinate premestitve
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# okrogle koordinate točno tam, kjer najdemo LED
če x_c - math.floor (x_c) <0,5:
x_c = math.floor (x_c)
drugače:
x_c = math.ceil (x_c)
če y_c - math.floor (y_c) <0,5:
y_c = math.floor (y_c)
drugače:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
drugače:
xar [c] = 0
yar [c] = 0
display.clear ()
za x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (seznam (zip (xar, yar, radar)))
stanjeA = gumb_a.is_pressed ()
stanjeB = gumb_b.is_pressed ()
če sta stateA in stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('naprej')
če stanjeA in ne stanjeB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
tiskanje ("levo")
če ni stanjeA in stanjeB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
print ('desno')
ifnot stanjeA in ne stanjeB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ('stop')

oglejte si rawgigglebot_lidar_remote.py, ki ga gosti ❤ GitHub

7. korak: Razlaga oddaljenega zaslona

"loading =" lazy "nadzor GiggleBot, imate naslednje možnosti:

  1. Pritisnite gumb A in gumb B, da premaknete GiggleBot naprej.
  2. Pritisnite gumb A, da zavrtite GiggleBot v levo.
  3. Pritisnite gumb B, da zavrtite GiggleBot v desno.

Če želite videti, v katero smer so zaznane najbližje ovire, samo poglejte na zaslon daljinskega upravljalnika (daljinski mikro -bit BBC, ki ga držite). GiggleBot bi morali nadzorovati od daleč, ne da bi ga gledali.

Priporočena: