جدول المحتويات:
- الخطوة 1: المكونات المطلوبة
- الخطوة 2: إعداد المسارات
- الخطوة الثالثة: تهيئة البيئة
- الخطوة 4: برمجة GiggleBot
- الخطوة 5: دعها تعمل
فيديو: متابع خط GiggleBot باستخدام Python: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
هذه المرة ، نبرمج في MicroPython Dexter Industries GiggleBot لاتباع خط أسود باستخدام مستشعر تتبع الخط المدمج.
يجب إقران GiggleBot مع BBC micro: bit حتى يتم التحكم فيه بشكل مناسب.
إذا كان هذا البرنامج التعليمي متقدمًا جدًا بالنسبة لك وكانت برمجة GiggleBot أكثر من اللازم في الوقت الحالي ، فيمكنك دائمًا الاطلاع على البرنامج التعليمي للمبتدئين الذي يوضح لك كيف يمكن برمجة الروبوت في MakeCode هنا. سيرشدك البرنامج التعليمي المرتبط إلى الأساسيات.
الخطوة 1: المكونات المطلوبة
مكونات الأجهزة التالية مطلوبة:
- بطاريات AA x3 - في حالتي ، أستخدم بطاريات قابلة لإعادة الشحن ذات جهد كهربائي منخفض بشكل عام.
- A Dexter Industries GiggleBot روبوت للمايكرو: بت.
- مايكرو بي بي سي: بت.
بالطبع ، تحتاج أيضًا إلى كبل USB صغير لبرمجة BBC micro: bit - يأتي هذا الكبل عمومًا ضمن حزمة BBC micro: bit أو يمكنك دائمًا استخدام كابل يستخدم لشحن الهواتف الذكية (Android).
احصل على GiggleBot لـ micro: bit هنا
الخطوة 2: إعداد المسارات
سيتعين عليك متابعة طباعة بعض البلاط وتصميم مساراتك الخاصة. يمكنك استخدام البلاط الخاص بنا بحيث تكون متأكدًا بنسبة 100٪ أنك تقوم بتكرار ظروفنا. أو إذا كنت تشعر بالمغامرة ، يمكنك استخدام بعض الشريط الأسود وصنع الشريط الخاص بك. إليك ملف PDF للبلاطات التي استخدمناها.
يتكون المسار أعلاه من العدد التالي من المربعات المختلفة:
- 12 قطعة من النوع # 1.
- 5 بلاطات من النوع # 2.
- 3 قوالب من نوع البلاط رقم 5.
- 3 قوالب من نوع البلاط رقم 6 - هنا ، ستنتهي ببلاط إضافي واحد.
بعد ذلك ، قم بطباعتها وقصها. حاول وضعها كما في الصورة أعلاه وتذكر أنه على الجانب العلوي الأيمن من المسار ، يجب أن يتداخل مربعان مع بعضهما البعض - وهذا متوقع في حال كنت تتساءل عما إذا كنت تفعل شيئًا خاطئًا.
الخطوة الثالثة: تهيئة البيئة
لكي تتمكن من برمجة BBC micro: bit في MicroPython ، يجب عليك إعداد محرر لها (محرر Mu) وتعيين 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 - تم ضبطه مع NeoPixels
من استيراد microbit * |
من استيراد gigglebot * |
من استيراد utime sleep_ms ، ticks_us |
ustruct الاستيراد |
# تهيئة غيغابايت نيوبكسل |
neo = init () |
# توقيت |
update_rate = 50 |
# مكاسب / ثوابت (بافتراض أن جهد البطارية يبلغ حوالي 4.0 فولت) |
Kp = 25.0 |
كي = 0.5 |
دينار كويتي = 35.0 |
نقطة الزناد = 0.3 |
الحد الأدنى للسرعة = 0.3 |
القاعدة_السرعة = 70 |
نقطة الضبط = 0.5 |
last_position = نقطة الضبط |
لا يتجزأ = 0.0 |
run_neopixels = صحيح |
center_pixel = 5 # حيث يوجد بكسل مركز الابتسامة على GB |
# turquoise = tuple (map (lambda x: int (x / 5)، (64، 224، 208))) # لون لاستخدامه لرسم الخطأ مع neopixels |
# turquoise = (12، 44، 41) # وهو بالضبط الفيروز المعلق أعلاه أعلاه |
error_width_per_pixel = 0.5 / 3 # خطأ كحد أقصى مقسومًا على عدد الأجزاء بين كل نيوبكسل |
defupper_bound_linear_speed_speed_reducer (abs_error ، نقطة الزناد ، الجزء العلوي ، الترابط ، الأصغر_قوة_المحرك ، أعلى_قوة_المحرك): |
قاعدة_السرعة العالمية |
إذا abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = top_bound - نقطة انطلاق |
# y1 = 1.0 |
# x = abs_error - نقطة انطلاق |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# مثل |
y = (abs_error - trigger_point) / (upper_bound - trigger_point) |
قوة_المحرك = السرعة_القاعدة * (أصغر_قوة_موتور + (1- ص) * (أعلى_قوة_موتور- أصغر_قوة_موتور_قوة)) |
عودة قوة المحرك |
آخر: |
إرجاع Base_speed * أعلى_قوة_موتور |
تشغيل = خطأ |
الخطأ السابق = 0 |
احيانا صحيح: |
# إذا تم الضغط على الزر a ، فابدأ في المتابعة |
إذا button_a.is_pressed (): |
تشغيل = صحيح |
# ولكن إذا تم الضغط على الزر b ، فقم بإيقاف متابع الخط |
إذا button_b.is_pressed (): |
تشغيل = خطأ |
لا يتجزأ = 0.0 |
الخطأ السابق = 0.0 |
بكسل_من () |
قف() |
sleep_ms (500) |
إذا كان المدى صحيحًا: |
# قراءة مجسات الخط |
start_time = ticks_us () |
يمين ، يسار = read_sensor (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 * (خطأ - خطأ سابق) |
الخطأ السابق = خطأ |
# حساب سرعات المحرك |
Motor_speed = upper_bound_linear_speed_speed_reducer (القيمة المطلقة (خطأ) ، نقطة الضبط * نقطة التشغيل ، نقطة الضبط ، min_speed_percent ، 1.0) |
leftMotorSpeed = سرعة المحرك + التصحيح |
rightMotorSpeed = سرعة المحرك - التصحيح |
# يضيء النيوبكسيل وفقًا للخطأ المحدد |
إذا كانت run_neopixels هي عدد_الخطوات الإجمالية والعدد٪ 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: |
# 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] = مجموعة (خريطة (lambda x: int (x * النسبة المئوية) ، فيروزي)) |
neo [center_pixel + i] = (int (64 * بالمائة / 5) ، int (224 * بالمائة / 5) ، int (208 * بالمائة / 5)) |
آخر: |
# neo [center_pixel - i] = مجموعة (خريطة (lambda x: int (x * النسبة المئوية) ، فيروزي)) |
neo [center_pixel - i] = (int (64 * بالمائة / 5) ، int (224 * بالمائة / 5) ، int (208 * بالمائة / 5)) |
استراحة |
neo.show () |
محاولة: |
# قص سرعات المحرك |
إذا تركت سرعة المحرك> 100: |
يسار MotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
إذا كان صحيحًا ، سرعة المحرك> 100: |
rightMotorSpeed = 100 |
يسار سرعة المحرك = يسار سرعة المحرك - يمين سرعة المحرك +100 |
إذا تركت |
leftMotorSpeed = -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: دعها تعمل
يوجد زرين على BBC micro: bit: الزر A والزر B:
- يؤدي الضغط على الزر A إلى تعيين GiggleBot لمتابعة الخط (إذا كان هناك واحد).
- يؤدي الضغط على الزر B إلى إيقاف GiggleBot وإعادة تعيين كل شيء بحيث يمكنك استخدامه مرة أخرى.
يُنصح بشدة بعدم رفع GiggleBot أثناء اتباعه لخط ما ثم إعادته إليه لأن الخطأ الذي يتم حسابه يمكن أن يتراكم ويفسد مسار الروبوت تمامًا. إذا كنت ترغب في رفعه ، اضغط على الزر B ثم عند وضعه مرة أخرى اضغط على الزر A مرة أخرى.
موصى به:
متابع كائن Pixy2Bot (رمز مؤازر): 4 خطوات
متابع كائن Pixy2Bot (رمز مؤازر): بناء كائن بسيط يتبع الروبوت (بدون آلية تحريك / إمالة) باستخدام Arduino Uno + Motor Shield ، واثنين من الماكينات المستمرة الرخيصة و Pixy2. فيديو: https://youtu.be/lxBLt5DJ5BM
متابع خط بسيط باستخدام Arduino: 5 خطوات
تابع خط بسيط باستخدام Arduino: Arduino Line Follower Robot في هذا البرنامج التعليمي ، سنناقش عمل خط Arduino بعد الروبوت الذي سيتبع خطًا أسود في خلفية بيضاء ويتخذ المنعطف الصحيح عندما يصل إلى منحنيات في مساره. شركة Arduino Line Follower Co
ضبط متابع خط GiggleBot - متقدم: 7 خطوات
ضبط متابع خط GiggleBot - متقدم: في هذه التعليمات القصيرة جدًا ، ستعمل على ضبط GiggleBot الخاص بك لتتبع خطًا أسود. في هذا البرنامج التعليمي الآخر GiggleBot Line Follower ، قمنا بترميز قيم الضبط للعمل وفقًا لهذا السيناريو. قد ترغب في جعله يتصرف
اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot: 8 خطوات
اصنع روبوتًا موجهًا بواسطة Lidar باستخدام GiggleBot: في هذا البرنامج التعليمي ، نجعل GiggleBot يتعامل مع صعوبات المتاهة. نحن نقوم بتركيب جهاز مؤازر على GiggleBot والذي نعلق عليه مستشعر المسافة. أثناء التشغيل ، ستدور المؤازرة للخلف وللأمام بحيث يكون مستشعر المسافة
كيفية إنشاء متابع خط باستخدام Arduino: 8 خطوات (بالصور)
كيفية إنشاء متابع للخط باستخدام Arduino: إذا كنت تبدأ في استخدام الروبوتات ، فإن أحد المشاريع الأولى التي يقوم بها المبتدئون يتضمن متابعًا للسطر. إنها سيارة لعبة خاصة مع خاصية تعمل على طول خط يكون عادة أسود اللون وعلى النقيض من الخلفية. هيا نحصل على نجمة