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

روبوت دفع رباعي يتم تشغيله عبر لوحة تحكم USB عن بعد: 6 خطوات
روبوت دفع رباعي يتم تشغيله عبر لوحة تحكم USB عن بعد: 6 خطوات

فيديو: روبوت دفع رباعي يتم تشغيله عبر لوحة تحكم USB عن بعد: 6 خطوات

فيديو: روبوت دفع رباعي يتم تشغيله عبر لوحة تحكم USB عن بعد: 6 خطوات
فيديو: مشروع : برمجة أي سيارة لعبة أطفال مع أي جهاز تحكم(ريموت) من الخردة وبيعها 2024, يونيو
Anonim
Image
Image

بالنسبة لمشروع الروبوتات التالي الخاص بي ، اضطررت إلى تصميم / تصميم منصة الروبوت الخاصة بي بسبب ظروف غير متوقعة.

الهدف هو أن تكون ذاتية القيادة ، لكن أولاً ، كنت بحاجة إلى اختبار قدرتها الأساسية على القيادة ، لذلك اعتقدت أنه سيكون مشروعًا جانبيًا ممتعًا أن تتصرف وتتحكم كما لو كانت سيارة RC (يتم التحكم فيها عن طريق الراديو) ، ولكن بدلاً من ذلك استخدم لوحة ألعاب USB.

كانت النتائج جيدة أو أفضل مما توقعت.

ميزة الذهاب إلى مسار USB Gamepad ، مع الكثير من البرمجة ، هي أنه يمكنني تخصيصه وإضافة ما قمت به بالفعل. ليس لدي أي خبرة فعلية في بناء سيارة RC ، لكني أتخيل أن أحدها عالق إلى حد كبير مع أي جهاز إرسال RC (عصا التحكم / الأزرار ، إلخ) وجهاز استقبال RC يأتي معه.

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

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

لن يكون هذا Instructable طريقة صحيحة ومفصلة وشاملة وخطوة بخطوة ، لكنني سأحاول تقديم أكبر قدر ممكن من التفاصيل.

اللوازم

الأجزاء المقترحة: حصلت على معظم هذا من Servo City (Actobotics).

2 - 13.5 قنوات U ، لجوانب الإطار الأساسي. تم تثبيت المحركات عليها. ذهبت بشيء أقصر ومحركاتي مثبتة في الزوايا ذاتها ، مما جعل من الصعب تركيبها.

2-12 قنوات U للواجهة الأمامية والخلفية للإطار الأساسي.

2 - 15 قنوات U للمصدات الأمامية والخلفية

2 - 7 (أم كان 7.5 بوصة؟) قنوات U للأعمدة الأمامية. هذا ليس بالغ الأهمية ، يمكن أن تختلف الأطوال. يعتمد ذلك على ارتفاع الأعمدة الخلفية ، وعلى أي ارتفاع تختار وضع الزاوية قناة U التي تربط بينهما.

2 - (الطول؟) قنوات U للعضو الزاوي ، من الأمام إلى الخلف ، وتربط الأعمدة المستقيمة. هذا أمر بالغ الأهمية ، لأن Servo City / Actobotics تبيع ألواح أو أقواس بزاوية 45 درجة لهذا الغرض ، ولكن سيتعين عليك القيام ببعض العمليات الحسابية / حساب المثلثات للتأكد من حصولك على الأطوال الصحيحة.

2 - (الطول؟) قنوات U لتعمل كمصدات جانبية ذات مستوى أعلى ، وتعتمد هذه مرة أخرى على ما تفعله بالقاعدة

2 - (طول؟) قنوات U لتعمل كمصدات أمامية وخلفية ذات مستوى أعلى ، كما هو الحال أعلاه.

1 - (الطول؟) قناة U لتكون بمثابة العضو الأعلى ، وتمتد عبر الأعمدة الخلفية. قد لا يكون هذا الأمر بالغ الأهمية ، حيث يمكنك تركيبه في الأعلى ، أو أمام / خلف الأعمدة المستقيمة.

12 (aprox) قنوات L أو بين قوسين. هذه تخدم أغراضًا متعددة ولكنها توفر بشكل أساسي السلامة / القوة الهيكلية لزوايا الإطار الأساسي والأعمدة المستقيمة.

4 (+؟) قنوات مسطحة من 3 ثقوب إلى 5 ثقوب. توفر هذه أيضًا قوة هيكلية للروبوت.

تبيع ServoCity نوعين رئيسيين من الألواح المسطحة ذات المساحة الكبيرة ، وهي مفيدة لاستخدامها كقاعدة انزلاقية سفلية ، أو أعلى المكان الذي ستذهب إليه البطارية و / أو وحدات التحكم ، أو حتى لسطح أعلى لأجهزة الاستشعار.

هناك لوحة مقاس 4 (4.5؟) "X 12" ، وأعتقد أن الأخرى عبارة عن لوحة 9 (9.5؟) × 12.

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

والشيء هو.. أنك لا تعرف حقًا ما الذي قد تحتاجه ، أو كم عدده.. لأن هناك العديد من الطرق التي يمكنك من خلالها ملاءمة هذه القطع معًا.

يمكنني سرد ما استخدمته:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun …

www.servocity.com/90-quad-hub-mount-d

الخياران التاليان مفيدان للغاية ، وسأقوم بتخزينهما:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

التالي هو كل البراغي (البراغي). لقد بدأت بحزمة من كل حجم ، وقد مررت بمعظمها. لقد استخدمت مسامير أطول حيث لا يهم الحجم ، واحتفظت بالمسامير الأقصر للمكان المطلوب لأنه لن يعمل أي طول آخر.

أخيرًا ، يجب أن تحصل على حقيبة واحدة من هذه:

www.servocity.com/6-32-nylock-nuts-pack

لم أستخدم هذا العدد الكبير ، لكنهم (أعتقد) مهمين للتأكد من أن محركاتك لا تهتز من الإطار بمرور الوقت. يعمل اثنان فقط لكل محرك ، بسبب قناة U

ستحتاج إلى 4 من هؤلاء على الأقل ، وقد تحصل على واحد إضافي أو نحو ذلك في حالة التسبب في ضرر لأحدهم (صدقني ، قد تقوم بتشغيل / خلع المحركات عدة مرات):

www.servocity.com/heavy-duty-clamping-shaf…

عادةً ما تكون أعمدة المحركات 6 مم ، والمحاور 1/4 بوصة (0.25 بوصة).

سأحصل على بعض المسامير السوداء ، التي يُفترض أنها أقوى ، وأستخدمها للمشابك أعلاه ، ولا أستخدم البراغي التي تأتي مع المشابك:

(أعتقد أن هؤلاء هم):

4 - محامل قطرها 1/4 بوصة (0.25 بوصة)

1 - كيس من الفواصل السوداء 1/4 بوصة

4 - تحامل D- محاور

www.servocity.com/0-770-clamping-d-hubs

4 - D-Shafts (# 6340621.375 بوصة (1-3 / 8 بوصات)

4 - 6 عجلات للخدمة الشاقة

www.servocity.com/6-heavy-duty-wheel

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

أيضًا ، سوف يميلون إلى تلطيخ سجادتك !!!

4 - المحركات:

www.servocity.com/motors-actuators/gear-mo…

ذهبت مع 223 دورة في الدقيقة ، وهي سرعة داخلية قصوى جيدة ، ويمكنني أيضًا تحريك الروبوت الخاص بي (ثقيل مع بطاريتين SLA 12V) بسهولة تامة في حركة بطيئة.

2- ترميزات المحركات للمحركات. (لا يتعامل Roboclaw الخاص بـ Servo City إلا مع جهازي تشفير)

1 - وحدة التحكم في المحرك Roboclaw 2X45A ، تأكد من حصولك على الكتل الطرفية الخضراء ، وليس المسامير…. حسنا … لكل منها مزاياه. الإدراك المتأخر.. ربما حصلت على الدبابيس.

أعتقد أن هذا كل شيء من سيرفو سيتي.

تبيع SparkFun Arduino Uno (هذا ما استخدمته) ، وكذلك Redboard Artemis كمدير محرك الأقراص الخاص بك.

ستحتاج إلى Raspberry Pi 3 (أو 4؟) ليكون بمثابة "عقلك" رفيع المستوى وواجهة لك.

ستحتاج إلى الأسلاك ، والمفاتيح ، والصمامات ، والصمام الثنائي "flyback" القوي للغاية.

لقد استخدمت بطارية SLA ذات الدورة العميقة Duracell 12V 14AH ، ولكن يمكنك استخدام أي شيء.

تحذير! يفترض تصميم هذا الروبوت (TALL ، و WIDE ، لكن SHORT) نوعًا من مركز الثقل الثقيل ، مثل بطارية SLA. قد لا تعمل بشكل جيد مع تلك الأنواع الأخرى من حزم بطاريات التكنولوجيا الأحدث. LiPo ، Lion ، إلخ. يمكن أن ينقلب بسهولة.

من Pololu ، حصلت على عدد قليل من محولات التوصيل الأسطوانية ، بحيث يمكنني تشغيل Arduino و / أو Redboard بشكل مستقل ، على الرغم من أنهما سيكونان متصلين بـ Raspberry عبر USB ، لأنني لم أرغب في الاعتماد على طاقة Raspberry. (خاصة تركيب الكاميرات وأجهزة الاستشعار وما إلى ذلك)

ستحتاج إلى منظم جهد تنحي من 12 إلى 5 فولت ، بحد أدنى 5 أمبير (؟) لتوت العليق. يمكن للآخرين التعامل مع أي شيء يتراوح بين 7 إلى 15 فولت مباشرة إلى بطارية SLA.

هذا عن أجزاء.

ما لن أفعله - تروس مشطوفة 90 درجة.

مرة أخرى ، هناك العديد من مقاطع الفيديو في قائمة تشغيل Robotics youtube الخاصة بي توضح بالتفصيل معظم ما سبق.

الخطوة 1: البناء

بصراحة ، كل خطواتي الإنشائية هي بالفعل على شكل youtubes. يمكنك رؤية تلك الموجودة في قائمة تشغيل Robotics ، بدءًا من "Wallace Robot 4". تحتوي الأنواع السابقة (والاس الثاني والاس الثالث) أيضًا على مادة جيدة

www.youtube.com/playlist؟list=PLNKa8O7lX-w…

الخطوة الثانية: اختبار Roboclaw والمحركات وأجهزة التشفير

يمتلك صانعو Roboclaw (BasicMicro) تطبيق Windows يمكنك استخدامه للتأكد من توصيل المحركات وأجهزة التشفير بشكل صحيح إلى Roboclaw. سوف تقوم بتركيب محركات من نفس الجانب بالتوازي مع Roboclaw. يمكنك اختيار استخدام أسلاك التشفير ، على المحركات الخلفية فقط ، أو المحركات الأمامية ، أو ربما أفضل - بشكل قطري.

يتعلق سبب اقتراحي بالتحقق (لاحقًا) من وجود روبوت عالق. قد يكون الحصول على حالة قطرية عما إذا كانت العجلات الأمامية / الخلفية تدور / لا تدور أفضل من الأمام فقط ، أو الخلفية فقط.

ملاحظة: ما لم أفعله هو استخدام Arduino للاتصال أيضًا (عبر دبابيس GPIO) بأجهزة التشفير - إذا فعلت ذلك ، فيمكنك الحصول على مشفرات التعامل مع Roboclaw 2 ، ثم جعل Arduino يتعامل مع الاثنين الآخرين ، وفقط الاستعلام في Roboclaw عن قيمتي التشفير (والسرعات).

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

لقد نسيت تقريبًا: لقد اشتريت أيضًا بعض كبلات الموصل الرصاصي التي تمر بين كبلات المحرك و Roboclaw. ملاحظة: إذا قمت بذلك ، فستلاحظ أن الطول الإجمالي للكابل طويل جدًا. لكنني لم أرغب في قطع أي شيء إذا لم أكن بحاجة إلى ذلك. لقد واجهت (للخطوات اللاحقة) مشكلات في الاتصال مع USB بين Raspberry و Arduino ، ربما بسبب ضوضاء EMI.. لكنني عملت على حل ذلك مع البرنامج.

إذا أصبحت مشكلة ، يمكنك قطع الأسلاك - يمكنك أيضًا شراء درع معدني (من Amazon ، قطر 1 بوصة).

آخر شيء: هذا ما لم أفعله بعد - أن يكون لدي Roboclaw التكوين التلقائي أو الضبط التلقائي (باستخدام برامج التشفير) بحيث يتحرك كل من محركات الجانب الأيمن والأيسر بنفس السرعة ويسير الروبوت في خط مستقيم.

ينحني المنجم قليلاً جدًا لما يزيد عن 12 قدمًا ولكن ليس بدرجة كافية لدرجة أنني شعرت بالحاجة إلى فعل أي شيء حيال ذلك.

الخطوة 3: إضافة Arduino وبرمجته

ستحتاج إلى قابس برميل وبعض الأسلاك وأيضًا كبل USB. تأكد من حصولك على الموصل الصحيح لموصل Arduino.

ستحتاج إلى تنزيل Arduino IDE.

يوجد هنا في Github أحدث رسم تخطيطي يتعامل مع قيادة الروبوت:

github.com/elicorrales/wallace.robot.ardui…

ستقوم بتوصيل Arduino بجهاز الكمبيوتر الخاص بك الذي يقوم بتشغيل IDE ، وبناءً على كيفية كتابة المخطط ، ستستخدم الدبابيس 10 و 11 على Arduino للاتصالات التسلسلية (Software Serial) مع Roboclaw.

لقد قمت بتطوير بروتوكول اتصالات بسيط بين Raspberry Pi و Arduino.

إنه يعتمد على أحرف ASCII ، مما يجعل من السهل تصحيح الأخطاء والاختبار فقط باستخدام نافذة "الشاشة التسلسلية" الخاصة بـ Arduino IDE.

تبدأ الأوامر من الرقم "0" (صفر) ثم تصعد حسب الحاجة

الأوامر التي تبدأ في "20" هي أوامر Roboclaw مباشرة ، والأوامر التي تقل عن هذا الرقم هي أوامر مرتبطة بـ Arduino بشكل صارم.

نظرًا لضوضاء EMI ، قمت بتحسين سلسلة الأوامر لتشمل المجموع الاختباري.

لذا ، فإن أي سلسلة ستتضمن:

# عدد الرموز المميزة في السلسلة بما في ذلك هذا الرمز

المجموع الاختباري

على سبيل المثال ، لنفترض أنك تريد أن يستجيب Arduino بقائمة الأوامر الخاصة به:

4 0 12 16

"4" هو أربعة رموز في السلسلة.

"0" هو أمر MENU.

"12" هو الرقم العشوائي الذي اخترته.

"16" هو مجموع 4 + 0 + 12.

قد يكون أمر MENU نفسه مختلفًا:

4 0 20 24

لأنني اخترت رقمًا عشوائيًا مختلفًا ، فإن المجموع الاختباري مختلف أيضًا.

على سبيل المثال ، لنفترض أنك تريد المضي قدمًا بسرعة 100٪:

5 29 0 134 100

"5" خمسة رموز

"29" الأمر إلى الأمام

"0" الرقم العشوائي

"134" المجموع الاختباري

"100" المعلمة 1 (السرعة في هذه الحالة)

إذا لم يتمكن Arduino من التحقق من هذه السلسلة الواردة ، فإنه يسقطها / يتجاهلها فقط ، ولا يوجد استجابة.

إذا لم يتلق Arduino أمر الحركة التالي مع X مللي ثانية ، فإنه يرسل محركات STOP إلى Roboclaw.

يبدأ Arduino في العمل ويبدأ في إرسال حالة تلقائية إلى منفذ USB … ما لم يُطلب منك التوقف عن القيام بذلك.

في هذه المرحلة ، يجب أن تكون مستعدًا لمحاولة التحكم في Roboclaw ومشاهدة دوران المحركات ، فقط باستخدام "Serial Monitor" في IDE.

الخطوة 4: إضافة Raspberry Pi وبرمجته (node.js)

مرة أخرى ، إذا ألقيت نظرة على قائمة تشغيل Robotics الخاصة بي ، حتى من البداية ، فقد تجاوزت كل خطوة لإعداد Raspberry وتشغيله.

الشيء الوحيد الذي قد أتخلى عنه هو أنك ستحتاج إلى منظم 5V ، وإما أن تقوم بطريقة ما بإنشاء أو قطع / تعديل كبل USB من أجله ، أو تشغيل Raspberry بطريقة أخرى.

هنا في Github هو كل ما تحتاجه في Raspberry للتواصل مع Arduino عبر USB.

github.com/elicorrales/wallace.robot.raspb…

حتى أن هناك نصوص اختبار.

يمكنك إلقاء نظرة على كود خادم node.js وسترى كيف يقوم Raspberry بتحويل التعليمات الرقمية المقتضبة ، إلى سلاسل url من نوع REST. يمكنك استخدام "curl" لإرسال أوامر الاختبار.

مثال:

عنوان IP الخاص بـ RP3: 8084 / arduino / api / forward / 50

سوف يتسبب في قيام المحركات بتدوير العجلات للأمام مؤقتًا.

إذا وضعت ذلك في حلقة نصية للقذيفة ، فسترى أن العجلات تستمر في الدوران.

يشتمل كود node.js (server.js) على ميزة إعادة الاتصال في حالة فقد الأوامر التسلسلية في Arduino. يمكنك اختبار ذلك بمجرد فصل Arduino عن Raspberry وإعادة توصيله.

تأكد من مطابقة معدل البث بالباود التسلسلي بين الاثنين.

نظرًا لإسقاط Arduino لحزم بيانات سيئة ، ولأنه على مستوى node.js وعلى مستوى جافا سكريبت في المتصفح ، يتم تشفير كل شيء لإرسال العديد من أوامر "محرك الأقراص" ، فقد تمكنت من تشغيل ما يصل إلى 200000 باود (2 ميجابت في الثانية).

إذا حصلت على نصوص الاختبار قيد التشغيل ورأيت العجلات تدور ، فأنت جاهز للخطوة التالية.

الخطوة 5: الخطوة النهائية - البرمجة / استخدام عميل صفحة الويب

يتم تضمين ملفات العميل في رابط Github لجزء Raspberry من كل هذا.

index.html. index.js. p5.min.js.

يتعاملون مع USB Gamepad عبر Gamepad API (المستندة إلى المستعرض) ويجب أن تشاهد الأزرار المختلفة وشرائح التمرير المتوفرة أيضًا على صفحة الويب.

تستعلم شفرة جافا سكريبت (استقصاءات) عن قيم المحور X و Y لأحد أذرع التحكم.. (اعتمادًا على ذراع التحكم / لوحة الألعاب لديك ، قد تضطر إلى تعديل الكود). يستقصي بسرعة كبيرة ، ويطلق كل هذه القيم إلى خادم node.js الذي يستمع عند 8084.

تتراوح قيم المحور X و Y الخام لأذرع التحكم بين 0 و 1.

لكن وظيفة مكتبة وحدة التحكم في محرك Roboclaw المستخدمة في Arduino لقيادة المحركات ، تتوقع قيمة بين -100 إلى 0 (للخلف) أو (0 إلى 100) للأمام.

سو …. هذا هو الغرض من تضمين ملف p5.min.js. يحدث فقط أن يكون لديك وظيفة الخريطة () الرائعة والمريحة للغاية حيث تمنحها القيمة الأولية ، وهي النطاق الخام (الحالي) ، والنطاق الجديد المطلوب. ويقوم بتحويل القيمة الأولية إلى قيمة في النطاق المعين الجديد.

نقطة أخرى: عند سرعة 100 ، يمكن أن يكون الروبوت صعبًا للغاية. كنت أصادف شيئًا ما باستمرار. ولكن حتى عندما تتحسن في ذلك ، لا يزال الأمر حساسًا عند الدوران إلى اليسار أو اليمين.

شيء ما تضيفه سيكون مشابهًا لمنزلق Max Speed الحالي على صفحة الويب. يحدد شريط التمرير هذا أعلى أو أقصى قيمة ستقوم بتعيين أذرع التحكم Xs و Ys لها.

مثال:

لنفترض أنك تقوم بتعيين 0 -> 1 إلى 0 -> 100. عندما تضغط على عصا التحكم بنقطة توقف كاملة ، تكون عند 100. حساس. قد تكون سريعة جدا.

ولكن ، إذا قمت بتحريك منزلق Max Speed للخلف قليلاً ، فأنت الآن تقوم بتعيين 0 -> 1 إلى 0 -> 80 أو 70.

هذا يعني أن لديك مساحة أكبر لتحريك عصا التحكم الخاصة بك دون مثل هذا التغيير الكبير في السرعة التي يتم إرسالها إلى node.js (وإلى Arduino).

بالإضافة إلى ذلك ، يمكنك فصل Xs (استدارة لليسار أو لليمين) عن Y (للأمام أو للخلف) في السرعات القصوى المتاحة.

وبالتالي ، يمكنك ترك Y عند 0 إلى 100 ، ومن 0 إلى -100 لحركة خطية سريعة ، ولكن يمكنك خفض السرعة القصوى لـ Xs لمزيد من التحكم في الحركة الدورانية. أفضل ما في العالمين.

الخطوة 6: اختياري: قيادة الروبوت باستخدام سحب الماوس و / أو أحداث اللمس

إذا وصلت إلى هذا الحد ، فأنت تعلم أن طبقات البرامج التي تبدأ من المتصفح والتنقل لأسفل عبر Javascript ثم إلى خادم Raspberry node.js ، وأخيراً إلى arduino ، تقوم بتحويل إحداثيات Gamepad joystick X- و Y- إلى " أوامر إلى الأمام "(أو" للخلف "، إلخ) (وقيمة سرعتها).

علاوة على ذلك ، أنت تعلم أنه في حين أن Xs و Ys لعصا التحكم هي سالب 1 ، عبر الصفر ، إلى زائد 1 ، يجب تحويلها بين صفر و 100. حسنًا ، يعتمد الحد الأقصى على إعداد السرعة القصوى على صفحة الويب.

سو … الشيء الوحيد الذي يجب فعله لاستخدام الماوس أو أحداث اللمس (كما هو الحال في الهاتف الذكي) ، هو التقاط تلك الأحداث والاستيلاء على Xs و Ys.

BUT ---- هذه Xs و Y ليست بين سالب 1 و 1. فهي تبدأ من 0 وتزيد بشكل إيجابي ، لأنها في الأساس وحدات البكسل أو إحداثيات الشاشة النسبية لبعض عناصر HTML (مثل لوحة التمهيد) أو لوحة قماشية.

لذا هناك مرة أخرى ، وظيفة "map ()" لمكتبة P5's Js سهلة للغاية لإعادة التعيين إلى ما نحتاج إليه.

أعدت صياغة الكود ليكون له صفحتان ويب مختلفتان ، واحدة لسطح المكتب باستخدام Gamepad ، وأخرى للجوال ، باستخدام أحداث اللمس.

أيضًا ، بمجرد إعادة تعيين Xs و Ys ، يتم إدخالهما في نفس سلسلة التعليمات البرمجية ، إلخ ، مثل Xs و Ys من Gamepad.

موصى به: