Indholdsfortegnelse:

Lav en Lidar-guidet robot med GiggleBot: 8 trin
Lav en Lidar-guidet robot med GiggleBot: 8 trin

Video: Lav en Lidar-guidet robot med GiggleBot: 8 trin

Video: Lav en Lidar-guidet robot med GiggleBot: 8 trin
Video: Возведение перегородок санузла из блоков. Все этапы. #4 2024, November
Anonim
Lav en Lidar-guidet robot med GiggleBot
Lav en Lidar-guidet robot med GiggleBot
Lav en Lidar-guidet robot med GiggleBot
Lav en Lidar-guidet robot med GiggleBot
Lav en Lidar-guidet robot med GiggleBot
Lav en Lidar-guidet robot med GiggleBot

I denne vejledning får vi GiggleBot til at tackle vanskelighederne ved en labyrint.

Vi monterer en servo på GiggleBot, hvorpå vi fastgør en afstandssensor. Under kørslen vil servoen rotere frem og tilbage, så afstandssensoren kan måle afstanden op til hver forhindring. Dette fungerer meget som en LIDAR -sensor, som normalt er meget dyrere.

På samme tid sender GiggleBot disse data til en fjern BBC-mikro: bit, der viser sin 5-til-5 matrix af LED'er sin relative position til forhindringerne.

Dit job er kun at kunne navigere i GiggleBot ved at se på, hvad det er vist på den anden BBC micro: bit. For at styre GiggleBot bruges knapperne på den eksterne BBC micro: bit.

Det lyder sjovt! Lad os komme til det, skal vi?

Trin 1: Påkrævede komponenter

Påkrævede komponenter
Påkrævede komponenter

Vi får brug for:

  1. En fniseBot.
  2. En batteripakke til BBC micro: bit. Det følger med en BBC micro: bit i sin pakke.
  3. x3 AA -batterier til GiggleBot.
  4. Et Grove -kabel til at forbinde afstandssensoren til GiggleBot.
  5. Et servokit fra DexterIndustries.
  6. x3 BBC micro: bits. En til GiggleBot og en, der bruges til at styre robotten langt væk.
  7. En afstandssensor fra DexterIndustries.

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

Trin 2: Montering af robotten

Montering af robotten
Montering af robotten
Montering af robotten
Montering af robotten

For at gøre GiggleBot klar til at blive programmeret, skal vi samle den, selvom der ikke er meget brug for at gøre.

Indsæt de 3 AA -batterier i dets rum under GiggleBot.

Saml servopakken. Til den roterende arm på servoen skal du bruge det sidste hul i den til at fastgøre servoen på GiggleBots forreste stik. Du kan bruge en skrue og/eller en ledning til at gøre den mere stabil på sin plads. Eller du kan varmt lime det til brættet. I mit tilfælde brugte jeg en skrue og en kort ledning til at binde servoarmen til GiggleBot -kortet.

Når servoarmen monteres på servoen, skal du sørge for, at servoen allerede er indstillet til position 80. Det kan du gøre ved at ringe til gigglebot.set_servo (gigglebot. RIGHT, 80). Det kan du læse mere om her.

Placer derefter afstandssensoren på forsiden af servopakken og fix den som i ovenstående eksempel.

Tilslut til sidst afstandssensoren med et Grove -kabel til en af de 2 I2C -porte og servomotoren til den højre port, der sidder på GiggleBot - den rigtige port er nævnt på den.

Trin 3: Opret din egen labyrint - valgfri

Opret din egen labyrint - valgfri
Opret din egen labyrint - valgfri

I dette tilfælde har jeg brugt en masse kasser til at oprette et spor med lukket kredsløb, der ligner en NASCAR.

På dette trin kan du blive virkelig kreativ og gøre det, hvor snoet du vil, eller gøre det super langt, fordi det virkelig er op til dig.

Eller hvis du slet ikke vil have et spor, kan du f.eks. Sætte GiggleBot i et køkken eller en stue - det burde være godt nok, fordi der er masser af vægge og forhindringer, du stadig skal undgå.

Trin 4: Opsætning af miljøet

Opsætning af miljøet
Opsætning af miljøet

For at du skal kunne programmere BBC micro: bit i MicroPython, skal du oprette en editor til den (Mu Editor) og indstille GiggleBot MicroPython Runtime som dens runtime. Til det skal du følge instruktionerne på denne side. Fra dette øjeblik bruges version v0.4.0 af runtime.

Trin 5: Programmering af GiggleBot - del I

Lad os først konfigurere GiggleBots script. Dette script vil få GiggleBot til at rotere sin servomotor 160 grader (80 grader i hver retning), samtidig med at den tager 10 aflæsninger fra afstandssensoren pr. Tur.

Når den er tændt, vil GiggleBot stå ved, indtil den modtager en kommando fra fjernbetjeningen. Der kan kun være 3 kommandoer: gå fremad, til venstre eller til højre.

Bemærk: Følgende script mangler muligvis mellemrum, og det ser ud til at skyldes et problem med visning af GitHub Gists. Klik på kernen for at tage dig til dens GitHub-side, hvor du kan kopiere og indsætte koden.

Fjernstyret LIDAR-baseret 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
# stop robotten, hvis den allerede bevæger sig
hold op()
# aktiver radio
radio.on ()
# afstandssensorobjekt
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0,7# målt i sekunder
rotate_span = 160# målt i grader
rotate_steps = 10
overhead_compensation = 1,05# defineret i procent
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radar = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 for at gå opad (0-> 160) og 1 ellers
radar_index = 0
set_servo (HØJRE, 0)
whileTrue:
# læst fra radaren
hvis ticks_us () - last_read_time> time_per_step:
# læst fra afstandssensoren
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
print (radar_index)
# gør logikken for at rotere servoen fra venstre til højre
hvis radar_index == rotate_steps -1og servo_rotate_direction == 0:
set_servo (HØJRE, 0)
servo_rotate_direction = 1
elif radar_index == 0og servo_rotate_direction == 1:
set_servo (HØJRE, roter_span)
servo_rotate_direction = 0
andet:
radar_index += 1if servo_rotate_direction == 0else-1
# og send radarværdierne
radio.send_bytes (radar)
prøve:
# læs robotkommandoer
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# og aktiver motorerne, hvis der er modtagne kommandoer
set_speed (lmotor, rmotor)
køre()
exceptTypeError:
passere

se rawgigglebot_lidar_robot.py hostet af ❤ af GitHub

Trin 6: Programmering af fjernbetjeningen - Del II

Det, der skal gøres, er at programmere den 2. BBC micro: bit, der fungerer som en fjernbetjening.

Fjernbetjeningen bruges til at vise den 5 x 5 pixel fremstillede skærm den relative afstand til forhindringer. Højst vil der være tændt 10 pixels.

På samme tid giver fjernbetjeningen dig mulighed for at fjernbetjene GiggleBot ved at trykke på dens 2 knapper: gå fremad, til venstre og til højre.

Bemærk: Følgende script mangler muligvis mellemrum, og det ser ud til at skyldes et problem med visning af GitHub Gists. Klik på kernen for at tage dig til dens GitHub-side, hvor du kan kopiere og indsætte koden.

Fjernstyret LIDAR -baseret GiggleBot - Fjernkode

fra mikrobit import sleep, display, button_a, button_b
import ustruct
importere radio
import matematik
radio.on ()
rotate_steps = 10
rotate_span = 160# i grader
rotate_step = rotate_span / rotate_steps
max_distance = 50# i centimeter
side_length_leds = 3 # målt i antallet af pixels
radar = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
motorhastighed = 50
whileTrue:
status = radio.receive_bytes_into (radar)
hvis status ikke er Ingen:
# display.clear ()
for c, val optælling (radar):
hvis radar [c] <= max_distance:
# beregne 2d koordinater for hver afstand
vinkel = rotere_trin / (rotere_trin -1) * rotere_trin * 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 afstandene, så de passer på 5x5 mikrobit -skærmen
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# ompositioneringskoordinater
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# runde koordinater præcis, hvor lysdioderne findes
hvis x_c - matematikgulv (x_c) <0,5:
x_c = matematik. gulv (x_c)
andet:
x_c = matematik.ceil (x_c)
hvis y_c - matematikgulv (y_c) <0,5:
y_c = matematik.gulv (y_c)
andet:
y_c = matematik.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
andet:
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_hastighed, motor_hastighed))
print ('frem')
hvis stateA og ikke tilstand B:
radio.send_bytes (ustruct.pack ('bb', motor_hastighed, -motor_hastighed))
print ('venstre')
ifnot stateA og stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
print ('højre')
ifnot stateA og ikke stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ('stop')

se rawgigglebot_lidar_remote.py hostet af ❤ af GitHub

Trin 7: Fortolkning af fjernskærmen

"loading =" doven "styr GiggleBot, du har følgende muligheder:

  1. Tryk på knap A og knap B for at flytte GiggleBot fremad.
  2. Tryk på knappen A for at dreje GiggleBot til venstre.
  3. Tryk på knap B for at dreje GiggleBot til højre.

For at se i hvilken retning de nærmeste forhindringer opdages, skal du bare kigge på fjernbetjeningens (fjernbetjening BBC micro: bit, som du holder) skærm. Du burde kunne styre GiggleBot langt væk uden at se på det.

Anbefalede: