Съдържание:

GiggleBot Line Follower Използване на Python: 5 стъпки
GiggleBot Line Follower Използване на Python: 5 стъпки

Видео: GiggleBot Line Follower Използване на Python: 5 стъпки

Видео: GiggleBot Line Follower Използване на Python: 5 стъпки
Видео: Become A Master Of SDXL Training With Kohya SS LoRAs - Combine Power Of Automatic1111 & SDXL LoRAs 2024, Ноември
Anonim
GiggleBot Line Follower Използване на Python
GiggleBot Line Follower Използване на Python
GiggleBot Line Follower Използване на Python
GiggleBot Line Follower Използване на Python
GiggleBot Line Follower Използване на Python
GiggleBot Line Follower Използване на Python

Този път ние програмираме в MicroPython Dexter Industries GiggleBot да следва черна линия, използвайки вградения си сензор за последователни линии.

GiggleBot трябва да бъде сдвоен с BBC micro: bit, за да може да се контролира по подходящ начин.

Ако този урок е твърде напреднал за вас и програмирането на GiggleBot е твърде много за сега, винаги можете да преминете през началния урок, който ви показва как роботът може да бъде програмиран в MakeCode тук. Свързаният урок ще ви преведе през самите основи.

Стъпка 1: Необходими компоненти

Задължителни компоненти
Задължителни компоненти

Необходими са следните хардуерни компоненти:

  1. x3 AA батерии - в моя случай използвам акумулаторни батерии, които като цяло имат по -ниско напрежение.
  2. Робот на Dexter Industries GiggleBot за micro: bit.
  3. 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.

Препоръчано: