Sisällysluettelo:

Tee Lidar-ohjattu robotti GiggleBotilla: 8 vaihetta
Tee Lidar-ohjattu robotti GiggleBotilla: 8 vaihetta

Video: Tee Lidar-ohjattu robotti GiggleBotilla: 8 vaihetta

Video: Tee Lidar-ohjattu robotti GiggleBotilla: 8 vaihetta
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Marraskuu
Anonim
Tee Lidar-ohjattu robotti GiggleBotilla
Tee Lidar-ohjattu robotti GiggleBotilla
Tee Lidar-ohjattu robotti GiggleBotilla
Tee Lidar-ohjattu robotti GiggleBotilla
Tee Lidar-ohjattu robotti GiggleBotilla
Tee Lidar-ohjattu robotti GiggleBotilla

Tässä opetusohjelmassa GiggleBot ratkaisee sokkelon vaikeudet.

Asennamme servon GiggleBotiin, johon kiinnitämme etäisyysanturin. Juoksun aikana servo pyörii edestakaisin, jotta etäisyysanturi voi mitata etäisyyden jokaiseen esteeseen asti. Tämä toimii paljon kuin LIDAR -anturi, joka on yleensä paljon kalliimpaa.

Samaan aikaan GiggleBot lähettää nämä tiedot BBC: n kauko-bitille, joka näyttää 5 x 5-LED-matriisilleen suhteellisen sijaintinsa esteisiin.

Sinun tehtäväsi on pystyä navigoimaan GiggleBotissa vain katsomalla, mitä se näyttää toisella BBC: n mikro: bitillä. GiggleBotin ohjaamiseen käytetään BBC micro: bit -kaukosäätimen kauko -ohjaimen painikkeita.

Kuulostaa hauskalta! Mennään asiaan, jooko?

Vaihe 1: Tarvittavat komponentit

Pakolliset osat
Pakolliset osat

Tarvitsemme:

  1. GiggleBot.
  2. Akku BBC micro: bitille. Sen mukana tulee BBC micro: bit.
  3. x3 AA -paristoa GiggleBotille.
  4. Grove -kaapeli etäisyysanturin liittämiseksi GiggleBotiin.
  5. Servosarja DexterIndustriesilta.
  6. x3 BBC micro: bittiä. Yksi GiggleBotille ja toinen robotin ohjaamiseen kaukaa.
  7. DexterIndustriesin etäisyysanturi.

Hanki GiggleBot -robotti BBC micro: bitille täältä!

Vaihe 2: Robotin kokoaminen

Robotin kokoaminen
Robotin kokoaminen
Robotin kokoaminen
Robotin kokoaminen

Jotta GiggleBot voidaan ohjelmoida, meidän on koottava se, vaikka ei ole paljon tehtävää.

Aseta 3 AA -paristoa lokeroonsa GiggleBotin alapuolelle.

Kokoa servopaketti. Kiinnitä servo sen viimeiseen reikään kiinnittääksesi servon GiggleBotin etuliittimiin sen viimeiseen reikään. Voit käyttää ruuvia ja/tai lankaa vakauttaaksesi sen paikallaan. Tai voit liimata sen levylle kuumaliimalla. Minun tapauksessani käytin ruuvia ja lyhyttä lankaa sitomaan servovarren GiggleBot -levyyn.

Kun asennat servovarren servolle, varmista, että servo on jo asetettu asentoon 80. Voit tehdä sen soittamalla gigglebot.set_servo (gigglebot. OIKEA, 80). Voit lukea siitä lisää täältä.

Aseta seuraavaksi etäisyysanturi servopaketin etupuolelle ja kiinnitä se kuten yllä olevassa esimerkissä.

Kytke lopuksi etäisyysanturi Grove -kaapelilla mihin tahansa 2 I2C -porttiin ja servomoottori oikeaan porttiin GiggleBotissa - oikea portti on mainittu siinä.

Vaihe 3: Luo oma sokkelo - valinnainen

Luo oma sokkelo - valinnainen
Luo oma sokkelo - valinnainen

Tässä tapauksessa olen käyttänyt joukkoa laatikoita luodakseni suljetun silmukan raidan, joka on samanlainen kuin NASCAR.

Tässä vaiheessa voit olla todella luova ja tehdä siitä niin kieroa kuin haluat tai tehdä siitä erittäin pitkä, koska se on todella sinun tehtäväsi.

Tai jos et halua raitaa ollenkaan, voit laittaa GiggleBotin esimerkiksi keittiöön tai olohuoneeseen - sen pitäisi olla tarpeeksi hyvä, koska on vielä paljon seiniä ja esteitä, joita sinun on vältettävä.

Vaihe 4: Ympäristön määrittäminen

Ympäristön asettaminen
Ympäristön asettaminen

Jotta voit ohjelmoida BBC: n micro: bitin MicroPythonissa, sinun on määritettävä sen editori (Mu Editor) ja asetettava GiggleBot MicroPython Runtime ajonaikaksi. Tätä varten sinun on noudatettava tämän sivun ohjeita. Tästä hetkestä lähtien ajonaikaista versiota v0.4.0 käytetään.

Vaihe 5: GiggleBot -ohjelman ohjelmointi - Osa I

Asetetaan ensin GiggleBotin komentosarja. Tämä käsikirjoitus saa GiggleBotin kääntämään servomoottoriaan 160 astetta (80 astetta kumpaankin suuntaan) samalla kun se ottaa 10 lukemaa etäisyysanturilta kierrosta kohden.

Kun GiggleBot on päällä, se on paikallaan, kunnes se saa komennon kauko -ohjaimesta. Komentoja voi olla vain kolme: siirry eteenpäin, vasemmalle tai oikealle.

Huomautus: Seuraavassa komentosarjassa saattaa olla tyhjiä välilyöntejä, ja tämä näyttää johtuvan jostakin ongelmasta GitHub Gistsin näyttämisessä. Napsauta ydintä viedäksesi sen GitHub-sivulle, jossa voit kopioida ja liittää koodin.

Kauko-ohjattava LIDAR-pohjainen GiggleBot

gigglebot -tuonnista*
from distance_sensor import DistanceSensor
mikrobittien tuonnin lepotilasta
utime -tuonnista ticks_us, sleep_us
tuontirakenne
tuoda radio
# pysäytä robotti, jos se jo liikkuu
lopettaa()
# ota radio käyttöön
radio.on ()
# etäisyysanturi
ds = Etäisyysanturi ()
ds.start_continuous ()
rotate_time = 0.7# sekunneissa mitattuna
rotate_span = 160# asteina mitattuna
rotate_steps = 10
overhead_compensation = 1.05# määritelty prosentteina
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
tutka = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 ylöspäin (0-> 160) ja 1 muutoin
tutka_indeksi = 0
set_servo (OIKEA, 0)
Vaikka totta:
#lukeminen tutkalta
if ticks_us () - last_read_time> time_per_step:
# lukea etäisyysanturista
tutka [tutka_indeksi] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
tulosta (tutka_indeksi)
# tee logiikka servon kääntämiseksi vasemmalta oikealle
jos tutka -indeksi == pyöritysvaiheet -1 ja servokierron_suunta == 0:
set_servo (OIKEA, 0)
servo_rotate_direction = 1
elif tutka_indeksi == 0ja servokierron_suunta == 1:
set_servo (OIKEA, käännä_span)
servo_rotate_direction = 0
muu:
radar_index += 1 jos servo_rotate_direction == 0else-1
# ja lähetä tutka -arvot
radio.send_bytes (tutka)
yrittää:
# lue robotin komennot
lmotor, rmotor = ustruct.unpack ('bb', radio.recept_bytes ())
# ja käytä moottoreita, jos vastaanotettuja komentoja tulee
set_speed (lmotor, rmotor)
ajaa()
paitsiTyyppiVirhe:
kulkea

katso rawgigglebot_lidar_robot.py, jota isännöi GitHub

Vaihe 6: Kaukosäätimen ohjelmointi - Osa II

Jäljellä on vielä ohjelmoida toinen BBC: n mikro: bitti, joka toimii kaukosäätimenä.

Kaukosäädintä käytetään näyttämään 5 x 5 pikselin näytöllä suhteellinen etäisyys esteisiin. Enintään 10 pikseliä on päällä.

Samaan aikaan kaukosäädin antaa sinulle mahdollisuuden ohjata GiggleBotia painamalla sen kahta painiketta: siirtyä eteenpäin, vasemmalle ja oikealle.

Huomautus: Seuraavassa komentosarjassa saattaa olla tyhjiä välilyöntejä, ja tämä näyttää johtuvan jostakin ongelmasta GitHub Gistsin näyttämisessä. Napsauta ydintä viedäksesi sen GitHub-sivulle, jossa voit kopioida ja liittää koodin.

Kauko -ohjattava LIDAR -pohjainen GiggleBot - Etäkoodi

microbit -tuonnin lepotilasta, näyttö, button_a, button_b
tuontirakenne
tuoda radio
tuoda matematiikkaa
radio.on ()
rotate_steps = 10
rotate_span = 160# astetta
rotate_step = rotate_span / rotate_steps
max_distance = 50# senttimetreinä
side_length_leds = 3 # mitattuna # pikselissä
tutka = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
saved_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
moottorin nopeus = 50
Vaikka totta:
tila = radio.recept_bytes_into (tutka)
jos tila ei ole Ei mitään:
# display.clear ()
c, val inenumerate (tutka):
jos tutka [c] <= max_distance:
# laske 2d -koordinaatit kullekin etäisyydelle
kulma = kierrä_vaiheet / (kierrä_vaiheet -1) * kierrä_askel * c
kulma += (180 kierrosta) /2.0
x_c = math.cos (kulma * math.pi /180,0) * tutka [c]
y_c = math.sin (kulma * math.pi /180,0) * tutka [c]
# skaalaa etäisyydet 5x5 mikrobitin näyttöön
x_c = x_c * (sivupituus_ledit -1) / max_distance
y_c = y_c * (sivun_pituus_leds +1) / max_distance
# sijainnin koordinaatit
x_c += (sivupituuden_ledit -1)
y_c = (sivupituudet_1 +1) - y_c
# kierros koordinoi tarkasti, mistä LEDit löytyvät
jos x_c - math.floor (x_c) <0,5:
x_c = matematiikka.kerros (x_c)
muu:
x_c = matematiikka (x_c)
jos y_c - math.floor (y_c) <0,5:
y_c = matematiikka.kerros (y_c)
muu:
y_c = matematiikan ceil (y_c)
xar [c] = x_c
vuosi [c] = y_c
muu:
xar [c] = 0
vuosi [c] = 0
display.clear ()
x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (lista (zip (xar, yar, tutka)))
tilaA = painike_a.is_puristettu ()
stateB = button_b.is_pressed ()
jos tila A ja tila B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
tulosta ('eteenpäin')
jos tila A ja ei tila B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
tulosta ('vasen')
jos ei tila A ja tila B:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
tulosta ('oikea')
ifnot stateA ja notB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
tulosta ('stop')

katso rawgigglebot_lidar_remote.py, jota isännöi GitHub

Vaihe 7: Etänäytön tulkinta

"loading =" laiska "ohjaa GiggleBotia, sinulla on seuraavat vaihtoehdot:

  1. Siirrä GiggleBotia eteenpäin painamalla painiketta A ja painiketta B.
  2. Pyöritä GiggleBot -painiketta vasemmalle painamalla painiketta A.
  3. Pyöritä GiggleBotia oikealle painamalla painiketta B.

Jos haluat nähdä, mihin suuntaan lähimmät esteet havaitaan, katso vain kaukosäätimen (kauko -ohjattava BBC -mikro: bitti, jota pidät) -näytöstä. Sinun pitäisi pystyä hallitsemaan GiggleBotia kaukaa katsomatta sitä.

Suositeltava: