Mündəricat:

GiggleBot ilə Lidar Güdümlü Robot hazırlayın: 8 addım
GiggleBot ilə Lidar Güdümlü Robot hazırlayın: 8 addım

Video: GiggleBot ilə Lidar Güdümlü Robot hazırlayın: 8 addım

Video: GiggleBot ilə Lidar Güdümlü Robot hazırlayın: 8 addım
Video: 弹指一挥四十年中美畸恋一个在哄一个在骗,房贷利率触底户外用餐中招风险也不低 Forty years of Sino-US relationship with coaxing and cheating. 2024, Noyabr
Anonim
GiggleBot ilə Lidar Güdümlü Robot hazırlayın
GiggleBot ilə Lidar Güdümlü Robot hazırlayın
GiggleBot ilə Lidar Güdümlü Robot hazırlayın
GiggleBot ilə Lidar Güdümlü Robot hazırlayın
GiggleBot ilə Lidar Güdümlü Robot hazırlayın
GiggleBot ilə Lidar Güdümlü Robot hazırlayın

Bu təlimatda, GiggleBotu bir labirentin çətinliklərini həll etməyə məcbur edirik.

GiggleBot -a bir məsafə sensoru bağladığımız bir servo quraşdırırıq. Qaçarkən servo irəli və irəli dönəcək ki, məsafə sensoru hər maneəyə qədər olan məsafəni ölçə bilsin. Bu ümumiyyətlə daha bahalı olan LIDAR sensoru kimi işləyir.

Eyni zamanda, GiggleBot bu məlumatları 5-dən 5-ə qədər LED matrisində maneələrə nisbi mövqeyini göstərən uzaq bir BBC mikro: bitinə göndərir.

İşiniz GiggleBotda yalnız digər BBC micro: bit -də göstərilənlərə baxaraq gedə bilməkdir. GiggleBotu idarə etmək üçün uzaq BBC micro: bit düymələrindən istifadə olunur.

Bu əyləncə kimi səslənir! Gəlin məsələyə başlayaq, elə deyilmi?

Addım 1: Tələb olunan komponentlər

Tələb olunan komponentlər
Tələb olunan komponentlər

Ehtiyacımız olacaq:

  1. Bir GiggleBot.
  2. BBC micro: bit üçün bir batareya paketi. Paketində BBC mikro: bit ilə birlikdə gəlir.
  3. GiggleBot üçün x3 AA batareyaları.
  4. Məsafə sensorunu GiggleBot -a bağlamaq üçün Grove kabeli.
  5. DexterIndustries -dən Servo dəsti.
  6. x3 BBC mikro: bit. Biri GiggleBot üçün, digəri isə robotu uzaqdan idarə etmək üçün istifadə olunurdu.
  7. DexterIndustries -dən bir məsafə sensoru.

BBC micro üçün GiggleBot robotunu əldə edin: bit burada!

Addım 2: Robotun yığılması

Robotun yığılması
Robotun yığılması
Robotun yığılması
Robotun yığılması

GiggleBot -u proqramlaşdırmağa hazır etmək üçün çox şey lazım olmasa da onu yığmalıyıq.

3 AA batareyanı GiggleBotun alt hissəsindəki yuvasına daxil edin.

Servo paketi yığın. Servonun fırlanan qoluna, servonun GiggleBotun ön bağlayıcılarına bərkidilməsi üçün son deşikdən istifadə edin. Yerində daha sabit olması üçün bir vida və/və ya bir tel istifadə edə bilərsiniz. Ya da lövhəyə isti yapışdıra bilərsiniz. Mənim vəziyyətimdə, servo qolunu GiggleBot lövhəsinə bağlamaq üçün bir vida və qısa tel istifadə etdim.

Servo qolunu servoya quraşdırarkən, servonun artıq 80 -ci mövqedə qurulduğundan əmin olun. Bunu gigglebot.set_servo (gigglebot. RIGHT, 80) nömrəsinə zəng edərək edə bilərsiniz. Bu barədə daha çox oxuya bilərsiniz burada.

Sonra məsafə sensörünü servo paketin ön tərəfinə qoyun və yuxarıdakı nümunədə olduğu kimi düzəldin.

Nəhayət, məsafə sensörünü Grove kabeli ilə 2 I2C portuna və servo motoru GiggleBotda oturan sağ porta qoşun - orada doğru port qeyd olunur.

Addım 3: Öz labirentinizi yaradın - İsteğe bağlı

Öz labirentinizi yaradın - İsteğe bağlı
Öz labirentinizi yaradın - İsteğe bağlı

Bu vəziyyətdə, NASCAR -a bənzər bir qapalı döngə yaratmaq üçün bir dəstə qutu istifadə etdim.

Bu mərhələdə, həqiqətən yaradıcı ola bilərsiniz və istədiyiniz qədər bükülmüş edə bilərsiniz və ya çox uzun edə bilərsiniz, çünki bu sizə bağlıdır.

Və ya ümumiyyətlə bir parça istəmirsinizsə, məsələn, GiggleBotu mətbəxə və ya qonaq otağına qoya bilərsiniz - bu kifayət qədər yaxşı olmalıdır, çünki hələ də qarşısını almaq üçün çoxlu divar və maneələr var.

Addım 4: Ətraf mühitin qurulması

Ətraf mühitin qurulması
Ətraf mühitin qurulması

MicroPython -da BBC micro: bit proqramlaşdıra bilməyiniz üçün bunun üçün bir redaktor (Mu Redaktor) qurmalı və GiggleBot MicroPython İşləmə müddətini iş vaxtı olaraq təyin etməlisiniz. Bunun üçün bu səhifədəki təlimatları izləməlisiniz. Bu andan etibarən, iş vaxtının v0.4.0 versiyası istifadə olunur.

Addım 5: GiggleBot proqramlaşdırılması - I hissə

Əvvəlcə GiggleBot skriptini quraq. Bu skript GiggleBotun servo motorunu 160 dərəcə (hər istiqamətdə 80 dərəcə) döndərəcək və eyni zamanda hər bir məsafə sensöründən 10 oxunuş alacaq.

Açıldıqda, GiggleBot uzaqdan idarəetmə əmrini alana qədər yanında olacaq. Yalnız 3 əmr ola bilər: irəli, sola və ya sağa.

Qeyd: Aşağıdakı skriptdə boş yerlər ola bilər və bu, GitHub Gists -in göstərilməsindəki bəzi problemlərlə əlaqəli görünür. Sizi kodu kopyalayıb yapışdıra biləcəyiniz GitHub səhifəsinə aparmaq üçün mahiyyəti vurun.

Uzaqdan idarə olunan LIDAR əsaslı GiggleBot

gigglebot idxalından*
distance_sensor idxalından DistanceSensor
microbit idxal yuxusundan
utks idksdən ticks_us, sleep_us
idxal idarəsi
radio idxal edin
# artıq hərəkət edirsə robotu dayandırın
dayan ()
# radio aktiv edin
radio.on ()
# məsafə sensoru obyekti
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# saniyələrlə ölçülür
rotate_span = 160# dərəcə ilə ölçülür
rotate_steps = 10
overhead_compensation = 1.05# faizlə təyin olunur
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
radar = baytearray (rotate_steps)
servo_rotate_direction = 0# 0 yuxarı getmək üçün (0-> 160) və əks halda 1
radar_index = 0
set_servo (SAĞ, 0)
whileTrue:
# radardan oxuyun
ticks_us () - last_read_time> time_per_step:
# məsafə sensorundan oxuyun
radar [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
çap et (radar_index)
# servonun soldan sağa fırlanması məntiqini yerinə yetirin
əgər radar_index == rotate_steps -1 və servo_rotate_direction == 0:
set_servo (SAĞ, 0)
servo_rotate_direction = 1
elif radar_index == 0 və servo_rotate_direction == 1:
set_servo (SAĞ, rotate_span)
servo_rotate_direction = 0
başqa:
radar_index += 1if servo_rotate_direction == 0else-1
# və radar dəyərlərini göndərin
radio.send_bytes (radar)
cəhd edin:
# robot əmrlərini oxuyun
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# və alınan əmrlər olduqda mühərrikləri işə salın
set_sürəti (lmotor, rmotor)
sürmək ()
istisna olmaqlaTypeError:
keçmək

GitHub tərəfindən ❤ ilə ev sahibliyi edən rawgigglebot_lidar_robot.py -yə baxın

Addım 6: Uzaqdan proqramlaşdırma - II hissə

Qalan şey, uzaqdan idarə edən 2 -ci BBC mikro: bitini proqramlaşdırmaqdır.

Uzaqdan 5-dən 5-ə qədər piksel ekranında maneələrə nisbi məsafəni göstərmək üçün istifadə olunur. Ən çox 10 piksel açılacaq.

Eyni zamanda, pult sizə 2 düyməni basaraq GiggleBotu uzaqdan idarə etmək imkanı verir: irəli, sola və sağa.

Qeyd: Aşağıdakı skriptdə boş yerlər ola bilər və bu, GitHub Gists -in göstərilməsindəki bəzi problemlərlə əlaqəli görünür. Sizi kodu kopyalayıb yapışdıra biləcəyiniz GitHub səhifəsinə aparmaq üçün mahiyyəti vurun.

Uzaqdan idarə olunan LIDAR əsaslı GiggleBot - Uzaqdan Kod

microbit idxal yuxu, ekran, button_a, button_b
idxal idarəsi
radio idxal edin
riyaziyyatı idxal edin
radio.on ()
rotate_steps = 10
rotate_span = 160# dərəcə
rotate_step = rotate_span / rotate_steps
max_distance = santimetrdə 50#
side_length_leds = 3 # piksel sayında ölçülür
radar = baytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
xilas_xar = baytearray (dönmə_ addımları)
xilas_yar = baytearray (rotate_steps)
motor_sürəti = 50
whileTrue:
status = radio.receive_bytes_into (radar)
status yoxdursa:
# display.clear ()
c, val dəyərsizdir (radar):
əgər radar [c] <= max_distance:
# hər məsafənin 2d koordinatlarını hesablayın
bucaq = rotate_steps / (rotate_steps -1) * rotate_step * c
bucaq += (180- rotate_span) /2.0
x_c = math.cos (bucaq * math.pi /180.0) * radar [c]
y_c = math.sin (bucaq * math.pi /180.0) * radar [c]
# 5x5 mikrobit ekrana uyğun məsafələri ölçün
x_c = x_c * (yan_ uzunluq_leds -1) / max_distance
y_c = y_c * (yan_ uzunluq_lədləri +1) / maksimum_ məsafə
# koordinatları yenidən yerləşdirin
x_c += (yan_ uzunluq_qızlar -1)
y_c = (yan_ uzunluq_lədləri +1) - y_c
LED -lərin olduğu yerlərdə # dəyirmi koordinatlar
əgər x_c - math.floor (x_c) <0.5:
x_c = math.floor (x_c)
başqa:
x_c = math.ceil (x_c)
əgər y_c - math.floor (y_c) <0.5:
y_c = riyazi mərtəbə (y_c)
başqa:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
başqa:
xar [c] = 0
yar [c] = 0
display.clear ()
x, y inzip üçün (xar, yar):
display.set_pixel (x, y, 9)
# çap (siyahı (zip (xar, yar, radar)))
dövlətA = düymə_a.is_pressed ()
stateB = button_b.is_pressed ()
stateA və stateB olarsa:
radio.send_bytes (ustruct.pack ('bb', motor_sürəti, motor_sürəti))
çap ("irəli")
əgər dövlətA və dövlət deyilsə B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
çap ('sola)
dövlət A və dövlət B deyilsə:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
çap ('sağda')
dövlət deyilsə, dövlət deyilsə B:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
çap et ('dayan')

GitHub tərəfindən ❤ ilə ev sahibliyi edən rawgigglebot_lidar_remote.py -yə baxın

Addım 7: Uzaqdan Ekranı şərh edin

"loading =" tənbəl "GiggleBotu idarə edin, aşağıdakı seçimləriniz var:

  1. GiggleBotu irəli aparmaq üçün A düyməsini və B düyməsini basın.
  2. GiggleBotu sola çevirmək üçün A düyməsini basın.
  3. GiggleBotu sağa çevirmək üçün B düyməsini basın.

Ən yaxın maneələrin hansı istiqamətdə aşkarlandığını görmək üçün pultun (tutduğunuz uzaq BBC mikro: bit) ekranına baxmaq kifayətdir. GiggleBot -a baxmadan uzaqdan idarə etməyi bacarmalısınız.

Tövsiyə: