Բովանդակություն:
- Քայլ 1: Պահանջվող բաղադրիչներ
- Քայլ 2. Հետքերի և միջավայրի ստեղծում
- Քայլ 3: Կարգավորեք GiggleBot- ը
- Քայլ 4: Կարգավորիչ (հեռակառավարիչ) կարգավորիչ
- Քայլ 5: Կարգավորեք GiggleBot- ը
- Քայլ 6. GiggleBot- ը աշխատում է անջատված NeoPixels- ով
- Քայլ 7. GiggleBot- ը աշխատում է միացված նեոպիքսելներով
Video: GiggleBot Line Follower- ի կարգավորում - Ընդլայնված ՝ 7 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Այս շատ կարճ Instructables- ում դուք մտադիր եք կարգավորել ձեր սեփական GiggleBot- ը ՝ սև գծին հետևելու համար: Այս GiggleBot Line Follower- ի այս այլ ձեռնարկում մենք կոշտ կոդավորեցինք թյունինգի արժեքները `այդ սցենարի համաձայն աշխատելու համար: Դուք գուցե ցանկանաք այն ավելի լավ պահել ՝ այլ ձեռքբերումներ ունենալով:
Այս ձեռնարկում մենք ձեզ ցույց ենք տալիս 2 սցենար, որոնք երկուսն էլ կարող են բեռնվել BBC- ի տարբեր միկրոներում. պարամետրերը: Այս թարմացված պարամետրերի ուղարկումը կատարվում է ռադիոյի միջոցով:
Քայլ 1: Պահանջվող բաղադրիչներ
Ձեզ անհրաժեշտ կլինի հետևյալը.
- GiggleBot ռոբոտը միկրո.
- x3 AA մարտկոցներ
- x2 BBC micro: բիթեր `մեկը GiggleBot- ի համար, իսկ մյուսը` որպես հեռակառավարիչ `պարամետրերը կարգավորելու համար:
- ԲիԲիՍիի միկրո -բիթ մարտկոց `բիթ, ինչպես այն, որը գալիս է BBC միկրո: բիթ փաթեթում:
Ձեռք բերեք GiggleBot ռոբոտը BBC- ի միկրո. Մի քիչ այստեղ:
Քայլ 2. Հետքերի և միջավայրի ստեղծում
Դուք նաև պետք է իրականում կառուցեք ձեր հետքերը (ներբեռնեք, տպեք, կտրեք և կպչեք սալիկներ), այնուհետև ստեղծեք միջավայրը (IDE- ն և գործարկման ժամանակը):
Քանի որ այս ձեռնարկը շատ կապված է այս GiggleBot Line Follower վերնագրով այս այլ ձեռնարկի հետ, պարզապես գնացեք այնտեղ և հետևեք 2 -րդ և 3 -րդ քայլերին, ապա վերադառնաք այստեղ:
Ինչ վերաբերում է IDE- ին, ապա կարող եք օգտագործել Mu խմբագրիչը, իսկ գործարկման համար անհրաժեշտ է ներբեռնել GiggleBot MicroPython Runtime- ը: Գործողության ժամանակը կարելի է ներբեռնել դրա փաստաթղթերից այստեղ: Գնացեք փաստաթղթերի «Սկիզբ» բաժին և հետևեք շրջակա միջավայրի ստեղծման վերաբերյալ այդ հրահանգներին: Այս պահի դրությամբ օգտագործվում է գործարկման ժամանակի v0.4.0 տարբերակը:
Քայլ 3: Կարգավորեք GiggleBot- ը
Մինչև GiggleBot- ին գործարկման ժամանակը թարթելը, համոզվեք, որ ընտրել եք GiggleBot- ի ձեր նախընտրած արագությունը և թարմացման արագությունը. Լռելյայնորեն, արագությունը սահմանվում է 100 (base_speed variable) և թարմացման արագությունը `70 (update_rate variable):
Հաշվի առնելով ընթացիկ իրականացումը ՝ թարմացման ամենաբարձր արագությունը, որին կարելի է հասնել, 70 է, և եթե run_neopixels- ը սահմանվում է True, ապա հնարավոր է հասնել միայն 50 -ի: Այսպիսով, ինչ -որ կերպ, կարելի է ասել, որ կանխադրված թարմացման արագությունը գտնվում է այն բանի եզրին, ինչ BBC- ի միկրո -բիթը կարող է անել:
Տեղեկատվության համար նշենք, որ գծի հետևորդի սենսորը կարող է վայրկյանում 100 անգամ վերադարձնել թարմացումները:
Նշում. Հետևյալ սցենարի վրա կարող են բաց թողնվել սպիտակ տարածքներ, և դա, ըստ երևույթին, պայմանավորված է GitHub Gists- ի ցուցադրման որոշ խնդիրներով: Կտտացրեք բովանդակությունը ՝ ձեզ GitHub էջ տանելու համար, որտեղ կարող եք պատճենել-տեղադրեք ծածկագիրը:
GiggleBot PID Line Follower Tuner (այն կարգավորելու համար անհրաժեշտ է հեռակառավարիչ) - xjfls23
միկրոբիտ ներմուծումից* |
gigglebot ներմուծումից* |
utime import sleep_ms, ticks_us- ից |
ռադիո ներմուծել |
ներմուծել ustruct |
# նախաստորագրեք ռադիո և ԳԲ նեոպիքսելներ |
radio.on () |
neo = init () |
# ժամկետ |
Update_rate = 70 |
# կանխադրված շահույթի արժեքներ |
Kp = 0.0 |
Ki = 0.0 |
Kd = 0.0 |
սահմանային կետ = 0.5 |
ձգան_ կետ = 0,0 |
min_speed_percent = 0.2 |
բազային_ արագություն = 100 |
last_position = setpoint |
ինտեգրալ = 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# max սխալ բաժանված յուրաքանչյուր նեոպիքսելի միջև ընկած հատվածների քանակով |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, above_bound, ամենափոքր_շարժիչ_ուժը, ամենաբարձր_շարժիչ_ուժը). |
գլոբալ բազային_արագություն |
եթե abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = վերին_սահմանափակ - ձգան_ կետ |
# y1 = 1.0 |
# x = abs_error - ձգան_ կետ |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# նույնը, ինչ |
y = (abs_error - trigger_point) / (above_bound - trigger_point) |
շարժիչ_էներգիա = բազային_արագություն * (ամենափոքր_շարժիչ_հզորությունը + (1- յ)) * (ամենաբարձր_շարժիչ_ուժը - ամենափոքր_շարժիչ_ուժը)) |
վերադարձնել շարժիչ_հզորությունը |
այլ: |
վերադարձնել բազային_ արագությունը * ամենաբարձր_շարժիչ_ուժը |
վազել = Կեղծ |
նախորդ_սխալ = 0 |
ընդհանուր_ժամանակ = 0.0 |
ընդհանուր_հաշիվներ = 0 |
իսկ ճշմարիտ: |
# եթե կոճակը սեղմված է, ապա սկսեք հետևել |
եթե button_a.is_pressed (): |
վազել = Trueշմարիտ |
# բայց եթե կոճակը b սեղմված է, դադարեցրեք տողի հետևորդին |
եթե button_b.is_pressed (): |
վազել = Կեղծ |
ինտեգրալ = 0.0 |
նախորդ_սխալ = 0.0 |
display.scroll ('{} - {}'. ձևաչափ (total_time, total_counts), ուշացում = 100, սպասել = Կեղծ) |
ընդհանուր_ժամանակ = 0.0 |
ընդհանուր_հաշիվներ = 0 |
pixels_off () |
կանգ առնել () |
sleep_ms (500) |
եթե վազում է ruշմարիտ. |
# կարդալ գծի տվիչները |
start_time = ticks_us () |
# ստուգեք, արդյոք մենք թարմացրել ենք Kp/Kd- ի շահումները հեռակառավարմամբ |
փորձել: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ()) |
set_eyes () |
përjashtTypeError: |
անցնել |
աջ, ձախ = կարդալ_սենսոր (LINE_SENSOR, ԵՐԿՈ) |
# տողը ձախ կողմում է, երբ դիրքը <0.5 է |
# տողը աջից է, երբ դիրքը> 0.5 է |
# տողը մեջտեղում է, երբ դիրքը = 0.5 է |
# դա կշռված թվաբանական միջին է |
փորձել: |
դիրք = աջ /բոց (ձախ + աջ) |
բացառությամբ ZeroDivisionError: |
դիրք = 0.5 |
եթե դիրքը == 0: դիրքը = 0.001 |
եթե դիրքը == 1: դիրքը = 0.999 |
# օգտագործել PD վերահսկիչ |
սխալ = դիրքորոշում - սահմանման կետ |
ինտեգրալ += սխալ |
ուղղում = Kp * սխալ + Ki * ինտեգրալ + Kd * (սխալ - նախորդ_սխալ) |
previous_error = սխալ |
# հաշվեք շարժիչի արագությունը |
motor_speed = above_bound_linear_speed_reducer (abs (սխալ), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
leftMotorSpeed = շարժիչ_արագություն + ուղղում |
rightMotorSpeed = շարժիչ_ արագություն - ուղղում |
# լուսավորեք նեոպիքսելները ՝ ցույց տալու համար, թե որ ուղղությամբ պետք է գնա GiggleBot- ը |
եթե run_neopixels- ը ճշմարիտ է և ընդհանուր_հաշիվներ %3 == 0: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03': |
ifabs (սխալ)> error_width_per_pixel * i: |
եթե սխալ <0: |
neo [center_pixel + i] = (12, 44, 41) |
այլ: |
neo [center_pixel - i] = (12, 44, 41) |
այլ: |
տոկոս = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# լուսավորեք ընթացիկ պիքսելները |
եթե սխալ <0: |
# neo [center_pixel + i] = դուփ (քարտեզ (lambda x: int (x * տոկոս), փիրուզագույն)) |
neo [center_pixel + i] = (int (12* տոկոս), int (44* տոկոս), int (41* տոկոս)) |
այլ: |
# neo [center_pixel - i] = tuple (քարտեզ (lambda x: int (x * տոկոս), փիրուզագույն)) |
neo [center_pixel - i] = (int (12* տոկոս), int (44* տոկոս), int (41* տոկոս)) |
ընդմիջում |
neo.show () |
փորձել: |
# սեղմեք շարժիչները |
եթե մնացել է MotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
եթե ճիշտ է MotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
եթե մնացել է MotorSpeed <-100: |
leftMotorSpeed = -100 |
եթե ճիշտ է MotorSpeed <-100: |
rightMotorSpeed = -100 |
# գործարկել շարժիչները |
set_speed (leftMotorSpeed, rightMotorSpeed) |
քշել () |
# տպել ((սխալ, շարժիչ_արագություն)) |
բացառությամբ ՝ |
# այն դեպքում, երբ մենք բախվենք ինչ -որ անլուծելի խնդրի |
անցնել |
# և պահպանեք օղակի հաճախականությունը |
վերջ_ժամանակ = ticks_us () |
delay_diff = (ավարտի ժամանակը - մեկնարկի ժամանակը) /1000 |
ընդհանուր_ժամ += ուշացում_տարբերություն |
ընդհանուր_հաշիվներ += 1 |
if1.0/ update_rate - delay_diff> 0: |
քուն (1.0/ թարմացման գնահատական - հետաձգում_տարբերություն) |
դիտել rawgigglebot_line_follower_tuner.py hosted -ի կողմից հյուրընկալված GitHub- ի կողմից
Քայլ 4: Կարգավորիչ (հեռակառավարիչ) կարգավորիչ
Հաջորդ բանը, որ մենք պետք է անենք, գործարկման ժամանակը + սցենարն է BBC- ի 2 -րդ միկրո -բիթին: Այս երկրորդ միկրո: բիթը հանդես կգա որպես GiggleBot- ի հեռակառավարիչ, որը կօգտագործվի հետևյալ պարամետրերը կարգավորելու համար.
- Kp = PID վերահսկիչի համամասնական շահույթը:
- Ki = PID վերահսկիչի անբաժանելի շահույթը:
- Kd = ածանցյալ շահույթ PID վերահսկիչի համար:
- trigger_point = այն կետը, որը արտահայտված է տոկոսներով GiggleBot- ի նվազագույն և առավելագույն արագությունների միջև, որտեղ արագությունը սկսում է գծայինորեն նվազել մինչև հասնի նվազագույն արագությանը:
- min_speed_percent = նվազագույն արագությունը արտահայտված առավելագույն արագության տոկոսով:
Մնացած 2 փոփոխականները, որոնք կարող են կարգավորվել, ուղղակիորեն կոշտ կոդավորված են GiggleBot- ում տեղադրված սցենարի մեջ `թարմացման_կարգը և բազային_ արագությունը, որը ներկայացնում է առավելագույն արագությունը: Ինչպես նկարագրված է փաստաթղթերում, առավելագույն արագությունը, որը կարող է սահմանվել GiggleBot- ի համար, 100 է, որը նաև մեր GiggleBot- ի կանխադրված արժեքն է:
Նշում. Հետևյալ սցենարի վրա կարող են բաց թողնվել սպիտակ տարածքներ, և դա, ըստ երևույթին, պայմանավորված է GitHub Gists- ի ցուցադրման որոշ խնդիրներով: Կտտացրեք բովանդակությունը ՝ ձեզ GitHub էջ տանելու համար, որտեղ կարող եք պատճենել-տեղադրեք ծածկագիրը:
GiggleBot Remote PID Line Follower Tuner (պահանջում է մյուս մասը) - xjfls23
միկրոբիտ ներմուծումից* |
utime import sleep_ms- ից |
ռադիո ներմուծել |
ներմուծել ustruct |
# 1 -ին տարրը Kp շահումն է |
# 2 -րդ տարրը Ki ձեռքբերումն է |
# 3 -րդ տարրը Kd շահումն է |
# 4 -րդ տարրը շարժիչի շարժիչ ուժն է `արագությունը իջեցնելու համար (0 -> 1) |
# 5 -րդ տարրը շարժիչների նվազագույն արագությունն է ՝ արտահայտված տոկոսներով (0 -> 1) |
շահույթ = [0.0, 0.0, 0.0, 1.0, 0.0] |
քայլ Չափ = 0.1 |
# 0 և 1 -ին 1 -ին տարրի համար |
# 2 և 3 2 -րդ տարրի համար |
ընթացիկ կարգավորում = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. ձևաչափ (ընթացիկ կարգավորում, ձեռքբերումներ [int (currentSetting /2)]), ուշացում = 100, սպասել = Կեղծ) |
radio.on () |
showMenu () |
իսկ ճշմարիտ: |
թարմացվել է = Սխալ |
եթե button_a.is_pressed (): |
currentSetting = (currentSetting +1) % (2*5) |
թարմացվել է = Trueիշտ է |
եթե button_b.is_pressed (): |
եթե ընթացիկ Կարգավորում %2 == 0: |
# բարձրացնել շահույթը, երբ ընթացիկ կարգավորումը 0 կամ 2 կամ.. |
ifint (currentSetting /2) [0, 2] -ում: |
ձեռքբերումներ [int (currentSetting /2)] += 10* stepSize |
այլ: |
ձեռքբերումներ [int (currentSetting /2)] += stepSize |
այլ: |
# բարձրացնել շահույթը, երբ ընթացիկ կարգավորումն է 1 կամ 3 կամ.. |
ifint (currentSetting /2) [0, 2] -ում: |
ձեռքբերումներ [int (currentSetting /2)] -= 10* stepSize |
այլ: |
ձեռքբերումներ [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff', *gains)) |
թարմացվել է = Trueիշտ է |
թարմացման դեպքում ` |
showMenu () |
sleep_ms (200) |
դիտել rawgigglebot_line_follower_configurator.py հյուրընկալված ❤ -ի կողմից GitHub- ի կողմից
Քայլ 5: Կարգավորեք GiggleBot- ը
Տեղադրեք GiggleBot- ը ուղու վրա, միացրեք այն և թողեք այն աշխատի: Միևնույն ժամանակ, դուք անընդհատ ստիպված կլինեք այն հետ դնել ուղու վրա և կարգավորել ձեռքբերումներն/պարամետրերը BBC- ի մյուս միկրոկառույցի հետ:
GiggleBot- ը գործարկելու համար սեղմեք GiggleBot- ի BBC միկրո.
Հեռակա BBC micro: bit- ի վրա, կոճակը սեղմելը կտանի ձեզ իր ընտրացանկի յուրաքանչյուր տարբերակի վրա, իսկ B կոճակը մեծացնում/նվազեցնում է համապատասխան արժեքը: Դա նման է ժամացույցը հին մեքենայի վահանակի վրա դնելուն: Ընտրանքներն այսպիսին են.
- 0-1 տարբերակները Kp շահի համար են:
- 2-3 տարբերակ Ki- ի շահի համար է:
- 4-5 տարբերակ Kd- ի համար է:
- 6-7 տարբերակները սահմանման կետն այն պահի համար են, երբ շարժիչները սկսում են դանդաղեցնել:
- 8-9 տարբերակները նվազագույն արագության սահմանման համար են:
Հիշեք, որ ընտրացանկի զույգ թվերը համապատասխան արժեքներն ավելացնելու համար են, իսկ կենտերի համար ՝ ճիշտ հակառակը:
Բացի այդ, GiggleBot- ի BBC micro- ի վրա B կոճակը սեղմելիս, նրա Neopixel- ով պատրաստված էկրանին կտեսնեք վերջին վերակայումից անցած միլիվայրկյանների քանակը և ռոբոտի ցիկլերի քանակը, որոնցով կարող եք հաշվարկել ռոբոտի թարմացման արագությունը:
Վերջապես և ամենակարևորը, ես հանդես եկա 2 կարգավորմամբ GiggleBot- ի համար: Նրանցից մեկը նախատեսված է այն ժամանակ, երբ Neopixel LED- ները անջատված են, իսկ մյուսը `այլ դեպքերում: Neopixel LED- ները օգտագործվում են ցույց տալու, թե որ ուղղությամբ է կուտակվել սխալը:
Պարամետրերի կարգավորման 1 -ին փաթեթ (անջատված NeoPixel LED- ներով)
- Kp = 32.0
- Ki = 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- ները միացված են)
- Kp = 25.0
- Ki = 0.5
- Kd = 35.0
- trigger_setpoint = 0.3 (ինչը 30%է)
- min_speed_percent = 0.3 (ինչը 30%է)
- base_speed = 70 (հայտնի է նաև առավելագույն արագությամբ)
- update_rate = 50 (աշխատում է @50Hz)
- Բացի այդ, փոփոխական run_neopixels- ը պետք է սահմանվի True- ի այն սցենարում, որը բեռնվում է GiggleBot- ի BBC micro: bit- ում: Սա կստիպի NeoPixel լուսադիոդային լուսարձակները այնպես, որ նրանք նշեն, թե որ ուղղությամբ է սխալը կուտակվում:
Քայլ 6. GiggleBot- ը աշխատում է անջատված NeoPixels- ով
Սա GiggleBot- ի գործարկման օրինակ է `նախորդ քայլում հայտնաբերված թյունինգի 1 -ին պարամետրերով: Այս օրինակում անջատված են NeoPixel LED- ները:
Քայլ 7. GiggleBot- ը աշխատում է միացված նեոպիքսելներով
Սա GiggleBot- ի գործարկման օրինակ է `քայլ 5 -ում հայտնաբերված թյունինգի պարամետրերի երկրորդ փաթեթով: Այս օրինակում NeoPixel LED- ները միացված են:
Ուշադրություն դարձրեք, թե ինչպես է այս օրինակում GiggleBot- ն ավելի դժվարությամբ հետևում գծին, քանի որ Neopixel LED- ները «ուտում» են պրոցեսորի ժամանակը BBC- ի միկրո. Այդ իսկ պատճառով մենք ստիպված եղանք թարմացման մակարդակը 70 -ից իջեցնել 50 -ի:
Խորհուրդ ենք տալիս:
MultiBoard- ի կարգավորում/տեղադրում ՝ 5 քայլ
MultiBoard- ի կարգավորում/տեղադրում. MultiBoard- ը ծրագիր է, որը կարող է օգտագործվել մի քանի ստեղնաշար Windows համակարգչին միացնելու համար: Եվ հետո նորից ծրագրավորեք այս ստեղնաշարերի մուտքը: Օրինակ, բացեք ծրագիր կամ գործարկեք AutoHotkeyscript- ը, երբ սեղմված է որոշակի բանալին: Github: https: // g
Eclipse & JUnit կարգավորում. 11 քայլ
Eclipse & JUnit Setup: Ձեզ անհրաժեշտ բաներ. Համակարգիչ ՝ Eclipse IDE- ով Java ֆայլ ՝ գործառույթներով/ մեթոդներով, որոնք կցանկանայիք ստուգել JUnit թեստերով փորձնական ֆայլ ՝ ձեր գործառույթների վրա աշխատելու համար:
Տեսակոնֆերանսի համար 10 դոլար արժողությամբ MetaPrax փաստաթղթերի տեսախցիկի կարգավորում. 5 քայլ
Տեսակոնֆերանսի համար 10 դոլար արժողությամբ MetaPrax փաստաթղթի տեսախցիկի կարգավորում. Հրապարակված է 20200803 ՝ E.ոն Է. COVID-19- ի հետ կապված հանկարծակի փոխակերպումից ՝ անձամբ սովորողից դեպի հեռակա ուսուցում ՝ պրակտիկայի միջոցով
ERGO Pixel- ի կարգավորում ՝ 5 քայլ
ERGO Pixel Setup: Այս գործընթացը ցույց կտա ձեզ, թե ինչպես տեղադրել ձեր ERGO- ն
FlySky FS-i6X կարգավորում RC սիմուլյատորով. 5 քայլ
FlySky FS-i6X կարգավորում RC սիմուլյատորով. Բարև բոլորին, այս հրահանգով ես ձեզ ցույց կտամ, թե ինչպես միացնել FlySky FS-i6 կարգավորիչը RC սիմուլյատորին: