Robo Sumo: معارك الروبوت الذكية


( ج ) في

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

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

سنخبرك كيف أصبحت "معركة الروبوتات" منافسة فكرية للمبرمجين ، ونعطي تعليمات مفصلة لتجميع عازف السومو.

أجهزة استشعار بحث الحدود والعدو



( ج )

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

وقد تم تجهيز الروبوت بالعديد من أجهزة استشعار الأشعة تحت الحمراء المسؤولة عن "البحث" عن الحدود. تساعد المستشعرات الأمامية ، كقاعدة عامة ، على التحكم في سرعة الحركة - يجب ألا يترك المقاتل المجال بسبب الحماسة المفرطة. أجهزة الاستشعار الخلفية "تتبع" نهج حدود الحلقة: بعد تلقي استجابة منها ، يغير الروبوت الاتجاه.

وبقياس الوقت اللازم لعكس الأشعة ، يمكنك فهم موقع العدو. تغير العديد من الروبوتات (ولكن ليس كلها) الاتجاه ، بالنظر إلى هذه المعلمة.

قواعد المعركة



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

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

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

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

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

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

التسلح



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

في السومو البشري ، السلاح الرئيسي للمقاتل هو كتلته الرائعة. من الغريب ، في الكتلة ، تلعب الكتلة أيضًا "دورًا مهمًا".

على الرغم من حقيقة أنه ، وفقًا للقواعد ، لا يتجاوز طول الروبوت (على أي من الجانبين) 20 سم ، ويجب ألا يزيد الوزن عن 3 كجم ، يمكن لطبيب السومو "وزن" عدة عشرات من الكيلوجرامات. يتم تحقيق هذا "الوزن" من خلال المغناطيس. نعم ، في بعض الأحيان يمكن للتقنية أن "تلتصق" عمليًا بالأرض ، حيث أن الحلقة تعتمد على سطح معدني.

عقل الآلة


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

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

إنشاء الروبوت السومو



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

يتم استخدام المكونات التالية في المشروع:

  • CytronTechnologies × 1 وحدة تحكم ؛
  • مستشعر الأشعة تحت الحمراء (3-80 سم) × 5 ؛
  • مجموعة من عجلات السيليكون JSumo (52 × 30 مم) × 2 ؛
  • وحدة تتبع الأشعة تحت الحمراء × 2 ؛
  • محرك تروس DC (12 فولت ، 380 دورة في الدقيقة) × 4 ؛
  • بطارية LiPo (11.1 فولت ، 1300 مللي أمبير في الساعة) × 1.


1. تحكم


يمكنك استخدام Arduino Uno أو Mega أو Nano. ستحتاج أيضًا إلى لوحة لتوصيل جميع أجهزة الاستشعار. يمكنك بالطبع إنشاء بطاقة التوسيع الخاصة بك وتوصيل جميع جهات الاتصال بـ Arduino ، أو شراء بطاقة جاهزة وتوصيل جميع المكونات الإلكترونية.


2. المحرك


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

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

محرك أسطواني مع العتاد و العتاد الكواكب ، التي رمح الناتج موازية للمحرك.


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


بعجلتين مقابل أربع عجلات


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

3. العجلات



لا توجد خيارات كثيرة لمطاط جيد لروبوت السومو في السوق. اختار المهندسون عجلات السيليكون المصنعة من قبل Jsumo. ومع ذلك ، يمكنك استخدام عجلات من سيارة لعبة.

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

4. أجهزة الاستشعار



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

يوصي الخبراء ببدء هجوم عندما لا تزيد المسافة عن العدو عن 60 سم ، وبالتالي ، من الممكن وضع جهاز استشعار بمدى حساسية يصل إلى 1 متر.


لهذا الروبوت ، تم تركيب ثلاثة أجهزة استشعار بالأشعة تحت الحمراء - واحد لكل جانب.


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

5. البطارية



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

6. هيكل الروبوت


يمكنك استخدام القاعدة الجاهزة من Cytron ، والتي تناسب الحجم المسموح به للروبوت (20 × 20 سم) ، أو تجعله من الصفر بنفسك.


نظرًا لأن الطباعة ثلاثية الأبعاد أكثر اقتصادا ، فقد قام الغواص بمشاركة ملفات للطباعة المنزلية.


7. الجمعية


يقدم الرسم البياني والجدول أدناه نظرة عامة على التوصيلات السلكية لروبوت Sumo.



تحتاج أولاً إلى لحام سلكين (الحجم الموصى به هو 16-18 AWG) بطرف المحرك ، ثم توصيله بوحدة التحكم.


علاوة على ذلك ، يجب لحام جميع المحركات وأجهزة الاستشعار بالأسلاك.


ننتقل الآن إلى التجمع داخل القضية. استخدم مسامير M3x10 لتركيب المحركات على السكن السفلي.


قم بتركيب مستشعرات الأشعة تحت الحمراء على الجانب الأيمن والأيسر.


اربط حافة العجلة بمسمار M4 ، ثم ضعها على شريط السيليكون.

يجب تثبيت برغي التثبيت في الجزء المسطح من عمود المحرك الدائري.


ثم ، باستخدام برغي ذاتي التنصت ، قم بتثبيت مستشعر الحافة في الجزء السفلي من الشفرة.


في الجزء الأمامي من الغلاف السفلي ، سترى فتحتين مخصصتين لوضع أسلاك أجهزة استشعار الحافة.


قم بتجميع الشفرة بغلاف سفلي باستخدام مسامير وصواميل M6x20.


قم بتثبيت مستشعرات الأشعة تحت الحمراء على الحامل الأمامي قبل توصيله بالحالة السفلية.


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


إصلاح دعم الدعم للوحة الدائرة.


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


نظرًا لأن هذا روبوت للدفع الرباعي ، يجب توصيل محركين على جانب واحد للتحكم فيهما في وقت واحد.


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


أخيرًا ، قم بتوصيل البطارية.


روبوت السومو جاهز!

8. معايرة المستشعر


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

تأكد من أن المستشعرات تعمل ضمن نطاق الحساسية المطلوب.

يبلغ الحد الأقصى لحساسية جهاز استشعار بحث العدو 80 سم. في هذا المشروع ، يجب ألا يستجيب الروبوت لكائن موجود على مسافة 60-80 سم ، وبالتالي يتم تقليل نطاق الحساسية بمقدار 20 سم.


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


يتم ضبط مستشعرات الحافة باستخدام مفك البراغي من خلال الثقب في الشفرة.

باستخدام البرنامج ، يمكنك عرض إشارات جهازي استشعار على LEDs D0 و D1.


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

9. البرمجة


نظرًا لأن جهاز التحكم في الروبوت URC10 متوافق مع Arduino UNO ، يتم استخدام Arduino IDE للبرمجة. يمكنك أخذ مثال رمز جاهز .

المكتبة الوحيدة المستخدمة في المشروع هي CytronMotorDrivers .

إذا كنت لا تعرف كيفية تمكين المكتبة أو تنزيل نموذج التعليمات البرمجية ، فراجع دليل URC10 .

يمكن تقسيم برنامج روبوت السومو بشكل أساسي إلى أربعة أجزاء:

  • بداية الأداء
  • بحث؛
  • هجوم؛
  • تراجع.

void loop() {
  //   .
  if (!digitalRead(EDGE_L)) {
    //     .
    backoff(RIGHT);
 
    //   .
    searchDir ^= 1;
  }
 
  //   .
  else if (!digitalRead(EDGE_R)) {
    //     .
    backoff(LEFT);
 
    //   .
    searchDir ^= 1;
  }
 
  //   .
  else {
    //  ,    .
    if ( digitalRead(OPPONENT_FC) &&
         digitalRead(OPPONENT_FL) &&
         digitalRead(OPPONENT_FR) &&
         digitalRead(OPPONENT_L) &&
         digitalRead(OPPONENT_R) ) {
      search();
    }
 
    // ,      .
    else {
      attack();
    }
  }
 
 
  //     .
  if (!digitalRead(BUTTON)) {
    //  .
    motorL.setSpeed(0);
    motorR.setSpeed(0);
 
    // .
    while (1);
  }
}

بداية الأداء


تعتمد استراتيجية البداية على قواعد المنافسة. يمكن للروبوت البدء في التحرك فقط بعد 5 ثوانٍ ، وأحيانًا في ثانية واحدة.

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

في هذا المثال ، تمت برمجة الروبوت للتحرك ومهاجمة الخصم من الجانب بمجرد بدء اللعبة.

void startRoutine() {
  // .
  delay(1000);
 
  //    45 .
  motorL.setSpeed(255);
  motorR.setSpeed(0);
  delay(180);
 
  //  .
  motorL.setSpeed(255);
  motorR.setSpeed(255);
  delay(450);
 
  //  ,     .
  motorL.setSpeed(-0);
  motorR.setSpeed(255);
  uint32_t startTimestamp = millis();
  while (digitalRead(OPPONENT_FC)) {
    // ,        .
    if (millis() - startTimestamp > 400) {
      break;
    }
  }
 
}


بحث


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

void search() {
  //   .
  if (searchDir == LEFT) {
    motorL.setSpeed(100);
    motorR.setSpeed(255);
  } else {
    motorL.setSpeed(255);
    motorR.setSpeed(100);
  }
}


هجوم


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

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

void attack() {
  uint32_t attackTimestamp = millis();
  //    .
  //     .
  if (!digitalRead(OPPONENT_FC)) {
    motorL.setSpeed(255);
    motorR.setSpeed(255);
  }
 
  //   .
  //  .
  else if (!digitalRead(OPPONENT_FL)) {
    motorL.setSpeed(0);
    motorR.setSpeed(255);
  }
 
  //   .
  //  .
  else if (!digitalRead(OPPONENT_FR)) {
    motorL.setSpeed(255);
    motorR.setSpeed(0);
  }
 
  //   .
  //     ,     .
  else if (!digitalRead(OPPONENT_L)) {
    motorL.setSpeed(-150);
    motorR.setSpeed(150);
    while (digitalRead(OPPONENT_FC)) {
      // ,    .
      if (millis() - attackTimestamp > 400) {
        break;
      }
    }
  }
 
  //   .
  //     ,     .
  else if (digitalRead(OPPONENT_R) == 0) {
    motorL.setSpeed(150);
    motorR.setSpeed(-150);
    while (digitalRead(OPPONENT_FC)) {
      // ,    .
      if (millis() - attackTimestamp > 400) {
        break;
      }
    }
  }
}


تراجع


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

void backoff(uint8_t dir) {
  //  .
  motorL.setSpeed(0);
  motorR.setSpeed(0);
  delay(100);
 
  // .
  motorL.setSpeed(-255);
  motorR.setSpeed(-255);
  delay(200);
 
  //  .
  motorL.setSpeed(0);
  motorR.setSpeed(0);
  delay(100);
 
  // .
  if (dir == LEFT) {
    motorL.setSpeed(-150);
    motorR.setSpeed(150);
  } else {
    motorL.setSpeed(150);
    motorR.setSpeed(-150);
  }
  delay(100);
 
  //   
  //  -   .
  uint32_t uTurnTimestamp = millis();
  while (millis() - uTurnTimestamp < 300) {
    //   ,     .
    if ( !digitalRead(OPPONENT_FC) ||
         !digitalRead(OPPONENT_FL) ||
         !digitalRead(OPPONENT_FR) ||
         !digitalRead(OPPONENT_L) ||
         !digitalRead(OPPONENT_R) ) {
      //  .
      motorL.setSpeed(0);
      motorR.setSpeed(0);
      delay(100);
 
      //    .
      return;
    }
  }
 
  //    ,         .
  motorL.setSpeed(255);
  motorR.setSpeed(255);
  delay(200);
}


هذا كل شئ. يمكنك الآن مشاهدة مقطع فيديو يوضح كيفية تحرك الروبوت من هذا الدرس.


هل لديك بالفعل خبرة في بناء روبوت لمسابقات مماثلة؟ شارك إستراتيجيات الفوز في التعليقات.

المصادر


تجميع روبوت DIY: https://www.hackster.io/cytron-technologies/building-a-sumo-robot-45d703

مسابقة روبوت السومو الوطنية لعموم اليابان: http://www.fsi.co.jp/sumo/en /index.html مجموعة القواعد

المصورة: http://www.robotroom.com/SumoRules.html

All Articles