İçindekiler:
- Adım 1: Gerekli Bileşenler
- 2. Adım: Yolları ve Ortamı Ayarlama
- Adım 3: GiggleBot'u Ayarlama
- Adım 4: Ayarlayıcıyı Ayarlama (Uzaktan)
- Adım 5: GiggleBot'u Ayarlama
- Adım 6: NeoPixels Kapalıyken GiggleBot Çalışıyor
- 7. Adım: GiggleBot Neopikseller Açıkken Çalışıyor
Video: GiggleBot Çizgi Takipçisini Ayarlama - Gelişmiş: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu çok kısa Instructables'ta kendi GiggleBot'unuzu siyah bir çizgiyi takip edecek şekilde ayarlayacaksınız. Bu diğer öğreticide GiggleBot Line Follower, bu senaryoya göre çalışmak için ayar değerlerini sabit kodladık. Başka kazançlar elde ederek daha iyi davranmasını sağlamak isteyebilirsiniz.
Bu eğitimde size, biri GiggleBot'a yerleştirilecek şekilde farklı BBC mikro:bitlerine yüklenebilen ve diğeriyle birlikte 2 düğme bir menüde gezinmek ve farklı ayarları yapmak için kullanılan 2 komut dosyası gösteriyoruz. parametreler. Bu güncellenen parametrelerin gönderimi telsiz üzerinden yapılır.
Adım 1: Gerekli Bileşenler
Aşağıdakilere ihtiyacınız olacak:
- micro:bit için bir GiggleBot robotu.
- x3 AA Piller
- x2 BBC micro:bits - biri GiggleBot için, diğeri ise parametreleri ayarlamak için uzaktan kumanda görevi görür.
- BBC micro:bit için bir pil - BBC micro:bit paketiyle gelene benzer.
BBC micro:bit için GiggleBot Robot'u buradan edinin
2. Adım: Yolları ve Ortamı Ayarlama
Ayrıca parçalarınızı gerçekten oluşturmanız (indirme, yazdırma, kesme ve bant döşemeleri) ve ardından ortamı (IDE ve çalışma zamanı) ayarlamanız gerekir.
Bu öğretici, GiggleBot Line Follower başlıklı diğer öğreticiyle çok ilgili olduğundan, oraya gidin ve 2. ve 3. adımları izleyin ve ardından buraya geri dönün.
IDE'ye gelince, Mu editörünü kullanabilirsiniz ve çalışma zamanı için GiggleBot MicroPython Runtime'ı indirmeniz gerekir. Çalışma zamanı, buradaki belgelerinden indirilebilir. Belgelerin Başlarken bölümüne gidin ve ortamın kurulumuyla ilgili talimatları izleyin. Bu andan itibaren, çalışma zamanının v0.4.0 sürümü kullanılmaktadır.
Adım 3: GiggleBot'u Ayarlama
Çalışma zamanını GiggleBot'a göndermeden önce, GiggleBot için istediğiniz hızı ve güncelleme oranını seçtiğinizden emin olun: varsayılan olarak hız 100'e (temel_hız değişkeni) ve güncelleme hızı 70'e (update_rate değişkeni) ayarlanmıştır.
Mevcut uygulama göz önüne alındığında, elde edilebilecek en yüksek güncelleme hızı 70'tir ve run_neopixels True olarak ayarlanırsa, yalnızca 50 elde edilebilir. Yani bir bakıma, varsayılan güncelleme hızının BBC micro:bit'in yapabileceklerinin hemen yanında olduğunu söyleyebilirsiniz.
Bilginize, çizgi izleyen sensör, saniyede 100 kez güncelleme döndürebilir.
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 Line Follower Tuner (ayarlamak için uzaktan kumanda gerekir) - xjfls23
mikrobit içe aktarmadan* |
gigglebot içe aktarmadan* |
utime import sleep_ms, ticks_us |
ithal radyo |
ithalat yapısı |
# radyo ve GB neopiksellerini başlat |
radyo.on() |
neo = init() |
# zamanlama |
güncelleme oranı =70 |
# varsayılan kazanç değerleri |
Kp =0.0 |
Ki =0.0 |
Kd =0.0 |
ayar noktası = 0,5 |
tetikleyici_nokta =0.0 |
min_speed_percent = 0,2 |
temel_hız =100 |
last_position = ayar noktası |
integral =0.0 |
run_neopixels =Yanlış |
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 |
toplam_zaman =0.0 |
total_counts =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 |
display.scroll('{} - {}'.format(total_time, total_counts), delay=100, wait=Yanlış) |
toplam_zaman =0.0 |
total_counts =0 |
piksel_kapalı() |
Dur() |
uyku_ms(500) |
isTrue çalıştırılırsa: |
# hat sensörlerini oku |
start_time = ticks_us() |
# uzaktan kumanda ile Kp/Kd kazançlarını güncelleyip güncellemediğimizi kontrol edin |
denemek: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack('fffff', radio.receive_bytes()) |
set_eyes() |
hariçTypeError: |
geçmek |
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 |
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 |
# GiggleBot'un hangi yöne gitmesi gerektiğini göstermek için neopikselleri aydınlatın |
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] = (12, 44, 41) |
Başka: |
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(yüzde 12*), int(yüzde 44*), int(yüzde 41*)) |
Başka: |
# neo[center_pixel - i] = demet(harita(lambda x: int(x * yüzde), turkuaz)) |
neo[center_pixel - i] = (int(yüzde 12*), int(44* yüzde), int(yüzde 41*)) |
kırmak |
neo.göster() |
denemek: |
# motorları klipsle |
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 |
total_time += delay_diff |
total_counts +=1 |
if1.0/ update_rate - delay_diff >0: |
uyku(1.0/ update_rate - delay_diff) |
GitHub tarafından ❤ ile barındırılan rawgigglebot_line_follower_tuner.py dosyasını görüntüleyin
Adım 4: Ayarlayıcıyı Ayarlama (Uzaktan)
Yapmamız gereken bir sonraki şey, çalışma zamanı + komut dosyasını 2. BBC micro:bit'e flash yapmak. Bu ikinci mikro:bit, aşağıdaki parametreleri ayarlamak için kullanılacak olan GiggleBot için bir uzaktan kumanda görevi görecektir:
- Kp = PID kontrolörü için oransal kazanç.
- Ki = PID denetleyicisi için integral kazanç.
- Kd = PID kontrolörü için türev kazancı.
- trigger_point = GiggleBot'un minimum ve maksimum hızları arasındaki yüzde olarak ifade edilen, hızın minimum hıza ulaşana kadar doğrusal olarak azalmaya başladığı nokta.
- min_speed_percent = maksimum hızın yüzdesi olarak ifade edilen minimum hız.
Ayarlanabilen diğer 2 değişken, GiggleBot'ta bulunan komut dosyasında doğrudan sabit kodlanmıştır: update_rate ve maksimum hızı temsil eden base_speed. Belgelerde açıklandığı gibi, GiggleBot için ayarlanabilecek maksimum hız 100'dür ve bu aynı zamanda GiggleBot'umuz için de varsayılan değerdir.
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 Remote PID Line Follower Tuner (diğer parçayı gerektirir) - xjfls23
mikrobit içe aktarmadan* |
utime'dan uyku_ms'sini içe aktar |
ithal radyo |
ithalat yapısı |
# 1. eleman Kp kazancıdır |
# 2. eleman Ki kazancıdır |
# 3. eleman Kd kazancıdır |
# 4. eleman, motorların hızı düşürmesi için tetikleme noktasıdır (0 -> 1) |
# 5. öğe, yüzde (0 -> 1) olarak ifade edilen motorlar için minimum hızdır. |
kazançlar = [0.0, 0.0, 0.0, 1.0, 0.0] |
adımBoyutu = 0.1 |
# 1. eleman için 0 ve 1 |
2. eleman için # 2 ve 3 |
geçerliAyar =0 |
defshowMenu(): |
display.scroll('{} - {}'.format(currentSetting, gains[int(currentSetting/2)]), delay=100, wait=Yanlış) |
radyo.on() |
menüyü göster() |
whileTrue: |
güncellendi =Yanlış |
button_a.is_pressed() ise: |
currentSetting = (currentSetting +1) % (2*5) |
güncellenmiş =Doğru |
button_b.is_pressed() ise: |
geçerliAyar %2==0 ise: |
# currentSetting 0 veya 2 veya.. olduğunda kazancı artırın |
ifint(currentSetting/2) [0, 2]: |
kazançlar[int(currentSetting/2)] +=10* stepSize |
Başka: |
kazançlar[int(currentSetting/2)] += stepSize |
Başka: |
# currentSetting 1 veya 3 veya.. olduğunda kazancı artırın |
ifint(currentSetting/2) [0, 2]: |
kazançlar[int(currentSetting/2)] -=10* stepSize |
Başka: |
kazançlar[int(currentSetting/2)] -= stepSize |
radio.send_bytes(ustruct.pack('fffff', *kazançlar)) |
güncellenmiş =Doğru |
güncellenirse: |
menüyü göster() |
uyku_ms(200) |
GitHub tarafından ❤ ile barındırılan rawgigglebot_line_follower_configurator.py dosyasını görüntüleyin
Adım 5: GiggleBot'u Ayarlama
GiggleBot'u raya yerleştirin, açın ve çalışmasına izin verin. Bu arada, sürekli olarak onu tekrar yola koymanız ve elinizde tuttuğunuz diğer BBC micro:bit ile kazançları/parametreleri ayarlamanız gerekecek.
GiggleBot'u başlatmak için, GiggleBot'un BBC micro:bit'indeki A düğmesine basın ve onu durdurmak ve böylece durumunu sıfırlamak için B düğmesine basın.
Uzak BBC micro:bit'te, A düğmesine basmak sizi menüsündeki tüm seçeneklere götürür ve B düğmesi karşılık gelen değeri artırır/azaltır. Eski bir arabanın gösterge panelinde saati ayarlamak gibi. Seçenekler şöyle:
- 0-1 seçenekleri Kp kazancı içindir.
- 2-3 seçenek Ki kazancı içindir.
- 4-5 seçenek Kd kazancı içindir.
- 6-7 seçenekler, motorların yavaşlamaya başladığı an için ayar noktasının ayarlanması içindir.
- 8-9 seçenekler minimum hızı ayarlamak içindir.
Menüdeki çift sayıların karşılık gelen değerleri artırmak için olduğunu ve tek sayılar için bunun tam tersi olduğunu unutmayın.
Ayrıca, GiggleBot'un BBC micro:bit'indeki B düğmesine bastığınızda, Neopiksel yapımı ekranında son sıfırlamadan bu yana geçen milisaniye sayısını ve robotun geçtiği döngü sayısını göreceksiniz - bu 2 ile hesaplayabilirsiniz robotun güncelleme hızı.
Son olarak ve en önemlisi, GiggleBot için 2 ayar buldum. Bunlardan biri Neopixel LED'ler kapatıldığında, diğeri ise aksi durumdayken. Neopiksel LED'ler, hatanın hangi yöne biriktiğini göstermek için kullanılır.
1. parametre ayarlama seti (NeoPixel LED'leri kapalıyken)
- Kp = 32,0
- Ki = 0,5
- Kd = 80.0
- trigger_setpoint = 0,3 (%30'dur)
- min_speed_percent = 0,2 (%20'dir)
- base_speed = 100 (maksimum hız olarak da bilinir)
- update_rate = 70 (70Hz'de çalışıyor)
2. parametre ayarlama seti (NeoPixel LED'leri açıkken)
- Kp = 25.0
- Ki = 0,5
- Kd = 35.0
- trigger_setpoint = 0,3 (%30'dur)
- min_speed_percent = 0,3 (%30'dur)
- base_speed = 70 (maksimum hız olarak da bilinir)
- update_rate = 50 (50Hz'de çalışıyor)
- Ayrıca, GiggleBot'un BBC micro:bit'ine yüklenen komut dosyasında değişken run_neopixels True olarak ayarlanmalıdır. Bu, NeoPixel LED'lerinin, hatanın hangi yöne doğru biriktiğini gösterecek şekilde yanıp sönmesini sağlayacaktır.
Adım 6: NeoPixels Kapalıyken GiggleBot Çalışıyor
Bu, GiggleBot'u önceki adımda bulunan 1. ayar parametreleriyle çalıştırmanın bir örneğidir. Bu örnekte NeoPixel LED'leri kapalıdır.
7. Adım: GiggleBot Neopikseller Açıkken Çalışıyor
Bu, GiggleBot'u 5. adımda bulunan 2. ayar parametreleriyle çalıştırmanın bir örneğidir. Bu örnekte NeoPixel LED'leri açıktır.
Bu örnekte GiggleBot'un çizgiyi takip etmekte nasıl daha zorlandığına dikkat edin - bunun nedeni Neopiksel LED'lerin BBC micro:bit'in CPU zamanını "yemesi". Bu yüzden güncelleme oranını 70'ten 50'ye düşürmek zorunda kaldık.
Önerilen:
Artık İşeme Yok, Kedilerin Evinizde İşemelerini Durduran Evcil Hayvan Davranışı Ayarlama Cihazı: 4 Adım
Artık İşeme Yok, Kedilerin Evinizde İşemesini Durduran Evcil Hayvan Davranışı Ayarlama Cihazı: Kedimden o kadar rahatsız oldum ki yatağıma işemeyi çok seviyor, ihtiyacı olan her şeyi kontrol ettim ve veterinere de götürdüm. Düşünebildiğim her şeyi düzeltip doktorun sözünü dinledikten sonra, onun bazı kötü davranışları olduğunu fark ettim. Yani
Saat, LCD Ekran, Kızılötesi Ayarlama: 6 Adım
Saat, LCD Ekran, Ayarlanacak Kızılötesi: Çalıştırma zamanını yılda birkaç dakika içinde tutan gerçek zamanlı bir saat oluşturun. Kod ve bileşenler kolayca başka projelere dönüştürülebilir. Bu proje minimum miktarda kablolama gerektirir ve lehim gerektirmez. Zaman tutucu bir DS3231 gerçek ti
Mobil Outlook Uygulamasında İmza Ayarlama: 5 Adım
Mobil Outlook Uygulamasında İmza Ayarlama: İş dünyasında çalışıyorsanız, Microsoft Outlook'un masaüstü sürümüne büyük olasılıkla aşinasınızdır. Outlook, e-posta göndermenize, dosya depolamanıza, toplantı planlamanıza ve istediğiniz şekilde özelleştirmenize olanak tanıyan harika bir araçtır
Twitch Akışı Ayarlama: 7 Adım
Bir Twitch Yayını Kurma.: Bugün Açık Yayın Yazılımını kullanarak twitch.tv'de yayına başlama adımlarını göstereceğim. Bu teknik bir yazı projesi için kullanılıyor. Umarım bu, akışınızı ayarlamanıza yardımcı olur.***Aklınızda tutmanız gereken bir şey var: Akış yapamazsınız
Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım
GiggleBot Çizgi Takipçisi Python Kullanarak: 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 bir BBC micro:bit ile eşleştirilmesi gerekiyor. uygun şekilde kontrol edilmelidir. Eğer