Skip to main content

Soutěžní spojení: Bod zlomu - C++

Soutěžní pole v robotice Turning Point VEX s herními prvky a bodovacími zónami ve startovních pozicích pro začátek zápasu. Podél zadní stěny je síť s řadou výklopných vlaječek před ní.
VRC 2018-2019 Turning Point Field

Schopnosti robotů

Hra Turning Point ze soutěže VEX Robotics Competition z let 2018–2019 vyžadovala od hráčů mimo jiné přepínání vlaječek. Celkem bylo devět vlajek: tři spodní, které mohl robot přepínat, a šest horních vlajek, které bylo možné přepínat pouze údery herními figurkami. Soutěžní týmy musely vymyslet způsob, jak zasáhnout vyšší vlajky pomocí vrhače míčů. Dovedete si představit, že programování robota tak, aby zasahoval vlajky pomocí figurek na hrací ploše měřením, nemusí být vždy přesné. Pokud robot během autonomního období udělá jednu špatnou odbočku, existuje možnost, že žádný z praporků nebude zasažen, protože výpočty budou chybné. Podobně i v případě výzvy Řidičské dovednosti může být pro týmy obtížné ručně zarovnat robota dostatečně do správné polohy, aby mohl správně odpálit míč. Zkušené týmy by tedy naprogramovaly robota pomocí vizuální senzoru k detekci vlaječek a následnému správnému zarovnání robota, aby mohl pořizovat přesné záběry.

Ikona Rozšiřte si učení Rozšiřte si své znalosti

Pro rozšíření této aktivity požádejte studenty, aby navrhli a načrtli projekt, v němž se robot bude pohybovat směrem k detekovaným žlutým objektům, které by mohli potenciálně použít v této soutěžní hře!
Požádejte studenty, aby udělali následující:

  • Otevřete ukázkový projekt Clawbot (pohon, 2 motory, bez gyroskopu).

    Ikona projektu šablony dole zní „Clawbot Drivetrain, No Gyro“ (Pohon Clawbot, bez gyroskopu) a nad ní je šedý diagram robota, který ukazuje, který projekt je třeba vybrat.

     

  • Při programování kamerového senzoru ( ) použijte jako referenci ukázkový projekt Detekce objektů (Vision).
  • Přidejte vizuální senzor do konfigurace Clawbota (pohon, 2 motory, bez gyroskopu) a poté nakonfigurujte vizuální senzor pro detekci červených a modrých objektů. Kliknětepro více informací.

    Okno VEXcode V5 Devices je otevřené a výběr možnosti Přidat zařízení zobrazuje kamerový senzor zvýrazněný v červeném rámečku na levé straně. Mezi další možnosti patří řídicí jednotka, hnací ústrojí, motor a 3vodičové zapojení.

  • Naprogramujte Clawbota tak, aby se pohyboval směrem k detekovanému objektu. Clawbota lze dokonce naprogramovat tak, aby zvedl ruku, jako by přepínal vlajku!
  • Stáhněte a spusťte (v jazyceC++) projekt, abyste zjistili, zda vizuální senzor dokáže detekovat žluté objekty, jako například žluté míčky ve hře VRC Turning Point. Pokud dokáže vizuální senzor detekovat objekty, pohybuje se robot na základě těchto detekovaných objektů? Pro pomoc si prohlédněte výukové video Stažení a spuštění projektu.
  • Pokud to čas dovolí, připravte herní pole podobné hřišti Turning Point. Procvičte si používání vizuální senzoru, aby se robot mohl pohybovat a získávat body!

Podívejte se na ukázkové řešení níže:

// Zahrnutí knihovny V5
#include "vex.h"
  
// Umožňuje snadnější použití knihovny VEX
pomocí jmenného prostoru 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(vpřed, 300, stupňů);
    ClawMotor.spinFor(vpřed, 100, stupňů);
    Drivetrain.driveFor(vpřed, 12, palců);
    ArmMotor.spinFor(reverse, 300, stupňů);
    ClawMotor.spinFor(vzad, 100, stupňů);
  }
  else {
    Brain.Screen.print("Žádný červený objekt")
  }
}

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(vpřed, 90, stupňů);
    ClawMotor.spinFor(vpřed, 90, stupňů);
    Drivetrain.driveFor(vpřed, 12, palců);
    ArmMotor.spinFor(vzad, 90, stupňů);
    ClawMotor.spinFor(vzad, 90, stupňů);
  }
  else {
    Brain.Screen.print("Žádný modrý objekt")
  }
}

int main() {
  // Inicializace konfigurace robota. NEODSTRAŇUJTE!
  vexcodeInit();
  // registrace obslužných rutin událostí
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // neustále kontroluje nová data ze senzorů
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, sekundy);
  }
}