Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot: 8 soļi
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot: 8 soļi
Anonim
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot
Izveidojiet Lidara vadītu robotu, izmantojot GiggleBot

Šajā apmācībā mēs liekam GiggleBot risināt labirinta grūtības.

Mēs uzstādām servo uz GiggleBot, uz kura mēs piestiprinām attāluma sensoru. Skriešanas laikā servo griezīsies uz priekšu un atpakaļ, lai attāluma sensors varētu izmērīt attālumu līdz katram šķērslim. Tas darbojas līdzīgi kā LIDAR sensors, kas parasti ir daudz dārgāks.

Tajā pašā laikā GiggleBot sūta šos datus uz attālu BBC mikro: bitu, kas uz 5x5 gaismas diodes matricas parāda tā relatīvo stāvokli šķēršļiem.

Jūsu uzdevums ir spēt pārvietoties GiggleBot, tikai aplūkojot to, kas redzams citā BBC mikro: bitā. Lai kontrolētu GiggleBot, tiek izmantotas tālvadības BBC micro: bit pogas.

Tas izklausās jautri! Sāksim pie tā, vai ne?

1. darbība. Nepieciešamās sastāvdaļas

Nepieciešamās sastāvdaļas
Nepieciešamās sastāvdaļas

Mums vajadzēs:

  1. GiggleBot.
  2. BBC micro: bit akumulators. Tas ir kopā ar BBC micro: bit savā iepakojumā.
  3. x3 AA baterijas GiggleBot.
  4. Grove kabelis, lai savienotu attāluma sensoru ar GiggleBot.
  5. Servo komplekts no DexterIndustries.
  6. x3 BBC mikro: biti. Viens GiggleBot un otrs, ko izmantoja, lai vadītu robotu no tālienes.
  7. Attāluma sensors no DexterIndustries.

Iegūstiet GiggleBot robotu BBC micro: bit šeit!

2. darbība: robota salikšana

Robota salikšana
Robota salikšana
Robota salikšana
Robota salikšana

Lai GiggleBot būtu gatavs programmēšanai, mums tas ir jāsamontē, lai gan daudz nav jādara.

Ievietojiet 3 AA baterijas savā nodalījumā zem GiggleBot.

Salieciet servo paketi. Servo rotējošajai rokai izmantojiet tās pēdējo caurumu, lai piestiprinātu servo pie GiggleBot priekšējiem savienotājiem. Jūs varat izmantot skrūvi un/vai kādu vadu, lai padarītu to stabilāku savā vietā. Vai arī jūs varat to karsti pielīmēt pie tāfeles. Manā gadījumā es izmantoju skrūvi un īsu vadu, lai piesietu servo roku pie GiggleBot plates.

Uzstādot servo rokturi uz servo, pārliecinieties, vai servo jau ir iestatīts pozīcijā 80. To var izdarīt, zvanot uz gigglebot.set_servo (gigglebot. RIGHT, 80). Vairāk par to varat izlasīt šeit.

Pēc tam novietojiet attāluma sensoru servo iepakojuma priekšpusē un salabojiet to, kā parādīts iepriekšējā piemērā.

Visbeidzot, pievienojiet attāluma sensoru ar Grove kabeli jebkuram no 2 I2C portiem un servomotoru pareizajam portam, kas atrodas GiggleBot - uz tā ir minēts pareizais ports.

3. darbība: izveidojiet savu labirintu - pēc izvēles

Izveidojiet savu labirintu - pēc izvēles
Izveidojiet savu labirintu - pēc izvēles

Šajā gadījumā esmu izmantojis virkni kastes, lai izveidotu slēgta cikla celiņu, līdzīgu NASCAR.

Šajā solī jūs varat kļūt patiesi radošs un padarīt to, cik ļoti vēlaties, vai padarīt to īpaši garu, jo tas tiešām ir atkarīgs no jums.

Vai arī, ja jūs vispār nevēlaties dziesmu, varat ievietot GiggleBot, piemēram, virtuvē vai dzīvojamā istabā - tam vajadzētu būt pietiekami labam, jo joprojām ir daudz sienu un šķēršļu, no kuriem jāizvairās.

4. solis: vides iestatīšana

Vides iestatīšana
Vides iestatīšana

Lai jūs varētu programmēt BBC micro: bit programmā MicroPython, jums ir jāizveido tam redaktors (Mu redaktors) un kā izpildlaiks jāiestata GiggleBot MicroPython Runtime. Lai to izdarītu, jums jāievēro šajā lapā sniegtie norādījumi. No šī brīža tiek izmantota izpildlaika versija v0.4.0.

5. solis: GiggleBot programmēšana - I daļa

Vispirms izveidosim GiggleBot skriptu. Šis skripts liks GiggleBot pagriezt savu servomotoru par 160 grādiem (80 grādiem katrā virzienā), vienlaikus paņemot 10 rādījumus no attāluma sensora uz vienu pagriezienu.

Kad ieslēgts, GiggleBot stāvēs blakus, līdz saņems komandu no tālvadības pults. Var būt tikai 3 komandas: virzīties uz priekšu, pa kreisi vai pa labi.

Piezīme. Šim skriptam, iespējams, trūkst atstarpes, un šķiet, ka tas ir saistīts ar kādu problēmu, parādot GitHub Gists. Noklikšķiniet uz būtības, lai nokļūtu tās GitHub lapā, kur varat kopēt un ielīmēt kodu.

Ar tālvadību kontrolēts LIDAR GiggleBot

no gigglebot importēšanas*
no distance_sensor importēšana DistanceSensor
no mikrobitu importēšanas miega
no utime importēšanas ticks_us, sleep_us
importēt ustruktu
importēt radio
# apturiet robotu, ja tas jau kustas
apstāties ()
# iespējot radio
radio.on ()
# attāluma sensora objekts
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# mēra sekundēs
rotate_span = 160# mērīts grādos
rotācijas soļi = 10
overhead_compensation = 1.05# definēts procentos
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radars = baits (rotācijas soļi)
servo_rotate_direction = 0# 0 uz augšu (0-> 160) un 1 citādi
radara_indekss = 0
set_servo (RIGHT, 0)
kamēr patiesība:
# lasīt no radara
ja ticks_us () - last_read_time> time_per_step:
# nolasīt no attāluma sensora
radars [radara_indekss] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
drukāt (radara_indekss)
# dariet loģiku servo pagriešanai no kreisās uz labo
ja radara_indekss == pagrieztie soļi -1 un servo_rotate_direction == 0:
set_servo (RIGHT, 0)
servo_rotate_direction = 1
elif radar_index == 0 un servo_rotate_direction == 1:
set_servo (RIGHT, rotate_span)
servo_rotate_direction = 0
cits:
radar_index += 1ja servo_rotate_direction == 0else-1
# un nosūtiet radara vērtības
radio.send_bytes (radars)
pamēģini:
# lasīt robotu komandas
lmotor, rmotor = ustruct.unpack ('bb', radio.recept_bytes ())
# un iedarbiniet motorus, ja ir saņemtas komandas
set_speed (lmotor, rmotor)
braukt ()
izņemotTypeError:
iziet

apskatīt rawgigglebot_lidar_robot.py, ko mitina GitHub ar ❤

6. darbība: tālvadības pults programmēšana - II daļa

Atliek tikai ieprogrammēt otro BBC mikro: bitu, kas darbojas kā tālvadības pults.

Tālvadības pulti izmanto, lai ekrānā, kas veidots no 5 līdz 5 pikseļiem, parādītu relatīvo attālumu līdz šķēršļiem. Maksimāli būs ieslēgti 10 pikseļi.

Tajā pašā laikā tālvadības pults sniedz jums iespēju vadīt GiggleBot tālvadību, nospiežot tās divas pogas: virzīties uz priekšu, pa kreisi un pa labi.

Piezīme. Šim skriptam, iespējams, trūkst atstarpes, un šķiet, ka tas ir saistīts ar kādu problēmu, parādot GitHub Gists. Noklikšķiniet uz būtības, lai nokļūtu tās GitHub lapā, kur varat kopēt un ielīmēt kodu.

Tālvadības pults ar LIDAR bāzes GiggleBot - attālais kods

no mikrobitu importēšanas miega režīms, displejs, button_a, button_b
importēt ustruktu
importēt radio
importēt matemātiku
radio.on ()
rotācijas soļi = 10
rotate_span = 160# grādos
rotate_step = rotate_span / rotate_steps
max_distance = 50# centimetros
side_length_leds = 3 #, mērot # pikseļos
radars = baits (rotācijas soļi)
xar = baitu masīvs (rotācijas soļi)
yar = bytearray (pagriezt_soļus)
saved_xar = bytearray (pagriezt_soļus)
Save_yar = bytearray (rotācijas soļi)
motora ātrums = 50
kamēr patiesība:
statuss = radio.recept_bytes_into (radars)
ja statuss nav Nav:
# display.clear ()
c, val uzskaitījums (radars):
ja radars [c] <= max_distance:
# aprēķiniet katra attāluma 2d koordinātas
leņķis = rotēt_soļi / (rotēt_soļi -1) * rotēt_solis * c
leņķis += (180- rotate_span) /2.0
x_c = math.cos (leņķis * math.pi /180,0) * radars [c]
y_c = math.sin (leņķis * math.pi /180,0) * radars [c]
# mērogot attālumus, lai tie ietilptu 5x5 mikrobitu displejā
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (sānu_garums_leds +1) / max_distance
# pārvietošanas koordinātas
x_c += (sānu_garuma_ledas -1)
y_c = (sānu_garums_leds +1) - y_c
# kārtas koordinē tieši to, kur atrodas gaismas diodes
ja x_c - math.floor (x_c) <0,5:
x_c = matemātikas grīda (x_c)
cits:
x_c = math.ceil (x_c)
ja y_c - math.floor (y_c) <0,5:
y_c = math.floor (y_c)
cits:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
cits:
xar [c] = 0
jars [c] = 0
display.clear ()
x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (saraksts (zip (xar, yar, radars)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
ja valsts A un valsts B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
drukāt ("uz priekšu")
ja valsts A, nevis valsts B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
drukāt ("pa kreisi")
ja nav stāvoklis A un stāvoklis B:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
drukāt ("pa labi")
ifnot stateA un notB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
drukāt ("apstāties")

apskatīt rawgigglebot_lidar_remote.py, kuru mitina GitHub ar ❤

7. darbība. Attālā ekrāna interpretācija

"loading =" slinks "kontrolējiet GiggleBot, jums ir šādas iespējas:

  1. Nospiediet pogu A un pogu B, lai pārvietotu GiggleBot uz priekšu.
  2. Nospiediet pogu A, lai pagrieztu GiggleBot pa kreisi.
  3. Nospiediet pogu B, lai pagrieztu GiggleBot pa labi.

Lai redzētu, kurā virzienā tiek atklāti tuvākie šķēršļi, vienkārši paskatieties uz tālvadības pults (attālais BBC mikro: bits, ko turat). Jums vajadzētu būt iespējai kontrolēt GiggleBot no tālienes, neskatoties uz to.

Ieteicams: