Skip to main content
พอร์ทัลครู

การเชื่อมต่อการแข่งขัน: จุดเปลี่ยน - C++

สนามแข่งขันหุ่นยนต์ VEX จุดเปลี่ยน พร้อมองค์ประกอบของเกมและพื้นที่ทำคะแนนในตำแหน่งเริ่มต้นในช่วงเริ่มการแข่งขัน ตามผนังด้านหลังมีตาข่ายพร้อมธงที่สามารถพลิกกลับได้เรียงกันอยู่ด้านหน้า
VRC 2018-2019 สนามเทิร์นนิ่งพอยต์

ความสามารถของหุ่นยนต์

เกมการแข่งขันหุ่นยนต์ VEX Robotics Turning Point ปี 2018 - 2019 กำหนดให้ผู้เล่นต้องสลับธงและองค์ประกอบอื่นๆ ของเกม มีธงทั้งหมด 9 อัน: ธงด้านล่าง 3 อันที่หุ่นยนต์สามารถสลับได้ และธงด้านบน 6 อันที่สลับได้โดยการตีด้วยชิ้นลูกบอลเกมแข่งขันเท่านั้น ทีมแข่งขันต้องคิดหาวิธีที่จะตีธงที่สูงโดยใช้เครื่องยิงลูกบอล หากคุณสามารถนึกภาพได้ การตั้งโปรแกรมหุ่นยนต์ให้ตีธงโดยใช้ชิ้นส่วนของเกมลูกบอลโดยการวัดอาจไม่แม่นยำเสมอไป หากหุ่นยนต์เลี้ยวผิดครั้งหนึ่งในช่วงระยะเวลาการทำงานอัตโนมัติ มีความเป็นไปได้ที่ธงทุกอันจะไม่โดนกระทบ เนื่องจากการคำนวณจะผิดพลาด ในทำนองเดียวกัน สำหรับความท้าทายทักษะการขับขี่ อาจเป็นเรื่องยากสำหรับทีมที่จะจัดตำแหน่งหุ่นยนต์ด้วยตนเองให้เพียงพอที่จะปล่อยลูกบอลได้อย่างถูกต้อง ด้วยเหตุนี้ ทีมงานที่มีทักษะจะเขียนโปรแกรมหุ่นยนต์โดยใช้เซ็นเซอร์วิชั่นเพื่อตรวจจับธง จากนั้นจึงจัดตำแหน่งหุ่นยนต์ให้เหมาะสมเพื่อให้ยิงได้แม่นยำ

ไอคอนขยายการเรียนรู้ของคุณ ขยายการเรียนรู้ของคุณ

เพื่อขยายขอบเขตของกิจกรรมนี้ ให้ขอให้นักเรียนของคุณออกแบบและร่างโครงร่างโครงการที่จะให้หุ่นยนต์เคลื่อนที่ไปหาสิ่งของสีเหลืองที่ตรวจพบ ซึ่งอาจใช้สำหรับเกมการแข่งขันนี้ได้!
ขอให้นักเรียนของคุณทำสิ่งต่อไปนี้:

  • เปิดโครงการตัวอย่าง Clawbot (ระบบส่งกำลัง, มอเตอร์ 2 ตัว, ไม่มีไจโร)

    ไอคอนโครงการเทมเพลตมีข้อความว่า Clawbot Drivetrain, No Gyro ที่ด้านล่างพร้อมด้วยไดอะแกรมสีเทาของหุ่นยนต์ด้านบน ซึ่งระบุว่าจะต้องเลือกโครงการใด

     

  • ใช้โครงการตัวอย่างการตรวจจับวัตถุ (วิสัยทัศน์) เป็นข้อมูลอ้างอิงเมื่อทำการเขียนโปรแกรมเซ็นเซอร์วิสัยทัศน์ (Google Doc / .v5cpp)
  • เพิ่มเซ็นเซอร์วิชั่นลงในการกำหนดค่า Clawbot (ระบบส่งกำลัง, มอเตอร์ 2 ตัว, ไม่มีไจโร) จากนั้นกำหนดค่าเซ็นเซอร์วิชั่นเพื่อตรวจจับวัตถุสีแดงและสีน้ำเงิน คลิก ที่นี่ เพื่อดูข้อมูลเพิ่มเติม

    หน้าต่างอุปกรณ์ VEXcode V5 เปิดอยู่และการเลือกเพิ่มอุปกรณ์จะแสดงเซ็นเซอร์วิชั่นที่เน้นด้วยกล่องสีแดงทางด้านซ้าย ตัวเลือกอื่น ๆ ได้แก่ ตัวควบคุม ระบบส่งกำลัง มอเตอร์ และสาย 3 สาย

  • ตั้งโปรแกรมให้ Clawbot เคลื่อนที่ไปยังวัตถุที่ตรวจพบ Clawbot ยังสามารถตั้งโปรแกรมให้ยกแขนขึ้นได้เหมือนกับว่าจะสลับธง!
  • ดาวน์โหลดและรัน (ใน C++) โปรเจ็กต์เพื่อสังเกตว่า Vision Sensor สามารถตรวจจับวัตถุสีเหลือง เช่น ลูกบอลสีเหลืองในเกม VRC Turning Point ได้หรือไม่ หาก Vision Sensor สามารถตรวจจับวัตถุได้ หุ่นยนต์จะเคลื่อนที่ตามวัตถุที่ตรวจจับได้หรือไม่? หากต้องการความช่วยเหลือ โปรดดูวิดีโอการสอนการดาวน์โหลดและเรียกใช้โครงการ
  • หากมีเวลา ให้จัดสนามแข่งขันคล้ายกับสนาม Turning Point ฝึกฝนการใช้ Vision Sensor เพื่อให้หุ่นยนต์เคลื่อนที่เพื่อทำคะแนน!

ดูตัวอย่างโซลูชันด้านล่าง:

// Include the V5 Library
  #include "vex.h"
    
  // Allows for easier use of the VEX Library
  using namespace 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("No Red Object")
    }
  }
  
  void hasBlueCallback() {
    Brain.Screen.setFont(mono40);
    Brain.Screen.clearLine(3);
    Brain.Screen.setCursor(3, 1);
    Vision5.takeSnapshot(Vision5__BLUEBOX);
    if (Vision5.objectCount > 0) {
      ArmMotor.spinFor(forward, 90, degrees);
      ClawMotor.spinFor(forward, 90, degrees);
      Drivetrain.driveFor(forward, 12, inches);
      ArmMotor.spinFor(reverse, 90, degrees);
      ClawMotor.spinFor(reverse, 90, degrees);
    }
    else {
      Brain.Screen.print("No Blue Object")
    }
  }
  
  int main() {
    // Initializing Robot Configuration. DO NOT REMOVE!
    vexcodeInit();
    // register event handlers
    checkRed(hasRedCallback);
    checkBlue(hasBlueCallback);
  
    // constantly runs to check for new sensor data
    while (true) {
      checkRed.broadcastAndWait();
      checkBlue.broadcastAndWait();
      wait(0.2, seconds);
    }
  }