Innholdsfortegnelse:

Lag en Lidar-guidet robot med GiggleBot: 8 trinn
Lag en Lidar-guidet robot med GiggleBot: 8 trinn

Video: Lag en Lidar-guidet robot med GiggleBot: 8 trinn

Video: Lag en Lidar-guidet robot med GiggleBot: 8 trinn
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Lag en Lidar-guidet robot med GiggleBot
Lag en Lidar-guidet robot med GiggleBot
Lag en Lidar-guidet robot med GiggleBot
Lag en Lidar-guidet robot med GiggleBot
Lag en Lidar-guidet robot med GiggleBot
Lag en Lidar-guidet robot med GiggleBot

I denne opplæringen får vi GiggleBot til å takle vanskelighetene med en labyrint.

Vi monterer en servo på GiggleBot som vi fester en avstandssensor på. Mens du kjører, skal servoen rotere frem og tilbake slik at avstandssensoren kan måle avstanden opp til hvert hinder. Dette fungerer omtrent som en LIDAR -sensor som vanligvis er mye dyrere.

På samme tid sender GiggleBot disse dataene til en ekstern BBC micro: bit som viser sin 5-til-5-matrise av lysdioder sin relative posisjon til hindringene.

Jobben din er å bare kunne navigere i GiggleBot ved å se på hva den viser på den andre BBC micro: bit. For å kontrollere GiggleBot brukes knappene på den eksterne BBC micro: bit.

Det høres gøy ut! La oss komme til det, skal vi?

Trinn 1: Nødvendige komponenter

Nødvendige komponenter
Nødvendige komponenter

Vi kommer til å trenge:

  1. En fniseBot.
  2. En batteripakke til BBC micro: bit. Den følger med en BBC micro: bit i pakken.
  3. x3 AA -batterier til GiggleBot.
  4. En Grove -kabel for å koble avstandssensoren til GiggleBot.
  5. Et servosett fra DexterIndustries.
  6. x3 BBC micro: bits. En for GiggleBot og en som ble brukt til å kontrollere roboten langt unna.
  7. En avstandssensor fra DexterIndustries.

Få GiggleBot -roboten til BBC micro: bit her!

Trinn 2: Montering av roboten

Montering av roboten
Montering av roboten
Montering av roboten
Montering av roboten

For å gjøre GiggleBot klar til å bli programmert, må vi montere den, selv om det ikke er så mye som trengs å gjøres.

Sett de 3 AA -batteriene inn i rommet under GiggleBot.

Monter servopakken. Til den roterende armen på servoen bruker du det siste hullet i den til å feste servoen på GiggleBots frontkontakter. Du kan bruke en skrue og/eller en ledning for å gjøre den mer stabil på sin plass. Eller du kan varme lim det på brettet. I mitt tilfelle brukte jeg en skrue og en kort ledning for å knytte servoarmen til GiggleBot -brettet.

Når du monterer servoarmen på servoen, må du kontrollere at servoen allerede er satt til posisjon 80. Du kan gjøre det ved å ringe gigglebot.set_servo (gigglebot. RIGHT, 80). Du kan lese mer om det her.

Plasser deretter avstandssensoren på forsiden av servopakken og fikser den som i eksemplet ovenfor.

Til slutt kobler du avstandssensoren med en Grove -kabel til en av de 2 I2C -portene og servomotoren til den høyre porten som sitter på GiggleBot - den riktige porten er nevnt på den.

Trinn 3: Lag din egen labyrint - valgfritt

Lag din egen labyrint - valgfritt
Lag din egen labyrint - valgfritt

I dette tilfellet har jeg brukt en haug med esker for å lage et spor med lukket sløyfe, som ligner på en NASCAR.

På dette trinnet kan du bli veldig kreativ og gjøre den så vridd du vil, eller gjøre den super lang fordi det virkelig er opp til deg.

Eller hvis du ikke vil ha et spor i det hele tatt, kan du for eksempel sette GiggleBot på et kjøkken eller en stue - det burde være godt nok fordi det er mange vegger og hindringer du fortsatt må unngå.

Trinn 4: Sette opp miljøet

Sette opp miljøet
Sette opp miljøet

For at du skal kunne programmere BBC micro: bit i MicroPython, må du sette opp en editor for den (Mu Editor) og angi GiggleBot MicroPython Runtime som kjøretid. For det må du følge instruksjonene på denne siden. Fra nå av brukes versjon v0.4.0 av kjøretiden.

Trinn 5: Programmering av GiggleBot - del I

La oss først sette opp GiggleBots skript. Dette skriptet får GiggleBot til å rotere servomotoren 160 grader (80 grader i hver retning), samtidig som den tar 10 avlesninger fra avstandssensoren per sving.

Når den er slått på, vil GiggleBot stå i berøring til den mottar en kommando fra fjernkontrollen. Det kan bare være tre kommandoer: gå fremover, til venstre eller til høyre.

Merk: Følgende skript kan mangle mellomrom, og dette ser ut til å skyldes et problem med visning av GitHub Gists. Klikk på essensen for å ta deg til GitHub-siden der du kan kopiere og lime inn koden.

Fjernstyrt LIDAR-basert GiggleBot

fra gigglebot import*
fra distance_sensor import DistanceSensor
fra mikrobit import søvn
fra utime import ticks_us, sleep_us
import ustruct
importere radio
# stopp roboten hvis den allerede beveger seg
Stoppe()
# aktiver radio
radio.on ()
# avstandssensorobjekt
ds = DistanceSensor ()
ds.start_continuous ()
rotere_tid = 0,7# målt i sekunder
rotate_span = 160# målt i grader
rotere_steg = 10
overhead_compensation = 1,05# definert i prosent
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radar = bytearray (roter_steg)
servo_rotate_direction = 0# 0 for å gå oppover (0-> 160) og 1 ellers
radar_index = 0
set_servo (RIGHT, 0)
whileTrue:
# lest fra radaren
if ticks_us () - last_read_time> time_per_step:
# lest fra avstandssensoren
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
print (radar_index)
# gjør logikken for å rotere servoen fra venstre til høyre
hvis radar_index == rotate_steps -1og servo_rotate_direction == 0:
set_servo (RIGHT, 0)
servo_rotate_direction = 1
elif radar_index == 0og servo_rotate_direction == 1:
set_servo (RIGHT, rotate_span)
servo_rotate_direction = 0
ellers:
radar_index += 1if servo_rotate_direction == 0else-1
# og send radarverdiene
radio.send_bytes (radar)
prøve:
# les robotkommandoer
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# og aktiver motorene hvis det er mottatte kommandoer
set_speed (lmotor, rmotor)
kjøre()
exceptTypeError:
sende

vis rawgigglebot_lidar_robot.py hostet av ❤ av GitHub

Trinn 6: Programmering av fjernkontrollen - Del II

Det som gjenstår er å programmere den andre BBC micro: bit som fungerer som en fjernkontroll.

Fjernkontrollen brukes til å vise den relative avstanden til hindringer på sin 5-til-5-piksel laget skjerm. På det meste kommer det til å være 10 piksler slått på.

Samtidig gir fjernkontrollen deg mulighetene til å fjernstyre GiggleBot ved å trykke på de 2 knappene: gå fremover, til venstre og til høyre.

Merk: Følgende skript kan mangle mellomrom, og dette ser ut til å skyldes et problem med visning av GitHub Gists. Klikk på essensen for å ta deg til GitHub-siden der du kan kopiere og lime inn koden.

Fjernstyrt LIDAR -basert GiggleBot - ekstern kode

fra mikrobitimport, visning, knapp_a, knapp_b
import ustruct
importere radio
import matematikk
radio.on ()
rotere_steg = 10
rotate_span = 160# i grader
rotate_step = rotate_span / rotate_steps
maks_avstand = 50# i centimeter
side_length_leds = 3 # målt i antall piksler
radar = bytearray (roter_steg)
xar = bytearray (roter_steg)
yar = bytearray (roter_steg)
save_xar = bytearray (roter_steg)
save_yar = bytearray (roter_steg)
motorhastighet = 50
whileTrue:
status = radio.receive_bytes_into (radar)
hvis status ikke er Ingen:
# display.clear ()
for c, val inenumerate (radar):
hvis radar [c] <= max_distance:
# beregne 2d koordinater for hver avstand
vinkel = rotere_ trinn / (rotere_ trinn -1) * rotere_ trinn * c
vinkel += (180- rotate_span) /2.0
x_c = math.cos (vinkel * math.pi /180.0) * radar [c]
y_c = math.sin (vinkel * math.pi /180.0) * radar [c]
# skalere avstandene for å passe på 5x5 mikrobit -skjermen
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# flytt posisjoner
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# runde koordinater nøyaktig hvor lysdiodene er funnet
hvis x_c - matte. gulv (x_c) <0,5:
x_c = matematikk. gulv (x_c)
ellers:
x_c = matematikk.ceil (x_c)
hvis y_c - matematikkgulv (y_c) <0,5:
y_c = matematikk. etasje (y_c)
ellers:
y_c = matematikk.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
ellers:
xar [c] = 0
yar [c] = 0
display.clear ()
for x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (liste (zip (xar, yar, radar)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
hvis stateA og stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('fremover')
hvis stateA og ikke stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
print ('venstre')
ifnot stateA og stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
print ('høyre')
ifnot stateA og ikke stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ('stopp')

vis rawgigglebot_lidar_remote.py hostet av ❤ av GitHub

Trinn 7: Tolke fjernskjermen

"loading =" lat "kontroller GiggleBot, du har følgende alternativer:

  1. Trykk på knapp A og B for å flytte GiggleBot fremover.
  2. Trykk på knapp A for å snurre GiggleBot til venstre.
  3. Trykk på knapp B for å snurre GiggleBot til høyre.

For å se i hvilken retning de nærmeste hindringene oppdages, bare se på fjernkontrollens (den eksterne BBC micro: bit som du holder) skjermen. Du bør kunne kontrollere GiggleBot langt unna uten å se på den.

Anbefalt: