Talaan ng mga Nilalaman:

Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot: 8 Hakbang
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot: 8 Hakbang

Video: Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot: 8 Hakbang

Video: Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot: 8 Hakbang
Video: Собаку бросили в лесу с коробкой макарон. История собаки по имени Ринго. 2024, Nobyembre
Anonim
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot
Gumawa ng isang Lidar-Guided Robot Gamit ang GiggleBot

Sa tutorial na ito, ginagawa namin ang GiggleBot na talakayin ang mga paghihirap ng isang maze.

Naglalagay kami ng isang servo sa GiggleBot kung saan ikinakabit namin ang isang distansya na sensor. Habang tumatakbo, ang servo ay paikutin at pabalik upang ang distansya ng sensor ay maaaring masukat ang distansya hanggang sa bawat balakid. Gumagana ito katulad ng isang sensor ng LIDAR na kadalasang mas mahal.

Sa parehong oras, ang GiggleBot ay nagpapadala ng data na ito sa isang remote BBC micro: bit na ipinapakita sa kanyang 5-by-5 matrix ng LEDs na may kaugnayang posisyon sa mga hadlang.

Ang iyong trabaho ay magagawang mag-navigate sa GiggleBot sa pamamagitan lamang ng pagtingin sa kung ano ang ipinapakita sa iba pang BBC micro: bit. Upang makontrol ang GiggleBot, ginagamit ang mga pindutan sa remote na BBC micro: bit.

Parang masaya yun! Bumaba tayo rito, hindi ba?

Hakbang 1: Kinakailangan na Mga Sangkap

Mga Kinakailangan na Bahagi
Mga Kinakailangan na Bahagi

Kakailanganin namin:

  1. Isang GiggleBot.
  2. Isang baterya pack para sa BBC micro: kaunti. Ito ay kasama ng isang BBC micro: kaunti sa package nito.
  3. x3 AA na baterya para sa GiggleBot.
  4. Isang Grove cable upang ikonekta ang distansya sensor sa GiggleBot.
  5. Isang Servo kit mula sa DexterIndustries.
  6. x3 BBC micro: mga piraso. Isa para sa GiggleBot at isang ginamit upang makontrol ang robot mula sa malayo.
  7. Isang Distance Sensor mula sa DexterIndustries.

Kunin ang GiggleBot robot para sa BBC micro: kaunti dito!

Hakbang 2: Pag-iipon ng Robot

Pag-iipon ng Robot
Pag-iipon ng Robot
Pag-iipon ng Robot
Pag-iipon ng Robot

Upang maging handa ang GiggleBot na mai-program, kailangan naming tipunin ito, kahit na hindi gaanong kailangang gawin.

Ipasok ang 3 mga baterya ng AA sa kompartimento nito sa ilalim ng GiggleBot.

Ipunin ang servo package. Sa umiikot na braso nito ng servo, gamitin ang huling butas nito upang ayusin ang servo sa mga front konektor ng GiggleBot. Maaari mong gamitin ang isang tornilyo at / o ilang kawad upang gawing mas matatag ito sa lugar nito. O maaari mong maiinit na pandikit ito sa pisara. Sa aking kaso, gumamit ako ng isang turnilyo at maikling kawad upang itali ang servo arm sa board ng GiggleBot.

Kapag pinataas ang servo arm sa servo, tiyaking naka-set na ang servo sa posisyon na 80. Maaari mong gawin iyon sa pamamagitan ng pagtawag sa gigglebot.set_servo (gigglebot. RIGHT, 80). Maaari mong basahin ang higit pa tungkol dito.

Susunod, ilagay ang distansya sensor sa harap na bahagi ng servo package at ayusin ito tulad ng sa halimbawa sa itaas.

Sa wakas, ikonekta ang distansya sensor gamit ang isang Grove cable sa alinman sa 2 I2C port at ang servo motor sa kanang port na nakaupo sa GiggleBot - ang tamang port ay nabanggit dito.

Hakbang 3: Lumikha ng Iyong Sariling Maze - Opsyonal

Lumikha ng Iyong Sariling Maze - Opsyonal
Lumikha ng Iyong Sariling Maze - Opsyonal

Sa kasong ito, gumamit ako ng isang bungkos ng mga kahon upang lumikha ng isang closed loop track, katulad ng isang NASCAR.

Sa hakbang na ito, maaari kang maging malikhain at gawin itong baluktot na nais mo o gawing sobrang haba dahil nasa sa iyo talaga.

O kung hindi mo man gusto ang isang track, maaari mong ilagay ang GiggleBot sa kusina o sa isang sala - halimbawa ay dapat na sapat iyon dahil maraming pader at hadlang na kailangan mo pa ring iwasan.

Hakbang 4: Pag-set up ng Kapaligiran

Pag-set up ng Kapaligiran
Pag-set up ng Kapaligiran

Upang ma-program mo ang BBC micro: kaunti sa MicroPython, kailangan mong mag-set up ng isang editor para dito (ang Mu Editor) at itakda ang GiggleBot MicroPython Runtime bilang runtime nito. Para doon, kailangan mong sundin ang mga tagubilin sa pahinang ito. Tulad ng sa sandaling ito, ginagamit ang bersyon v0.4.0 ng runtime.

Hakbang 5: Programming ang GiggleBot - Bahagi I

Una, i-set up natin ang script ng GiggleBot. Gagawin ng script na ito ang GiggleBot na paikutin ang servo motor nito 160 degree (80 degree sa bawat direksyon) habang sabay na kumuha ng 10 mga pagbasa mula sa distansya sensor bawat pagliko.

Kapag naka-on, ang GiggleBot ay tatayo hanggang sa makatanggap ito ng isang utos mula sa remote control. Maaari lamang magkaroon ng 3 mga utos: sumulong, sa kaliwa o sa kanan.

Tandaan: Ang sumusunod na script ay maaaring may mga nawawalang mga whitespaces at tila ito ay sanhi ng ilang isyu sa pagpapakita ng GitHub Gists. Mag-click sa buod upang dalhin ka sa pahina ng GitHub na kung saan maaari mong kopyahin-i-paste ang code.

Remote Controlled LIDAR-based GiggleBot

mula sa gigglebot import *
mula sa distansya_sensor import DistanceSensor
mula sa microbit import sleep
mula sa utime import ticks_us, sleep_us
mag-import ng us konstruksyon
mag-import ng radyo
# itigil ang robot kung gumagalaw na ito
huminto ()
# paganahin ang radyo
radio.on ()
# distansya ng object ng sensor
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7 # sinusukat sa segundo
rotate_span = 160 # sinusukat sa degree
rotate_steps = 10
overhead_compensation = 1.05 # na tinukoy sa mga porsyento
time_per_step = 10 ** 6 * rotate_time / (rotate_steps * overhead_compensation)
last_read_time = 0
radar = bytearray (paikutin ang mga hakbang)
servo_rotate_direction = 0 # 0 para sa paitaas (0-> 160) at 1 kung hindi man
radar_index = 0
set_servo (TAMA, 0)
habang Totoo:
# basahin mula sa radar
kung ticks_us () - last_read_time> time_per_step:
# basahin mula sa distansya sensor
radar [radar_index] = int (ds.read_range_continuous () / 10)
last_read_time = ticks_us ()
print (radar_index)
# gawin ang lohika para sa pag-ikot ng servo mula kaliwa hanggang kanan
kung radar_index == paikutin ang mga hakbang -1 at servo_rotate_direction == 0:
set_servo (TAMA, 0)
servo_rotate_direction = 1
elif radar_index == 0at servo_rotate_direction == 1:
set_servo (TAMA, paikutin_span)
servo_rotate_direction = 0
iba pa:
radar_index + = 1kung servo_rotate_direction == 0else-1
# at ipadala ang mga halagang radar
radio.send_bytes (radar)
subukan:
# basahin ang mga utos ng robot
lmotor, rmotor = usonstr.unpack ('bb', radio.receive_bytes ())
# at i-aktibo ang mga motor kung mayroon mang natanggap na mga utos
set_speed (lmotor, rmotor)
drive ()
maliban sa TypeError:
pumasa

tingnan ang rawgigglebot_lidar_robot.py na naka-host sa ❤ ng GitHub

Hakbang 6: Programming ang Remote - Bahagi II

Ang natitirang gawin ay ang pag-program ng ika-2 BBC micro: kaunti na kumikilos bilang isang remote.

Ang remote ay ginagamit upang ipakita sa kanyang 5-by-5 pixel-ginawa na screen ang kamag-anak na distansya sa mga hadlang. Karamihan, magkakaroon ng 10 mga pixel na naka-on.

Sa parehong oras, ang remote ay nagbibigay sa iyo ng mga kakayahan upang malayuang makontrol ang GiggleBot sa pamamagitan ng pagpindot sa 2 mga pindutan nito: sumulong, sa kaliwa at sa kanan.

Tandaan: Ang sumusunod na script ay maaaring may mga nawawalang mga whitespaces at tila ito ay sanhi ng ilang isyu sa pagpapakita ng GitHub Gists. Mag-click sa buod upang dalhin ka sa pahina ng GitHub na kung saan maaari mong kopyahin-i-paste ang code.

Remote Controlled LIDAR-based GiggleBot - Remote Code

mula sa microbit import sleep, display, button_a, button_b
mag-import ng us konstruksyon
mag-import ng radyo
import ng matematika
radio.on ()
rotate_steps = 10
paikutin_span = 160 # sa degree
rotate_step = rotate_span / rotate_steps
max_distance = 50 # sa sentimetro
side_length_leds = 3 # sinusukat sa # ng mga pixel
radar = bytearray (paikutin ang mga hakbang)
xar = bytearray (rotate_steps)
yar = bytearray (paikutin ang mga hakbang)
save_xar = bytearray (paikutin ang mga hakbang)
nai-save_yar = bytearray (paikutin ang mga hakbang)
motor_ bilis = 50
habang Totoo:
katayuan = radio.receive_bytes_into (radar)
kung ang katayuan ay hindiNone:
# display.clear ()
para sa c, val inenumerate (radar):
kung radar [c] <= max_distansya:
# kalkulahin ang 2d na mga coordinate ng bawat distansya
anggulo = paikutin_step / (paikutin -1) * paikutin_step * c
anggulo + = (180- paikutin_span) /2.0
x_c = math.cos (anggulo * math.pi /180.0) * radar [c]
y_c = math.sin (anggulo * math.pi /180.0) * radar [c]
# sukatin ang mga distansya upang magkasya sa 5x5 microbit display
x_c = x_c * (side_length_leds -1) / max_distansya
y_c = y_c * (side_length_leds +1) / max_distansya
# mga coordinate ng muling posisyon
x_c + = (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# bilog na coordinate nang eksakto kung saan matatagpuan ang mga LED
kung x_c - math.floor (x_c) <0.5:
x_c = math.floor (x_c)
iba pa:
x_c = math.ceil (x_c)
kung y_c - math.floor (y_c) <0.5:
y_c = math.floor (y_c)
iba pa:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
iba pa:
xar [c] = 0
yar [c] = 0
display.clear ()
para sa x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (listahan (zip (xar, yar, radar)))
estadoA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
kung ang estadoA at estadoB:
radio.send_bytes (usonstr.pack ('bb', motor_speed, motor_speed))
i-print ('pasulong')
kung estadoA at hindi estadoB:
radio.send_bytes (usonstr.pack ('bb', motor_speed, -motor_speed))
i-print ('kaliwa')
kung hindi estadoA at estadoB:
radio.send_bytes (usonstr.pack ('bb', -motor_speed, motor_speed))
i-print ('kanan')
kung hindi estadoA at hindi estadoB:
radio.send_bytes (us konstr.pack ('bb', 0, 0))
i-print ('ihinto')

tingnan ang rawgigglebot_lidar_remote.py na naka-host sa ❤ ng GitHub

Hakbang 7: Pagbibigay ng kahulugan sa Remote Screen

"loading =" tamad "kontrolin ang GiggleBot, mayroon kang mga sumusunod na pagpipilian:

  1. Pindutin ang pindutan A at pindutan B upang ilipat ang GiggleBot pasulong.
  2. Pindutin ang pindutan A upang paikutin ang GiggleBot sa kaliwa.
  3. Pindutin ang pindutan B upang paikutin ang GiggleBot sa kanan.

Upang makita kung aling direksyon ang napansin ang pinakamalapit na mga hadlang, tingnan lamang ang remote (ang remote na BBC micro: bit na hawak mo) na screen. Dapat mong makontrol ang GiggleBot mula sa malayo nang hindi tinitingnan ito.

Inirerekumendang: