جدول المحتويات:

روبوت تتبع الكرة: 8 خطوات
روبوت تتبع الكرة: 8 خطوات

فيديو: روبوت تتبع الكرة: 8 خطوات

فيديو: روبوت تتبع الكرة: 8 خطوات
فيديو: أعلى مستوى وصلتوا في البرمجة 2024, يوليو
Anonim
روبوت تتبع الكرة
روبوت تتبع الكرة
روبوت تتبع الكرة
روبوت تتبع الكرة
روبوت تتبع الكرة
روبوت تتبع الكرة

لذا في هذا ، سأخبر كيف أجعل روبوتًا لتتبع الكرة وهو إنسان آلي سوف يتعرف على الكرة ويتبعها. إنها في الأساس تقنية مراقبة آلية يمكن استخدامها في العالم الحديث. لذا ، دعنا ندخل ونبدأ في البناء …

ملاحظة: هذه المهمة الجزئية المقدمة إلى جامعة ديكن ، كلية تكنولوجيا المعلومات ، SIT-210 Embedded Systems Development

اللوازم

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

الخطوة 1: مقدمة

مقدمة
مقدمة

توفر المراقبة الحالية عيبًا رئيسيًا وهو أنها تعتمد على مشاركة البشر والتي كما نعلم جميعًا يمكن تشتيت انتباهنا بسهولة ، لذلك كان من الأهمية بمكان اكتشاف نظام يمكنه مراقبة المناطق بشكل مستقل ومستمر. ونريد أيضًا تحديد الأشياء البغيضة أو غير المرغوب فيها والمخاطر أثناء اتخاذ القرارات في نفس الوقت والاستجابة وفقًا لذلك. لذلك يعد تتبع الكائنات باستخدام الأنظمة الذكية وأجهزة الكمبيوتر أمرًا ضروريًا وحاسمًا لتحقيق المراقبة الآلية.

يجب أن يكون أي نظام مراقبة خارجي قادرًا على تتبع الأجسام المتحركة في مجال رؤيته وتصنيف هذه الكائنات واكتشاف بعض أنشطتها. لقد طورت طريقة لتتبع وتصنيف هذه الكائنات في سيناريوهات واقعية. يتم تنفيذ تتبع الكائن في كاميرا واحدة باستخدام الطرح الخلفي ، متبوعًا بمراسلات المنطقة. يأخذ هذا في الاعتبار إشارات متعددة بما في ذلك سرعات وأحجام ومسافات الصناديق المحيطة.

الخطوة 2: المواد والأدوات اللينة المستخدمة في هذا المشروع

المواد والأدوات اللينة المستخدمة في هذا المشروع
المواد والأدوات اللينة المستخدمة في هذا المشروع
المواد والأدوات اللينة المستخدمة في هذا المشروع
المواد والأدوات اللينة المستخدمة في هذا المشروع
المواد والأدوات اللينة المستخدمة في هذا المشروع
المواد والأدوات اللينة المستخدمة في هذا المشروع

مكونات الأجهزة المستخدمة:

  • Raspberry Pi (x1)
  • وحدة كاميرا Raspberry Pi (x1)
  • جهاز استشعار بالموجات فوق الصوتية (x3)
  • محركات SparkFun Dual H-Bridge للمحركات L298 (x1)
  • محرك تيار مستمر (x1)
  • اللوح (x1)
  • توصيل الأسلاك

البرمجيات المستخدمة:

OpenCV

أدوات يدوية:

بايثون

الخطوة الثالثة: ماذا تفعل؟

يجب أن يكون أي نظام مراقبة خارجي قادرًا على تتبع الأجسام المتحركة في مجال رؤيته وتصنيف هذه الكائنات واكتشاف بعض أنشطتها. لقد طورت طريقة لتتبع وتصنيف هذه الكائنات في سيناريوهات واقعية. يتم تنفيذ تتبع الكائن في كاميرا واحدة باستخدام الطرح الخلفي ، متبوعًا بمراسلات المنطقة. يأخذ هذا في الاعتبار إشارات متعددة بما في ذلك سرعات وأحجام ومسافات الصناديق المحيطة.

كان الشيء الحاسم أثناء اكتشاف الصور إطارًا تلو الآخر هو تجنب أي إسقاط للإطار ، حيث يمكن للبوت أن يدخل في حالة من عدم اليقين إذا فشل الروبوت في ملاحظة اتجاه حركة الكرة بسبب قطرات الإطار. إذا خرجت الكرة عن نطاق الكاميرا ، فسوف تدخل إلى ما نسميه حالة النسيان ، وفي هذه الحالة ، يقوم الروبوت بدوران 360 درجة لعرض المساحة المحيطة به حتى تعود الكرة في إطار الكاميرا ثم تبدأ في التحرك في اتجاهها.

لتحليل الصورة ، آخذ كل إطار ثم أخفيه باللون المطلوب. ثم أجد كل الخطوط العريضة وأجد أكبرها فيما بينها وربطتها في مستطيل. وتظهر المستطيل على الصورة الرئيسية وتجد إحداثيات مركز المستطيل.

أخيرًا ، يحاول الروبوت إحضار إحداثيات الكرة إلى مركز محور الإحداثيات الخاص بها. هذه هي الطريقة التي يعمل بها الروبوت. يمكن تحسين ذلك بشكل أكبر باستخدام جهاز إنترنت الأشياء مثل جسيم الفوتون والذي يمكن أن يتيح لك إخبارك عند اكتشاف شيء ما وأن الروبوت يتابعه أو عندما يكون الروبوت قد فقد مساره ويعود الآن إلى القاعدة.

لغرض معالجة الصور ، تحتاج إلى تثبيت برنامج OpenCV على raspberry pi الذي كان صعبًا جدًا بالنسبة لي.

يمكنك الحصول على أي معلومات مطلوبة لتثبيت OpenCV من خلال هذا الرابط: انقر هنا

الخطوة 4: المخططات

Image
Image
المخططات
المخططات
المخططات
المخططات

لقد قدمت أعلاه المخططات لمشروعي ومعها لوحة الدوائر المطبوعة (PCB).

وإليك بعض الروابط الرئيسية التي عليك القيام بها:

• أولاً وقبل كل شيء ، يتم توصيل وحدة كاميرا Raspberry Pi مباشرةً بـ Raspberry Pi.

• يتم توصيل مستشعرات الموجات فوق الصوتية VCC بالطرف المشترك كما هو الحال مع GND (الأرضي) ويتم توصيل المنفذين المتبقيين لمستشعر الموجات فوق الصوتية بدبابيس GPIO على Raspberry Pi.

• يتم توصيل المحركات باستخدام H-Bridge.

• يتم توفير الطاقة باستخدام البطارية.

لقد أضفت أيضًا مقطع فيديو قد يساعد في فهم عمل مستشعر الموجات فوق الصوتية وكيف يعمل.

وأيضًا يمكنك متابعة هذا الرابط إذا لم تتمكن من العثور على الفيديو أعلاه.

الخطوة 5: كيف نفعل؟

لقد صنعت هذا المشروع الذي يصور روبوتًا أساسيًا يمكنه تتبع الكرة. يستخدم الروبوت كاميرا للقيام بمعالجة الصور عن طريق التقاط الإطارات وتتبع الكرة. لتتبع الكرة بميزات مختلفة مثل لونها وحجمها وشكلها.

يجد الروبوت لونًا مشفرًا ثم يبحث عن الكرة من هذا اللون ويتبعها. لقد اخترت Raspberry Pi كوحدة تحكم صغيرة في هذا المشروع لأنها تتيح لنا استخدام وحدة الكاميرا الخاصة بها وتوفر مرونة كبيرة في التعليمات البرمجية لأنها تستخدم لغة python سهلة الاستخدام للغاية كما تتيح لنا استخدام مكتبة OpenCV لتحليل الصور.

تم استخدام H-Bridge لتبديل اتجاه دوران المحركات أو لإيقافها.

لتحليل الصورة ، آخذ كل إطار ثم أخفيه باللون المطلوب. ثم أجد كل الخطوط العريضة وأجد أكبرها فيما بينها وربطتها في مستطيل. وتظهر المستطيل على الصورة الرئيسية وتجد إحداثيات مركز المستطيل.

أخيرًا ، يحاول الروبوت إحضار إحداثيات الكرة إلى مركز محور الإحداثيات الخاص بها. هذه هي الطريقة التي يعمل بها الروبوت. يمكن تحسين ذلك بشكل أكبر باستخدام جهاز إنترنت الأشياء مثل جسيم الفوتون والذي يمكن أن يتيح لك إخبارك عند اكتشاف شيء ما وأن الروبوت يتابعه أو عندما يكون الروبوت قد فقد مساره ويعود الآن إلى القاعدة. وللقيام بذلك ، سنستخدم نظامًا أساسيًا للبرامج عبر الإنترنت يربط الأجهزة ويسمح لها بتنفيذ إجراءات معينة على مشغلات محددة مثل مشغلات IFTTT.

الخطوة 6: الكود الزائف

كود مزيف
كود مزيف

هذا هو الكود الزائف لجزء الكشف باستخدام OpenCV حيث نكتشف كرة.

الخطوة 7: الكود

الشفرة
الشفرة
الشفرة
الشفرة
الشفرة
الشفرة
الشفرة
الشفرة

أعلاه هي مقتطفات من التعليمات البرمجية وفيما يلي الوصف التفصيلي للكود.

# استيراد الحزم الضرورية

نحن نستورد جميع الباقات المطلوبة

من picamera.array استيراد PiRGBArray # نظرًا لوجود مشكلة في الدقة في raspberry pi ، فلن تتمكن من التقاط الإطارات بواسطة VideoCapture

من picamera استيراد PiCamera استيراد RPi. GPIO كوقت استيراد GPIO استيراد numpy كـ np

نقوم الآن بإعداد الأجهزة وتخصيص الدبابيس المتصلة بـ RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 # مستشعر الموجات فوق الصوتية الأيسر

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 # مستشعر الموجات فوق الصوتية الأمامية

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 # مستشعر الموجات فوق الصوتية الأيمن

GPIO_ECHO3 = 35

MOTOR1B = 18 # المحرك الأيسر

المحرك 1E = 22

MOTOR2B = 21 # المحرك الأيمن

MOTOR2E = 19

LED_PIN = 13 # إذا عثرت على الكرة ، فسوف تضيء المصباح

# تعيين الدبابيس كإخراج وإدخال

GPIO.setup (GPIO_TRIGGER1، GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO1، GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2، GPIO. OUT) # تشغيل GPIO.setup (GPIO_ECHO2، GPIO. IN) GPIO.setup (GPIO_TRIGGER3، GPIO. OUT) # تشغيل GPIO.setup (GPIO_ECHO3، GPIO. IN) GPIO.setup (LED_PIN، GPIO. OUT)

# تعيين الزناد على خطأ (منخفض)

GPIO.output (GPIO_TRIGGER1 ، خطأ) GPIO.output (GPIO_TRIGGER2 ، خطأ) GPIO.output (GPIO_TRIGGER3 ، خطأ)

تستخدم هذه الوظيفة جميع أجهزة الاستشعار التي تعمل بالموجات فوق الصوتية ، وتجمع المسافة من الكائنات الموجودة حول الروبوت لدينا

# اسمح للوحدة بالاستقرار

def sonar (GPIO_TRIGGER، GPIO_ECHO): بدء = 0 توقف = 0 # تعيين المسامير كإخراج وإدخال GPIO.setup (GPIO_TRIGGER، GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO، GPIO. IN) # Echo # اضبط المشغل على False (منخفض) GPIO.output (GPIO_TRIGGER ، خطأ) # اسمح للوحدة بضبط الوقت. الإخراج (GPIO_TRIGGER ، خطأ) يبدأ = time.time () بينما GPIO.input (GPIO_ECHO) == 0 و time.time ()

الحصول على محركات DC للعمل مع RASPBERRY PI

GPIO.setup (MOTOR1B ، GPIO. OUT)

GPIO.setup (MOTOR1E ، GPIO. OUT)

GPIO.setup (MOTOR2B ، GPIO. OUT) GPIO.setup (MOTOR2E ، GPIO. OUT)

تحديد وظائف تشغيل الروبوت وتحريكه في اتجاهات مختلفة

def إلى الأمام ():

GPIO.output (MOTOR1B، GPIO. HIGH) GPIO.output (MOTOR1E، GPIO. LOW) GPIO.output (MOTOR2B، GPIO. HIGH) GPIO.output (MOTOR2E، GPIO. LOW) عكسي (): GPIO.output (MOTOR1B ، GPIO. LOW) GPIO.output (MOTOR1E ، GPIO. HIGH) GPIO.output (MOTOR2B ، GPIO. LOW) GPIO.output (MOTOR2E ، GPIO. HIGH) مع الاتجاه الأيمن (): GPIO.output (MOTOR1B ، GPIO. LOW) GPIO.output (MOTOR1E، GPIO. HIGH) GPIO.output (MOTOR2B، GPIO. HIGH) GPIO.output (MOTOR2E، GPIO. LOW) الانعطاف الأيسر (): GPIO.output (MOTOR1B، GPIO. HIGH) GPIO.output (MOTOR1E ، GPIO. LOW) GPIO.output (MOTOR2B ، GPIO. LOW) إخراج GPIO (MOTOR2E ، GPIO. HIGH)

توقف def ():

GPIO.output (MOTOR1E ، GPIO. LOW) GPIO.output (MOTOR1B ، GPIO. LOW) GPIO.output (MOTOR2E ، GPIO. LOW) GPIO.output (MOTOR2B ، GPIO. LOW)

عمل وحدة الكاميرا وضبط الإعدادات

# التقاط الكاميرا

#initialize الكاميرا وانتزاع مرجع لكاميرا التقاط الكاميرا الأولية = PiCamera () camera.resolution = (160، 120) camera.framerate = 16 rawCapture = PiRGBArray (camera ، size = (160، 120)) # السماح للكاميرا وقت الإحماء ، النوم (0.001)

ننفذ الآن الشيء الرئيسي حيث يتبع الروبوت الكرة وتجنب أي عقبة في الطريق

بينما (1 <10): {# المسافة تأتي من مسافة مستشعر الموجات فوق الصوتية الأمامية C = السونار (GPIO_TRIGGER2، GPIO_ECHO2) # المسافة تأتي من مسافة مستشعر الموجات فوق الصوتية اليمنى R = السونار (GPIO_TRIGGER3، GPIO_ECHO3) # المسافة تأتي من مسافة مستشعر الموجات فوق الصوتية اليسرى L = السونار (GPIO_TRIGGER1) ، GPIO_ECHO1) إذا كانت (مسافة C = 8: rightturn () time.sleep (0.00625) توقف () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) # while found == 0: leftturn () time.sleep (0.00625) elif DistanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) rightturn () time.sleep (0.00625) stop () time.sle (0.0125) وإلا: stop () time.sleep (0.01) وإلا: #otherwise تتحرك للأمام () time.sleep (0.00625) إذا (المسافة C> 10): # يجلب إحداثيات الكرة إلى مركز المحور التخيلي للكاميرا. if (centre_x = 20): if (centre_x0): flag = 1 leftturn () time.sleep (0.025) forward () time.sleep (0.00003125)) توقف () time.sleep (0.00625) وإلا: توقف () time.sleep (0.01)

آخر:

# إذا وجدت الكرة وكانت قريبة جدًا ، فإنها تضيء المصباح. GPIO.output (LED_PIN، GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw"، frame) rawCapture.truncate (0) # امسح الدفق استعدادًا لـ الإطار التالي }

قم بالتنظيفات اللازمة

GPIO.cleanup () # حرر جميع دبابيس GPIO

الخطوة 8: الروابط الخارجية

رابط الفيديو التوضيحي: اضغط هنا (يوتيوب)

رابط إلى الكود على Git-hub: انقر هنا (Git-Hub)

موصى به: