İçindekiler:

GiggleBot ile Lidar Güdümlü Robot Yapın: 8 Adım
GiggleBot ile Lidar Güdümlü Robot Yapın: 8 Adım

Video: GiggleBot ile Lidar Güdümlü Robot Yapın: 8 Adım

Video: GiggleBot ile Lidar Güdümlü Robot Yapın: 8 Adım
Video: How To Shutdown the GoPiGo3 Robot 2024, Kasım
Anonim
GiggleBot ile Lidar Güdümlü Robot Yapın
GiggleBot ile Lidar Güdümlü Robot Yapın
GiggleBot ile Lidar Güdümlü Robot Yapın
GiggleBot ile Lidar Güdümlü Robot Yapın
GiggleBot ile Lidar Güdümlü Robot Yapın
GiggleBot ile Lidar Güdümlü Robot Yapın

Bu eğitimde, GiggleBot'un bir labirentin zorluklarını çözmesini sağlıyoruz.

Mesafe sensörü taktığımız GiggleBot üzerine servo monte ediyoruz. Koşarken servo ileri geri dönecektir, böylece mesafe sensörü her bir engele kadar olan mesafeyi ölçebilir. Bu, genellikle çok daha pahalı olan bir LIDAR sensörü gibi çalışır.

Aynı zamanda, GiggleBot bu verileri 5'e 5 LED matrisinde engellere göre konumunu gösteren uzak bir BBC micro:bit'e gönderiyor.

İşiniz, GiggleBot'ta yalnızca diğer BBC micro:bit'te gösterilene bakarak gezinebilmektir. GiggleBot'u kontrol etmek için uzak BBC micro:bit üzerindeki düğmeler kullanılır.

Kulağa eğlenceli geliyor! Başlayalım, olur mu?

Adım 1: Gerekli Bileşenler

Gerekli Bileşenler
Gerekli Bileşenler

İhtiyacımız olacak:

  1. Bir GiggleBot.
  2. BBC micro:bit için bir pil takımı. Paketinde bir BBC micro:bit ile birlikte gelir.
  3. GiggleBot için x3 AA piller.
  4. Mesafe sensörünü GiggleBot'a bağlamak için bir Grove kablosu.
  5. DexterIndustries'dan bir Servo kiti.
  6. x3 BBC mikro: bitler. Biri GiggleBot için, diğeri robotu uzaktan kontrol etmek için kullanılır.
  7. DexterIndustries'dan bir Mesafe Sensörü.

BBC micro:bit için GiggleBot robotunu buradan edinin!

Adım 2: Robotu Birleştirme

Robotun Montajı
Robotun Montajı
Robotun Montajı
Robotun Montajı

GiggleBot'u programlanmaya hazır hale getirmek için, yapılması gereken çok fazla bir şey olmamasına rağmen onu bir araya getirmemiz gerekiyor.

3 adet AA pili GiggleBot'un altındaki bölmesine yerleştirin.

Servo paketini birleştirin. Servonun dönen koluna, servoyu GiggleBot'un ön konektörlerine sabitlemek için son deliğini kullanın. Yerinde daha stabil hale getirmek için bir vida ve/veya bir miktar tel kullanabilirsiniz. Veya tahtaya sıcak yapıştırabilirsiniz. Benim durumumda, servo kolu GiggleBot kartına bağlamak için bir vida ve kısa tel kullandım.

Servo kolunu servoya monte ederken, servonun zaten 80 konumuna ayarlandığından emin olun. Bunu gigglebot.set_servo(gigglebot. RIGHT, 80) numaralı telefonu arayarak yapabilirsiniz. Buradan daha fazlasını okuyabilirsiniz.

Ardından mesafe sensörünü servo paketinin ön tarafına yerleştirin ve yukarıdaki örnekteki gibi sabitleyin.

Son olarak mesafe sensörünü bir Grove kablosu ile 2 I2C portundan herhangi birine ve servo motoru GiggleBot üzerinde bulunan sağ porta bağlayın - üzerinde doğru port belirtilmiştir.

3. Adım: Kendi Labirentinizi Yaratın - İsteğe Bağlı

Kendi Labirentinizi Yaratın - İsteğe Bağlı
Kendi Labirentinizi Yaratın - İsteğe Bağlı

Bu durumda, NASCAR'a benzer bir kapalı döngü izi oluşturmak için bir sürü kutu kullandım.

Bu adımda, gerçekten yaratıcı olabilir ve istediğiniz kadar çarpık hale getirebilir veya gerçekten size bağlı olduğu için çok uzun yapabilirsiniz.

Ya da hiç pist istemiyorsanız, örneğin GiggleBot'u bir mutfağa veya oturma odasına koyabilirsiniz - bu yeterince iyi olmalı çünkü hala kaçınmanız gereken çok sayıda duvar ve engel var.

4. Adım: Ortamı Ayarlama

Ortamı Ayarlama
Ortamı Ayarlama

BBC micro:bit'i MicroPython'da programlayabilmeniz için, onun için bir düzenleyici (Mu Düzenleyici) kurmanız ve çalışma zamanı olarak GiggleBot MicroPython Çalışma Zamanını ayarlamanız gerekir. Bunun için bu sayfadaki yönergeleri takip etmelisiniz. Bu andan itibaren, çalışma zamanının v0.4.0 sürümü kullanılmaktadır.

Adım 5: GiggleBot'u Programlama - Bölüm I

İlk olarak, GiggleBot'un betiğini ayarlayalım. Bu komut dosyası GiggleBot'un servo motorunu 160 derece (her yönde 80 derece) döndürürken aynı zamanda dönüş başına mesafe sensöründen 10 okuma yapmasını sağlar.

Açıldığında, GiggleBot uzaktan kumandadan bir komut alana kadar beklemede kalacaktır. Yalnızca 3 komut olabilir: ileri, sola veya sağa hareket ettirin.

Not: Aşağıdaki komut dosyasında boşluklar eksik olabilir ve bu, GitHub Gists'in görüntülenmesindeki bazı sorunlardan kaynaklanıyor gibi görünüyor. Sizi kodu kopyalayıp yapıştırabileceğiniz GitHub sayfasına götürmek için özü tıklayın.

Uzaktan Kumandalı LIDAR tabanlı GiggleBot

gigglebot içe aktarmadan*
Distance_sensor'dan Uzaklık Sensörünü içe aktar
mikrobit içe aktarma uykusundan
utime import ticks_us, sleep_us
ithalat yapısı
ithal radyo
# robot zaten hareket ediyorsa onu durdur
Dur()
# radyoyu etkinleştir
radyo.on()
# mesafe sensörü nesnesi
ds = Mesafe Sensörü()
ds.start_sürekli()
döndürme_zamanı =0.7# saniye cinsinden ölçülür
döndürme_span = 160# derece cinsinden ölçülür
döndürme_adımları =10
genel gider_kompansasyon =1.05# yüzde olarak tanımlandı
time_per_step =10**6* döndürme_zamanı / (rotate_steps *head_compensation)
last_read_time =0
radar =bytearray(döndürme_adımları)
servo_rotate_direction =0# 0 yukarı gitmek için (0->160) ve aksi halde 1
radar_index =0
set_servo(SAĞ, 0)
whileTrue:
# radardan oku
eğer ticks_us() - last_read_time > time_per_step:
# mesafe sensöründen oku
radar[radar_index] =int(ds.read_range_continuous() /10)
last_read_time = ticks_us()
yazdır(radar_index)
# servoyu soldan sağa döndürme mantığını yapın
eğer radar_index == döndürme_adımları -1ve servo_rotate_direction ==0 ise:
set_servo(SAĞ, 0)
servo_rotate_direction =1
elif radar_index ==0ve servo_rotate_direction ==1:
set_servo(SAĞ, döndürme_span)
servo_rotate_direction =0
Başka:
radar_index +=1if servo_rotate_direction ==0else-1
# ve radar değerlerini gönder
radio.send_bytes(radar)
denemek:
# robot komutlarını oku
lmotor, rmotor = ustruct.unpack('bb', radio.receive_bytes())
# ve alınan herhangi bir komut olması durumunda motorları çalıştırın
set_speed(lmotor, rmotor)
sürmek()
hariçTypeError:
geçmek

GitHub tarafından ❤ ile barındırılan rawgigglebot_lidar_robot.py'yi görüntüleyin

Adım 6: Uzaktan Kumandayı Programlama - Bölüm II

Yapılması gereken, uzaktan kumanda görevi gören 2. BBC micro:bit'i programlamak.

Uzaktan kumanda, 5'e 5 pikselden oluşan ekranında engellere olan bağıl mesafeyi görüntülemek için kullanılır. En fazla 10 piksel açık olacaktır.

Aynı zamanda, uzaktan kumanda size GiggleBot'u 2 düğmesine basarak uzaktan kontrol etme yeteneği verir: ileri, sola ve sağa hareket edin.

Not: Aşağıdaki komut dosyasında boşluklar eksik olabilir ve bu, GitHub Gists'in görüntülenmesindeki bazı sorunlardan kaynaklanıyor gibi görünüyor. Sizi kodu kopyalayıp yapıştırabileceğiniz GitHub sayfasına götürmek için özü tıklayın.

Uzaktan Kumandalı LIDAR tabanlı GiggleBot - Uzaktan Kod

mikrobit içe aktarmadan uyku, ekran, button_a, button_b
ithalat yapısı
ithal radyo
matematik ithal etmek
radyo.on()
döndürme_adımları =10
döndürme_span = 160# derece cinsinden
döndürme_adım = döndürme_span / döndürme_adımları
max_mesafe =50# santimetre cinsinden
side_length_leds =3# piksel sayısıyla ölçülür
radar =bytearray(döndürme_adımları)
xar =bytearray(döndürme_adımları)
yar =bytearray(döndürme_adımları)
save_xar =bytearray(döndürme_adımları)
save_yar =bytearray(döndürme_adımları)
motor_hızı =50
whileTrue:
durum = radio.receive_bytes_into(radar)
durum Yok ise:
# display.clear()
c için, val numaralandırma(radar):
eğer radar[c] <= max_mesafe:
# her mesafenin 2 boyutlu koordinatlarını hesapla
açı = döndürme_adımları / (döndürme_adımları -1) * döndürme_adım * c
açı += (180- döndürme_açıklığı) /2.0
x_c = matematik.cos(açı * matematik.pi /180.0) * radar[c]
y_c = matematik.sin(açı * matematik.pi /180.0) * radar[c]
# mesafeleri 5x5 mikrobit ekrana sığacak şekilde ölçeklendirin
x_c = x_c * (yan_uzunluk_ledleri -1) / maks_mesafe
y_c = y_c * (yan_uzunluk_ledleri +1) / maks_mesafe
# koordinatları yeniden konumlandır
x_c += (yan_uzunluk_ledleri -1)
y_c = (yan_uzunluk_ledleri +1) - y_c
# tam olarak LED'lerin bulunduğu yuvarlak koordinatlar
if x_c - math.floor(x_c) <0.5:
x_c = matematik.zemin(x_c)
Başka:
x_c = matematik.ceil(x_c)
if y_c - math.floor(y_c) <0.5:
y_c = matematik.kat(y_c)
Başka:
y_c = matematik.ceil(y_c)
xar[c] = x_c
yar[c] = y_c
Başka:
xar[c] =0
yar[c] =0
display.clear()
x, y için inzip(xar, yar):
display.set_pixel(x, y, 9)
# print(list(zip(xar, yar, radar)))
durumA = button_a.is_pressed()
durumB = button_b.is_pressed()
durumA ve durumB ise:
radio.send_bytes(ustruct.pack('bb', motor_speed, motor_speed))
print('ileri')
durum A ve durumB değilse:
radio.send_bytes(ustruct.pack('bb', motor_speed, -motor_speed))
yazdır('sol')
durum A ve durum B değilse:
radio.send_bytes(ustruct.pack('bb', -motor_speed, motor_speed))
yazdır ('doğru')
durum A ve durum B değilse:
radio.send_bytes(ustruct.pack('bb', 0, 0))
yazdır('dur')

GitHub tarafından ❤ ile barındırılan rawgigglebot_lidar_remote.py dosyasını görüntüleyin

7. Adım: Uzak Ekranın Yorumlanması

"loading="lazy" GiggleBot'u kontrol ediyor, aşağıdaki seçeneklere sahipsiniz:

  1. GiggleBot'u ileri hareket ettirmek için A düğmesine ve B düğmesine basın.
  2. GiggleBot'u sola döndürmek için A düğmesine basın.
  3. GiggleBot'u sağa döndürmek için B düğmesine basın.

En yakın engellerin hangi yöne algılandığını görmek için uzaktan kumandanın (tuttuğunuz uzak BBC micro:bit) ekranına bakmanız yeterlidir. GiggleBot'u ona bakmadan uzaktan kontrol edebilmelisiniz.

Önerilen: