Мазмуну:

Python колдонуп GiggleBot Line Follower: 5 кадам
Python колдонуп GiggleBot Line Follower: 5 кадам

Video: Python колдонуп GiggleBot Line Follower: 5 кадам

Video: Python колдонуп GiggleBot Line Follower: 5 кадам
Video: Data Science with Python! Extracting Metadata from Images 2024, Ноябрь
Anonim
Python колдонуп GiggleBot Line Follower
Python колдонуп GiggleBot Line Follower
Python колдонуп GiggleBot Line Follower
Python колдонуп GiggleBot Line Follower
Python колдонуп GiggleBot Line Follower
Python колдонуп GiggleBot Line Follower

Бул жолу биз MicroPython программасында Dexter Industries GiggleBotтогу кара сызыкты ээрчүү үчүн, анын орнотулган линиясын ээрчиген сенсорун колдонуп жатабыз.

GiggleBotту тийиштүү түрдө көзөмөлдөө үчүн BBC микро: бит менен жупташуу керек.

Эгерде бул окуу куралы сиз үчүн өтө өнүккөн болсо жана GiggleBotту программалоо азырынча өтө эле көп болсо, анда сиз ар дайым роботту MakeCodeдо кантип программалоого болорун көрсөтүүчү башталгыч үйрөткүч аркылуу өтсөңүз болот. Шилтемеленген окуу куралы сизге эң негиздерин көрсөтөт.

1 -кадам: Керектүү компоненттер

Керектүү компоненттер
Керектүү компоненттер

Төмөнкү аппараттык компоненттер талап кылынат:

  1. x3 AA батареялары - менин учурда, мен жалпы кубаттуулугу төмөн болгон кайра заряддалуучу батареяларды колдонуп жатам.
  2. A Dexter Industries GiggleBot роботу микро: бит үчүн.
  3. Би -Би -Синин микро: бит.

Албетте, сизге BBC micro: bitти программалоо үчүн микро USB кабели да керек болот - бул кабель жалпысынан BBC micro: bitтин пакетине кирет же сиз ар дайым (Android) смартфондорун кубаттоо үчүн колдоно аласыз.

GiggleBotту микро үчүн алыңыз: бул жерде

2 -кадам: тректерди орнотуу

Тректерди орнотуу
Тректерди орнотуу

Сиз кээ бир плиткаларды басып чыгарууга жана өз тректериңизди иштеп чыгууга туура келет. Сиз өзүбүздүн плиткаларыбызды колдонсоңуз болот, сиз биздин шарттарды кайталап жатканыңызга 100% ишенесиз. Же өзүңүздү укмуштуудай сезсеңиз, кара тасма колдонуп, өзүңүз жасай аласыз. Мына биз колдонгон плиткалардын PDF форматы.

Жогорудагы трек төмөнкү сандагы түрдүү плиткалардан турат:

  • №1 типтеги 12 плитка.
  • №2 типтеги 5 плитка.
  • #5 плиткасынын 3 шаблону.
  • №6 плитканын 3 шаблону - бул жерде сиз бир кошумча плитканы аласыз.

Кийинки, аларды басып чыгарыңыз жана кесип алыңыз. Аларды жогорудагы сүрөттөгүдөй жайгаштырып көрүңүз жана жолдун оң жагында 2 плитка бири -бири менен дал келиши керек экенин унутпаңыз - эгер сиз туура эмес кылып жатасызбы деп ойлоп жатсаңыз күтүлөт.

3 -кадам: Айлана -чөйрөнү орнотуу

Айлана -чөйрөнү орнотуу
Айлана -чөйрөнү орнотуу

MicroPythonдо BBC микро: битин программалай алышыңыз үчүн, ага редакторду (Mu Editor) орнотуп, GiggleBot MicroPython Runtime'ди анын иштөө убактысы катары коюңуз. Ал үчүн бул беттеги көрсөтмөлөрдү аткарышыңыз керек. Ушул учурга карата, иштөө убактысынын v0.4.0 версиясы колдонулат.

4 -кадам: GiggleBotту программалоо

Ага жетүүдөн мурун, GiggleBot MicroPython иштөө убактысында BBC micro: bit жана башка китепканалардын GiggleBot жана башка Dexter Industries сенсорлорун колдоо үчүн классикалык иштөө убактысы камтылган.

Аны орноткондон кийин, Му редакторунда төмөнкү скриптти ачып, Flashти басыңыз. Бул GiggleBot MicroPython иштөө убактысын жана BBC микро: битке жаңы эле ачкан сценарийди жаркыратып көрсөтөт. Скрипт дагы төмөндө көрсөтүлгөн.

Жарк этүү процесси аяктагандан кийин, Би -Би -Си микро: битин GiggleBotко тактайдын неопикселдерин алдыга каратып коюп, трекке коюп, күйгүзүңүз.

Байкаңыз, скриптте PID жана башка 2 константалар (ылдамдыктын чекити жана минималдуу ылдамдыктын константалары) мурунтан эле коюлган.

Эскертүү: Төмөнкү скриптте боштуктар жок болушу мүмкүн жана бул GitHub Gistsти көрсөтүүдөгү кандайдыр бир көйгөйдөн улам келип чыккан окшойт. Сизди GitHub баракчасына алып баруу үчүн, маңызын чыкылдатыңыз, анда сиз кодду көчүрүп-чаптай аласыз.

GiggleBot PID Line Follower - NeoPixels менен жөндөлгөн

микробиттик импорттон*
gigglebot импортунан*
utime импортунан sleep_ms, ticks_us
структураны импорттоо
# GB неопикселин баштоо
нео = init ()
# убакыт
update_rate = 50
# кирешелер/константалар (батареянын чыңалуусу 4,0 вольттун тегерегинде)
Кп = 25.0
Ки = 0.5
Kd = 35.0
trigger_point = 0.3
min_speed_percent = 0.3
base_speed = 70
белгиленген чек = 0,5
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
whileTrue:
# эгер кнопка a басылса, анда ээрчүүнү баштаңыз
эгер button_a.is_pressed ():
иштетүү = Чын
# бирок b баскычы басылса, линияны ээрчигенди токтотуңуз
эгер button_b.is_pressed ():
иштетүү = Жалган
интеграл = 0.0
previous_error = 0.0
pixel_off ()
токтотуу ()
_ (500)
эгер иштетүү isTrue:
# линия сенсорлорун окуу
start_time = ticks_us ()
оң, сол = read_sensor (LINE_SENSOR, BOTH)
<линия <0,5 болгондо сол жакта
позиция> 0,5 болгондо # сап оң жакта
позиция = 0,5 болгондо # сызык ортосунда болот
# бул салмактуу арифметикалык орточо
аракет кыл:
позиция = оңго /калкып жүрүү (солго + оңго)
exceptZeroDivisionError:
орду = 0,5
# диапазону [0, 1] эмес, [0, 1] болушу керек
эгер позиция == 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 - оңдоо
# берилген катага ылайык неопикселдерди жарык кылыңыз
эгер 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:
# нео [борбор_пиксел + i] = бирюза
нео [center_pixel + i] = (12, 44, 41)
башка:
# нео [борбор_пиксел - i] = бирюза
нео [center_pixel + i] = (12, 44, 41)
башка:
пайыз = 1- (error_width_per_pixel * i -abs (ката)) / error_width_per_pixel
# учурдагы пикселди жарык кылыңыз
эгер ката <0:
# нео [борбор_пиксел + i] = тупле (карта (lambda x: int (x * пайыз), бирюза))
нео [борбор_пиксел + i] = (int (64* пайыз /5), инт (224* пайыз /5), инт (208* пайыз /5))
башка:
# нео [борбор_пиксел - i] = тупле (карта (lambda x: int (x * пайыз), бирюза))
нео [борбор_пиксел - i] = (инт (64* пайыз /5), инт (224* пайыз /5), инт (208* пайыз /5))
тыныгуу
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
if1000.0/ update_rate - delay_diff> 0:
уйку (1000.0/ update_rate - delay_diff)

GitHub тарабынан ❤ уюштурулган rawgigglebot_tuned_line_follower.py көрүү

5 -кадам: Аны иштетүүгө уруксат берүү

Би -Би -Си микро: бит: А баскычы жана В баскычы:

  • А баскычын басуу GiggleBotту линияны ээрчүүгө орнотот (эгер бар болсо).
  • B баскычын басуу GiggleBotту токтотот жана аны кайра колдоно алыш үчүн баарын баштапкы абалга келтирет.

GiggleBotту бир линияны ээрчип жатып көтөрбөө сунушталат, анткени аны эсептөө катасы топтолуп, роботтун маршрутун толугу менен бузушу мүмкүн. Эгерде сиз аны көтөргүңүз келсе, В баскычын басыңыз, анан кайра койгондо А баскычын басыңыз.

Сунушталууда: