Съдържание:
- Стъпка 1: Необходими компоненти
- Стъпка 2: Настройте песните
- Стъпка 3: Настройване на околната среда
- Стъпка 4: Програмиране на GiggleBot
- Стъпка 5: Оставете го да работи
Видео: GiggleBot Line Follower Използване на Python: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Този път ние програмираме в MicroPython Dexter Industries GiggleBot да следва черна линия, използвайки вградения си сензор за последователни линии.
GiggleBot трябва да бъде сдвоен с BBC micro: bit, за да може да се контролира по подходящ начин.
Ако този урок е твърде напреднал за вас и програмирането на GiggleBot е твърде много за сега, винаги можете да преминете през началния урок, който ви показва как роботът може да бъде програмиран в MakeCode тук. Свързаният урок ще ви преведе през самите основи.
Стъпка 1: Необходими компоненти
Необходими са следните хардуерни компоненти:
- x3 AA батерии - в моя случай използвам акумулаторни батерии, които като цяло имат по -ниско напрежение.
- Робот на Dexter Industries GiggleBot за micro: bit.
- BBC микро: бит.
Разбира се, имате нужда и от микро USB кабел за програмиране на BBC micro: bit - този кабел обикновено влиза в пакета на BBC micro: bit или винаги можете да използвате такъв, който се използва за зареждане на (Android) смартфони.
Вземете GiggleBot за micro: bit тук
Стъпка 2: Настройте песните
Ще трябва да отпечатате някои плочки и да проектирате свои собствени песни. Можете да използвате нашите собствени плочки, така че да сте 100% сигурни, че възпроизвеждате нашите условия. Или ако се чувствате приключенски, можете да използвате някаква черна лента и да си направите своя собствена. Ето PDF за плочките, които сме използвали.
Горната писта се състои от следния брой различни плочки:
- 12 плочки от тип #1.
- 5 плочки от тип #2.
- 3 шаблона на плочки тип #5.
- 3 шаблона за плочки тип #6 - тук ще завършите с една допълнителна плочка.
След това ги отпечатайте и изрежете. Опитайте да ги поставите като на горната снимка и имайте предвид, че в горната дясна част на пистата, 2 плочки трябва да се припокриват една с друга - това се очаква в случай, че се чудите дали правите нещо нередно.
Стъпка 3: Настройване на околната среда
За да можете да програмирате BBC micro: bit в MicroPython, трябва да настроите редактор за него (Mu Editor) и да зададете GiggleBot MicroPython Runtime като време за изпълнение. За целта трябва да следвате инструкциите на тази страница. Към този момент се използва версия v0.4.0 на времето за изпълнение.
Стъпка 4: Програмиране на GiggleBot
Преди да се заемем с това, средата за изпълнение на GiggleBot MicroPython съдържа класическото време за изпълнение на BBC micro: bit и други библиотеки за поддръжка на GiggleBot и други сензори на Dexter Industries.
След като го настроите, отворете следния скрипт в редактора Mu и кликнете върху Flash. Това ще мига GiggleBot MicroPython Runtime и скрипта, който току -що сте отворили към вашия BBC micro: bit. Сценарият също е показан по -долу.
След като процесът на мигане приключи, подредете BBC micro: bit в GiggleBot с неопикселите на дъската, обърнати напред, поставете го на пистата и го включете.
Забележете, че в скрипта PID и други 2 константи (зададената скорост и минималната константа на скоростта) вече са зададени.
Забележка: В следния скрипт може да липсват интервали и това изглежда се дължи на някакъв проблем при показването на GitHub Gists. Щракнете върху същността, за да ви отведе до страницата на GitHub, където можете да копирате и поставите кода.
GiggleBot PID Line Follower - Настройван с NeoPixels
от внос на microbit* |
от gigglebot import* |
от utime import sleep_ms, ticks_us |
ustruct за импортиране |
# инициализирайте GB неопиксели |
neo = init () |
# време |
update_rate = 50 |
# печалби/константи (ако напрежението на батерията е около 4,0 волта) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
задействаща точка = 0,3 |
min_speed_percent = 0.3 |
базова_скорост = 70 |
зададена стойност = 0,5 |
last_position = зададена точка |
интеграл = 0,0 |
run_neopixels = Вярно |
center_pixel = 5# където централният пиксел на усмивката се намира на GB |
# тюркоаз = кортеж (карта (ламбда x: int (x / 5), (64, 224, 208))) # цвят, който да се използва за изчертаване на грешката с неопикселите |
# тюркоаз = (12, 44, 41) # което е точно горното тюркоазено коментирано над това |
error_width_per_pixel = 0.5/3# максимална грешка, разделена на броя сегменти между всеки неопиксел |
defupper_bound_linear_speed_reducer (абсорбция на грешка, тригерна точка, горна граница, най -малка_моторна мощност, най -висока_моторна мощност): |
глобална base_speed |
if 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) / (upper_bound - trigger_point) |
мощност на двигателя = базова_скорост * (най -малка_моторна_мощност + (1- y) * (най -висока_моторна_мощност - най -малка_моторна_мощност)) |
връщане на моторната мощност |
иначе: |
връщане на базовата_скорост * най -високата_моторна_мощност |
run = False |
предишна_грешка = 0 |
whileTrue: |
# ако е натиснат бутон а, започнете да следвате |
ако button_a.is_pressed (): |
run = True |
# но ако е натиснат бутон b, спрете последователя на реда |
ако button_b.is_pressed (): |
run = False |
интеграл = 0,0 |
предишна_грешка = 0.0 |
pixels_off () |
Спри се() |
sleep_ms (500) |
ако изпълнението е True: |
# прочетете линейните сензори |
start_time = ticks_us () |
надясно, наляво = сензор за четене (LINE_SENSOR, ДВЕТЕ) |
# ред е вляво, когато позиция <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 = upper_bound_linear_speed_reducer (abs (грешка), зададена точка * тригерна точка, зададена стойност, min_speed_percent, 1.0) |
leftMotorSpeed = скорост на мотора + корекция |
rightMotorSpeed = скорост на мотора - корекция |
# осветяват неопикселите според дадената грешка |
ако run_neopixels еTrueand total_counts %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] = тюркоазено |
neo [center_pixel + i] = (12, 44, 41) |
иначе: |
# neo [center_pixel - i] = тюркоазено |
neo [center_pixel + i] = (12, 44, 41) |
иначе: |
процент = 1- (грешка_ширина_на_пиксел * i -abs (грешка)) / грешка_ширина_на_пиксел |
# осветява текущия пиксел |
ако грешка <0: |
# neo [center_pixel + i] = кортеж (карта (ламбда x: int (x * процент), тюркоаз)) |
neo [center_pixel + i] = (int (64* процент /5), int (224* процент /5), int (208* процент /5)) |
иначе: |
# neo [center_pixel - i] = кортеж (карта (ламбда x: int (x * процент), тюркоаз)) |
neo [center_pixel - i] = (int (64* процент /5), int (224* процент /5), int (208* процент /5)) |
прекъсване |
neo.show () |
опитвам: |
# изрежете оборотите на двигателя |
ако е оставенMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
ако rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
ако е оставенMotorSpeed <-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: Оставете го да работи
Има 2 бутона на BBC micro: bit: бутон A и бутон B:
- Натискането на бутон А настройва GiggleBot да следва реда (ако има такъв).
- Натискането на бутон B спира GiggleBot и нулира всичко, така че да можете да го използвате отново.
Силно се препоръчва да не вдигате GiggleBot, докато той следва ред, и след това да го върнете обратно, тъй като грешката, която се изчислява, може да се натрупа и напълно да обърка маршрута на робота. Ако искате да го повдигнете, натиснете бутона B и след това, когато го поставите обратно, натиснете отново A.
Препоръчано:
PID Line Follower Atmega328P: 4 стъпки
PID Line Follower Atmega328P: ВЪВЕДЕНИЕ Тази инструкция е за създаване на ефективен и надежден Line Follower с PID (пропорционално-интегрално-производно) управление (математическо), работещо в мозъка му (Atmega328P). Линейният последовател е автономен робот, който следва или
Arduino Line Follower Wallrides Класна бяла дъска: 8 стъпки (със снимки)
Arduino Line Follower Wallrides Бяла дъска за класната стая: Следването на линията на земята е твърде скучно! Опитахме се да погледнем под различен ъгъл на последователите на линиите и да ги пренесем в друга равнина - към училищната дъска. Вижте какво се получи от това
Neopixel Ws2812 Rainbow LED Glow с M5stick-C - Стартиране на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: 5 стъпки
Neopixel Ws2812 Rainbow LED Glow с M5stick-C | Изпълнение на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: Здравейте момчета в тази инструкция ще се научим как да използваме неопиксели ws2812 светодиоди или LED лента или LED матрица или LED пръстен с m5stack m5stick-C платка за разработка с Arduino IDE и ние ще направим модел на дъга с него
Настройка на GiggleBot Line Follower - Разширени: 7 стъпки
Настройка на GiggleBot Line Follower - Разширени: В тази много кратка инструкция ще настроите своя GiggleBot да следва черна линия. В този друг урок GiggleBot Line Follower ние кодирахме строго настройващите стойности, за да работят според този сценарий. Може да искате да го накарате да се държи
Направи си сам „Измервателен уред за използване на компютър ROG Base“Използване на Arduino и Python: 5 стъпки (със снимки)
Направи си сам „Измерител за използване на компютър ROG Base“Използване на Arduino и Python: ************************************* +На първо място, тези инструкции са написани от неносещ англоговорящ … не е професор по английски, така че, моля, информирайте за някаква граматическа грешка, преди да ми се подигравате.: P +и моля, не имитирайте