فهرست مطالب:

دنبال کننده خط GiggleBot با استفاده از پایتون: 5 مرحله
دنبال کننده خط GiggleBot با استفاده از پایتون: 5 مرحله

تصویری: دنبال کننده خط GiggleBot با استفاده از پایتون: 5 مرحله

تصویری: دنبال کننده خط GiggleBot با استفاده از پایتون: 5 مرحله
تصویری: پروژه آردوینو - ربات دنبال کننده خط - آشنایی باسنسور تشخیص خط 2024, جولای
Anonim
دنبال کننده خط GiggleBot با استفاده از پایتون
دنبال کننده خط GiggleBot با استفاده از پایتون
GiggleBot Follower Line با استفاده از پایتون
GiggleBot Follower Line با استفاده از پایتون
دنبال کننده خط GiggleBot با استفاده از پایتون
دنبال کننده خط GiggleBot با استفاده از پایتون

این بار ، ما در MicroPython Dexter Industries GiggleBot برنامه ریزی می کنیم تا با استفاده از سنسور دنبال کننده خط داخلی خط مشکی را دنبال کند.

GiggleBot باید با یک میکرو بی بی جفت شود: بیت به منظور کنترل مناسب آن.

اگر این آموزش برای شما بسیار پیشرفته است و برنامه نویسی GiggleBot در حال حاضر بیش از حد زیاد است ، همیشه می توانید آموزش اولیه را که به شما نشان می دهد چگونه می توان ربات را در MakeCode در اینجا برنامه ریزی کرد ، مرور کنید. آموزش پیوندی اصول اولیه را به شما آموزش می دهد.

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

قطعات مورد نیاز
قطعات مورد نیاز

اجزای سخت افزاری زیر مورد نیاز است:

  1. x3 باتری AA - در مورد من از باتری های قابل شارژ استفاده می کنم که در کل ولتاژ پایینی دارند.
  2. ربات Dexter Industries GiggleBot برای micro: bit.
  3. میکرو بی بی سی: کمی.

البته ، برای برنامه ریزی میکرو BBC: بیت ، به کابل micro USB نیز احتیاج دارید - این کابل به طور کلی در بسته میکرو BBC: bit قرار دارد یا همیشه می توانید از آن برای شارژ تلفن های هوشمند (Android) استفاده کنید.

GiggleBot را برای micro: bit اینجا دریافت کنید

مرحله 2: تنظیم آهنگ ها

آهنگ ها را تنظیم کنید
آهنگ ها را تنظیم کنید

شما باید چاپ برخی کاشی ها و طراحی آهنگ های دلخواه خود را انجام دهید. می توانید از کاشی های خود ما استفاده کنید تا 100٪ مطمئن باشید که شرایط ما را تکرار می کنید. یا اگر احساس می کنید ماجراجو هستید ، می توانید از نوار سیاه استفاده کنید و خودتان آن را بسازید. در اینجا پی دی اف کاشی هایی است که استفاده کرده ایم.

آهنگ بالا از تعداد زیر کاشی های مختلف تشکیل شده است:

  • 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 شامل زمان اجرای کلاسیک برای میکرو بی بی سی است: بیت و کتابخانه های دیگر برای پشتیبانی از GiggleBot و دیگر سنسورهای صنایع دکستر.

پس از تنظیم ، اسکریپت زیر را در ویرایشگر Mu باز کنید و روی Flash کلیک کنید. با این کار GiggleBot MicroPython Runtime و اسکریپتی که به تازگی روی میکرو بی بی سی خود باز کرده اید چشمک می زند. اسکریپت نیز در زیر نشان داده شده است.

پس از اتمام فرآیند چشمک زن ، میکرو بی بی سی: بیت را در GiggleBot با نئوپیکسل های صفحه رو به جلو قرار دهید ، آن را در مسیر قرار دهید و روشن کنید.

توجه کنید که در اسکریپت ، PID و 2 ثابت دیگر (نقطه تنظیم سرعت و ثابت ثابت سرعت) از قبل تنظیم شده اند.

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

GiggleBot PID Line Follower - تنظیم شده با NeoPixels

از واردات microbit*
از واردات gigglebot*
از utime import sleep_ms ، ticks_us
ustruct وارد کنید
# مقداردهی اولیه نئوپیکسل های GB
neo = init ()
# زمان سنجی
نرخ_بهروزرسانی = 50
# افزایش/ثابت (با فرض ولتاژ باتری حدود 4.0 ولت)
Kp = 25.0
کی = 0.5
Kd = 35.0
trigger_point = 0.3
min_speed_percent = 0.3
base_speed = 70
نقطه تنظیم = 0.5
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
whileTrue:
# اگر دکمه a فشار داده شده است ، دنبال کنید
if button_a.is_pressed ():
اجرا = درست
# اما اگر دکمه b فشار داده شود ، دنبال کننده خط را متوقف کنید
if button_b.is_pressed ():
اجرا = غلط
انتگرال = 0.0
previous_error = 0.0
pixels_off ()
متوقف کردن()
sleep_ms (500)
اگر اجرا شود isTrue:
# سنسورهای خط را بخوانید
زمان شروع = ticks_us ()
راست ، چپ = سنسور_خوان (LINE_SENSOR ، BOTH)
خط # در سمت چپ است هنگامی که موقعیت <0.5
وقتی موقعیت> 0.5 باشد ، خط # در سمت راست است
# خط در وسط است وقتی موقعیت = 0.5 است
# میانگین حسابی وزنی است
تلاش كردن:
موقعیت = راست /شناور (چپ + راست)
onlyZeroDivisionError:
موقعیت = 0.5
# محدوده باید (0 ، 1) باشد نه [0 ، 1]
اگر موقعیت == 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 - تصحیح
با توجه به خطای داده شده ، # نئوپیکسل ها را روشن کنید
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] = فیروزه ای
neo [center_pixel + i] = (12 ، 44 ، 41)
دیگری:
# neo [center_pixel - i] = فیروزه ای
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 (64* درصد /5) ، int (224* درصد /5) ، int (208* درصد /5))
دیگری:
# neo [center_pixel - i] = tuple (نقشه (lambda x: int (x * درصد) ، فیروزه ای))
neo [center_pixel - i] = (int (64* درصد /5) ، int (224* درصد /5) ، int (208* درصد /5))
زنگ تفريح
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
if1000.0/ update_rate - delay_diff> 0:
خواب (1000.0/ update_rate - delay_diff)

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

مرحله 5: اجازه دهید اجرا شود

روی دکمه میکرو بی بی سی 2 دکمه وجود دارد: بیت: دکمه A و دکمه B:

  • با فشار دادن دکمه A ، GiggleBot تنظیم می شود که خط را دنبال کند (در صورت وجود).
  • با فشار دادن دکمه B ، GiggleBot متوقف می شود و همه چیز ریست می شود تا بتوانید دوباره از آن استفاده کنید.

توصیه می شود GiggleBot را در حالی که خطی را دنبال می کند بلند نکنید و سپس دوباره روی آن قرار دهید زیرا خطایی که محاسبه می شود می تواند تجمع یابد و مسیر روبات را کاملاً به هم بزند. اگر می خواهید آن را بلند کنید ، دکمه B را فشار دهید و هنگامی که آن را دوباره قرار می دهید دوباره A را فشار دهید.

توصیه شده: