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

Python ашиглан GiggleBot мөр дагагч: 5 алхам
Python ашиглан GiggleBot мөр дагагч: 5 алхам

Видео: Python ашиглан GiggleBot мөр дагагч: 5 алхам

Видео: Python ашиглан GiggleBot мөр дагагч: 5 алхам
Видео: Хэдхэн мөр Python код ашиглан ярианы орчуулга хийх 2024, Арваннэгдүгээр
Anonim
Python ашиглан GiggleBot мөр дагагч
Python ашиглан GiggleBot мөр дагагч
Python ашиглан GiggleBot мөр дагагч
Python ашиглан GiggleBot мөр дагагч
Python ашиглан GiggleBot мөр дагагч
Python ашиглан GiggleBot мөр дагагч

Энэ удаад бид MicroPython-д Dexter Industries GiggleBot програмыг суурилуулсан мөр дагалдах мэдрэгч ашиглан хар шугамыг дагахаар програмчилж байна.

GiggleBot -ийг зохих ёсоор хянахын тулд BBC micro: bit -тэй хослуулах ёстой.

Хэрэв энэ заавар танд хэтэрхий дэвшилтэт бөгөөд GiggleBot програмчлах нь одоогоор хэтэрхий их байгаа бол та роботыг MakeCode дээр хэрхэн програмчлах боломжтойг харуулах зааварчилгааг үргэлж үзэх боломжтой. Холбоотой заавар нь танд үндсэн мэдлэгийг өгөх болно.

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

Шаардлагатай бүрэлдэхүүн хэсгүүд
Шаардлагатай бүрэлдэхүүн хэсгүүд

Дараахь тоног төхөөрөмжийн бүрэлдэхүүн хэсгүүд шаардлагатай болно.

  1. x3 AA батерей - миний хувьд би бага хүчдэлтэй цэнэглэдэг батерей ашигладаг.
  2. Dexter Industries GiggleBot робот нь микро: бит.
  3. BBC микро: жаахан.

Мэдээжийн хэрэг, танд BBC micro: bit програмчлахад микро USB кабель хэрэгтэй болно - энэ кабель нь ерөнхийдөө BBC micro: bit -ийн багцад багтдаг эсвэл та ухаалаг гар утсаа цэнэглэхэд ашигладаг кабелийг үргэлж ашиглаж болно.

GiggleBot -ийг микро: битээс аваарай

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

Замуудыг тохируулах
Замуудыг тохируулах

Та хэдэн плита хэвлэж, өөрийн замаа зохиох хэрэгтэй болно. Та манай хавтанг ашиглаж болно, ингэснээр та бидний нөхцөлийг хуулбарлаж байгаа гэдэгт 100% итгэлтэй байна. Эсвэл танд адал явдалтай санагдаж байвал хар соронзон хальс ашиглаж өөрөө хийж болно. Бидний ашигласан хавтангуудын PDF файл энд байна.

Дээрх зам нь дараах тооны өөр өөр хавтангуудаас бүрдэнэ.

  • №1 төрлийн 12 хавтан.
  • №2 төрлийн 5 хавтан.
  • №5 хавтангийн 3 загвар.
  • №6 хавтангийн 3 загвар - энд та нэг нэмэлт хавтан авах болно.

Дараа нь тэдгээрийг хэвлээд хайчилж ав. Дээрх зурган дээрх шиг тэдгээрийг байрлуулж үзээрэй, замын баруун дээд талд 2 хавтан хоорондоо давхцах ёстой гэдгийг санаарай - хэрэв та буруу зүйл хийж байгаа бол гэж бодож байгаа бол үүнийг хийх болно.

Алхам 3: Хүрээлэн буй орчныг тохируулах

Байгаль орчныг тохируулах
Байгаль орчныг тохируулах

Та BBC micro: bit -ийг MicroPython -д програмчлах боломжтой байхын тулд түүнд зориулж редактор (Mu Editor) тохируулж, GiggleBot MicroPython Runtime -ийг ажлын цаг болгон тохируулах ёстой. Үүнийг хийхийн тулд та энэ хуудсан дээрх зааврыг дагаж мөрдөх ёстой. Одоогийн байдлаар ажлын цагийн v0.4.0 хувилбарыг ашиглаж байна.

Алхам 4: GiggleBot програмчлах

Үүнийг ойлгохын өмнө GiggleBot MicroPython -ийн ажиллах хугацаа нь GiggleBot болон бусад Dexter Industries мэдрэгчийг дэмжих зорилгоор BBC micro: bit болон бусад номын сангуудын сонгодог ажиллах хугацааг агуулдаг.

Үүнийг тохируулсны дараа Му редактороос дараах скриптийг нээгээд Flash дээр дарна уу. Энэ нь GiggleBot MicroPython Runtime болон таны саяхан нээсэн BBC скриптийг гэрэлтүүлэх болно. Скриптийг мөн доор харуулав.

Гялалзах процесс дууссаны дараа BBC micro: bit -ийг GiggleBot руу самбарын неопикселийг урагш харуулан байрлуулж, зам дээр байрлуулаад асаана уу.

Скрипт дээр PID болон бусад 2 тогтмол (хурдны тогтоосон цэг ба хамгийн бага хурдны тогтмол) аль хэдийн тохируулагдсан болохыг анхаарна уу.

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

GiggleBot PID шугамын дагалдагч - NeoPixels ашиглан тохируулагдсан

микробит импортоос*
gigglebot импортоос*
utime импортоос sleep_ms, ticks_us
бүтцийг импортлох
# GB неопикселийг эхлүүлэх
нео = эхлэл ()
# цаг
update_rate = 50
# ашиг/тогтмол (зайны хүчдэл 4.0 вольт орчим гэж үзвэл)
Kp = 25.0
Ки = 0.5
Kd = 35.0
trigger_point = 0.3
min_speed_percent = 0.3
үндсэн хурд = 70
тогтоосон цэг = 0.5
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
whileTrue:
# а товчлуур дарагдсан бол дагаж эхэлнэ үү
хэрэв button_a.is_pressed ():
гүйх = Үнэн
# гэхдээ b товчлуур дарагдсан бол мөр дагагчийг зогсооно уу
хэрэв button_b.is_pressed ():
ажиллуулах = Худал
интеграл = 0.0
өмнөх_ алдаа = 0.0
piksel_off ()
Зогс()
унтах_мин (500)
хэрэв ажиллуулах нь үнэн бол:
# шугамын мэдрэгчийг уншина уу
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 = дээд хязгаарын шугаман_хурдааг бууруулагч (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)) / error_width_per_pixel
# одоогийн пикселийг гэрэлтүүлэх
хэрэв алдаа <0:
# neo [center_pixel + i] = tuple (газрын зураг (lambda x: int (x * хувь), оюу))
neo [center_pixel + i] = (int (64* хувь /5), int (224* хувь /5), int (208* хувь /5))
өөр:
# neo [center_pixel - i] = tuple (газрын зураг (lambda x: int (x * хувь), оюу))
нео [center_pixel - i] = (int (64* хувь /5), int (224* хувь /5), int (208* хувь /5))
завсарлага
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
if1000.0/ update_rate - delay_diff> 0:
унтах (1000.0/ update_rate - delay_diff)

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

Алхам 5: Үүнийг ажиллуулах

BBC micro: bit: A товчлуур ба B товчлуур дээр 2 товчлуур байна:

  • А товчлуурыг дарахад GiggleBot -ийг мөрийг дагахаар тохируулна (хэрэв байгаа бол).
  • B товчлуур дээр дарахад GiggleBot зогсох бөгөөд бүх зүйлийг дахин тохируулах бөгөөд ингэснээр та үүнийг дахин ашиглах боломжтой болно.

GiggleBot -ийг мөр мөрдөж байх үед өргөж болохгүй, дараа нь буцааж тавихыг зөвлөж байна. Хэрэв та үүнийг өргөхийг хүсч байвал B товчлуур дээр дараад буцааж тавихдаа А товчийг дарна уу.

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