Përmbajtje:

Bëni një robot të udhëhequr nga Lidar Me GiggleBot: 8 hapa
Bëni një robot të udhëhequr nga Lidar Me GiggleBot: 8 hapa

Video: Bëni një robot të udhëhequr nga Lidar Me GiggleBot: 8 hapa

Video: Bëni një robot të udhëhequr nga Lidar Me GiggleBot: 8 hapa
Video: Seattle City Tour in 4K 60fps - Pike Place Market - Space Needle - Gum Wall 2024, Nëntor
Anonim
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot
Bëni një Robot të Drejtuar nga Lidar Me GiggleBot

Në këtë tutorial, ne po bëjmë GiggleBot të trajtojë vështirësitë e një labirinti.

Ne jemi duke montuar një servo në GiggleBot, mbi të cilën lidhim një sensor të distancës. Ndërsa funksionon, servo do të rrotullohet mbrapa dhe me radhë në mënyrë që sensori i distancës të mund të masë distancën deri në secilën pengesë. Kjo funksionon shumë si një sensor LIDAR i cili zakonisht është shumë më i shtrenjtë.

Në të njëjtën kohë, GiggleBot po i dërgon këto të dhëna në një mikro të largët të BBC: bit që shfaq në matricën e tij 5 me 5 të LED-ve pozicionin e tij relativ ndaj pengesave.

Detyra juaj është të jeni në gjendje të lundroni në GiggleBot vetëm duke parë atë që shfaqet në mikro tjetër të BBC: bit. Për të kontrolluar GiggleBot, përdoren butonat në mikro: bit të largët të BBC.

Kjo tingëllon si argëtuese! Le të merremi me të, apo jo?

Hapi 1: Komponentët e kërkuar

Komponentët e kërkuar
Komponentët e kërkuar

Do të na duhen:

  1. Një GiggleBot.
  2. Një paketë baterie për mikro BBC: bit. Ajo vjen së bashku me një mikro BBC: pak në paketën e saj.
  3. bateri x3 AA për GiggleBot.
  4. Një kabllo Grove për të lidhur sensorin e distancës me GiggleBot.
  5. Një çantë Servo nga DexterIndustries.
  6. x3 mikro BBC: copa. Një për GiggleBot dhe një i përdorur për të kontrolluar robotin nga larg.
  7. Sensori i distancës nga DexterIndustries.

Merrni robotin GiggleBot për mikro BBC: pak këtu!

Hapi 2: Montimi i Robotit

Montimi i Robotit
Montimi i Robotit
Montimi i Robotit
Montimi i Robotit

Për ta bërë GiggleBot gati për t'u programuar, ne duhet ta mbledhim atë, edhe pse nuk ka shumë nevojë për të bërë.

Futni 3 bateritë AA në ndarjen e tij nën GiggleBot.

Mblidhni paketën servo. Në krahun e tij rrotullues të servo, përdorni vrimën e fundit të tij për të fiksuar servo në lidhësit e përparmë të GiggleBot. Ju mund të përdorni një vidë dhe/ose një tel për ta bërë atë më të qëndrueshëm në vendin e tij. Ose mund ta ngjisni nxehtësisht në tabelë. Në rastin tim, kam përdorur një vidë dhe tela të shkurtër për të lidhur krahun servo në tabelën GiggleBot.

Kur montoni krahun servo në servo, sigurohuni që servo tashmë është vendosur në pozicionin 80. Mund ta bëni këtë duke thirrur gigglebot.set_servo (gigglebot. DREJT, 80). Mund të lexoni më shumë rreth kësaj këtu.

Tjetra, vendosni sensorin e distancës në anën e përparme të paketës servo dhe rregulloni atë si në shembullin e mësipërm.

Së fundi, lidhni sensorin e distancës me një kabllo Grove me ndonjë nga 2 portat I2C dhe servo motorin në portën e djathtë të ulur në GiggleBot - porti i duhur përmendet në të.

Hapi 3: Krijoni labirintin tuaj - Opsionale

Krijoni labirintin tuaj - Opsionale
Krijoni labirintin tuaj - Opsionale

Në këtë rast, unë kam përdorur një bandë kutish për të krijuar një udhë të mbyllur, të ngjashme me atë të NASCAR.

Në këtë hap, ju mund të bëheni vërtet krijues dhe ta bëni atë sa të shtrembëruar dëshironi ose ta bëni atë super të gjatë sepse varet vërtet nga ju.

Ose nëse nuk doni një pistë fare, mund ta vendosni GiggleBot në një kuzhinë ose në një dhomë të gjallë për shembull - kjo duhet të jetë mjaft e mirë sepse ka shumë mure dhe pengesa që ju ende duhet të shmangni.

Hapi 4: Krijimi i Mjedisit

Krijimi i Mjedisit
Krijimi i Mjedisit

Në mënyrë që të jeni në gjendje të programoni mikro BBC: bit në MicroPython, duhet të krijoni një redaktues për të (Editori Mu) dhe të vendosni GiggleBot MicroPython Runtime si kohën e tij të funksionimit. Për këtë, duhet të ndiqni udhëzimet në këtë faqe. Deri në këtë moment, përdoret versioni v0.4.0 i kohës së ekzekutimit.

Hapi 5: Programimi i GiggleBot - Pjesa I

Së pari, le të vendosim skenarin e GiggleBot. Ky skenar do ta bëjë GiggleBot të rrotullojë servo motorin e tij 160 gradë (80 gradë në çdo drejtim), ndërsa në të njëjtën kohë të marrë 10 lexime nga sensori i distancës për kthesë.

Kur të ndizet, GiggleBot do të jetë në pritje derisa të marrë një komandë nga telekomanda. Mund të ketë vetëm 3 komanda: ecni përpara, majtas ose djathtas.

Shënim: Skenari i mëposhtëm mund të ketë mungesë të hapësirave të bardha dhe kjo duket të jetë për shkak të ndonjë problemi në shfaqjen e GitHub Gists. Klikoni në thelbin për t'ju çuar në faqen e tij GitHub ku mund të kopjoni-ngjisni kodin.

GiggleBot i bazuar në telekomandë i bazuar në LIDAR

nga importi i gigglebot*
nga distanca_sensor importimi DistanceSensor
nga gjumi i importit të mikrobit
nga importi i madh ticks_us, sleep_us
import ustruct
radio e importit
# ndaloni robotin nëse ai tashmë po lëviz
ndal ()
# aktivizo radion
radio në ()
# objekti i sensorit të distancës
ds = Sensori i distancës ()
ds.start_continuous ()
koha e rrotullimit = 0.7# e matur në sekonda
rotate_span = 160# e matur në gradë
hapat_rrotullues = 10
kompensimi i sipërm = 1.05# i përcaktuar në përqindje
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
koha_e_leximit të fundit = 0
radar = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 për të shkuar lart (0-> 160) dhe 1 ndryshe
indeksi i radarit = 0
set_servo (Djathtas, 0)
ndërsa e vërtetë:
# lexuar nga radari
nëse ticks_us () - last_read_time> time_per_step:
# lexuar nga sensori i distancës
radar [radar_index] = int (ds.range_range_continuous () /10)
koha e fundit_leximit = ticks_us ()
print (radar_index)
# bëni logjikën për rrotullimin e servo nga e majta në të djathtë
nëse radar_index == rotate_steps -1 dhe servo_rotate_direction == 0:
set_servo (Djathtas, 0)
servo_rotate_direction = 1
elif radar_index == 0 dhe servo_rotate_direction == 1:
set_servo (DREJT, rrotullimi i hapësirës)
servo_rotate_direction = 0
tjeter:
radar_index += 1Nëse servo_rotate_direction == 0else-1
# dhe dërgoni vlerat e radarit
radio. dërgoni_bajt (radar)
provo:
# lexoni komandat e robotëve
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()
# dhe aktivizoni motorët nëse ka ndonjë komandë të marrë
set_speed (lmotor, rmotor)
ngas ()
përveçTypeError:
kaloj

shiko rawgigglebot_lidar_robot.py e pritur me ❤ nga GitHub

Hapi 6: Programimi i telekomandës - Pjesa II

Ajo që mbetet për të bërë është programimi i mikros së dytë të BBC: bit që vepron si telekomandë.

Telekomanda përdoret për të shfaqur në ekranin e tij 5 me 5 piksel, distancën relative ndaj pengesave. Më së shumti, do të ketë 10 piksele të ndezura.

Në të njëjtën kohë, telekomanda po ju jep aftësitë për të kontrolluar në distancë GiggleBot duke shtypur 2 butonat e tij: ecni përpara, në të majtë dhe në të djathtë.

Shënim: Skenari i mëposhtëm mund të ketë mungesë të hapësirave të bardha dhe kjo duket të jetë për shkak të ndonjë problemi në shfaqjen e GitHub Gists. Klikoni në thelbin për t'ju çuar në faqen e tij GitHub ku mund të kopjoni-ngjisni kodin.

Telekomanduar me bazë LIDAR me bazë GiggleBot - Kodi në distancë

nga gjumi i importit të microbit, ekrani, butoni_a, butoni_b
import ustruct
radio e importit
import matematikë
radio në ()
hapat_rrotullues = 10
rotate_span = 160# në gradë
rotate_step = rotate_span / rotate_steps
distanca maksimale = 50# në centimetra
side_length_leds = 3 # e matur në # piksel
radar = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
ruhet_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
shpejtësia_ motorike = 50
ndërsa e vërtetë:
statusi = radio. merr_bytes_into (radar)
nëse statusi nuk është Asnjë:
# ekran. i qartë ()
për c, val pa numër (radar):
nëse radari [c] <= distanca maksimale:
# llogaritni koordinatat 2d të secilës distancë
kënd = hapat_rrotullues / (hapat_rrotullues -1) * hapi_rrotullues * c
kënd += (180- hapësira e rrotullimit) /2.0
x_c = math.cos (këndi * matematika.pi /180.0) * radari [c]
y_c = matematikë. mëkati (këndi * matematika.pi /180.0) * radari [c]
# shkallëzoni distancat për t'u përshtatur në ekranin e mikrobit 5x5
x_c = x_c * (gjatësia e anës -1) / distanca maksimale
y_c = y_c * (gjatësia e anës_gjatësia +1) / distanca maksimale
# koordinatat e ripozicionimit
x_c += (anët_gjatësia_gjatësia -1)
y_c = (anët_gjatësia_gjatësia +1) - y_c
# raundi koordinon pikërisht aty ku gjenden LED -të
nëse x_c - matematikë. dysheme (x_c) <0.5:
x_c = matematikë. dysheme (x_c)
tjeter:
x_c = matematikë. tavan (x_c)
nëse y_c - matematikë. dysheme (y_c) <0.5:
y_c = matematikë. dysheme (y_c)
tjeter:
y_c = matematikë. tavan (y_c)
xar [c] = x_c
yar [c] = y_c
tjeter:
xar [c] = 0
yar [c] = 0
ekran. i qartë ()
për x, y inzip (xar, yar):
ekran.set_pixel (x, y, 9)
# print (listë (zip (xar, yar, radar)))
gjendjaA = butoni_a.shtypur ()
gjendjaB = button_b.is_pressed ()
nëse gjendjaA dhe gjendjaB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('përpara')
nëse gjendjaA dhe jo gjendjaB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
print ('majtas')
nëse jo gjendjaA dhe gjendjaB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed])
print ('djathtas')
nëse jo një gjendje dhe një gjendje B:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ("ndal")

shiko rawgigglebot_lidar_remote.py e pritur me ❤ nga GitHub

Hapi 7: Interpretimi i ekranit në distancë

"loading =" dembel "kontrolloni GiggleBot, ju keni opsionet e mëposhtme:

  1. Shtypni butonin A dhe butonin B për të lëvizur GiggleBot përpara.
  2. Shtypni butonin A për ta rrotulluar GiggleBot në të majtë.
  3. Shtypni butonin B për të rrotulluar GiggleBot në të djathtë.

Për të parë se në cilin drejtim zbulohen pengesat më të afërta, thjesht shikoni në ekranin e telekomandës (mikro e largët e BBC: pak që po mbani). Ju duhet të jeni në gjendje të kontrolloni GiggleBot nga larg pa e parë atë.

Recommended: