Мазмуну:
- 1 -кадам: Керектүү компоненттер
- 2 -кадам: Тректерди жана Айлана -чөйрөнү орнотуу
- 3 -кадам: GiggleBotту орнотуу
- 4 -кадам: Тюнерди орнотуу (Алыстан)
- 5 -кадам: GiggleBotту жөндөө
- 6 -кадам: GiggleBot NeoPixels өчүрүлгөндө чуркоо
- 7 -кадам: GiggleBot Neopixels күйгүзүлгөндө чуркоо
Video: GiggleBot Line Follower жөндөө - Өркүндөтүлгөн: 7 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Бул өтө кыска көрсөтмөлөрдө сиз өзүңүздүн GiggleBotту кара сызыкты ээрчиңиз. Бул башка окуу куралы GiggleBot Line Followerде, биз ошол сценарий боюнча иштөө үчүн тюнинг баалуулуктарын катуу коддогонбуз. Сиз башка кирешелер менен келип, аны жакшы алып барууну каалашыңыз мүмкүн.
Бул үйрөткүчтө биз сизге ар кандай Би -Би -Си микро: биттерине жүктөлүүчү 2 сценарийди көрсөтүп жатабыз, алардын бири GiggleBotко, экинчиси менен бирге, 2 баскыч менюдан өтүп, башкача жөнгө салуу үчүн колдонулат. параметрлер. Бул жаңыртылган параметрлерди жөнөтүү радио аркылуу жүргүзүлөт.
1 -кадам: Керектүү компоненттер
Сизге төмөнкүлөр керек болот:
- Micro: bit үчүн GiggleBot роботу.
- x3 AA батареялары
- x2 Би -Би -Си микро: биттери - бири GiggleBot үчүн, экинчиси параметрлерди жөндөө үчүн алыстан башкаруучу катары.
- Би -Би -Си микро: бит үчүн батарейка - Би -Би -Си микро: бит пакетине кирген сыяктуу.
BBC micro: GiggleBot роботун бул жерден алыңыз
2 -кадам: Тректерди жана Айлана -чөйрөнү орнотуу
Сиз ошондой эле тректериңизди курушуңуз керек (плиткаларды жүктөп алуу, басып чыгаруу, кесүү жана скотч), андан кийин чөйрөнү орнотуу керек (IDE жана иштөө убактысы).
Бул окуу куралы GiggleBot Line Follower аттуу башка окуу куралы менен абдан байланыштуу болгондуктан, жөн эле ошол жакка барып, 2 жана 3 -кадамдарды аткарып, кайра бул жерге келиңиз.
IDEге келсек, сиз Му редакторун колдоно аласыз жана иштөө убактысы үчүн GiggleBot MicroPython Runtime жүктөп алышыңыз керек. Иш убактысын анын документтеринен бул жерден көчүрүп алса болот. Документтердин Баштоо бөлүмүнө өтүңүз жана айлана -чөйрөнү орнотуу боюнча ошол көрсөтмөлөрдү аткарыңыз. Ушул учурга карата, иштөө убактысынын v0.4.0 версиясы колдонулат.
3 -кадам: GiggleBotту орнотуу
GiggleBotко иштөө убактысын күйгүзүүдөн мурун, GiggleBot үчүн керектүү ылдамдыкты жана жаңыртуу ылдамдыгын тандаганыңызды текшериңиз: демейки боюнча ылдамдык 100гө (base_speed өзгөрмөсү) жана жаңыртуу ылдамдыгы 70ке (update_rate өзгөрмөсү) коюлган.
Учурдагы ишке киргизүүнү эске алганда, жетүүгө мүмкүн болгон эң жогорку жаңыртуу ылдамдыгы 70 жана run_neopixels True деп коюлса, анда 50гө гана жетүүгө болот. Ошентип, сиз демейки жаңыртуу ылдамдыгы Би -Би -Си микро: бит кыла ала турган нерсенин четинде деп айта аласыз.
Жөн эле рекорд үчүн, линияны ээрчиген сенсор секундасына 100 жолу жаңыртууларды кайтара алат.
Эскертүү: Төмөнкү скриптте боштуктар жок болушу мүмкүн жана бул GitHub Gistsти көрсөтүүдөгү кандайдыр бир көйгөйдөн улам келип чыккан окшойт. Сизди GitHub баракчасына алып баруу үчүн, маңызын чыкылдатыңыз, анда сиз кодду көчүрүп-чаптай аласыз.
GiggleBot PID Line Follower Tuner (аны тууралоо үчүн алыстан башкарууну талап кылат) - xjfls23
микробиттик импорттон* |
gigglebot импортунан* |
utime импортунан sleep_ms, ticks_us |
радио импорттоо |
структураны импорттоо |
# радиону жана GB неопикселин баштоо |
radio.on () |
нео = init () |
# убакыт |
update_rate = 70 |
# демейки пайда баалуулуктары |
Kp = 0.0 |
Ки = 0.0 |
Kd = 0.0 |
белгиленген чек = 0,5 |
trigger_point = 0.0 |
min_speed_percent = 0.2 |
base_speed = 100 |
last_position = коюлган чек |
интеграл = 0.0 |
run_neopixels = Жалган |
center_pixel = 5# мында жылмайуунун борбордук пиксели ГБда жайгашкан |
# бирюза = тупле (карта (lambda x: int (x / 5), (64, 224, 208)))) # түс неопикселдер менен ката тартуу үчүн колдонулат |
# бирюза = (12, 44, 41) # дал ушул жогорудагы бирюза ушул жерде комментарий берди |
error_width_per_pixel = 0.5/3# макс ката ар бир неопикселдин ортосундагы сегменттердин санына бөлүнөт |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, top_bound, small_motor_power, жогорку_motor_power): |
глобалдык базалык ылдамдык |
if abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = жогорку_байланыш - trigger_point |
# y1 = 1.0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# окшош |
y = (abs_error - trigger_point) / (top_bound - trigger_point) |
motor_power = base_speed * (кичинекей_мотор_күч + (1- y) * (эң жогорку_мотор_күч - эң кичине_мотор_күч)) |
motor_power кайтаруу |
башка: |
кайтуу base_speed * эң жогорку_мотордук күч |
иштетүү = Жалган |
previous_error = 0 |
total_time = 0.0 |
total_counts = 0 |
whileTrue: |
# эгер кнопка a басылса, анда ээрчүүнү баштаңыз |
эгер button_a.is_pressed (): |
иштетүү = Чын |
# бирок b баскычы басылса, линияны ээрчигенди токтотуңуз |
эгер button_b.is_pressed (): |
иштетүү = Жалган |
интеграл = 0.0 |
previous_error = 0.0 |
display.scroll ('{} - {}'. формат (total_time, total_counts), кечигүү = 100, күтүү = False) |
total_time = 0.0 |
total_counts = 0 |
pixel_off () |
токтотуу () |
_ (500) |
эгер иштетүү isTrue: |
# линия сенсорлорун окуу |
start_time = ticks_us () |
# Kp/Kd кирешелерин алыстан башкаруу пульту менен жаңыртканыбызды текшериңиз |
аракет кыл: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ()) |
set_eyes () |
exceptTypeError: |
өтүү |
оң, сол = read_sensor (LINE_SENSOR, BOTH) |
<линия <0,5 болгондо сол жакта |
позиция> 0,5 болгондо # сап оң жакта |
позиция = 0,5 болгондо # сызык ортосунда болот |
# бул салмактуу арифметикалык орточо |
аракет кыл: |
позиция = оңго /калкып жүрүү (солго + оңго) |
exceptZeroDivisionError: |
орду = 0,5 |
эгер позиция == 0: позиция = 0,001 |
эгер позиция == 1: позиция = 0,999 |
# PD контроллерин колдонуңуз |
ката = позиция - белгиленген чек |
интеграл += ката |
оңдоо = Kp * ката + Ки * интеграл + Kd * (ката - мурунку_ката) |
previous_error = ката |
# мотор ылдамдыгын эсептөө |
motor_speed = yuqori_bound_linear_speed_reducer (abs (ката), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + тууралоо |
rightMotorSpeed = motor_speed - оңдоо |
# GiggleBot кайсы багытка кетиши керек экенин көрсөтүү үчүн неопикселдерди күйгүзүңүз |
эгер run_neopixels isTrueand total_counts %3 == 0: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' үчүн: |
нео = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03' үчүн: |
ifabs (ката)> error_width_per_pixel * i: |
эгер ката <0: |
нео [center_pixel + i] = (12, 44, 41) |
башка: |
нео [center_pixel - i] = (12, 44, 41) |
башка: |
пайыз = 1- (error_width_per_pixel * i -abs (ката)) / error_width_per_pixel |
# учурдагы пикселди жарык кылыңыз |
эгер ката <0: |
# нео [борбор_пиксел + i] = тупле (карта (lambda x: int (x * пайыз), бирюза)) |
нео [борбор_пиксел + i] = (инт (12* пайыз), инт (44* пайыз), инт (41* пайыз)) |
башка: |
# нео [борбор_пиксел - i] = тупле (карта (lambda x: int (x * пайыз), бирюза)) |
нео [борбор_пиксел - i] = (инт (12* пайыз), инт (44* пайыз), инт (41* пайыз)) |
тыныгуу |
neo.show () |
аракет кыл: |
# моторлорду кысыңыз |
leftMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
Эгерде rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
Эгерде rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# моторлорду иштетүү |
set_speed (leftMotorSpeed, rightMotorSpeed) |
айдоо () |
# басып чыгаруу ((ката, мотор ылдамдыгы)) |
тышкары: |
# биз кандайдыр бир чечилбеген маселеге кирип калсак |
өтүү |
# жана циклдин жыштыгын сактаңыз |
end_time = ticks_us () |
delay_diff = (end_time - start_time) /1000 |
total_time += delay_diff |
total_counts += 1 |
if1.0/ update_rate - delay_diff> 0: |
уйку (1.0/ update_rate - delay_diff) |
GitHub тарабынан ❤ уюштурулган rawgigglebot_line_follower_tuner.py көрүү
4 -кадам: Тюнерди орнотуу (Алыстан)
Кийинки кылышыбыз керек, иштөө убактысы + скриптин 2 -Би -Би -Си микро: битке чагылдыруу. Бул экинчи micro: bit GiggleBotтун алыстан башкаруучусу катары иштейт, ал төмөнкү параметрлерди тууралоо үчүн колдонулат:
- Kp = PID контроллери үчүн пропорционалдуу пайда.
- Ки = PID контроллери үчүн интегралдык пайда.
- Pd контроллери үчүн Kd = туунду пайда.
- trigger_point = GiggleBotтун минималдуу жана максималдуу ылдамдыктарынын ортосундагы пайыз менен туюнтулган чекит, анда ылдамдык минималдуу ылдамдыкка жеткенге чейин сызыктуу түрдө кыскара баштайт.
- min_speed_percent = максималдуу ылдамдыктын пайызы менен көрсөтүлгөн минималдуу ылдамдык.
Калган 2 калган өзгөрмөлөр GiggleBotко отурган скриптте түз коддолгон: update_rate жана base_speed, бул максималдуу ылдамдыкты билдирет. Документтерде сүрөттөлгөндөй, GiggleBot үчүн эң жогорку ылдамдык 100, бул биздин GiggleBot үчүн демейки мааниси.
Эскертүү: Төмөнкү скриптте боштуктар жок болушу мүмкүн жана бул GitHub Gistsти көрсөтүүдөгү кандайдыр бир көйгөйдөн улам келип чыккан окшойт. Сизди GitHub баракчасына алып баруу үчүн, маңызын чыкылдатыңыз, анда сиз кодду көчүрүп-чаптай аласыз.
GiggleBot Remote PID Line Follower Tuner (башка бөлүгүн талап кылат) - xjfls23
микробиттик импорттон* |
utime импортунан sleep_ms |
радио импорттоо |
структураны импорттоо |
# 1чи элемент - Kp пайдасы |
# 2 -элемент - Ki пайдасы |
# 3 -элемент - Kd кирешеси |
# 4 -элемент -бул моторлордун ылдамдыгын төмөндөтүүчү trigger_point (0 -> 1) |
# 5 -элемент -моторлордун минималдуу ылдамдыгы пайыз менен көрсөтүлгөн (0 -> 1) |
киреше = [0.0, 0.0, 0.0, 1.0, 0.0] |
stepSize = 0.1 |
1 -элемент үчүн # 0 жана 1 |
2 -элемент үчүн # 2 жана 3 |
currentSetting = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. формат (currentSetting, пайда [int (currentSetting /2)])), кечигүү = 100, күтүү = False) |
radio.on () |
showMenu () |
whileTrue: |
жаңыртылган = Жалган |
эгер button_a.is_pressed (): |
currentSetting = (currentSetting +1) % (2*5) |
жаңыртылган = Чын |
эгер button_b.is_pressed (): |
эгер currentSetting %2 == 0: |
CurrentSetting 0 же 2 же.. болгондо # кирешени жогорулатуу. |
ifint (currentSetting /2) [0, 2] ичинде: |
кирешелер [int (currentSetting /2)] += 10* stepSize |
башка: |
кирешелер [int (currentSetting /2)] += stepSize |
башка: |
CurrentSetting 1 же 3 болгондо # кирешени жогорулатуу. |
ifint (currentSetting /2) [0, 2] ичинде: |
кирешелер [int (currentSetting /2)] -= 10* stepSize |
башка: |
кирешелер [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff', *пайда)) |
жаңыртылган = Чын |
жаңыртылган болсо: |
showMenu () |
Sabinik (200) |
GitHub тарабынан ❤ уюштурулган rawgigglebot_line_follower_configurator.py көрүү
5 -кадам: GiggleBotту жөндөө
GiggleBotту трекке коюңуз, күйгүзүңүз жана иштетиңиз. Ошол эле учурда, сиз аны дайыма трекке коюп, кирешеңизди/параметрлериңизди башка Би -Би -Синин микро: битин колуңузда кармап турушуңуз керек болот.
GiggleBotту баштоо үчүн, GiggleBotтун BBC микро: А баскычын басыңыз жана аны токтотуу үчүн B баскычын басуу абалын баштапкы абалга келтирүү.
Алыскы Би -Би -Си микро: битинде, А баскычын басуу сизди менюдагы ар бир вариантка алып барат жана В баскычы тиешелүү маанини жогорулатат/төмөндөтөт. Бул эски машинанын тактасына саатты коюу сыяктуу. Варианттар мындай:
- 0-1 варианттары Kp пайдасы үчүн.
- 2-3 вариант Ki пайдасы үчүн.
- Kdге ээ болуу үчүн 4-5 вариант бар.
- 6-7 варианттар мотору жайлай баштаганда белгиленген чекти коюуга арналган.
- Минималдуу ылдамдыкты орнотуу үчүн 8-9 вариант бар.
Унутпаңыз, менюдагы жуп сандар тиешелүү маанилерди жогорулатуу үчүн, ал эми так сан үчүн - тескерисинче.
Ошондой эле, GiggleBotтун BBC микро: битиндеги B баскычын басканда, анын Неопикселден жасалган экранында акыркы калыбына келтирүүдөн бери өткөн миллисекунддардын санын жана робот өткөн циклдердин санын көрөсүз - бул 2 менен сиз эсептей аласыз роботтун жаңыртуу ылдамдыгы.
Акырында жана эң негизгиси, мен GiggleBot үчүн 2 тюнинг ойлоп таптым. Алардын бири Neopixel диоддору өчүрүлгөндө, экинчиси башка учурда. Neopixel LEDлары ката кайсы багытта топтолгонун көрсөтүү үчүн колдонулат.
Параметрлерди жөнгө салуунун 1 -топтому (NeoPixel LED өчүрүлгөн)
- Kp = 32.0
- Ки = 0.5
- Kd = 80.0
- trigger_setpoint = 0.3 (бул 30%)
- min_speed_percent = 0.2 (бул 20%)
- base_speed = 100 (максималдуу ылдамдык)
- update_rate = 70 (@70Hzде иштейт)
Параметрлерди жөнгө салуунун 2 -топтому (NeoPixel LEDлери күйүк)
- Кп = 25.0
- Ки = 0.5
- Kd = 35.0
- trigger_setpoint = 0.3 (бул 30%)
- min_speed_percent = 0.3 (бул 30%)
- base_speed = 70 (максималдуу ылдамдык)
- update_rate = 50 (50Гцте иштейт)
- Ошондой эле, run_neopixels өзгөрмөсү GiggleBotтун BBC микро: битине жүктөлгөн скриптте True деп коюлушу керек. Бул NeoPixel диоддорунун жаркырашына алып келет, алар ката кайсы багытта топтолгонун көрсөтөт.
6 -кадам: GiggleBot NeoPixels өчүрүлгөндө чуркоо
Бул GiggleBotту мурунку кадамда табылган 1 -тюнинг параметрлери менен иштетүүнүн мисалы. Бул мисалда NeoPixel диоддору өчүрүлгөн.
7 -кадам: GiggleBot Neopixels күйгүзүлгөндө чуркоо
Бул 5 -кадамда табылган тюнинг параметрлеринин 2 -топтому менен GiggleBotту иштетүүнүн мисалы. Бул мисалда NeoPixel LED диоддору күйгүзүлгөн.
Бул мисалда GiggleBotтун линиясын ээрчүү кандай кыйын экенин байкаңыз - бул Neopixel LED диоддору BBC микро: битинин CPU убактысын "жеп" жатканынан. Ошондуктан жаңыртуу ылдамдыгын 70тен 50гө түшүрүүбүз керек болчу.
Сунушталууда:
Line Follower робот Siebe Deetens: 4 кадам
Line Follower Robot Siebe Deetens: Электромеханиканын автоматташтырылышы HOGENT (3e бакалавр), жана биз Syntheseproject долбоорунун катышуучуларынын роботтору менен кызматташтыкты баштан өткөрөбүз. сла
Tinkercad боюнча Line Follower: 3 кадам
Tinkercadдагы Line Follower: A-Line Follower Robot, аты айтып тургандай, полго же шыпка кыналган визуалдык линияны ээрчиген автоматташтырылган унаа. Адатта, визуалдык сызык - бул роботтун жолун жолдогон жол жана ал кара сызык болуп калат
EVM машинасын кантип жасоо керек - Колдонуу шарттары Купуялуулук Мобилдүү Жөндөө: EVM
EVM машинасын кантип жасоо керек | इलेक्ट्रॉनिक वोटिंग मशीन (EVM) कैसे बनाये: Бул колледж долбоорунун максаты үчүн EVM машинасынын прототипи.Сиз бул проектти проект презентация, проект көргөзмө, модалдык презентация ж.б катары колдоно аласыз, бул проект сизге EVM Машинасы кандай тез кароону берет иштейт, Бул долбоор
Python колдонуп GiggleBot Line Follower: 5 кадам
Python аркылуу GiggleBot Line Follower: Бул жолу биз Dexter Industries GiggleBotту MicroPythonдо программалап жатабыз, анын кара линиясын ээрчиген сенсорун колдонуп. GiggleBotту BBC микро: бит менен жупташ керек тийиштүү түрдө көзөмөлгө алынат. Эгерде
Wifi'ди Кантип Командалык Ишенимди Жөндөө/Өчүрүү керек!: 4 кадам
Командалык чакыруу аркылуу Wi -Fiны кантип күйгүзүү/өчүрүү керек !!: Бул Нускамада компьютериңиздеги wifi'ди кантип күйгүзүү же өчүрүү керектиги көрсөтүлөт, менин каналыма жазылыңыз Рахмат