Turinys:

Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“: 8 žingsniai
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“: 8 žingsniai

Video: Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“: 8 žingsniai

Video: Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“: 8 žingsniai
Video: „KUKA Nordic“ internetinis seminaras „KR CYBERTECH nano 2“ 2024, Lapkritis
Anonim
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“
Sukurkite „Lidar“valdomą robotą naudodami „GiggleBot“

Šioje pamokoje mes siekiame, kad „GiggleBot“įveiktų labirinto sunkumus.

Mes montuojame servo ant „GiggleBot“, ant kurio pritvirtiname atstumo jutiklį. Bėgimo metu servo sistema sukasi pirmyn ir atgal, kad atstumo jutiklis galėtų išmatuoti atstumą iki kiekvienos kliūties. Tai veikia panašiai kaip LIDAR jutiklis, kuris paprastai yra daug brangesnis.

Tuo pačiu metu „GiggleBot“siunčia šiuos duomenis į nuotolinį BBC mikro: bitą, kuris ant 5x5 šviesos diodų matricos rodo savo santykinę padėtį su kliūtimis.

Jūsų užduotis yra sugebėti naršyti „GiggleBot“tik žiūrint į tai, kas rodoma kitame „BBC micro: bit“. Norint valdyti „GiggleBot“, naudojami nuotolinio „BBC micro: bit“mygtukai.

Tai skamba smagiai! Eikime prie jo, ar ne?

1 žingsnis: reikalingi komponentai

Būtini komponentai
Būtini komponentai

Mums reikės:

  1. „GiggleBot“.
  2. Akumuliatorius „BBC micro: bit“. Komplekte yra „BBC micro: bit“.
  3. x3 AA baterijos „GiggleBot“.
  4. „Grove“kabelis, skirtas atstumo jutikliui prijungti prie „GiggleBot“.
  5. Servo rinkinys iš „DexterIndustries“.
  6. x3 BBC mikro: bitai. Vienas skirtas „GiggleBot“, kitas - valdant robotą iš toli.
  7. Atstumo jutiklis iš „DexterIndustries“.

Gaukite „GiggleBot“robotą „BBC micro: bit“čia!

2 žingsnis: Surinkite robotą

Roboto surinkimas
Roboto surinkimas
Roboto surinkimas
Roboto surinkimas

Kad „GiggleBot“būtų paruoštas programuoti, turime jį surinkti, nors daug ką reikia padaryti.

Įdėkite 3 AA baterijas į skyrių po „GiggleBot“.

Surinkite servo paketą. Prie besisukančios servo rankenos naudokite paskutinę jos skylę, kad pritvirtintumėte servo prie „GiggleBot“priekinių jungčių. Galite naudoti varžtą ir (arba) laidą, kad jis būtų stabilesnis savo vietoje. Arba galite karštu klijuoti jį prie lentos. Mano atveju aš naudoju varžtą ir trumpą laidą, kad pririščiau servo ranką prie „GiggleBot“plokštės.

Montuodami servo svirtį ant servo, įsitikinkite, kad servo jau nustatyta į 80 padėtį. Tai galite padaryti paskambinę gigglebot.set_servo (gigglebot. RIGHT, 80). Daugiau apie tai galite paskaityti čia.

Tada įdėkite atstumo jutiklį į priekinę servo pakuotės pusę ir pritvirtinkite, kaip nurodyta aukščiau pateiktame pavyzdyje.

Galiausiai prijunkite atstumo jutiklį „Grove“kabeliu prie bet kurio iš 2 „I2C“prievadų, o servo variklį - prie dešiniojo „GiggleBot“prievado - jame nurodytas tinkamas prievadas.

3 žingsnis: sukurkite savo labirintą - neprivaloma

Sukurkite savo labirintą - neprivaloma
Sukurkite savo labirintą - neprivaloma

Šiuo atveju aš panaudojau daugybę dėžių, kad sukurtų uždaro ciklo takelį, panašų į NASCAR.

Atlikdami šį žingsnį, galite būti tikrai kūrybingi ir padaryti tai, kaip norite, arba padaryti tai labai ilgai, nes tai tikrai priklauso nuo jūsų.

Arba, jei visai nenorite takelio, galite, pavyzdžiui, įdėti „GiggleBot“į virtuvę ar svetainę - tai turėtų būti pakankamai gerai, nes vis dar yra daug sienų ir kliūčių, kurių reikia vengti.

4 žingsnis: aplinkos nustatymas

Aplinkos nustatymas
Aplinkos nustatymas

Kad galėtumėte programuoti „BBC micro: bit“„MicroPython“, turite nustatyti jo redaktorių („Mu Editor“) ir nustatyti „GiggleBot MicroPython Runtime“vykdymo laiką. Norėdami tai padaryti, turite vadovautis šiame puslapyje pateiktomis instrukcijomis. Šiuo metu naudojama vykdymo laiko versija v0.4.0.

5 žingsnis: „GiggleBot“programavimas - I dalis

Pirmiausia nustatykime „GiggleBot“scenarijų. Šis scenarijus privers „GiggleBot“pasukti savo servo variklį 160 laipsnių (80 laipsnių kiekviena kryptimi) ir tuo pačiu metu paimti 10 parodymų iš atstumo jutiklio per vieną posūkį.

Įjungus „GiggleBot“budės, kol gaus komandą iš nuotolinio valdymo pulto. Gali būti tik 3 komandos: judėti pirmyn, į kairę arba į dešinę.

Pastaba: šiame scenarijuje gali nebūti tarpų ir atrodo, kad tai įvyko dėl tam tikrų problemų rodant „GitHub Gists“. Spustelėkite esmę, kad pateksite į jo „GitHub“puslapį, kuriame galite nukopijuoti ir įklijuoti kodą.

Nuotoliniu būdu valdomas LIDAR pagrindu sukurtas „GiggleBot“

iš „Gigglebot“importo*
iš distance_sensor importas DistanceSensor
iš mikrobitų importo miego
iš utime importo erkės_, miego_
importo ustruktūra
importuoti radiją
# sustabdykite robotą, jei jis jau juda
sustabdyti()
# įjungti radiją
radio.on ()
# atstumo jutiklio objektas
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# išmatuotas sekundėmis
rotate_span = 160# matuojamas laipsniais
rotate_steps = 10
overhead_compensation = 1.05# apibrėžta procentais
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radaras = baitas (rotate_steps)
servo_rotate_direction = 0# 0, jei norite pakilti aukštyn (0-> 160) ir 1 kitaip
radaras_indeksas = 0
set_servo (DEŠINĖ, 0)
o tiesa:
# skaityti iš radaro
if ticks_us () - last_read_time> time_per_step:
# skaityti iš atstumo jutiklio
radaras [radaro_indeksas] = int (ds.read_range_continuous () /10)
last_read_time = erkės_ (()
spausdinti (radaras_indeksas)
# atlikite servo sukimo iš kairės į dešinę logiką
jei radaro_indeksas == pasukti_sukiai -1 ir servo_rotatyvo_kryptis == 0:
set_servo (DEŠINĖ, 0)
servo_rotate_direction = 1
elif radar_index == 0ir servo_rotate_direction == 1:
set_servo (RIGHT, rotate_span)
servo_rotate_direction = 0
Kitas:
radar_index += 1, jei servo_rotate_direction == 0else-1
# ir atsiųsk radaro vertes
radio.send_bytes (radaras)
bandyti:
# skaityti roboto komandas
lmotor, rmotor = ustruct.unpack ('bb', radio.recept_bytes ())
# ir įjunkite variklius, jei bus gautos komandos
set_speed (lmotor, rmotor)
vairuoti ()
išskyrusTypeError:
praeiti

peržiūrėti rawgigglebot_lidar_robot.py, kurį priglobia „GitHub“kartu su ❤

6 žingsnis: nuotolinio valdymo pulto programavimas - II dalis

Belieka užprogramuoti antrąjį BBC mikro: bitą, kuris veikia kaip nuotolinio valdymo pultas.

Nuotolinio valdymo pultas naudojamas 5 x 5 pikselių ekrane parodyti santykinį atstumą iki kliūčių. Daugiausia bus įjungta 10 pikselių.

Tuo pačiu metu nuotolinio valdymo pultas suteikia galimybę valdyti „GiggleBot“nuotoliniu būdu, paspaudus du jo mygtukus: judėti pirmyn, į kairę ir į dešinę.

Pastaba: šiame scenarijuje gali nebūti tarpų ir atrodo, kad tai įvyko dėl tam tikrų problemų rodant „GitHub Gists“. Spustelėkite esmę, kad pateksite į jo „GitHub“puslapį, kuriame galite nukopijuoti ir įklijuoti kodą.

Nuotoliniu būdu valdomas LIDAR pagrindu sukurtas „GiggleBot“- nuotolinis kodas

iš „microbit“importavimo miego, ekrano, button_a, button_b
importo ustruktūra
importuoti radiją
importuoti matematiką
radio.on ()
rotate_steps = 10
rotate_span = 160# laipsniais
rotate_step = rotate_span / rotate_steps
max_distance = 50# centimetrais
side_length_leds = 3 #, matuojamas # pikselių
radaras = baitas (rotate_steps)
xar = baitas (rotate_steps)
yar = baitas (rotate_steps)
Save_xar = baitas (rotate_steps)
išsaugotas_metas = baitas (rotate_steps)
variklio greitis = 50
o tiesa:
status = radio.recept_bytes_into (radaras)
jei būsena nėra Nėra:
# display.clear ()
c, val nesuskaičiuoti (radaras):
jei radaras [c] <= max_distance:
# Apskaičiuokite kiekvieno atstumo 2d koordinates
kampas = pasukti_žingsniai / (pasukti_žingsniai -1) * pasukti_žingsnis * c
kampas += (180- rotate_span) /2.0
x_c = math.cos (kampas * math.pi /180,0) * radaras [c]
y_c = math.sin (kampas * math.pi /180,0) * radaras [c]
# nustatykite atstumus, kad jie tilptų į 5x5 mikrobitų ekraną
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (šoniniai_ilgis_lydžiai +1) / max_distance
# perkėlimo koordinatės
x_c += (šoniniai_ilginiai_spalviai -1)
y_c = (šoniniai_ilginiai_padai +1) - y_c
# apvalios koordinatės tiksliai, kur yra šviesos diodai
jei x_c - matematika.floor (x_c) <0,5:
x_c = matematikos grindys (x_c)
Kitas:
x_c = matematika.ceil (x_c)
jei y_c - matematika.floor (y_c) <0,5:
y_c = matematika.floor (y_c)
Kitas:
y_c = matematika.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
Kitas:
xar [c] = 0
yar [c] = 0
display.clear ()
x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# spausdinti (sąrašas (zip (xar, yar, radaras)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
jei būsenos A ir būsenos B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
spausdinti („pirmyn“)
jei būsena A, o ne būsena B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
spausdinti („kairėje“)
jei ne būsena A ir būsena B:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
spausdinti (dešinėje)
ifnot stateA ir not stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
spausdinti („stop“)

peržiūrėkite rawgigglebot_lidar_remote.py, kurį su „❤“priglobia „GitHub“

7 veiksmas: nuotolinio ekrano aiškinimas

„loading =„ tingus “valdykite„ GiggleBot “, turite šias parinktis:

  1. Paspauskite mygtuką A ir mygtuką B, kad perkeltumėte „GiggleBot“į priekį.
  2. Paspauskite mygtuką A, kad pasuktumėte „GiggleBot“į kairę.
  3. Paspauskite mygtuką B, kad pasuktumėte „GiggleBot“į dešinę.

Norėdami pamatyti, kuria kryptimi aptinkamos artimiausios kliūtys, tiesiog pažvelkite į nuotolinio valdymo pulto (nuotolinio BBC mikro: bitą, kurį laikote) ekraną. Turėtumėte sugebėti valdyti „GiggleBot“iš tolo, nežiūrėdami į jį.

Rekomenduojamas: