Skip to main content

الدرس 3: عند اكتشاف اللون الأحمر

لا توجد أوامر لإخبار روبوت الواقع الافتراضي بما يجب فعله بمجرد اكتشاف اللون الأحمر. لتجنب الحدود الحمراء، يجب أن ينعكس روبوت الواقع الافتراضي ويدور بمجرد اكتشافه للون الأحمر، كما هو الحال في هذا الفيديو.

ملف فيديو
  • أضف تعليقًا إلى نهاية الحلقة بينما للإشارة إلى ما يجب أن يحدث عندما يكتشف مستشعر العين السفلية الحد الأحمر. يجب أن يبدو مشروعك الآن كما يلي:

    def main ():
    	# ابحث عن مبنى بينما لم يتم اكتشاف الحد الأحمر
    	بينما لم يتم اكتشافه 	down_eye.detect (أحمر):
    		# هل يكتشف مستشعر المسافة قلعة ؟
    		
    		if front_distance.found_object ():
    			# Crash castle detected by Distance Sensor drivetrain.drive
    			(FORWARD)
    		
    		else:
    			# Turn to find a castle using the Distance Sensor drivetrain.turn
    			(RIGHT)
    			
    		wait(5, MSEC)
    		
    	# Reverse and turn when red border detected
  • أضف drive_for و turn_for للأوامر أسفل التعليق للسماح لروبوت الواقع الافتراضي بالعكس والدوران بمجرد أن يكتشف مستشعر العين السفلية اللون الأحمر.

    def main ():
    	# ابحث عن مبنى بينما لم يتم اكتشاف الحد الأحمر
    	بينما لم يتم اكتشافه 	down_eye.detect (أحمر):
    		# هل يكتشف مستشعر المسافة قلعة ؟
    		
    		if front_distance.found_object ():
    			# Crash castle detected by Distance Sensor drivetrain.drive 			(
    			FORWARD)
    		
    		else:
    			# Turn to find a castle using the Distance Sensor drivetrain.turn
    			(RIGHT)
    			
    		wait(5, MSEC)
    		
    	# Reverse and turn when red border detected drivetrain.drive_for
    	(REVERSE, 300, MM)
    	drivetrain.turn_for(RIGHT, 90, DEGREES)
  • افتح ملعب Dynamic Castle Crasher إذا لم يكن مفتوحًا بالفعل، وقم بتشغيل المشروع. هل يتصرف روبوت الواقع الافتراضي كما كنت تنوي ؟
  • عند تشغيل هذا المشروع، هناك شرطان يتم التحقق منهما. الحالة الأولى هي حالة مستشعر العين السفلية الذي يكتشف اللون الأحمر داخل الحلقة بينما لاحظ أن تدفق المشروع ينتقل إلى الحالة التالية لجسم يتم اكتشافه فقط إذا لم يرَ مستشعر العين السفلية اللون الأحمر. إذا اكتشف مستشعر العين السفلي اللون الأحمر، فإن تدفق المشروع يتخطى عبارة if else ويقفز إلى القيادة في الاتجاه المعاكس والانعطاف.
    رمز مشروع بايثون هذا الدرس مع رسم تخطيطي يوضح تدفق المشروع على الجانب. تقرأ الحالة الأولى التي تم فحصها: يكتشف مستشعر العين السفلي اللون الأحمر باللون البرتقالي، مما يمثل بداية الحلقة. هناك حلقة سهم أحمر عندما يكتشف مستشعر العين السفلية اللون الأحمر، والتي ستبلغ عن True وسيخرج المشروع من المظهر المتكرر. إذا أبلغ عن خطأ، فسوف ينتقل الرمز إلى عبارة if then ويستمر في التكرار حتى يكتشف مستشعر العين السفلية اللون الأحمر.
 
  • الشرط الثاني الذي يتم التحقق منه هو عبارة if else. في حين أن مستشعر العين السفلية لا يكتشف اللون الأحمر، سيستمر المشروع في الحلقة بينما للتحقق من حالة مستشعر المسافة. سيستخدم روبوت الواقع الافتراضي البيانات من مستشعر المسافة لاتخاذ قرار بالقيادة للأمام أو الانعطاف يمينًا. رمز مشروع بايثون هذا الدرس مع رسم تخطيطي يوضح تدفق المشروع على الجانب. تقرأ الحالة الثانية التي تم التحقق منها: يكتشف مستشعر المسافة الجسم. يوضح ما يحدث إذا تم التحقق من الشرط الثاني، وإذا تم الإبلاغ عن صحته، فسيتقدم روبوت الواقع الافتراضي للأمام، وإذا أبلغ الشرط الثاني عن خطأ، فسيتجه روبوت الواقع الافتراضي إلى اليمين.
  • ومع ذلك، بمجرد أن يكتشف مستشعر العين السفلية اللون الأحمر، سيقود روبوت الواقع الافتراضي في الاتجاه المعاكس، ثم يتحول، ثم يتوقف لأن هذا هو نهاية تدفق المشروع. لا توجد حلقة تستخدم لتكرار السلوكيات مرة أخرى.

    منظر من أعلى إلى أسفل لملعب Dynamic Castle Crashed يظهر بعض القلاع التي تم إسقاطها، مع انعكاس روبوت VR واستدارته بعد أن اجتاز الحدود الحمراء، لذلك يواجه وسط الملعب مرة أخرى.

إضافة حلقة لا نهائية while

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

    def main ():
    
    	while True:
    		# ابحث عن مبنى بينما لم يتم اكتشاف الحد الأحمر
    		بينما لم يتم اكتشافه 		down_eye.detect (RED):
    			# هل يكتشف مستشعر المسافة قلعة ؟
    		
    			if front_distance.found_object ():
    				# Crash castle detected by Distance Sensor drivetrain.drive 				(
    				FORWARD)
    		
    			else:
    				# Turn to find a castle using the Distance Sensor drivetrain.turn
    				(RIGHT)
    			
    			wait(5, MSEC)
    		
    		# Reverse and turn when red border detected drivetrain.drive_for
    		(REVERSE, 300, MM)
    		drivetrain.turn_for(RIGHT, 90, DEGREES)
    
  • افتح ملعب Dynamic Castle Crasher إذا لم يكن مفتوحًا بالفعل، وقم بتشغيل المشروع. هل يتصرف روبوت الواقع الافتراضي كما تريد ؟ 
  • عند تشغيل هذا المشروع، سيقود روبوت الواقع الافتراضي نحو قلعة مكتشفة وينعطف يمينًا إذا لم يتم الإبلاغ عن أي قلاع. بمجرد أن يكتشف مستشعر العين السفلية اللون الأحمر، يتحرك روبوت الواقع الافتراضي في الاتجاه المعاكس، ويدور، ويستمر في القيادة نحو قلعة أخرى.

    منظر من أعلى إلى أسفل لملعب Dynamic Castle Crasher يظهر أن روبوت VR قد أطاح بقلاع متعددة في الملعب ويتحرك الآن نحو آخر قلعة قائمة.

الأسئلة

يرجى تحديد رابط أدناه للوصول إلى اختبار الدرس.

Google Doc / .docx / .pdf