Агуулгын хүснэгт:

GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан: 7 алхам
GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан: 7 алхам

Видео: GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан: 7 алхам

Видео: GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан: 7 алхам
Видео: AMİGURUMİ KUZULU BEBEK OYUN HALI YAPIMI/AMIGRUMI LAMB BABY CARPET MAKING/AMIGURUMI BABY PLAY TEPPICH 2024, Арваннэгдүгээр
Anonim
GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан
GiggleBot мөр дагагчийг тааруулах - Нарийвчилсан

Энэхүү маш богино зааврын дагуу та өөрийн GiggleBot -ийг хар шугамыг дагахаар тохируулах гэж байна. Энэхүү GiggleBot мөр дагагч гарын авлагад бид тухайн хувилбарын дагуу ажиллахын тулд тааруулах утгыг хатуу кодчилсон болно. Та бусад ашиг олох замаар илүү сайн зан төлөвтэй болгохыг хүсч магадгүй юм.

Энэхүү гарын авлагад бид хоёуланг нь өөр өөр BBC микро: бит дээр ачаалж болох 2 скриптийг үзүүлж байна, ингэснээр нэгийг нь GiggleBot -т оруулах бөгөөд нөгөө товчлуурыг ашиглан цэсээр орж өөр өөр тохируулга хийх боломжтой болно. параметрүүд. Эдгээр шинэчлэгдсэн параметрүүдийг радиогоор дамжуулан илгээдэг.

Алхам 1: Шаардлагатай бүрэлдэхүүн хэсгүүд

Танд дараахь зүйлс хэрэгтэй болно.

  1. Micro: bit -д зориулсан GiggleBot робот.
  2. x3 АА батерей
  3. x2 BBC микро: бит - нэг нь GiggleBot -д зориулагдсан, нөгөө нь параметрүүдийг тохируулах алсын удирдлагатай.
  4. BBC micro: bit -ийн батерей нь BBC micro: bit багцад багтдаг батерей шиг.

BBC micro: bit -д зориулсан GiggleBot роботыг эндээс аваарай

Алхам 2: Зам ба орчныг тохируулах

Зам ба орчныг тохируулах
Зам ба орчныг тохируулах
Зам ба орчныг тохируулах
Зам ба орчныг тохируулах

Та мөн замаа бүтээх (плита татаж авах, хэвлэх, хайчлах, соронзон хальс хийх), дараа нь орчноо (IDE ба ажиллах хугацаа) тохируулах хэрэгтэй.

Энэ заавар нь GiggleBot Line Follower нэртэй бусад хичээлтэй маш их холбоотой тул тэнд очоод 2, 3 -р алхамуудыг дагаж, дараа нь энд буцаж ирээрэй.

IDE -ийн хувьд та Mu засварлагчийг ашиглаж болох бөгөөд ажиллуулахын тулд та GiggleBot MicroPython Runtime -ийг татаж авах хэрэгтэй. Ажиллах хугацааг эндээс түүний баримт бичгээс татаж авах боломжтой. Баримт бичгийн эхлэл хэсгийг үзээд орчинг тохируулах зааврыг дагана уу. Одоогийн байдлаар ажлын цагийн v0.4.0 хувилбарыг ашиглаж байна.

Алхам 3: GiggleBot -ийг тохируулах

Ажиллах хугацааг GiggleBot руу асаахаасаа өмнө GiggleBot -ийн хүссэн хурд, шинэчлэлтийн хурдыг сонгосон эсэхээ шалгаарай: анхдагчаар хурдыг 100 (base_speed хувьсагч), шинэчлэлтийн хурдыг 70 (update_rate хувьсагч) болгож тохируулсан байна.

Одоогийн хэрэгжилтийг харгалзан үзвэл хамгийн өндөр шинэчлэлтийн хурд нь 70 бөгөөд хэрэв run_neopixels -ийг True гэж тохируулсан бол зөвхөн 50 -г авах боломжтой. Анхдагч шинэчлэлтийн хурд нь BBC micro: bit -ийн хийж чадах ажлын ирмэг дээр байна гэж та хэлж болно.

Зөвхөн бичлэгийн хувьд шугам дагагч мэдрэгч нь шинэчлэлтийг секундэд 100 удаа буцааж өгөх боломжтой.

Тэмдэглэл: Дараах скриптэд хоосон зай байхгүй байж магадгүй бөгөөд энэ нь GitHub Gists -ийг харуулахад гарсан зарим асуудлаас үүдэлтэй юм шиг байна. Голыг нь дарж кодоо GitHub хуудас руу аваачна уу, та кодыг хуулж буулгах боломжтой.

GiggleBot PID шугамын дагалдагч тааруулагч (үүнийг тохируулахын тулд алсын удирдлага шаардлагатай) - xjfls23

микробит импортоос*
gigglebot импортоос*
utime импортоос sleep_ms, ticks_us
радио импортлох
бүтцийг импортлох
# радио болон GB неопикселийг эхлүүлэх
radio.on ()
нео = эхлэл ()
# цаг
update_rate = 70
# өгөөжийн анхдагч утга
Kp = 0.0
Ки = 0.0
Kd = 0.0
тогтоосон цэг = 0.5
trigger_point = 0.0
min_speed_percent = 0.2
base_speed = 100
last_position = тогтоосон цэг
интеграл = 0.0
run_neopixels = Худал
center_pixel = 5#, инээмсэглэлийн төв пиксел нь GB дээр байрладаг
# turquoise = tuple (газрын зураг (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, дээд_холбоотой, хамгийн бага_мотор_хүч, хамгийн их_мотор_хүч):
дэлхийн үндсэн хурд
хэрэв 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) / (top_bound - trigger_point)
моторын хүч = суурийн хурд * (хамгийн бага_мотор_хүч + (1- y) * (хамгийн их_хүчний - хамгийн бага_мотор_хүч))
моторын хүчийг буцаана
өөр:
буцах үндсэн хурд. * хамгийн их_мотор_хүч
ажиллуулах = Худал
өмнөх_ алдаа = 0
нийт_хугацаа = 0.0
total_counts = 0
whileTrue:
# а товчлуур дарагдсан бол дагаж эхэлнэ үү
хэрэв button_a.is_pressed ():
гүйх = Үнэн
# гэхдээ b товчлуур дарагдсан бол мөр дагагчийг зогсооно уу
хэрэв button_b.is_pressed ():
ажиллуулах = Худал
интеграл = 0.0
өмнөх_ алдаа = 0.0
display.scroll ('{} - {}'. формат (total_time, total_counts), саатал = 100, хүлээх = Худал)
нийт_хугацаа = 0.0
total_counts = 0
piksel_off ()
Зогс()
унтах_мин (500)
хэрэв ажиллуулах нь үнэн бол:
# шугамын мэдрэгчийг уншина уу
start_time = ticks_us ()
Бид алсын удирдлагатай Kp/Kd -ийн ололтыг шинэчилсэн эсэхийг шалгаарай
оролдоно уу:
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ())
set_eyes ()
exceptTypeError:
дамжуулах
баруун, зүүн = уншсан_ мэдрэгч (LINE_SENSOR, BOTH)
<0.5 байрлалтай үед # мөр зүүн талд байна
Байрлал> 0.5 байхад # мөр баруун талд байна
Байрлал = 0.5 байхад # мөр дунд байна
# энэ нь жинлэсэн арифметик дундаж юм
оролдоно уу:
байрлал = баруун /хөвөх (зүүн + баруун)
ZeroDivisionError -ээс бусад:
байрлал = 0.5
хэрэв байрлал == 0: байрлал = 0.001
хэрэв байрлал == 1: байрлал = 0.999
# PD хянагч ашиглах
алдаа = байрлал - тогтоосон цэг
интеграл += алдаа
залруулга = Kp * алдаа + Ki * интеграл + Kd * (алдаа - өмнөх_ алдаа)
previous_error = алдаа
# моторын хурдыг тооцоолох
motor_speed = дээд хязгаарын шугаман_хурдааг бууруулагч (abs (алдаа), setpoint * trigger_point, setpoint, min_speed_percent, 1.0)
leftMotorSpeed = motor_speed + залруулга
rightMotorSpeed = motor_speed - залруулга
GiggleBot аль чиглэл рүү явах ёстойг харуулахын тулд неопикселүүдийг гэрэлтүүлээрэй
хэрэв 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:
нео [center_pixel + i] = (12, 44, 41)
өөр:
нео [төвийн_ пиксел - i] = (12, 44, 41)
өөр:
хувь = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel
# одоогийн пикселийг гэрэлтүүлэх
хэрэв алдаа <0:
# neo [center_pixel + i] = tuple (газрын зураг (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 ()
оролдоно уу:
# моторыг хавчих
solMotorSpeed> 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 (зүүнMotorSpeed, баруунMotorSpeed)
жолоодох ()
# хэвлэх ((алдаа, моторын хурд))
бусад:
Хэрэв бид шийдэгдээгүй асуудалтай тулгарвал
дамжуулах
# ба давталтын давтамжийг хадгалах
төгсгөл_ цаг = ticks_us ()
delay_diff = (end_time - start_time) /1000
нийт_хугацаа += хойшлуулалтын_дифр
нийт_ тоо += 1
if1.0/ update_rate - delay_diff> 0:
унтах (1.0/ update_rate - delay_diff)

rawgigglebot_line_follower_tuner.py -г GitHub -аас ❤ -аар зохион байгуулсныг үзэх

Алхам 4: Тохируулагчийг тохируулах (алсын удирдлага)

Дараагийн хийх зүйл бол ажиллуулах цаг + скриптийг BBC 2 -р микро: бит рүү шилжүүлэх явдал юм. Энэ хоёр дахь micro: bit нь GiggleBot -ийн алсын удирдлага болж ажиллах бөгөөд үүнийг дараах параметрүүдийг тааруулахад ашиглана.

  1. Kp = PID хянагчийн пропорциональ ашиг.
  2. Ki = PID хянагчийн салшгүй ашиг.
  3. Kd = PID хянагчийн дериватив олз.
  4. trigger_point = GiggleBot -ийн хамгийн бага ба хамгийн дээд хурдны хоорондох хувиар илэрхийлсэн цэг бөгөөд хурд нь хамгийн бага хурд хүртэл шугаман байдлаар буурч эхэлдэг.
  5. min_speed_percent = хамгийн бага хурд нь хамгийн дээд хурдны хувиар илэрхийлэгдэнэ.

Үлдэж болох бусад 2 хувьсагчийг GiggleBot дээр байрлах скриптэд шууд хатуу кодлодог: update_rate ба base_speed нь хамгийн дээд хурдыг илэрхийлдэг. Баримт бичигт тайлбарласны дагуу GiggleBot -ийн хамгийн дээд хурд нь 100 бөгөөд энэ нь манай GiggleBot -ийн анхдагч утга юм.

Тэмдэглэл: Дараах скриптэд хоосон зай байхгүй байж магадгүй бөгөөд энэ нь GitHub Gists -ийг харуулахад гарсан зарим асуудлаас үүдэлтэй юм шиг байна. Голыг нь дарж кодоо GitHub хуудас руу аваачна уу, та кодыг хуулж буулгах боломжтой.

GiggleBot алсын PID шугам дагагч тааруулагч (нөгөө хэсгийг шаарддаг) - xjfls23

микробит импортоос*
utime импортлох sleep_ms
радио импортлох
бүтцийг импортлох
# 1 -р элемент бол Kp -ийн ашиг юм
# 2 дахь элемент бол Ki -ийн ашиг юм
# 3 дахь элемент бол Kd -ийн ашиг юм
# 4 -р элемент бол моторын хурдыг бууруулах гох цэг юм (0 -> 1)
# 5 дахь элемент бол моторын хувьд хамгийн бага хурдыг хувиар илэрхийлдэг (0 -> 1)
ашиг = [0.0, 0.0, 0.0, 1.0, 0.0]
stepSize = 0.1
1 -р элементийн хувьд 0 ба 1
2 -р элементийн # 2 ба 3
currentSetting = 0
defshowMenu ():
display.scroll ('{} - {}'. формат (currentSetting, gains [int (currentSetting /2)])), саатал = 100, хүлээх = Худал)
radio.on ()
showMenu ()
whileTrue:
шинэчлэгдсэн = Худал
хэрэв button_a.is_pressed ():
currentSetting = (currentSetting +1) % (2*5)
шинэчлэгдсэн = Үнэн
хэрэв button_b.is_pressed ():
хэрэв currentSetting %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', *олз)))
шинэчлэгдсэн = Үнэн
шинэчлэгдсэн бол:
showMenu ()
нойр_мн (200)

rawgigglebot_line_follower_configurator.py -г GitHub -аас ❤ -р зохион байгуулагдсан байдлаар үзэх

Алхам 5: GiggleBot -ийг тааруулах

GiggleBot -ийг тааруулж байна
GiggleBot -ийг тааруулж байна

GiggleBot -ийг зам дээр тавиад асаагаад ажиллуулна уу. Энэ хооронд та үүнийг үргэлжлүүлэн зам дээр тавьж, гартаа барьж буй BBC -ийн бусад микро: битийн ашиг/параметрүүдийг тааруулах хэрэгтэй болно.

GiggleBot -ийг эхлүүлэхийн тулд GiggleBot -ийн BBC micro: bit дээрх A товчлуурыг дарж, үүнийг зогсоож, B товчлуур дээрх төлөвийг дахин тохируулна уу.

Алсын BBC микро: бит дээр А товчлуурыг дарахад цэс дэх бүх сонголтууд гарч ирэх бөгөөд В товчлуур нь харгалзах утгыг нэмэгдүүлж/бууруулна. Энэ нь хуучин машины хяналтын самбар дээр цагийг тохируулахтай адил юм. Сонголтууд дараах байдалтай байна.

  1. 0-1 сонголтууд нь Kp-ийн ашиг орлого юм.
  2. Ki ашиг олохын тулд 2-3 сонголт байдаг.
  3. Kd-ийн хувьд 4-5 сонголт байна.
  4. Мотор удааширч эхлэх мөчийг тохируулах 6-7 сонголт байдаг.
  5. Хамгийн бага хурдыг тохируулах 8-9 сонголт байдаг.

Цэс дэх тэгш тоо нь харгалзах утгыг нэмэгдүүлэхэд зориулагдсан бөгөөд сондгой тоогоор бол эсрэгээрээ байдгийг санаарай.

Түүнчлэн, GiggleBot -ийн BBC микро: битийн B товчлуурыг дарахад Neopixel -ээр хийсэн дэлгэц дээр сүүлийн тохиргоог хийснээс хойш хэдэн миллисекунд өнгөрч, робот өнгөрч байсан мөчлөгийн тоог харах болно. роботын шинэчлэлтийн хурд.

Хамгийн сүүлд, хамгийн чухал нь би GiggleBot -ийн 2 тааруулалтыг гаргаж ирсэн. Тэдгээрийн нэг нь неопикселийн LED -ийг унтраасан үед, нөгөө нь өөр тохиолдолд зориулагдсан болно. Neopixel LED нь алдаа аль чиглэлд хуримтлагдсан болохыг харуулахад ашиглагддаг.

Параметрүүдийг тааруулах 1 -р багц (NeoPixel LED унтраалттай)

  1. Kp = 32.0
  2. Ки = 0.5
  3. Kd = 80.0
  4. trigger_setpoint = 0.3 (энэ нь 30%)
  5. min_speed_percent = 0.2 (энэ нь 20%)
  6. base_speed = 100 (хамгийн дээд хурд)
  7. update_rate = 70 (70Гц дээр ажилладаг)

Параметрүүдийг тааруулах 2 дахь багц (NeoPixel LED асаалттай)

  1. Kp = 25.0
  2. Ки = 0.5
  3. Kd = 35.0
  4. trigger_setpoint = 0.3 (энэ нь 30%байна)
  5. min_speed_percent = 0.3 (энэ нь 30%)
  6. base_speed = 70 (хамгийн дээд хурд)
  7. update_rate = 50 (50Гц дээр ажилладаг)
  8. Түүнчлэн GiggleBot -ийн BBC micro: bit дээр ачаалагдах скрипт дээр run_neopixels хувьсагчийг True гэж тохируулах ёстой. Энэ нь NeoPixel LED -ийг анивчих бөгөөд ингэснээр алдаа аль чиглэлд хуримтлагдахыг зааж өгнө.

Алхам 6: NeoPixels -ийг унтраасан тохиолдолд GiggleBot ажиллаж байна

Энэ бол GiggleBot -ийг өмнөх алхамд таарсан 1 -р тааруулах параметрүүдтэй ажиллуулах жишээ юм. Энэ жишээнд NeoPixel LED -ийг унтраасан байна.

Алхам 7: GiggleBot Neopixels асаалттай ажиллаж байна

Энэ бол GiggleBot -ийг 5 -р алхамаас олдсон тааруулах параметрүүдийн 2 -р багцаар ажиллуулах жишээ юм. Энэ жишээнд NeoPixel LED асаалттай байна.

Энэ жишээн дээр GiggleBot нь мөрийг дагахад илүү хэцүү байдгийг анхаарна уу - энэ нь Neopixel LED нь BBC микро: битийн CPU -ийн цагийг "идэж" байгаатай холбоотой юм. Тийм учраас бид шинэчлэлтийн хурдыг 70 -аас 50 болгож бууруулах шаардлагатай болсон.

Зөвлөмж болгож буй: