Μετάβαση στο κύριο περιεχόμενο

Σύνδεση Ανταγωνισμού: Σημείο Καμπής - C++

Σημείο καμπής: Διαγωνιστικός χώρος ρομποτικής VEX με στοιχεία παιχνιδιού και περιοχές βαθμολόγησης στις αρχικές θέσεις για την έναρξη του αγώνα. Κατά μήκος του πίσω τοίχου υπάρχει ένα δίχτυ με μια σειρά από αναδιπλούμενες σημαίες μπροστά του.
VRC 2018-2019 Πεδίο Σημείου Καμπής

Δυνατότητες ρομπότ

Το παιχνίδι Turning Point του διαγωνισμού VEX Robotics 2018 - 2019 απαιτούσε από τους παίκτες να εναλλάσσουν σημαίες μεταξύ άλλων στοιχείων του παιχνιδιού. Υπήρχαν συνολικά εννέα σημαίες: τρεις κάτω σημαίες που μπορούσαν να εναλλάσσονται από το ρομπότ και οι έξι ψηλές σημαίες που μπορούσαν να εναλλάσσονται μόνο χτυπώντας τες με πιόνια αγωνιστικής μπάλας. Οι ομάδες του αγώνα έπρεπε να βρουν έναν τρόπο να χτυπήσουν τις υψηλότερες σημαίες χρησιμοποιώντας έναν εκτοξευτή μπάλας. Αν μπορείτε να φανταστείτε, ο προγραμματισμός του ρομπότ να χτυπάει τις σημαίες χρησιμοποιώντας πιόνια παιχνιδιού μετρώντας μπορεί να μην είναι πάντα ακριβής. Εάν το ρομπότ κάνει μία λάθος στροφή κατά τη διάρκεια της αυτόνομης περιόδου, υπάρχει πιθανότητα να μην χτυπήσει καμία από τις σημαίες επειδή οι υπολογισμοί θα είναι λανθασμένοι. Ομοίως, για την πρόκληση Δεξιοτήτων Οδήγησης, μπορεί να είναι δύσκολο για τις ομάδες να ευθυγραμμίσουν χειροκίνητα το ρομπότ αρκετά ώστε να εκτοξεύσει σωστά την μπάλα. Έτσι, έμπειρες ομάδες θα προγραμματίσουν το ρομπότ χρησιμοποιώντας τον αισθητήρα όρασης για την ανίχνευση σημαιών και στη συνέχεια θα ευθυγραμμίσουν το ρομπότ σωστά προκειμένου να πραγματοποιούν ακριβείς βολές.

Εικονίδιο "Επεκτείνετε τη Μάθησή σας" Επεκτείνετε τη Μάθησή σας

Για να επεκτείνετε αυτήν τη δραστηριότητα, ζητήστε από τους μαθητές σας να σχεδιάσουν και να περιγράψουν ένα έργο που θα κάνει το ρομπότ να κινηθεί προς ανιχνευμένα κίτρινα αντικείμενα που θα μπορούσαν ενδεχομένως να χρησιμοποιήσουν για αυτό το διαγωνιστικό παιχνίδι!
Ζητήστε από τους μαθητές σας να κάνουν τα εξής:

  • Ανοίξτε το παράδειγμα έργου Clawbot (Σύστημα μετάδοσης κίνησης, 2 κινητήρες, χωρίς γυροσκόπιο).

    Το εικονίδιο προτύπου έργου γράφει Clawbot Drivetrain, No Gyro στο κάτω μέρος με ένα γκρι διάγραμμα ενός ρομπότ από πάνω, που υποδεικνύει ποιο έργο να επιλέξετε.

     

  • Χρησιμοποιήστε το παράδειγμα έργου Ανίχνευση αντικειμένων (Όραση) ως αναφορά κατά τον προγραμματισμό του αισθητήρα όρασης (Google Doc / .v5cpp).
  • Προσθέστε τον Αισθητήρα Όρασης στη διαμόρφωση Clawbot (Σύστημα μετάδοσης κίνησης, 2 κινητήρες, Χωρίς Γυροσκόπιο) και, στη συνέχεια, διαμορφώστε τον Αισθητήρα Όρασης για να ανιχνεύει κόκκινα και μπλε αντικείμενα. Κάντε κλικεδώγια περισσότερες πληροφορίες.

    Το παράθυρο Συσκευές VEXcode V5 είναι ανοιχτό και η επιλογή για Προσθήκη συσκευής εμφανίζει τον Αισθητήρα Όρασης επισημασμένο σε ένα κόκκινο πλαίσιο στην αριστερή πλευρά. Άλλες επιλογές περιλαμβάνουν ελεγκτή, σύστημα μετάδοσης κίνησης, κινητήρα και 3 καλώδια.

  • Προγραμματίστε το Clawbot να κινηθεί προς το ανιχνευμένο αντικείμενο. Το Clawbot μπορεί ακόμη και να προγραμματιστεί να σηκώνει το χέρι του σαν να επρόκειτο να αλλάξει μια σημαία!
  • Κατεβάστε και εκτελέστε (σεC++) το έργο για να παρατηρήσετε εάν ο Αισθητήρας Όρασης μπορεί να ανιχνεύσει κίτρινα αντικείμενα όπως οι κίτρινες μπάλες στο παιχνίδι VRC Turning Point. Εάν ο αισθητήρας όρασης μπορεί να ανιχνεύσει αντικείμενα, κινείται το ρομπότ με βάση αυτά τα ανιχνευόμενα αντικείμενα; Για βοήθεια, δείτε το εκπαιδευτικό βίντεο "Λήψη και εκτέλεση ενός έργου".
  • Αν ο χρόνος το επιτρέπει, δημιουργήστε ένα γήπεδο παιχνιδιού παρόμοιο με το πεδίο Turning Point. Εξασκηθείτε χρησιμοποιώντας τον Αισθητήρα Όρασης για να επιτρέψετε στο ρομπότ να κινηθεί για να κερδίσει πόντους!

Δείτε το δείγμα λύσης παρακάτω:

// Συμπερίληψη της Βιβλιοθήκης V5
#include "vex.h"
  
// Επιτρέπει την ευκολότερη χρήση της Βιβλιοθήκης VEX
χρησιμοποιώντας τον χώρο ονομάτων 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, μοίρες);
  }
  else {
    Brain.Screen.print("Χωρίς Κόκκινο Αντικείμενο")
  }
}

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, μοίρες);
    ClawMotor.spinFor(forward, 90, μοίρες);
    Drivetrain.driveFor(forward, 12, ίντσες);
    ArmMotor.spinFor(reverse, 90, μοίρες);
    ClawMotor.spinFor(reverse, 90, degrees);
  }
  else {
    Brain.Screen.print("Χωρίς Μπλε Αντικείμενο")
  }
}

int main() {
  // Αρχικοποίηση Ρύθμισης Ρομπότ. ΜΗΝ ΤΟ ΑΦΑΙΡΕΙΤΕ!
  vexcodeInit();
  // εγγραφή χειριστών συμβάντων
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // εκτελείται συνεχώς για έλεγχο για νέα δεδομένα αισθητήρα
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, δευτερόλεπτα);
  }
}