فهرست مطالب:

تنظیم GiggleBot Follower Line - Advanced: 7 Step
تنظیم GiggleBot Follower Line - Advanced: 7 Step

تصویری: تنظیم GiggleBot Follower Line - Advanced: 7 Step

تصویری: تنظیم GiggleBot Follower Line - Advanced: 7 Step
تصویری: stamped. 2024, نوامبر
Anonim
تنظیم GiggleBot Line Follower - پیشرفته
تنظیم GiggleBot Line Follower - پیشرفته

در این دستورالعمل بسیار کوتاه شما می خواهید GiggleBot خود را تنظیم کنید تا از خط سیاه پیروی کند. در این آموزش دیگر GiggleBot Line Follower ، ما مقادیر تنظیم را سخت کدگذاری کردیم تا مطابق با آن سناریو کار کند. ممکن است بخواهید با به دست آوردن دستاوردهای دیگر ، رفتار را بهتر کنید.

در این آموزش ، ما 2 اسکریپت را به شما نشان می دهیم که هر دو می توانند در میکروهای مختلف BBC بارگذاری شوند: بیت به گونه ای که یکی از آنها در GiggleBot قرار داده شود و با دکمه دیگر ، از 2 دکمه برای رفتن به منو و تنظیم متفاوت استفاده می شود. مولفه های. ارسال این پارامترهای به روز شده از طریق رادیو انجام می شود.

مرحله 1: اجزای مورد نیاز

به موارد زیر نیاز خواهید داشت:

  1. ربات GiggleBot برای micro: bit.
  2. x3 باتری AA
  3. x2 BBC micro: بیت - یکی برای GiggleBot و دیگری یکی برای کنترل پارامترها از راه دور عمل می کند.
  4. باتری برای میکرو بی بی سی: بیت - مانند باتری موجود در بسته میکرو: بیت بی بی سی.

ربات 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 قابل دستیابی است. بنابراین ، به نوعی ، می توانید بگویید که نرخ به روزرسانی پیش فرض دقیقاً در لبه کارهایی است که میکرو بی بی سی می تواند انجام دهد.

فقط برای ثبت ، سنسور دنبال کننده خط می تواند 100 بار در ثانیه به روز رسانی کند.

توجه: در اسکریپت زیر ممکن است فضاهای خالی وجود داشته باشد و به نظر می رسد این به دلیل مشکل در نمایش GitHub Gists باشد. روی اصل مطلب کلیک کنید تا شما را به صفحه GitHub منتقل کند ، جایی که می توانید کد را کپی و جایگذاری کنید.

GiggleBot PID Line Follower Tuner (برای تنظیم آن به ریموت نیاز است) - xjfls23

از واردات microbit*
از واردات gigglebot*
از utime import sleep_ms ، ticks_us
وارد کردن رادیو
ustruct وارد کنید
# راه اندازی مجدد رادیو و نئوپیکسل GB
radio.on ()
neo = init ()
# زمان سنجی
نرخ_بهروزرسانی = 70
# مقدار پیش فرض افزایش
Kp = 0.0
Ki = 0.0
Kd = 0.0
نقطه تنظیم = 0.5
trigger_point = 0.0
حداقل_سرعت = 0.2
base_speed = 100
last_position = نقطه تنظیم
انتگرال = 0.0
run_neopixels = غلط
center_pixel = 5# جایی که پیکسل مرکزی لبخند در GB قرار دارد
# turquoise = tuple (map (lambda x: int (x / 5)، (64، 224، 208))) # رنگ برای ترسیم خطا با نئوپیکسل ها
# فیروزه = (12 ، 44 ، 41) # که دقیقاً فیروزه فوق در بالا توضیح داده شده است
error_width_per_pixel = 0.5/3# حداکثر خطا تقسیم بر تعداد قطعات بین هر نئوپیکسل
defupper_bound_bound_speed_reducer (abs_error ، trigger_point ، above_bound ، small_motor_power ، high_motor_power):
مبنای_سرعت جهانی
اگر 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) / (above_bound - trigger_point)
قدرت_حرکتی = سرعت_پایه * (کوچکترین_قدرت_حرکتی + (1- سال) * (بالاترین_قدرت_حرکتی - کوچکترین_قدرت_حرکتی))
بازگشت موتور_قدرت
دیگری:
بازگشت پایه پایه * بالاترین_قدرت_حرکتی
اجرا = غلط
previous_error = 0
مجموع_زمان = 0.0
مجموع_شمارش = 0
whileTrue:
# اگر دکمه a فشار داده شده است ، دنبال کنید
if button_a.is_pressed ():
اجرا = درست
# اما اگر دکمه b فشار داده شود ، دنبال کننده خط را متوقف کنید
if button_b.is_pressed ():
اجرا = غلط
انتگرال = 0.0
previous_error = 0.0
display.scroll ('{} - {}'. فرمت (total_time ، total_counts) ، تأخیر = 100 ، انتظار = نادرست)
زمان کل = 0.0
مجموع_شمارش = 0
pixels_off ()
متوقف کردن()
sleep_ms (500)
اگر اجرا شود isTrue:
# سنسورهای خط را بخوانید
زمان شروع = ticks_us ()
# بررسی کنید که آیا سود Kp/Kd را از راه دور به روز کرده ایم
تلاش كردن:
Kp، Ki، Kd، trigger_point، min_speed_percent = ustruct.unpack ('fffff'، radio.receive_bytes ())
set_eyes ()
onlyTypeError:
عبور
راست ، چپ = سنسور_خوان (LINE_SENSOR ، BOTH)
خط # در سمت چپ است هنگامی که موقعیت <0.5
وقتی موقعیت> 0.5 باشد ، خط # در سمت راست است
# خط در وسط است وقتی موقعیت = 0.5 است
# میانگین حسابی وزنی است
تلاش كردن:
موقعیت = راست /شناور (چپ + راست)
onlyZeroDivisionError:
موقعیت = 0.5
اگر موقعیت == 0: موقعیت = 0.001
اگر موقعیت == 1: موقعیت = 0.999
# از کنترلر PD استفاده کنید
خطا = موقعیت - نقطه تنظیم
انتگرال += خطا
تصحیح = Kp * error + Ki * انتگرال + Kd * (error - previous_error)
previous_error = خطا
# محاسبه سرعت موتور
motor_speed = above_bound_linear_speed_reducer (abs (error) ، point set * trigger_point ، setpoint ، min_speed_percent ، 1.0)
leftMotorSpeed = سرعت_موتور + تصحیح
rightMotorSpeed = motor_speed - تصحیح
# نئوپیکسل ها را روشن کنید تا نشان دهد GiggleBot به کدام سمت باید حرکت کند
if run_neopixels isTrueand 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)> error_width_per_pixel * i:
اگر خطا <0:
neo [center_pixel + i] = (12 ، 44 ، 41)
دیگری:
neo [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 (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 ()
تلاش كردن:
# کلیپ موتورها
در صورت باقی ماندن موتور سرعت> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
if rightMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100
اگر leftMotorSpeed <-100:
leftMotorSpeed = -100
if rightMotorSpeed <-100:
rightMotorSpeed = -100
# موتورها را فعال کنید
set_speed (leftMotorSpeed ، rightMotorSpeed)
راندن()
# چاپ ((خطا ، سرعت موتور))
جز:
# در صورت برخورد با مشکل غیر قابل رفع
عبور
# و فرکانس حلقه را حفظ کنید
end_time = ticks_us ()
delay_diff = (زمان پایان - زمان شروع) /1000
total_time += delay_diff
total_counts += 1
if1.0/ update_rate - delay_diff> 0:
خواب (1.0/ نرخ_بهروزرسانی - تاخیر_دفعه)

مشاهده rawgigglebot_line_follower_tuner.py میزبانی شده توسط ❤ توسط GitHub

مرحله 4: تنظیم تیونر (از راه دور)

کار بعدی که ما باید انجام دهیم این است که زمان اجرا + اسکریپت را به میکرو بی بی سی 2: 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 Remote PID Line Follower Tuner (به قسمت دیگر نیاز دارد) - xjfls23

از واردات microbit*
از utime import sleep_ms
وارد کردن رادیو
ustruct وارد کنید
# عنصر اول افزایش Kp است
عنصر دوم افزایش Ki است
عنصر سوم افزایش Kd است
# چهارمین عنصر نقطه شروع برای کاهش سرعت موتورها است (0 -> 1)
# 5 عنصر حداقل سرعت موتور است که در درصد بیان می شود (0 -> 1)
سود = [0.0 ، 0.0 ، 0.0 ، 1.0 ، 0.0]
stepSize = 0.1
شماره 0 و 1 برای عنصر اول
شماره 2 و 3 برای عنصر دوم
currentSetting = 0
defshowMenu ():
display.scroll ('{} - {}'. فرمت (currentSetting ، افزایش [int (currentSetting /2)]) ، تاخیر = 100 ، انتظار = نادرست)
radio.on ()
showMenu ()
whileTrue:
به روز شده = غلط
if button_a.is_pressed ():
currentSetting = (currentSetting +1)٪ (2*5)
به روز شده = درست
if button_b.is_pressed ():
if currentSetting٪ 2 == 0:
افزایش # افزایش زمانی که currentSetting 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'، *gains))
به روز شده = درست
در صورت بروزرسانی:
showMenu ()
sleep_ms (200)

مشاهده rawgigglebot_line_follower_configurator.py میزبانی شده توسط ❤ توسط GitHub

مرحله 5: تنظیم GiggleBot

تنظیم GiggleBot
تنظیم GiggleBot

GiggleBot را در مسیر قرار دهید ، آن را روشن کرده و بگذارید اجرا شود. در همین حال ، شما دائماً باید آن را در مسیر قبلی قرار دهید و دستاوردها/پارامترها را با میکرو دیگر بی بی سی تنظیم کنید: بیتی که در دست دارید.

برای راه اندازی GiggleBot ، دکمه A را روی میکرو BBC: bit GiggleBot فشار دهید و آن را متوقف کرده و در نتیجه تنظیم مجدد حالت آن را روی دکمه B فشار دهید.

در میکرو BBC: bit از راه دور ، با فشردن دکمه A ، همه گزینه های منوی شما را مشاهده می کنید و دکمه B مقدار مربوطه را افزایش/کاهش می دهد. مثل این است که ساعت را روی داشبورد ماشین قدیمی تنظیم کنید. گزینه ها به این صورت است:

  1. گزینه های 0-1 برای افزایش Kp است.
  2. 2-3 گزینه برای افزایش Ki است.
  3. 4-5 گزینه برای افزایش Kd است.
  4. 6-7 گزینه برای تنظیم نقطه تنظیم برای لحظه ای است که موتورها کند می شوند.
  5. 8-9 گزینه برای تنظیم حداقل سرعت است.

به خاطر داشته باشید که اعداد زوج در منو برای افزایش مقادیر مربوطه هستند و برای موارد فرد دقیقاً برعکس است.

همچنین ، با فشار دادن دکمه B روی میکرو بی بی سی GiggleBot: bit ، در صفحه ساخته شده با نئوپیکسل آن تعداد میلی ثانیه سپری شده از آخرین بازنشانی و تعداد چرخه هایی که ربات طی کرده است را خواهید دید - با این دو می توانید محاسبه کنید میزان بروزرسانی ربات

در نهایت و مهمتر از همه ، من 2 تنظیم برای GiggleBot ارائه کرده ام. یکی از آنها برای زمانی است که LED های Neopixel خاموش هستند و دیگری برای موارد دیگر است. LED های Neopixel برای نشان دادن خطا در کدام جهت تجمع یافته است.

مجموعه اول تنظیم پارامترها (با LED های NeoPixel خاموش)

  1. Kp = 32.0
  2. کی = 0.5
  3. Kd = 80.0
  4. trigger_setpoint = 0.3 (که 30٪ است)
  5. min_speed_percent = 0.2 (که 20 is است)
  6. base_speed = 100 (معروف به حداکثر سرعت)
  7. update_rate = 70 (در حال اجرا در @70Hz)

مجموعه دوم تنظیم پارامترها (با LED های NeoPixel روشن)

  1. Kp = 25.0
  2. کی = 0.5
  3. Kd = 35.0
  4. trigger_setpoint = 0.3 (که 30٪ است)
  5. min_speed_percent = 0.3 (که 30 is است)
  6. base_speed = 70 (معروف به حداکثر سرعت)
  7. update_rate = 50 (در حال اجرا در @50Hz)
  8. همچنین ، متغیر run_neopixels باید در اسکریپتی که روی میکرو: بیت GiggleBot بارگیری می شود ، روی True تنظیم شود. این باعث می شود LED های NeoPixel به گونه ای چشمک بزنند که نشان دهند خطا در کدام جهت انباشته می شود.

مرحله 6: اجرای GiggleBot با خاموش بودن NeoPixels

این یک مثال از اجرای GiggleBot با پارامترهای تنظیم اول است که در مرحله قبل یافت شد. در این مثال LED های NeoPixel خاموش هستند.

مرحله 7: اجرای GiggleBot با روشن بودن نئوپیکسل ها

این یک مثال از اجرای GiggleBot با مجموعه دوم پارامترهای تنظیم است که در مرحله 5 یافت شده است. در این مثال LED های NeoPixel روشن هستند.

توجه کنید که چگونه در این مثال ، GiggleBot کار دشواری را دنبال می کند - این به این دلیل است که LED های Neopixel زمان CPU میکرو بی بی سی را "می خورند": بیت. به همین دلیل مجبور شدیم میزان بروزرسانی را از 70 به 50 کاهش دهیم.

توصیه شده: