Мазмұны:

Python қолданатын GiggleBot жолының ізбасары: 5 қадам
Python қолданатын GiggleBot жолының ізбасары: 5 қадам

Бейне: Python қолданатын GiggleBot жолының ізбасары: 5 қадам

Бейне: Python қолданатын GiggleBot жолының ізбасары: 5 қадам
Бейне: Урок №3. YOLOv4. Код на Python, разбор алгоритмов. Beyond Robotics 2024, Шілде
Anonim
Python көмегімен GiggleBot сызығының ізбасары
Python көмегімен GiggleBot сызығының ізбасары
Python көмегімен GiggleBot сызығының ізбасары
Python көмегімен GiggleBot сызығының ізбасары
Python көмегімен GiggleBot сызығының ізбасары
Python көмегімен GiggleBot сызығының ізбасары

Бұл жолы біз MicroPython Dexter Industries GiggleBot-та қара сызықпен жүруді оның кіріктірілген сызық ізбасарының сенсоры арқылы бағдарламалаудамыз.

GiggleBot -ты тиісті түрде басқару үшін BBC микро: битімен жұптастыру қажет.

Егер бұл оқу құралы сіз үшін тым жетілдірілген болса және GiggleBot -ты бағдарламалау әзірге тым көп болса, сіз әрқашан роботты MakeCode -те қалай бағдарламалауға болатынын көрсететін бастапқы оқулықтан өтуге болады. Байланыстырылған оқу құралы сізге ең қарапайым нәрселерді көрсетеді.

1 -қадам: Қажетті компоненттер

Қажетті компоненттер
Қажетті компоненттер

Келесі аппараттық компоненттер қажет:

  1. x3 AA батареялары - менің жағдайда жалпы кернеуі төмен аккумуляторлық батареяларды қолданамын.
  2. Микро: битке арналған Dexter Industries GiggleBot роботы.
  3. BBC микро: бит.

Әрине, сізге BBC micro: bit бағдарламалау үшін микро USB кабелі қажет - бұл кабель әдетте BBC micro: bit пакетінде болады немесе сіз әрқашан (Android) смартфондарын зарядтауға арналған кабельді пайдалана аласыз.

Micro: GiggleBot -ты мына жерден алыңыз

2 -қадам: жолдарды орнату

Жолдарды орнату
Жолдарды орнату

Сізге кейбір тақтайшаларды басып шығарып, өз жолдарыңызды жобалауға тура келеді. Сіз біздің шарттарды қайталайтындығыңызға 100% сенімді болу үшін өз плиткаларын қолдана аласыз. Немесе егер сіз өзіңізді қызықты сезінсеңіз, қара таспаны қолданып, оны өзіңіз жасай аласыз. Міне біз қолданған плиткалар үшін PDF.

Жоғарыдағы трек келесі әр түрлі тақтайшалардан тұрады:

  • №1 типті 12 плитка.
  • №2 типті 5 плитка.
  • № 5 тақтайшаның 3 шаблоны.
  • №6 тақтайшаның 3 шаблоны - мұнда сіз бір қосымша плиткамен аяқталасыз.

Одан кейін оларды басып шығарыңыз және кесіңіз. Оларды жоғарыдағы суреттегідей орналастырып көріңіз және жолдың жоғарғы оң жағында 2 плитка бір -бірімен қабаттасуы керек екенін есте сақтаңыз - егер сіз бірдеңе дұрыс емес деп ойласаңыз, бұл күтіледі.

3 -қадам: Қоршаған ортаны орнату

Қоршаған ортаны реттеу
Қоршаған ортаны реттеу

Сіз MicroPython -да BBC micro: bit бағдарламасын жасай алуыңыз үшін оған редактор (Mu Editor) орнатып, GiggleBot MicroPython жұмыс уақытын оның жұмыс уақыты ретінде орнатуыңыз қажет. Ол үшін сіз осы беттегі нұсқауларды орындауыңыз керек. Осы сәтте жұмыс уақытының v0.4.0 нұсқасы қолданылады.

4 -қадам: GiggleBot бағдарламалау

Жұмысқа кіріспес бұрын, GiggleBot MicroPython жұмыс уақытында BBC micro: bit және басқа кітапханалардың GiggleBot пен басқа Dexter Industries сенсорларын қолдау үшін классикалық жұмыс уақыты бар.

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

Жыпылықтау процесі аяқталғаннан кейін, BBC micro: bit тақтасының неопиксельдерін алға қаратып GiggleBot -ке салыңыз, оны жолға қойыңыз және қосыңыз.

Назар аударыңыз, сценарийде PID және басқа 2 тұрақтылар (жылдамдық мәні мен ең төменгі жылдамдық тұрақтылары) қазірдің өзінде орнатылған.

Ескерту: Келесі сценарийде бос орындар болмауы мүмкін және бұл GitHub Gists көрсетудегі кейбір мәселелерге байланысты. Сізді GitHub бетіне апару үшін түйінді басыңыз, онда кодты көшіріп қоюға болады.

GiggleBot PID желісінің ізбасары - NeoPixels көмегімен реттелген

микробит импортынан*
gigglebot импортынан*
Уақыт бойынша sleep_ms, ticks_us импорттау
импорттық құрылыс
# ГБ неопиксельдерін инициализациялау
нео = init ()
# уақыт
update_rate = 50
# пайда/тұрақты (батарея кернеуі 4,0 вольт шамасында)
Кп = 25.0
Ки = 0,5
Кд = 35.0
trigger_point = 0.3
мин_ жылдамдық_пайыз = 0,3
базалық_жылдамдық = 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:
# x0 = 0,0
# y0 = 0,0
# x1 = жоғарғы_байланыс - триггер_ нүктесі
# y1 = 1.0
# x = abs_error - іске қосу нүктесі
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# сияқты
y = (abs_error - іске қосу нүктесі) / (жоғарғы_байланысты - іске қосу_ нүктесі)
мотор қуаты = негізгі жылдамдық * (ең кіші_қозғалтқыш + (1- у) * (ең жоғарғы_моторлықуат - ең кіші_моторлықуат))
моторлық қуатты қайтару
басқа:
жылдамдықтың жоғарғы жылдамдығын қайтару * ең жоғары_моторлы күш
іске қосу = жалған
алдыңғы_қате = 0
whileTrue:
# егер а түймесі басылса, орындауды бастаңыз
егер button_a.is_pressed ():
run = True
# бірақ егер b түймесі басылса, жолды жалғастырушыны тоқтатыңыз
егер button_b.is_pressed ():
іске қосу = жалған
интеграл = 0,0
алдыңғы_қате = 0,0
pixel_off ()
Тоқта()
ұйқы (500)
егер іске қосу isTrue:
# сызық сенсорларын оқу
start_time = ticks_us ()
оң, сол = оқу_сенсоры (LINE_SENSOR, BOTH)
позиция <0,5 болғанда # сызық сол жақта
позиция> 0,5 болғанда # сызық оң жақта
позиция = 0,5 болғанда # жол ортасында болады
# бұл орташа арифметикалық орташа мән
тырысу:
позиция = оңға /қалқуға (солға + оңға)
ZeroDivisionError қоспағанда:
позиция = 0,5
# ауқым [0, 1] емес, [0, 1] болуы керек
егер позиция == 0: позиция = 0,001
егер позиция == 1: позиция = 0,999
# PD контроллерін қолданыңыз
қате = позиция - белгіленген нүкте
интеграл += қате
түзету = Kp * қате + Ki * интеграл + Kd * (қате - алдыңғы_қате)
previous_error = қате
# қозғалтқыш жылдамдығын есептеңіз
motor_speed = жоғарғы_байланысты_сызықтық_редуктор (абс (қате), белгіленген нүкте * триггер_ нүктесі, белгіленген нүкте, мин_жылдамдық_файыз, 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)) / error_width_per_pixel
# ағымдағы пиксельді жарықтандырыңыз
егер қате <0:
# нео [center_pixel + i] = кортеж (карта (lambda x: int (x * пайыз), көгілдір))
нео [center_pixel + i] = (int (64* пайыз /5), int (224* пайыз /5), int (208* пайыз /5))
басқа:
# нео [center_pixel - i] = кортеж (карта (lambda x: int (x * пайыз), көгілдір)))
нео [center_pixel - i] = (int (64* пайыз /5), int (224* пайыз /5), int (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)

rawgigglebot_tuned_line_follower.py файлын GitHub ❤ арқылы орналастыруды қарау

5 -қадам: оны іске қосыңыз

BBC микро: бит: А түймесі мен В түймесі бар 2 түйме бар:

  • А түймесін басу GiggleBot -ты сызық бойынша жүруге орнатады (егер бар болса).
  • B түймесін басу GiggleBot -ты тоқтатады және оны қайтадан пайдалануға болатындай етіп бәрін қалпына келтіреді.

GiggleBot -ты сызық бойымен көтермеу ұсынылады, содан кейін оны орнына қойыңыз, себебі есептеу қатесі жиналып, роботтың бағытын толығымен бұзуы мүмкін. Егер сіз оны көтергіңіз келсе, B түймесін басыңыз, содан кейін оны қайта қойған кезде А түймесін қайтадан басыңыз.

Ұсынылған: