การเชื่อมต่อการแข่งขัน: จุดเปลี่ยน - C++
ความสามารถของหุ่นยนต์
เกมการแข่งขันหุ่นยนต์ VEX Robotics Turning Point ปี 2018 - 2019 กำหนดให้ผู้เล่นต้องสลับธงและองค์ประกอบอื่นๆ ของเกม มีธงทั้งหมด 9 อัน: ธงด้านล่าง 3 อันที่หุ่นยนต์สามารถสลับได้ และธงด้านบน 6 อันที่สลับได้โดยการตีด้วยชิ้นลูกบอลเกมแข่งขันเท่านั้น ทีมแข่งขันต้องคิดหาวิธีที่จะตีธงที่สูงโดยใช้เครื่องยิงลูกบอล หากคุณสามารถนึกภาพได้ การตั้งโปรแกรมหุ่นยนต์ให้ตีธงโดยใช้ชิ้นส่วนของเกมลูกบอลโดยการวัดอาจไม่แม่นยำเสมอไป หากหุ่นยนต์เลี้ยวผิดครั้งหนึ่งในช่วงระยะเวลาการทำงานอัตโนมัติ มีความเป็นไปได้ที่ธงทุกอันจะไม่โดนกระทบ เนื่องจากการคำนวณจะผิดพลาด ในทำนองเดียวกัน สำหรับความท้าทายทักษะการขับขี่ อาจเป็นเรื่องยากสำหรับทีมที่จะจัดตำแหน่งหุ่นยนต์ด้วยตนเองให้เพียงพอที่จะปล่อยลูกบอลได้อย่างถูกต้อง ด้วยเหตุนี้ ทีมงานที่มีทักษะจะเขียนโปรแกรมหุ่นยนต์โดยใช้เซ็นเซอร์วิชั่นเพื่อตรวจจับธง จากนั้นจึงจัดตำแหน่งหุ่นยนต์ให้เหมาะสมเพื่อให้ยิงได้แม่นยำ
ขยายการเรียนรู้ของคุณ
เพื่อขยายขอบเขตของกิจกรรมนี้ ให้ขอให้นักเรียนของคุณออกแบบและร่างโครงร่างโครงการที่จะให้หุ่นยนต์เคลื่อนที่ไปหาสิ่งของสีเหลืองที่ตรวจพบ ซึ่งอาจใช้สำหรับเกมการแข่งขันนี้ได้!
ขอให้นักเรียนของคุณทำสิ่งต่อไปนี้:
-
เปิดโครงการตัวอย่าง Clawbot (ระบบส่งกำลัง, มอเตอร์ 2 ตัว, ไม่มีไจโร)
- ใช้โครงการตัวอย่างการตรวจจับวัตถุ (วิสัยทัศน์) เป็นข้อมูลอ้างอิงเมื่อทำการเขียนโปรแกรมเซ็นเซอร์วิสัยทัศน์ (Google Doc / .v5cpp)
-
เพิ่มเซ็นเซอร์วิชั่นลงในการกำหนดค่า Clawbot (ระบบส่งกำลัง, มอเตอร์ 2 ตัว, ไม่มีไจโร) จากนั้นกำหนดค่าเซ็นเซอร์วิชั่นเพื่อตรวจจับวัตถุสีแดงและสีน้ำเงิน คลิก ที่นี่ เพื่อดูข้อมูลเพิ่มเติม
- ตั้งโปรแกรมให้ 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);
}
}