Përmbajtje:
- Hapi 1: Komponentët e kërkuar
- Hapi 2: Montimi i Robotit
- Hapi 3: Krijoni labirintin tuaj - Opsionale
- Hapi 4: Krijimi i Mjedisit
- Hapi 5: Programimi i GiggleBot - Pjesa I
- Hapi 6: Programimi i telekomandës - Pjesa II
- Hapi 7: Interpretimi i ekranit në distancë
Video: Bëni një robot të udhëhequr nga Lidar Me GiggleBot: 8 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
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
Do të na duhen:
- Një GiggleBot.
- Një paketë baterie për mikro BBC: bit. Ajo vjen së bashku me një mikro BBC: pak në paketën e saj.
- bateri x3 AA për GiggleBot.
- Një kabllo Grove për të lidhur sensorin e distancës me GiggleBot.
- Një çantë Servo nga DexterIndustries.
- x3 mikro BBC: copa. Një për GiggleBot dhe një i përdorur për të kontrolluar robotin nga larg.
- Sensori i distancës nga DexterIndustries.
Merrni robotin GiggleBot për mikro BBC: pak këtu!
Hapi 2: 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
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
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:
- Shtypni butonin A dhe butonin B për të lëvizur GiggleBot përpara.
- Shtypni butonin A për ta rrotulluar GiggleBot në të majtë.
- 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:
Si të bëni një përshtatës helikoid të rregullueshëm për një objektiv projektori 85 mm, nga një lidhës tubi polipropileni: 5 hapa
Si të bëni një përshtatës helikoid të rregullueshëm për një objektiv projektori 85 mm, nga një lidhës tubash polipropileni: Kohët e fundit kam blerë një projektor të vjetër rrëshqitës për rreth 10 euro. Projektori është i pajisur me një lente 85 mm f/2.8, lehtësisht e shkëputshme nga vetë projektori (asnjë pjesë nuk ka nevojë të çmontohet). Kështu që vendosa ta transformoj atë në një lente 85 mm për Penta -n time
Bëni një aparat të kontrolluar nga distanca nga një celular !: 5 hapa (me fotografi)
Bëni një aparat të kontrolluar nga distanca nga një celular !: Dëshironi të dini se çfarë po bën macja juaj në punë? Dërgoni një mesazh me tekst celularit tuaj të mbikqyrjes të sapokrijuar dhe merrni fotografi dhe video sekonda më vonë. Duket si një ëndërr? Jo më! Kjo video shpjegon se si funksionon:
Kontrolli i një unaze të udhëhequr nga Neopixel me një sensor gjestesh: 3 hapa (me fotografi)
Kontrolli i një unaze të udhëhequr nga Neopixel me një sensor gjestesh: Në këtë tutorial ne do të luajmë me një sensor gjestesh (APDS-9960) dhe një unazë neopixel për të mësuar se si t'i kombinojmë të dy duke përdorur një Arduino UNO. Produkti përfundimtar do t'i përgjigjet gjeste majtas - djathtas duke animuar lëvizjen e udhëhequr djathtas ose majtas, dhe drejt u
Si të bëni një LED të fuqizuar nga era nga një video: 13 hapa
Si të bëni një LED të fuqizuar nga era nga një video: Ky tutorial shpjegon se si të bëni një LED të fuqizuar nga era nga një VCR të vjetër dhe një rrotull. Ju gjithashtu mund të përdorni një makinë të vjetër CD-Rom nëse nuk keni një VCR. Nëse jeni të interesuar për mësimin për ta bërë këtë nga një disk CD-Rom, mund ta gjeni në faqen time
Si të bëni një GIF të animuar nga një skedar video duke përdorur vetëm një program falas: 4 hapa
Si të bëni një GIF të animuar nga një skedar video duke përdorur vetëm një program falas: për ata prej jush që nuk e dinë një GIF është formati më i zakonshëm i imazhit që mbështet korniza të shumta në një shfaqje të rrëshqitshme ose animacion. me fjalë të tjera ju mund të vendosni video të shkurtra ku normalisht shkojnë vetëm imazhet. Unë kam dashur të bëj një GIF nga videoklipi