- الأجهزة المطلوبة:
- متطلبات البرمجة:
- إعداد المعالجة على Raspberry Pi:
- مخطط الرسم البياني:
- برنامج Raspberry Pi Ball Tracking:
- عمل روبوت Raspberry Pi Ball Tracking:
يتطور مجال الروبوتات والذكاء الاصطناعي وتعلم الآلة بسرعة بحيث من المؤكد أنه سيغير نمط حياة البشرية في المستقبل القريب. يُعتقد أن الروبوتات تفهم العالم الحقيقي وتتفاعل معه من خلال أجهزة الاستشعار ومعالجة التعلم الآلي. يعد التعرف على الصور إحدى الطرق الشائعة التي يُعتقد أن الروبوتات تفهم بها الأشياء من خلال النظر إلى العالم الحقيقي من خلال الكاميرا تمامًا كما نفعل نحن. في هذا المشروع ، دعنا نستخدم قوة Raspberry Pi لبناء روبوت يمكنه تتبع الكرة ومتابعتها تمامًا مثل الروبوتات التي تلعب كرة القدم.
OpenCV هي أداة مشهورة جدًا ومفتوحة المصدر تُستخدم لمعالجة الصور ، ولكن في هذا البرنامج التعليمي لإبقاء الأمور بسيطة ، نستخدم بيئة المعالجة المتكاملة. نظرًا لأن المعالجة لـ ARM قد أصدرت أيضًا مكتبة GPIO للمعالجة ، فلن نضطر إلى التحول بين Python والمعالجة بعد الآن للعمل مع Raspberry Pi. يبدو رائعًا ، أليس كذلك؟ لذلك دعونا نبدأ.
الأجهزة المطلوبة:
- فطيرة التوت
- وحدة الكاميرا مع كابل الشريط
- هيكل الروبوت
- محركات تروس مع عجلة
- سائق المحرك L293D
- بنك الطاقة أو أي مصدر طاقة محمول آخر
متطلبات البرمجة:
- مراقب أو عرض آخر لـ Raspberry pi
- لوحة المفاتيح أو الماوس لـ Pi
- معالجة برنامج ARM
ملاحظة: من الضروري توصيل شاشة بـ Pi من خلال الأسلاك أثناء البرمجة لأنه عندها فقط يمكن مشاهدة فيديو الكاميرا
إعداد المعالجة على Raspberry Pi:
كما قيل سابقًا ، سنستخدم بيئة المعالجة لبرمجة Raspberry Pi وليس الطريقة الافتراضية لاستخدام Python. لذلك ، اتبع الخطوات أدناه:
الخطوة 1: - قم بتوصيل Raspberry Pi بالشاشة ولوحة المفاتيح والماوس وتشغيلها.
الخطوة 2: - تأكد من أن Pi متصل باتصال إنترنت نشط لأننا على وشك تنزيل بعض الأشياء.
الخطوة 3: - انقر فوق معالجة ARM لتنزيل IDE الخاص بمعالجة Raspberry Pi. سيكون التنزيل في شكل ملف مضغوط.
الخطوة 4: - بمجرد التنزيل ، استخرج الملفات الموجودة في مجلد ZIP في الدليل المفضل لديك. لقد استخرجته للتو على مكتبي.
الخطوة 5: - الآن ، افتح المجلد المستخرج وانقر على الملف المسمى المعالجة. يجب أن تفتح نافذة كما هو موضح أدناه.
الخطوة 6: - هذه هي البيئة التي سنكتب فيها أكوادنا. بالنسبة للأشخاص الذين هم على دراية بـ Arduino ، لا تصدموا ، نعم ، يبدو IDE مشابهًا لـ Arduino وكذلك البرنامج.
الخطوة 7: - نحتاج إلى مكتبتين حتى يعمل برنامج الكرة التالي ، للتثبيت ثم انقر فقط على Sketch -> Import Library -> Add Library . سيتم فتح مربع الحوار التالي.
الخطوة 8: - استخدم مربع النص العلوي الأيسر للبحث عن Raspberry Pi واضغط على Enter ، يجب أن تبدو نتيجة البحث مثل هذا.
الخطوة 9: - ابحث عن المكتبات المسماة "GL Video" و "Hardware I / O" وانقر فوق install لتثبيتها. تأكد من تثبيت كلتا المكتبتين.
الخطوة 10: - بناءً على الإنترنت الخاص بك ، سيستغرق التثبيت بضع دقائق. بمجرد الانتهاء ، نكون جاهزين لمعالجة البرامج.
مخطط الرسم البياني:
يظهر الرسم التخطيطي لمشروع تتبع كرة Raspberry Pi أدناه.
كما ترون ، تشتمل الدائرة على كاميرا PI ووحدة Motor Driver وزوج من المحركات المتصلة بـ Raspberry pi. يتم تشغيل الدائرة الكاملة بواسطة بنك طاقة متنقل (تمثله بطارية AAA في الدائرة أعلاه).
نظرًا لعدم ذكر تفاصيل المسامير في Raspberry Pi ، نحتاج إلى التحقق من المسامير باستخدام الصورة أدناه
لقيادة المحركات ، نحتاج إلى أربعة دبابيس (A ، B ، A ، B). هذه الأربعة دبابيس متصلة من GPIO14 و 4 و 17 و 18 على التوالي. يشكل السلك البرتقالي والأبيض معًا التوصيل لمحرك واحد. لذلك لدينا زوجان من هذا القبيل لمحركين.
يتم توصيل المحركات بوحدة L293D Motor Driver كما هو موضح في الصورة ويتم تشغيل وحدة التشغيل بواسطة بنك طاقة. تأكد من توصيل أرضية بنك الطاقة بأرض Raspberry Pi ، عندها فقط سيعمل اتصالك.
لقد انتهينا من اتصال الأجهزة ، فلنعد إلى بيئة المعالجة الخاصة بنا ونبدأ البرمجة لتعليم الروبوت الخاص بنا كيفية تتبع الكرة.
برنامج Raspberry Pi Ball Tracking:
يتم تقديم برنامج المعالجة الكامل لهذا المشروع في نهاية هذه الصفحة ، والتي تستخدمها مباشرة. علاوة على ذلك أدناه ، قمت بشرح عمل الكود بحيث يمكنك استخدامه لمشاريع أخرى مماثلة.
في مفهوم البرنامج بسيط جدا. على الرغم من أن الهدف من المشروع هو تتبع الكرة ، إلا أننا في الواقع لن نقوم بذلك. سنقوم فقط بتحديد الكرة باستخدام لونها. كما نعلم جميعًا ، فإن مقاطع الفيديو ليست سوى إطارات مستمرة للصور. لذلك نأخذ كل صورة ونقسمها إلى بكسل. ثم نقارن كل لون بكسل مع لون الكرة ؛ إذا تم العثور على تطابق ، فيمكننا القول إننا وجدنا الكرة. باستخدام هذه المعلومات ، يمكننا أيضًا تحديد موضع الكرة (لون البكسل) على الشاشة. إذا كان الموضع أقصى اليسار ، فنحن نحرك الروبوت إلى اليمين ، وإذا كان الموضع أقصى اليمين ، فإننا نحرك الروبوت إلى اليسار بحيث يظل موضع البكسل دائمًا في وسط الشاشة. يمكنك مشاهدة فيديو Computer Vision لدانيال شيفمان للحصول على صورة واضحة.
كما هو الحال دائمًا ، نبدأ باستيراد المكتبتين اللتين نقوم بتنزيلهما. يمكن القيام بذلك من خلال السطرين التاليين. تُستخدم مكتبة إدخال / إخراج الأجهزة للوصول إلى دبابيس GPIO الخاصة بـ PI مباشرةً من بيئة المعالجة ، وتُستخدم مكتبة glvideo للوصول إلى وحدة كاميرا Raspberry Pi.
معالجة الاستيراد. io. * ؛ استيراد gohai.glvideo. * ؛
داخل وظيفة الإعداد ، نقوم بتهيئة دبابيس الإخراج للتحكم في المحرك وأيضًا الحصول على الفيديو من كاميرا pi وحجمه في نافذة بحجم 320 * 240.
إعداد باطل () {size (320، 240، P2D) ؛ فيديو = GLCapture جديد (هذا) ؛ video.start () ، لون المسار = اللون (255 ، 0 ، 0) ؛ GPIO.pinMode (4 ، GPIO.OUTPUT) ؛ GPIO.pinMode (14 ، GPIO.OUTPUT) ؛ GPIO.pinMode (17 ، GPIO.OUTPUT) ؛ GPIO.pinMode (18 ، GPIO.OUTPUT) ؛ }
و تعادل باطل هو مثل حلقة لا نهائية التعليمات البرمجية داخل هذه الحلقة سيتم تنفيذ طالما يتم إنهاء البرنامج. إذا كان مصدر الكاميرا متاحًا ، فنحن نقرأ الفيديو الخارج منه
رسم باطل () {خلفية (0) ؛ إذا (video.available ()) {video.read () ؛ }}
ثم نبدأ في تقسيم إطار الفيديو إلى بكسل. كل بكسل له قيمة الأحمر والأخضر والأزرق. يتم تخزين هذه القيم في المتغير r1 و g1 و b1
لـ (int x = 0؛ x <video.width؛ x ++) {لـ (int y = 0؛ y <video.height؛ y ++) {int loc = x + y * video.width؛ // ما هو لون اللون الحالي currentColor = video.pixels ؛ تعويم r1 = أحمر (currentColor) ؛ تعويم g1 = أخضر (currentColor) ؛ تعويم b1 = أزرق (currentColor) ؛
إلى الكشف عن لون الكرة في البداية ، لدينا لتضغط على اللون. بمجرد النقر ، سيتم تخزين لون الكرة في متغير يسمى trackColour .
void mousePressed () {// حفظ اللون حيث يتم النقر فوق الماوس في trackColor variable int loc = mouseX + mouseY * video.width؛ trackColor = video.pixels ؛ }
بمجرد أن نحصل على لون المسار واللون الحالي ، يتعين علينا المقارنة بينهما. تستخدم هذه المقارنة وظيفة التوزيع. يتحقق من مدى قرب اللون الحالي من لون المسار.
تعويم d = dist (r1، g1، b1، r2، g2، b2) ؛
ستكون قيمة التوزيع صفرًا للمطابقة التامة. لذلك ، إذا كانت قيمة dist أقل من قيمة محددة (السجل العالمي) ، فإننا نفترض أننا وجدنا لون المسار. ثم نحصل على موقع هذا البكسل ونخزنه في المتغير الأقرب X والأقرب Y للعثور على موقع الكرة
إذا (d <worldRecord) {worldRecord = d ؛ أقرب X = س ؛ أقرب ص = ص ؛ }
نرسم أيضًا شكلًا بيضاويًا حول اللون الموجود للإشارة إلى أنه تم العثور على اللون. تتم طباعة قيمة الموضع أيضًا على وحدة التحكم ، وهذا سيساعد كثيرًا أثناء التصحيح.
if (worldRecord <10) {// ارسم دائرة عند تعبئة البكسل المتعقبة (trackColor) ؛ الوزن (4.0) ؛ السكتة الدماغية (0) ؛ القطع الناقص (الأقرب X ، الأقرب Y ، 16 ، 16) ؛ println (الأقرب X ، الأقرب Y) ؛
أخيرًا ، يمكننا مقارنة موضع أقرب X وأقرب Y وضبط المحركات بحيث يصل اللون إلى وسط الشاشة. يستخدم الكود أدناه لقلب الروبوت لليمين حيث تم العثور على موضع X للون في الجانب الأيسر من الشاشة (<140)
إذا (الأقرب X <140) {GPIO.digitalWrite (4 ، GPIO.HIGH) ؛ GPIO.digitalWrite (14 ، GPIO.HIGH) ؛ GPIO.digitalWrite (17 ، GPIO.HIGH) ؛ GPIO.digitalWrite (18 ، GPIO.LOW) ؛ تأخير (10) ؛ GPIO.digitalWrite (4 ، GPIO.HIGH) ؛ GPIO.digitalWrite (14 ، GPIO.HIGH) ؛ GPIO.digitalWrite (17 ، GPIO.HIGH) ؛ GPIO.digitalWrite (18 ، GPIO.HIGH) ؛ println ("انعطف يمينًا") ؛ }
وبالمثل ، يمكننا التحقق من موضع X و Y للتحكم في المحركات في الاتجاه المطلوب. كما هو الحال دائمًا ، يمكنك الرجوع إلى أسفل الصفحة للحصول على البرنامج الكامل.
عمل روبوت Raspberry Pi Ball Tracking:
بمجرد أن تكون جاهزًا مع الأجهزة والبرنامج ، فقد حان الوقت للاستمتاع ببعض المرح. قبل أن نختبر الروبوت الخاص بنا على الأرض ، يجب أن نتأكد من أن كل شيء يعمل بشكل جيد. قم بتوصيل Pi الخاص بك لمراقبة وتشغيل رمز المعالجة. يجب أن تشاهد بث الفيديو على نافذة صغيرة. الآن ، أدخل الكرة داخل الإطار وانقر على الكرة لتعليم الروبوت أنه يجب أن يتتبع هذا اللون المحدد. الآن حرك الكرة حول الشاشة وستلاحظ أن العجلات تدور.
إذا كان كل شيء يعمل كما هو متوقع ، فقم بتحرير الروبوت على الأرض وابدأ في اللعب به. تأكد من إضاءة الغرفة بشكل متساوٍ للحصول على أفضل النتائج. يظهر العمل الكامل للمشروع في الفيديو أدناه. آمل أن تكون قد فهمت المشروع واستمتعت ببناء شيء مشابه. إذا كانت لديك أي مشاكل فلا تتردد في نشرها في قسم التعليقات أدناه أو المساعدة.