Mündəricat:
- Addım 1: Tələb olunan komponentlər
- Addım 2: Parçaların və Ətrafın Qurulması
- Addım 3: GiggleBot qurmaq
- Addım 4: Tunerin Qurulması (Uzaqdan)
- Addım 5: GiggleBotun tənzimlənməsi
- Addım 6: GiggleBot NeoPixels söndürüldükdə işləyir
- Addım 7: GiggleBot Neopixels Açıq Qaçaraq
Video: GiggleBot Xətt İzləyicisini tənzimləmək - Ətraflı: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Bu çox qısa Təlimatlarda, öz GiggleBot -unuzu qara bir xətti izləmək üçün tənzimləyəcəksiniz. Bu digər dərslik GiggleBot Line Follower-da, tənzimləmə dəyərlərini o ssenariyə uyğun işləmək üçün kodlaşdırdıq. Başqa qazanclar əldə edərək daha yaxşı davranmaq istəyə bilərsiniz.
Bu dərslikdə, hər ikisini fərqli BBC mikro -ya yükləyə bilən 2 skript göstəririk: bitlərdən biri GiggleBot -a qoyulur, digəri ilə birlikdə 2 düymə bir menyudan keçmək və fərqli tənzimləmək üçün istifadə olunur. parametrlər. Bu yenilənmiş parametrlərin göndərilməsi radio vasitəsilə həyata keçirilir.
Addım 1: Tələb olunan komponentlər
Aşağıdakılara ehtiyacınız olacaq:
- Micro: bit üçün GiggleBot robotu.
- x3 AA Batareyalar
- x2 BBC micro: bit - biri GiggleBot üçün, digəri parametrləri tənzimləmək üçün uzaqdan idarə edən.
- BBC micro: bit üçün bir batareya, BBC micro: bit paketinin içərisində olan batareyaya bənzəyir.
BBC micro: GiggleBot Robotunu buradan əldə edin
Addım 2: Parçaların və Ətrafın Qurulması
Əslində izlərinizi qurmalısınız (yükləyin, çap edin, kəsin və yapışdırın) və sonra mühiti qurun (IDE və iş vaxtı).
Bu dərslik GiggleBot Line Follower adlı digər dərsliklə çox əlaqəli olduğundan, ora gedin və 2 və 3 -cü addımları izləyin və sonra bura qayıdın.
IDE -yə gəldikdə, Mu redaktorundan istifadə edə bilərsiniz və iş vaxtı üçün GiggleBot MicroPython İşləmə müddətini yükləməlisiniz. İş vaxtını sənədlərindən buradan yükləyə bilərsiniz. Sənədlərin Başlanğıc bölümünə keçin və ətraf mühitin qurulması ilə bağlı təlimatları izləyin. Bu andan etibarən, iş vaxtının v0.4.0 versiyası istifadə olunur.
Addım 3: GiggleBot qurmaq
İş vaxtını GiggleBot -a yandırmadan əvvəl, GiggleBot üçün istədiyiniz sürəti və yeniləmə sürətini seçdiyinizə əmin olun: standart olaraq sürət 100 (base_speed dəyişən) və yeniləmə dərəcəsi 70 (update_rate dəyişən) olaraq təyin olunur.
Mövcud tətbiqetməni nəzərə alsaq, əldə edilə bilən ən yüksək yeniləmə sürəti 70 -dir və run_neopixels True olaraq təyin edildikdə, yalnız 50 -yə çatmaq olar. Beləliklə, bir şəkildə, standart yeniləmə nisbətinin BBC micro: bit -in edə biləcəyinin kənarında olduğunu söyləyə bilərsiniz.
Yalnız qeyd üçün, xətt izləyicisi sensoru saniyədə 100 dəfə yeniləmələri geri qaytara bilər.
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.
GiggleBot PID Line Follower Tuner (tənzimləmək üçün pult tələb olunur) - xjfls23
microbit idxalından* |
gigglebot idxalından* |
utime import_su_ms, ticks_us |
radio idxal edin |
idxal idarəsi |
# radio və GB neopikselləri işə salın |
radio.on () |
neo = başlanğıc () |
# zamanlama |
update_rate = 70 |
# default mənfəət dəyərləri |
Kp = 0.0 |
Ki = 0.0 |
Kd = 0.0 |
təyin nöqtəsi = 0.5 |
trigger_point = 0.0 |
min_speed_percent = 0.2 |
əsas_sürət = 100 |
last_position = setpoint |
inteqral = 0.0 |
run_neopixels = Yanlış |
center_pixel = 5# təbəssümün mərkəzi pikselinin GB -də yerləşdiyi yer |
# turkuaz = tuple (xəritə (lambda x: int (x / 5), (64, 224, 208))) # neopixel ilə səhv çəkmək üçün istifadə ediləcək rəng |
# turkuaz = (12, 44, 41) # tam olaraq yuxarıdakı firuzə bunun üzərində şərh etdi |
error_width_per_pixel = 0.5/3# maksimum səhv, hər bir neopiksel arasındakı seqmentlərin sayına bölünür |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, üst_bağlı, ən kiçik_motor_gücü, ən yüksək_motor_gücü): |
qlobal baza sürəti |
əgər abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = yuxarı_bağlı - tətik nöqtəsi |
# y1 = 1.0 |
# x = abs_error - tətik nöqtəsi |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# eyni ilə |
y = (abs_error - tətik nöqtəsi) / (yuxarı_bağlı - tetikleyici_ nöqtə) |
motor_gücü = baza sürəti * (ən kiçik_motor_gücü + (1- y) * (ən yüksək_motor_ gücü - ən kiçik_motor_ gücü)) |
motor gücünü qaytarın |
başqa: |
qayıt baza sürəti * ən yüksək_motor_gücü |
run = Yanlış |
əvvəlki_xəta = 0 |
total_time = 0.0 |
total_counts = 0 |
whileTrue: |
# a düyməsinə basıldıqda izləməyə başlayın |
əgər button_a.is_pressed (): |
run = Doğru |
# amma b düyməsinə basıldıqda xətt izləyicisini dayandırın |
əgər button_b.is_pressed (): |
run = Yanlış |
inteqral = 0.0 |
əvvəlki_xəta = 0.0 |
display.scroll ('{} - {}'. format (total_time, total_counts), gecikmə = 100, gözləyin = Yanlış) |
total_time = 0.0 |
total_counts = 0 |
pixel_off () |
dayan () |
yuxu_ms (500) |
run isTrue olarsa: |
# xətt sensorlarını oxuyun |
start_time = ticks_us () |
# Kp/Kd qazanclarını bir pultla yenilədiyimizi yoxlayın |
cəhd edin: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ()) |
set_eyes () |
istisna olmaqlaTypeError: |
keçmək |
sağ, sol = oxumaq_sensoru (LINE_SENSOR, İKİSİ) |
mövqe <0.5 olduqda # xətt soldadır |
mövqe> 0,5 olduqda # xətt sağdadır |
mövqe = 0.5 olduqda # xətt ortadadır |
# ağırlıqlı arifmetik ortalamadır |
cəhd edin: |
mövqe = sağ /üzmək (sol + sağ) |
ZeroDivisionError istisna olmaqla: |
mövqe = 0.5 |
mövqe == 0 olarsa: mövqe = 0.001 |
mövqe == 1 olarsa: mövqe = 0.999 |
# bir PD nəzarətçisindən istifadə edin |
səhv = mövqe - təyin olunan nöqtə |
inteqral += səhv |
düzəliş = Kp * xətası + Ki * integral + Kd * (səhv - əvvəlki_hata) |
əvvəlki_xəta = səhv |
# motor sürətini hesablayın |
motor_sürəti = yuxarı_bağlı_xətti_sürət_ötürücü (abs (səhv), təyinat nöqtəsi * tətik nöqtəsi, təyin nöqtəsi, min_sürət_fərdi, 1.0) |
leftMotorSpeed = motor_sürəti + düzəliş |
rightMotorSpeed = motor_sürəti - düzəliş |
# GiggleBotun hansı istiqamətə getməsi lazım olduğunu göstərmək üçün neopikselləri yandırın |
əgər run_neopixelsTrueand total_counts %3 == 0 olarsa: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' üçün: |
neo = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03' üçün: |
ifabs (səhv)> error_width_per_pixel * i: |
səhv <0: |
neo [center_pixel + i] = (12, 44, 41) |
başqa: |
neo [center_pixel - i] = (12, 44, 41) |
başqa: |
faiz = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# cari pikseli işıqlandırın |
səhv <0: |
# neo [center_pixel + i] = tuple (xəritə (lambda x: int (x * faiz), firuzə)) |
neo [center_pixel + i] = (int (12* faiz), int (44* faiz), int (41* faiz)) |
başqa: |
# neo [center_pixel - i] = tuple (xəritə (lambda x: int (x * faiz), firuzə)) |
neo [center_pixel - i] = (int (12* faiz), int (44* faiz), int (41* faiz)) |
fasilə |
neo.show () |
cəhd edin: |
# motorları klipləyin |
solMotorSpeed> 100: |
solMotorSpeed = 100 |
rightMotorSpeed = sağMotorSpeed - solMotorSpeed +100 |
sağMotorSpeed> 100: |
sağMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - sağMotorSpeed +100 |
solMotorSpeed <-100: |
solMotorSpeed = -100 |
sağMotorSpeed <-100: |
sağMotorSpeed = -100 |
# motorları işə salın |
set_speed (solMotorSpeed, sağMotorSpeed) |
sürmək () |
# çap ((səhv, motor sürəti)) |
istisna olmaqla: |
# həll olunmayan bir problemlə üzləşsək |
keçmək |
# və döngə tezliyini qoruyun |
end_time = ticks_us () |
gecikmə_diff = (bitmə vaxtı - başlanğıc_vaxt) /1000 |
Total_time += gecikmə_diff |
total_counts += 1 |
if1.0/ update_rate - delay_diff> 0: |
yuxu (1.0/ update_rate - delay_diff) |
GitHub tərəfindən ❤ ilə ev sahibliyi edən rawgigglebot_line_follower_tuner.py -yə baxın
Addım 4: Tunerin Qurulması (Uzaqdan)
Etməli olduğumuz növbəti iş vaxtı + skriptini 2 -ci BBC mikro: bitinə yandırmaqdır. Bu ikinci micro: bit, aşağıdakı parametrləri tənzimləmək üçün istifadə ediləcək GiggleBot üçün uzaqdan idarəetmə funksiyasını yerinə yetirəcək:
- Kp = PID nəzarətçisi üçün mütənasib qazanc.
- Ki = PID nəzarətçisi üçün ayrılmaz qazanc.
- Kd = PID nəzarətçisi üçün törəmə gəlir.
- trigger_point = GiggleBotun minimum sürətinə çatana qədər xətti olaraq azalmağa başladığı minimum və maksimum sürətlər arasındakı faizlərlə ifadə olunan nöqtə.
- min_speed_percent = maksimum sürətin faizi ilə ifadə olunan minimum sürət.
Ayarlanabilen digər 2 dəyişən, GiggleBot -un üstündəki skriptdə birbaşa kodlanır: maksimum sürəti ifadə edən update_rate və base_speed. Sənədlərdə göstərildiyi kimi, GiggleBot üçün təyin edilə bilən maksimum sürət 100 -dir, bu da GiggleBotumuz üçün standart dəyərdir.
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.
GiggleBot Remote PID Line Follower Tuner (digər hissəni tələb edir) - xjfls23
microbit idxalından* |
yuxu_ms idxalından |
radio idxal edin |
idxal idarəsi |
# 1 -ci element Kp qazancdır |
# 2 -ci element Ki qazancdır |
# 3 -cü element Kd qazancdır |
# 4 -cü element, mühərriklərin sürəti aşağı salması üçün tətik nöqtəsidir (0 -> 1) |
# 5 -ci element, faizlərlə ifadə olunan motorlar üçün minimum sürətdir (0 -> 1) |
qazanc = [0.0, 0.0, 0.0, 1.0, 0.0] |
stepSize = 0.1 |
1 -ci element üçün # 0 və 1 |
2 -ci element üçün # 2 və 3 |
currentSetting = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. format (currentSetting, mənfəət [int (currentSetting /2)]), gecikmə = 100, gözləmə = Yanlış) |
radio.on () |
showMenu () |
whileTrue: |
yeniləndi = Yanlış |
əgər button_a.is_pressed (): |
currentSetting = (currentSetting +1) % (2*5) |
yeniləndi = Doğrudur |
əgər button_b.is_pressed (): |
əgər cari Ayar %2 == 0: |
Cari Ayar 0 və ya 2 olduqda # qazancı artırın. |
ifint (currentSetting /2) [0, 2]: |
mənfəət [int (currentSetting /2)] += 10* stepSize |
başqa: |
mənfəət [int (currentSetting /2)] += stepSize |
başqa: |
cari Ayar 1 və ya 3 olduqda # qazancı artırın. |
ifint (currentSetting /2) [0, 2]: |
mənfəət [int (currentSetting /2)] -= 10* stepSize |
başqa: |
mənfəət [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff', *mənfəət)) |
yeniləndi = Doğrudur |
yenilənirsə: |
showMenu () |
yuxu_ms (200) |
GitHub tərəfindən ❤ ilə evlənmiş rawgigglebot_line_follower_configurator.py faylına baxın
Addım 5: GiggleBotun tənzimlənməsi
GiggleBotu yola qoyun, yandırın və işləməsinə icazə verin. Bu arada, onu daim yola salmalı və qazancları/parametrləri digər BBC mikro: əlinizdə tutduğunuz bit ilə tənzimləməlisiniz.
GiggleBot -u işə salmaq üçün GiggleBot -un BBC mikro: bitindəki A düyməsini basın və onu dayandırın və beləliklə B düyməsindəki vəziyyətini sıfırlayın.
Uzaq BBC mikro: bitində A düyməsini basmaq sizi menyusundakı hər bir seçimdən keçirəcək və B düyməsi müvafiq dəyəri artırır/azaldır. Saatı köhnə bir avtomobilin tablosuna qoymaq kimidir. Seçimlər belədir:
- 0-1 variantları Kp qazanc üçündür.
- Ki qazanmaq üçün 2-3 seçim var.
- Kd qazanmaq üçün 4-5 seçim var.
- 6-7 variant, mühərriklərin yavaşlamağa başladığı an üçün təyin olunan nöqtəni təyin etmək üçündür.
- Minimum sürəti təyin etmək üçün 8-9 seçim var.
Unutmayın ki, menyudakı cüt ədədlər müvafiq dəyərləri artırmaq üçündür və tək ədədlər isə tam əksinədir.
Ayrıca, GiggleBot -un BBC mikro: bitindəki B düyməsini basarkən, Neopixel istehsalı olan ekranda son sıfırlamadan bu yana keçən millisaniyələrin sayını və robotun keçdiyi dövrlərin sayını görəcəksiniz - bu 2 ilə hesablaya bilərsiniz robotun yeniləmə sürəti.
Nəhayət və ən əsası, GiggleBot üçün 2 tuning hazırladım. Onlardan biri Neopixel LED -ləri söndürüldükdə, digəri isə əks halda. Neopixel LED -ləri xətanın hansı istiqamətdə yığıldığını göstərmək üçün istifadə olunur.
Parametrlərin tənzimlənməsinin birinci dəsti (NeoPixel LEDləri söndürüldükdə)
- Kp = 32.0
- Ki = 0.5
- Kd = 80.0
- trigger_setpoint = 0.3 (30%-dir)
- min_speed_percent = 0.2 (20%-dir)
- base_speed = 100 (aka maksimum sürət)
- update_rate = 70 (70Hz -də işləyir)
Parametrlərin tənzimlənməsinin 2 -ci dəsti (NeoPixel LEDləri yandırılmış halda)
- Kp = 25.0
- Ki = 0.5
- Kd = 35.0
- trigger_setpoint = 0.3 (30%-dir)
- min_speed_percent = 0.3 (bu 30%-dir)
- base_speed = 70 (aka maksimum sürət)
- update_rate = 50 (50Hz -də işləyir)
- Ayrıca, dəyişən run_neopixels, GiggleBotun BBC micro: bitinə yüklənən skriptdə True olaraq təyin edilməlidir. Bu, NeoPixel LED -lərini xətanın hansı istiqamətə yığıldığını göstərəcək şəkildə yanıb -söndürəcək.
Addım 6: GiggleBot NeoPixels söndürüldükdə işləyir
Bu, əvvəlki addımda tapılan 1 -ci tənzimləmə parametrləri ilə GiggleBotun işə salınmasının bir nümunəsidir. Bu nümunədə NeoPixel LEDləri söndürülmüşdür.
Addım 7: GiggleBot Neopixels Açıq Qaçaraq
Bu, 5 -ci addımda tapılan 2 -ci tənzimləmə parametrləri ilə GiggleBotun işə salınması nümunəsidir. Bu nümunədə NeoPixel LED -ləri yandırılmışdır.
Bu nümunədə GiggleBotun xətti izləməkdə daha çətin bir vaxt keçirdiyinə diqqət yetirin - bunun səbəbi Neopixel LED -lərinin BBC micro: bit -in CPU vaxtını "yeməsi" dir. Bu səbəbdən yeniləmə sürətini 70 -dən 50 -yə endirməli olduq.
Tövsiyə:
Tinkercad -da xətt izləyicisi: 3 addım
Tinkercad-da Line Follower: A-Line Follower Robot, adından da göründüyü kimi, yerə və ya tavana quraşdırılmış vizual xətti izləyən avtomatik idarə olunan bir avtomobildir. Adətən vizual xətt, robot izləyicisinin keçdiyi yoldur və bu, qara xətt olacaq
Oturan zaman izləyicisini necə qurmaq olar: 7 addım
Oturan zaman izləyicisini necə qurmaq olar: Bu layihə, bir insanı aşkar etmək və izləmək üçün Zio Qwiic Ultrasonik Məsafə Sensorundan istifadə edəcək. Cihaz strateji olaraq oturan şəxslə üzbəüz olan bir ekranın/monitorun üstünə, kompüterinin qarşısına qoyulacaq
ESP8266, E-kağız Ekranı ilə Coronavirus COVID 19 Canlı Məlumat İzləyicisini Necə Etmək olar: 7 addım
ESP8266, E-kağız Ekranı ilə Coronavirus COVID 19 Canlı Məlumat İzləyicisini Necə Hazırlamaq olar: 1
Bant Oynatıcı ilə Boombox -a Xətt əlavə etmək: 5 addım
Tape Player ilə Boombox -a Xətt əlavə etmək: ** Bütün təlimatlarda olduğu kimi, cəhd edərkən əşyanızı / sağlamlığınızı / hər şeyi öz əlinizə alırsınız! Əsas elektrik lövhəsindəki yüksək gərginliklər, isti lehimləmə dəmiri və s. Diqqətli və səbirli olmaq sizə uğur gətirəcək. ** Th
Windows 10: 5 addımlarında CPU tezliyini necə tənzimləmək olar
Windows 10 -da CPU Tezliyini Necə Ayarlamaq olar: Bu, Windows 10 Kompüterinizdə CPU -nun Tam Sürətini Yavaşlatmaq/Məhdudlaşdırmaq və ya Kilidini Açmaqla yanaşı CPU Tezliyini Necə Ayarlayacağınızı Göstərir