Skip to main content

Kết nối cạnh tranh: Bước ngoặt - C++

Sân thi đấu Robot Turning Point VEX với các yếu tố trò chơi và khu vực ghi điểm ở vị trí bắt đầu trận đấu. Dọc theo bức tường phía sau là một tấm lưới với một loạt cờ có thể lật được ở phía trước.
VRC 2018-2019 Turning Point Field

Khả năng của Robot

Trò chơi Turning Point của Cuộc thi Robot VEX năm 2018 - 2019 yêu cầu người chơi phải chuyển đổi cờ giữa các yếu tố khác của trò chơi. Tổng cộng có chín lá cờ: ba lá cờ ở dưới cùng có thể được robot bật lên và sáu lá cờ ở trên cùng chỉ có thể bật lên bằng cách đập chúng bằng các mảnh bóng thi đấu. Các đội thi đấu cần tìm ra cách đánh vào những lá cờ cao hơn bằng cách sử dụng máy phóng bóng. Nếu bạn có thể tưởng tượng, việc lập trình robot đánh cờ bằng các mảnh bóng bằng cách đo lường có thể không phải lúc nào cũng chính xác. Nếu robot rẽ sai một lần trong thời gian tự động, có khả năng không có lá cờ nào bị đánh trúng vì các phép tính sẽ bị sai. Tương tự như vậy, đối với thử thách Kỹ năng lái xe, các đội có thể gặp khó khăn trong việc căn chỉnh robot theo cách thủ công để có thể phóng bóng đúng cách. Vì vậy, các nhóm có tay nghề cao sẽ lập trình cho robot sử dụng Cảm biến thị giác để phát hiện cờ và sau đó căn chỉnh robot đúng cách để thực hiện các cú đánh chính xác.

Biểu tượng Mở rộng việc học của bạn Mở rộng việc học của bạn

Để mở rộng hoạt động này, hãy yêu cầu học sinh thiết kế và phác thảo một dự án trong đó robot sẽ di chuyển về phía các vật thể màu vàng được phát hiện mà các em có thể sử dụng cho trò chơi thi đấu này!
Yêu cầu học sinh thực hiện các bước sau:

  • Mở dự án ví dụ Clawbot (Hệ thống truyền động, 2 động cơ, Không có con quay hồi chuyển).

    Biểu tượng dự án mẫu có nội dung Clawbot Drivetrain, No Gyro ở phía dưới cùng với sơ đồ màu xám của một robot ở phía trên, cho biết dự án nào cần chọn.

     

  • Sử dụng dự án ví dụ Phát hiện đối tượng (Tầm nhìn) làm tài liệu tham khảo khi lập trình Cảm biến tầm nhìn (Google Doc / .v5cpp).
  • Thêm Cảm biến thị giác vào cấu hình Clawbot (Hệ thống truyền động, 2 động cơ, Không có con quay hồi chuyển) rồi cấu hình Cảm biến thị giác để phát hiện các vật thể màu đỏ và xanh lam. Nhấp vàoở đâyđể biết thêm thông tin.

    Cửa sổ Thiết bị VEXcode V5 đang mở và lựa chọn Thêm thiết bị hiển thị Cảm biến thị giác được đánh dấu trong hộp màu đỏ ở phía bên trái. Các tùy chọn khác bao gồm Bộ điều khiển, Hệ thống truyền động, động cơ và 3 dây.

  • Lập trình Clawbot di chuyển về phía vật thể được phát hiện. Clawbot thậm chí có thể được lập trình để giơ cánh tay lên như thể nó đang lật một lá cờ!
  • Tải xuống và chạy (trongC++) dự án để quan sát xem Cảm biến thị giác có thể phát hiện các vật thể màu vàng như những quả bóng màu vàng trong trò chơi VRC Turning Point hay không. Nếu Cảm biến thị giác có thể phát hiện vật thể, liệu robot có di chuyển dựa trên những vật thể được phát hiện đó không? Để được trợ giúp, hãy xem video hướng dẫn Tải xuống và Chạy dự án.
  • Nếu có thời gian, hãy thiết lập một sân chơi tương tự như sân Turning Point. Thực hành sử dụng Cảm biến thị giác để cho phép robot di chuyển và ghi điểm!

Xem giải pháp mẫu bên dưới:

// Bao gồm Thư viện V5
#include "vex.h"
  
// Cho phép sử dụng Thư viện VEX dễ dàng hơn
bằng cách sử dụng không gian tên vex;

sự kiện checkRed = event();
sự kiện 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(hướng tới, 300, độ);
    ClawMotor.spinFor(hướng tới, 100, độ);
    Drivetrain.driveFor(hướng tới, 12, inch);
    ArmMotor.spinFor(hướng ngược, 300, độ);
    ClawMotor.spinFor(đảo ngược, 100, độ);
  }
  else {
    Brain.Screen.print("Không có đối tượng màu đỏ")
  }
}

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(tiến, 90, độ);
    ClawMotor.spinFor(tiến, 90, độ);
    Drivetrain.driveFor(tiến, 12, inch);
    ArmMotor.spinFor(đảo ngược, 90, độ);
    ClawMotor.spinFor(đảo ngược, 90, độ);
  }
  else {
    Brain.Screen.print("Không có đối tượng màu xanh")
  }
}

int main() {
  // Khởi tạo cấu hình robot. KHÔNG ĐƯỢC THÁO RA!
  vexcodeInit();
  // đăng ký trình xử lý sự kiện
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // liên tục chạy để kiểm tra dữ liệu cảm biến mới
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, seconds);
  }
}