اتصال المنافسة: نقطة التحول - C++
قدرات الروبوت
تطلبت لعبة "نقطة التحول" لمسابقة فيكس للروبوتات 2018 - 2019 من اللاعبين تبديل الأعلام بين عناصر اللعبة الأخرى. كان هناك ما مجموعه تسعة أعلام: ثلاثة أعلام سفلية يمكن تبديلها بواسطة الروبوت، والأعلام الستة العالية التي لا يمكن تبديلها إلا عن طريق ضربها بقطع لعبة كرة المنافسة. احتاجت فرق المنافسة إلى التوصل إلى طريقة لضرب الأعلام العليا باستخدام قاذفة الكرة. إذا كنت تستطيع أن تتخيل، فإن برمجة الروبوت لضرب الأعلام باستخدام قطع لعبة الكرة عن طريق القياس قد لا تكون دقيقة دائمًا. إذا اتخذ الروبوت منعطفًا خاطئًا واحدًا خلال الفترة المستقلة، فهناك احتمال ألا يتم ضرب أي من الأعلام لأن الحسابات ستكون متوقفة. وبالمثل، بالنسبة لتحدي مهارات القيادة، قد يكون من الصعب على الفرق محاذاة الروبوت يدويًا بما يكفي لإطلاق الكرة بشكل صحيح. وبالتالي، ستقوم الفرق الماهرة ببرمجة الروبوت باستخدام مستشعر الرؤية للكشف عن الأعلام ثم محاذاة الروبوت بشكل صحيح من أجل إجراء لقطات دقيقة.
قم بتوسيع نطاق تعلمك
لتوسيع هذا النشاط، اطلب من طلابك تصميم وتحديد مشروع من شأنه أن يجعل الروبوت يتحرك نحو الأشياء الصفراء المكتشفة التي يمكن أن يستخدموها في لعبة المسابقة هذه!
اطلب من طلابك القيام بما يلي:
-
افتح مثال مشروع Clawbot (نظام نقل الحركة، بمحركين، بدون جيروسكوب).
- استخدم مشروع مثال الكشف عن الكائنات (Vision) كمرجع عند برمجة مستشعر الرؤية (Google Doc / .v5cpp).
-
أضف مستشعر الرؤية إلى تكوين Clawbot (مجموعة نقل الحركة، محركان، بدون جيروسكوب) ثم قم بتكوين مستشعر الرؤية للكشف عن الأجسام الحمراء والزرقاء. اضغط هنا للحصول على المزيد من المعلومات.
- قم ببرمجة Clawbot للتحرك نحو الكائن المكتشف. يمكن حتى برمجة Clawbot لرفع ذراعه كما لو كان لتبديل العلم!
- قم بتنزيل وتشغيل المشروع (في C++) لمراقبة ما إذا كان مستشعر الرؤية يمكنه اكتشاف الأجسام الصفراء مثل الكرات الصفراء في لعبة نقطة تحول VRC. إذا تمكن مستشعر الرؤية من اكتشاف الأجسام، فهل يتحرك الروبوت بناءً على تلك الأشياء المكتشفة ؟ للحصول على المساعدة، شاهد فيديو البرنامج التعليمي Download and Run a Project.
- إذا سمح الوقت، قم بإعداد حقل لعبة مشابه لحقل نقطة التحول. تدرب على استخدام مستشعر الرؤية للسماح للروبوت بالتحرك لتسجيل النقاط!
عرض نموذج الحل أدناه:
// قم بتضمين مكتبة V5
# بما في ذلك "vex.h"
// يسمح بسهولة
استخدام مكتبة vex
باستخدام
مساحة الاسم vex ؛ event checkRed =
event ()؛ event
checkBlue = event
()؛
void hasRedCallback () {
Brain.Screen.setFont (mono40 )؛ Brain.Screen.clearLine (1 )؛
Brain.Screen.setCursor (1، 1
)؛ Vision5.takeSnapshot (Vision5 __
REDBOX )؛
if (Vision5.objectCount > 0
) {ArmMotor.spinFor (forward
, 300, degrees); ClawMotor.spinFor
(
forward, 100, degrees
);
Drivetrain.driveFor (forward
, 12,
inches )؛ ArmMotor.spinFor
(reverse, 300,
degrees); ClawMotor.spinFor (
reverse, > 100
, degrees);
else {Brain.Screen.print
(Red Object
)}} haslueBallback
(voidBallback) {Brain.creenFonto (
moncreen); Brain.driveFor (forward
, 3, inches); ArmMotor.spinFor (
reverse, 300, degrees
);
(reverse,
100, degrees); لا تقم بالإزالة!
vexcodeInit ();
// Register Event Handlers
checkRed(hasRedCallback);
checkBlue(hasBlueCallback);
// يعمل باستمرار للتحقق من بيانات المستشعر الجديدة
بينما (true
){ checkRed.broadcastAndWait ();
checkBlue.broadcastAndWait ();
wait(0.2, seconds);
}}