İçindekiler:

Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım
Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım

Video: Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım

Video: Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım
Video: Raspberry Pi 3 ile Çizgi izleyen robot - Python 2024, Temmuz
Anonim
Python Kullanan GiggleBot Çizgi Takipçisi
Python Kullanan GiggleBot Çizgi Takipçisi
Python Kullanan GiggleBot Çizgi Takipçisi
Python Kullanan GiggleBot Çizgi Takipçisi
Python Kullanan GiggleBot Çizgi Takipçisi
Python Kullanan GiggleBot Çizgi Takipçisi

Bu sefer MicroPython'da Dexter Industries GiggleBot'u yerleşik çizgi takipçi sensörünü kullanarak siyah bir çizgiyi takip edecek şekilde programlıyoruz.

GiggleBot'un uygun şekilde kontrol edilebilmesi için bir BBC micro:bit ile eşleştirilmesi gerekir.

Bu öğretici sizin için fazla gelişmişse ve GiggleBot'u programlamak şimdilik çok fazlaysa, robotun MakeCode'da nasıl programlanabileceğini gösteren başlangıç eğitimini her zaman buradan inceleyebilirsiniz. Bağlantılı öğretici, temel bilgilerde size yol gösterecektir.

Adım 1: Gerekli Bileşenler

Gerekli Bileşenler
Gerekli Bileşenler

Aşağıdaki donanım bileşenleri gereklidir:

  1. x3 AA piller - benim durumumda genel olarak daha düşük voltajlı şarj edilebilir piller kullanıyorum.
  2. Micro:bit için bir Dexter Industries GiggleBot robotu.
  3. Bir BBC mikro:bit.

Tabii ki, BBC micro:bit'i programlamak için bir mikro USB kablosuna da ihtiyacınız var - bu kablo genellikle BBC micro:bit'in paketinde gelir veya her zaman akıllı telefonları şarj etmek için (Android) kullanılanı kullanabilirsiniz.

Micro:bit için GiggleBot'u buradan edinin

Adım 2: Parçaları Ayarlayın

Parçaları Ayarla
Parçaları Ayarla

Bazı karoları basmak ve kendi parçalarınızı tasarlamak zorunda kalacaksınız. Koşullarımızı tekrarladığınızdan %100 emin olmak için kendi karolarımızı kullanabilirsiniz. Ya da maceraperest hissediyorsanız, biraz siyah bant kullanabilir ve kendinizinkini yapabilirsiniz. İşte kullandığımız karoların PDF'si.

Yukarıdaki parça, aşağıdaki sayıda farklı karodan oluşur:

  • 12 karo tip #1.
  • 2 tip 5 fayans.
  • 3 karo tipi #5 şablonu.
  • 3 karo türü #6 şablonu - burada, fazladan bir karo elde edeceksiniz.

Sırada, onları yazdırın ve kesin. Bunları yukarıdaki fotoğraftaki gibi yerleştirmeyi deneyin ve pistin sağ üst tarafında 2 karonun birbiriyle örtüşmesi gerektiğini unutmayın - yanlış bir şey yapıp yapmadığınızı merak ediyorsanız bu beklenir.

3. 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 talimatları izlemelisiniz. Bu andan itibaren, çalışma zamanının v0.4.0 sürümü kullanılmaktadır.

Adım 4: GiggleBot'u Programlama

Başlamadan önce, GiggleBot MicroPython çalışma zamanı, BBC micro:bit için klasik çalışma zamanını ve GiggleBot ve diğer Dexter Industries Sensörlerini destekleyen diğer kitaplıkları içerir.

Ayarladıktan sonra, Mu editöründe aşağıdaki betiği açın ve Flash'a tıklayın. Bu, GiggleBot MicroPython Runtime'ı ve az önce açtığınız komut dosyasını BBC micro:bit'inize flaş edecektir. Komut dosyası da aşağıda gösterilmiştir.

Flashlama işlemi tamamlandıktan sonra, BBC micro:bit'i kartın neopikselleri öne bakacak şekilde GiggleBot'a istifleyin, raya yerleştirin ve açın.

Komut dosyasında PID ve diğer 2 sabitin (hız ayar noktası ve minimum hız sabitleri) zaten ayarlanmış olduğuna dikkat 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.

GiggleBot PID Çizgi Takipçisi - NeoPixels ile Ayarlandı

mikrobit içe aktarmadan*
gigglebot içe aktarmadan*
utime import sleep_ms, ticks_us
ithalat yapısı
# GB neopiksellerini başlat
neo = init()
# zamanlama
güncelleme oranı =50
# kazançlar/sabitler (akü voltajının 4.0 volt civarında olduğu varsayılarak)
Kp =25,0
Ki = 0,5
Kd =35,0
tetikleyici_nokta =0.3
min_speed_percent = 0,3
temel_hız =70
ayar noktası = 0,5
last_position = ayar noktası
integral =0.0
run_neopixels =Doğru
center_pixel =5# gülümsemenin merkez pikselinin GB'de bulunduğu yer
# turquoise = tuple(map(lambda x: int(x / 5), (64, 224, 208))) # neopiksellerle hatayı çizmek için kullanılacak renk
# turkuaz = (12, 44, 41) # tam olarak yukarıdaki turkuaz bunun üstüne yorum yaptı
error_width_per_pixel =0.5/3# maksimum hata bölü her neopiksel arasındaki segment sayısı
defupper_bound_linear_speed_reducer(abs_error, tetikleme_noktası, üst_sınır, en küçük_motor_gücü, en yüksek_motor_gücü):
küresel base_speed
abs_error >= trigger_point ise:
# x0 = 0.0
# y0 = 0.0
# x1 = üst sınır - tetikleyici_nokta
# y1 = 1.0
# x = abs_error - tetikleyici_nokta
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# ile aynı
y = (abs_error - tetikleme_noktası) / (üst_sınır - tetikleme_noktası)
motor_power = temel_hız * (en küçük_motor_gücü + (1- y) * (en yüksek_motor_gücü - en küçük_motor_gücü))
dönüş motor_power
Başka:
dönüş base_speed * en yüksek_motor_power
çalıştır =Yanlış
önceki_hata =0
whileTrue:
# a düğmesine basılırsa takip etmeye başlayın
button_a.is_pressed() ise:
çalıştır =Doğru
# ancak b düğmesine basılırsa çizgi izleyeni durdurun
button_b.is_pressed() ise:
çalıştır =Yanlış
integral =0.0
önceki_hata =0.0
piksel_kapalı()
Dur()
uyku_ms(500)
isTrue çalıştırılırsa:
# hat sensörlerini oku
start_time = ticks_us()
sağ, sol = read_sensor(LINE_SENSOR, BOTH)
# satır, konum < 0,5 olduğunda soldadır
# satır, konum > 0,5 olduğunda sağdadır
# konum = 0,5 olduğunda satır ortadadır
# ağırlıklı bir aritmetik ortalama
denemek:
pozisyon = sağ /float(sol + sağ)
hariçZeroDivisionError:
konum = 0,5
# aralık (0, 1) olmalı ve [0, 1] değil
konum ==0 ise: konum =0,001
konum ==1 ise: konum =0.999
# bir PD denetleyicisi kullanın
hata = konum - ayar noktası
integral += hata
düzeltme = Kp * hata + Ki * integral + Kd * (hata - önceki_hata)
önceki_hata = hata
# motor hızlarını hesapla
motor_speed = high_bound_linear_speed_reducer(abs(hata), ayar noktası * tetikleme_noktası, ayar noktası, min_speed_percent, 1.0)
leftMotorSpeed = motor_speed + düzeltme
rightMotorSpeed = motor_speed - düzeltme
# verilen hataya göre neopikselleri aydınlat
run_neopixels isTrueand total_counts ise %3==0:
i inb'\x00\x01\x02\x03\x04\x05\x06\x07\x08' için:
neo = (0, 0, 0)
i inb'\x00\x01\x02\x03' için:
ifabs(hata) > error_width_per_pixel * i:
hata <0 ise:
# neo[center_pixel + i] = turkuaz
neo[center_pixel + i] = (12, 44, 41)
Başka:
# neo[center_pixel - i] = turkuaz
neo[center_pixel + i] = (12, 44, 41)
Başka:
yüzde =1- (error_width_per_pixel * i -abs(error)) / error_width_per_pixel
# mevcut pikseli aydınlat
hata <0 ise:
# neo[center_pixel + i] = demet(harita(lambda x: int(x * yüzde), turkuaz))
neo[center_pixel + i] = (int(64* yüzde /5), int(224* yüzde /5), int(208* yüzde /5))
Başka:
# neo[center_pixel - i] = demet(harita(lambda x: int(x * yüzde), turkuaz))
neo[center_pixel - i] = (int(64* yüzde /5), int(224* yüzde /5), int(208* yüzde /5))
kırmak
neo.göster()
denemek:
# motor hızlarını kırpın
sol Motor Hızı >100 ise:
solMotorHızı =100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
sağ Motor Hızı >100 ise:
sağMotorHızı =100
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100
Motor Hızı <-100 ise:
solMotorHızı =-100
doğruysaMotor Hızı <-100:
sağMotorHızı =-100
# motorları çalıştır
set_speed(leftMotorSpeed, rightMotorSpeed)
sürmek()
# print((hata, motor_hızı))
hariç:
# çözülemez bir sorunla karşılaşırsak diye
geçmek
# ve döngü frekansını koru
end_time = ticks_us()
delay_diff = (bitiş_zamanı - başlangıç_zamanı) /1000
if1000.0/ update_rate - delay_diff >0:
uyku(1000.0/ update_rate - delay_diff)

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

Adım 5: Çalıştırmasına İzin Vermek

BBC micro:bit üzerinde 2 düğme vardır: düğme A ve düğme B:

  • A düğmesine basmak, GiggleBot'u çizgiyi takip edecek şekilde ayarlar (eğer varsa).
  • B düğmesine basmak GiggleBot'u durdurur ve tekrar kullanabilmeniz için her şeyi sıfırlar.

GiggleBot'u bir çizgiyi takip ederken kaldırmamanız ve ardından tekrar takmamanız şiddetle tavsiye edilir, çünkü hesaplanan hata birikebilir ve robotun rotasını tamamen bozabilir. Kaldırmak istiyorsanız B düğmesine basın ve geri koyduğunuzda tekrar A düğmesine basın.

Önerilen: