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 เพื่อให้หุ่นยนต์เคลื่อนที่เพื่อทำคะแนน!

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

// รวมไลบรารี V5
#include "vex.h"
  
// ช่วยให้ใช้ไลบรารี VEX
ได้ง่ายขึ้นโดยใช้เนมสเปซ vex;

เหตุการณ์ checkRed = 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(ไปข้างหน้า, 300, องศา);
    ClawMotor.spinFor(ไปข้างหน้า, 100, องศา);
    Drivetrain.driveFor(ไปข้างหน้า, 12, นิ้ว);
    ArmMotor.spinFor(ย้อนกลับ, 300, องศา);
    ClawMotor.spinFor(ย้อนกลับ, 100, องศา);
  }
  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(ไปข้างหน้า, 90, องศา);
    ClawMotor.spinFor(ไปข้างหน้า, 90, องศา);
    Drivetrain.driveFor(ไปข้างหน้า, 12, นิ้ว);
    ArmMotor.spinFor(ย้อนกลับ, 90, องศา);
    ClawMotor.spinFor(reverse, 90, degrees);
  }
  else {
    Brain.Screen.print("No Blue Object")
  }
}

int main() {
  // การกำหนดค่าการเริ่มต้นของหุ่นยนต์ ห้ามถอดออก!
  vexcodeInit();
  // ลงทะเบียนตัวจัดการเหตุการณ์
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // ทำงานอย่างต่อเนื่องเพื่อตรวจสอบข้อมูลเซ็นเซอร์ใหม่
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, seconds);
  }
}