Maak 'n Lidar-geleide robot met die GiggleBot: 8 stappe
Maak 'n Lidar-geleide robot met die GiggleBot: 8 stappe
Anonim
Maak 'n lid-geleide robot met die GiggleBot
Maak 'n lid-geleide robot met die GiggleBot
Maak 'n lid-geleide robot met die GiggleBot
Maak 'n lid-geleide robot met die GiggleBot
Maak 'n lid-geleide robot met die GiggleBot
Maak 'n lid-geleide robot met die GiggleBot

In hierdie handleiding laat ons die GiggleBot die probleme van 'n doolhof aanpak.

Ons monteer 'n servo op die GiggleBot waarop ons 'n afstandsensor heg. Terwyl hy hardloop, gaan die servo heen en weer draai sodat die afstandsensor die afstand tot by elke hindernis kan meet. Dit werk baie soos 'n LIDAR -sensor wat gewoonlik baie duurder is.

Terselfdertyd stuur die GiggleBot hierdie data na 'n afgeleë BBC micro: bit wat op sy 5-by-5 matriks LED's sy relatiewe posisie ten opsigte van die hindernisse vertoon.

U taak is om slegs deur die GiggleBot te kan navigeer deur te kyk wat dit op die ander BBC micro: bit wys. Om die GiggleBot te beheer, word die knoppies op die afgeleë BBC micro: bit gebruik.

Dit klink soos pret! Kom ons gaan daarby uit, of hoe?

Stap 1: Vereiste komponente

Vereiste komponente
Vereiste komponente

Ons gaan nodig hê:

  1. 'N GiggleBot.
  2. 'N Batterypak vir die BBC micro: bit. Dit bevat 'n BBC micro: bit in die pakket.
  3. x3 AA -batterye vir die GiggleBot.
  4. 'N Grove -kabel om die afstandsensor aan die GiggleBot te koppel.
  5. 'N Servokit van DexterIndustries.
  6. x3 BBC -mikro: stukkies. Een vir die GiggleBot en een wat die robot van ver af beheer.
  7. 'N Afstandsensor van DexterIndustries.

Kry die GiggleBot -robot vir die BBC micro: bit hier!

Stap 2: Monteer die robot

Die samestelling van die robot
Die samestelling van die robot
Die samestelling van die robot
Die samestelling van die robot

Om die GiggleBot gereed te maak om geprogrammeer te word, moet ons dit saamstel, hoewel daar nie veel nodig is nie.

Plaas die 3 AA -batterye in die kompartement onder die GiggleBot.

Monteer die servopakket. Gebruik die laaste gaatjie aan die draaiende arm van die servo om die servo aan die voorste verbindings van die GiggleBot vas te maak. U kan 'n skroef en/of draad gebruik om dit stabieler te maak. Of jy kan dit warm aan die bord plak. In my geval het ek 'n skroef en kort draad gebruik om die servo -arm aan die GiggleBot -bord vas te maak.

As u die servo -arm op die servo monteer, moet u seker maak dat die servo reeds op posisie 80 is. U kan dit doen deur gigglebot.set_servo te bel (gigglebot. RIGHT, 80). U kan hier meer hieroor lees.

Plaas vervolgens die afstandsensor aan die voorkant van die servopakket en maak dit reg soos in die voorbeeld hierbo.

Koppel laastens die afstandsensor met 'n Grove -kabel aan enige van die 2 I2C -poorte en die servomotor na die regte poort op die GiggleBot - die regte poort word daarop genoem.

Stap 3: Skep u eie doolhof - opsioneel

Skep u eie doolhof - opsioneel
Skep u eie doolhof - opsioneel

In hierdie geval het ek 'n klomp bokse gebruik om 'n geslote lusbaan te skep, soortgelyk aan 'n NASCAR.

In hierdie stap kan u regtig kreatief raak en maak hoe verdraaid u dit wil hê, of dit kan baie lank wees, want dit hang van u af.

Of as u glad nie 'n baan wil hê nie, kan u die GiggleBot byvoorbeeld in 'n kombuis of woonkamer sit - dit behoort goed genoeg te wees, want daar is baie mure en hindernisse wat u nog moet vermy.

Stap 4: Die opstel van die omgewing

Die opstel van die omgewing
Die opstel van die omgewing

Om die BBC micro: bit in MicroPython te kan programmeer, moet u 'n redakteur daarvoor opstel (die Mu Editor) en die GiggleBot MicroPython Runtime as tydsduur daarvan stel. Hiervoor moet u die instruksies op hierdie bladsy volg. Vanaf hierdie oomblik word weergawe v0.4.0 van die tydsduur gebruik.

Stap 5: Die programmering van die GiggleBot - Deel I

Laat ons eers die GiggleBot -skrif opstel. Hierdie script sal die GiggleBot sy servomotor 160 grade laat draai (80 grade in elke rigting), terwyl dit terselfdertyd 10 lesings van die afstandsensor per beurt neem.

As dit aangeskakel is, sal die GiggleBot bystaan totdat dit 'n opdrag van die afstandsbediening ontvang. Daar kan slegs 3 opdragte wees: vorentoe, na links of na regs.

Let wel: die volgende skrip ontbreek moontlik witruimtes, en dit lyk asof dit 'n probleem is met die vertoning van GitHub Gists. Klik op die kern om u na die GitHub-bladsy te neem, waar u die kode kan kopieer en plak.

Afstandsbeheerde LIDAR-gebaseerde GiggleBot

vanaf gigglebot invoer*
vanaf distance_sensor invoer DistanceSensor
van mikrobit invoer slaap
vanaf utime invoer ticks_us, sleep_us
invoerstruktuur
radio invoer
# stop die robot as dit reeds beweeg
stop ()
# aktiveer radio
radio.on ()
# afstandsensorvoorwerp
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# gemeet in sekondes
rotate_span = 160# gemeet in grade
draai_stappe = 10
oorhoofse_vergoeding = 1.05# gedefinieer in persentasies
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radar = bytearray (rotate_steps)
servo_rotate_direction = 0# 0 om opwaarts te gaan (0-> 160) en 1 andersins
radar_index = 0
set_servo (REGS, 0)
terwyl dit waar is:
# gelees vanaf die radar
as ticks_us () - last_read_time> time_per_step:
# gelees vanaf die afstandsensor
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
druk (radar_index)
# doen die logika om die servo van links na regs te draai
as radar_index == rotate_steps -1and servo_rotate_direction == 0:
set_servo (REGS, 0)
servo_rotate_direction = 1
elif radar_index == 0en servo_rotate_direction == 1:
set_servo (REGS, draai_span)
servo_rotate_direction = 0
anders:
radar_index += 1if servo_rotate_direction == 0else-1
# en stuur die radarwaardes
radio.send_bytes (radar)
probeer:
# lees robotopdragte
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# en aktiveer die motors as daar opdragte ontvang word
set_speed (lmotor, rmotor)
ry ()
behalwe TypeError:
slaag

sien rawgigglebot_lidar_robot.py aangebied deur ❤ deur GitHub

Stap 6: Die afstandsbediening programmeer - Deel II

Wat nog te doen is, is die programmering van die 2de BBC micro: bit wat as 'n afstandsbediening dien.

Die afstandsbediening word gebruik om op sy 5-by-5 pixel gemaakte skerm die relatiewe afstand tot hindernisse te wys. Daar sal hoogstens 10 pixels aangeskakel wees.

Terselfdertyd bied die afstandsbediening u die vermoë om die GiggleBot op afstand te beheer deur op die twee knoppies te druk: vorentoe, links en regs.

Let wel: die volgende skrip ontbreek moontlik witruimtes, en dit lyk asof dit 'n probleem is met die vertoning van GitHub Gists. Klik op die kern om u na die GitHub-bladsy te neem, waar u die kode kan kopieer en plak.

Afstandsbeheerde LIDAR -gebaseerde GiggleBot - afstandskode

vanaf mikrobit invoer slaap, vertoon, button_a, button_b
invoerstruktuur
radio invoer
invoer wiskunde
radio.on ()
draai_stappe = 10
rotate_span = 160# in grade
rotate_step = rotate_span / rotate_steps
max_distance = 50# in sentimeter
side_length_leds = 3 # gemeet in die aantal pixels
radar = bytearray (draai_stappe)
xar = bytearray (draai_stappe)
yar = bytearray (rotate_steps)
save_xar = bytearray (draai_stappe)
save_yar = bytearray (draai_stappe)
motor_snelheid = 50
terwyl dit waar is:
status = radio.ontvang_bytes_into (radar)
as status nie geeneen is nie:
# display.clear ()
vir c, val onenumerate (radar):
as radar [c] <= max_distance:
# bereken 2d koördinate van elke afstand
hoek = draai_stappe / (draai_stappe -1) * draai_stap * c
hoek += (180- rotate_span) /2.0
x_c = math.cos (hoek * math.pi /180.0) * radar [c]
y_c = math.sin (hoek * math.pi /180.0) * radar [c]
# skaal die afstande om op die 5x5 mikrobit -skerm te pas
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# herposisioneer koördinate
x_c += (sylengte_leds -1)
y_c = (side_length_leds +1) - y_c
# ronde koördinate presies waar die LED's gevind word
as x_c - wiskunde vloer (x_c) <0.5:
x_c = wiskunde.vloer (x_c)
anders:
x_c = wiskunde.seil (x_c)
as y_c - wiskunde vloer (y_c) <0.5:
y_c = wiskunde.vloer (y_c)
anders:
y_c = wiskunde.seil (y_c)
xar [c] = x_c
yar [c] = y_c
anders:
xar [c] = 0
yar [c] = 0
display.clear ()
vir x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# druk (lys (zip (xar, yar, radar)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
as staat A en staat B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('vorentoe')
as stateA en nie staat B nie:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
druk ('links')
ifnot stateA en stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
druk ('regs')
ifnot stateA en nie staat B:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ('stop')

sien rawgigglebot_lidar_remote.py aangebied deur ❤ deur GitHub

Stap 7: Interpretasie van die afstandskerm

"loading =" lui "beheer die GiggleBot, u het die volgende opsies:

  1. Druk op knoppie A en knoppie B om die GiggleBot vorentoe te beweeg.
  2. Druk knoppie A om die GiggleBot na links te draai.
  3. Druk knoppie B om die GiggleBot na regs te draai.

Om te sien in watter rigting die naaste hindernisse bespeur word, kyk net op die afstandsbedienings (die afstandsbediening BBC -mikro: bietjie wat u vashou). U behoort die GiggleBot van ver af te kan beheer sonder om daarna te kyk.