Anpassad kontrollkod i VEXcode IQ

Att använda kontrollenheten kan göra det enklare att köra och flytta din robot för att slutföra en uppgift. Det finns dock begränsningar med att använda Drive-programmet, och beroende på din robotkonstruktion eller uppgiften kan du vilja ha olika kontroller. Genom att koda styrenheten kan du optimera den så att den passar din robot och den aktuella uppgiften bättre. Det finns flera sätt att koda regulatorn i VEXcode IQ. Var och en har sina fördelar och begränsningar, och vissa metoder är bättre lämpade för vissa situationer beroende på önskat resultat.

Den här artikeln går igenom tre olika alternativ för anpassad kodning av styrenheten i VEXcode IQ. Varje metod kommer att beskrivas med dess fördelar, begränsningar och ett exempel på användningsfall som kan hjälpa dig att välja en metod. I den här artikeln skapades alla visade kodexempel för Clawbot. Samma koncept skulle dock kunna tillämpas på många andra byggen som finns på builds.vex.com, och anpassade byggen.

Alternativ 1: Tilldela knappar i enhetskonfigurationen

Det här alternativet är utmärkt när du använder en standardversion, som en BaseBot eller Clawbot, och vill komma igång snabbt.

Med det här alternativet kan du tilldela motorer, en drivlina eller motorgrupper till knappar på styrenheten i enhetskonfigurationen. För mer information om hur man tilldelar knappar till kontrollenheten i enhetskonfigurationen, se den här artikeln.

VEXcode IQ-enheternas meny med visade styrenhetsalternativ. Diagrammet över knappkontrollerna visar att de två joystickarna driver roboten i en tankdrivningskonfiguration. E-axelns knappar styr en ArmMotorgrupp och R-axelns knappar styr en ClawMotor.

Sammanfattning av alternativ 1: Tilldela knappar i enhetskonfigurationen

Fördelar

Begränsningar

Exempelsituation

  • Snabb installation utan kodning
  • Enklaste metoden
  • Lätt justerbar
  • Kan tilldela enskilda motorer, en standarddrivlina och motorgrupper till knappar
  • Knapptilldelningar är begränsade till antalet knappar på kontrollenheten.
  • Drivlinan får inte överstiga 4 motorer eller vara anpassad (endast en standarddrivning stöds, inte en H-drivning, holonomisk eller annan anpassad drivlina)
  • Manipulera en standardversion som en BaseBot, Clawbot eller en enkel modifiering av dessa standardversioner. Till exempel en BaseBot med ett intag fäst på framsidan som styrs av en motorgrupp.
  • Manipulera vilka knappar som motsvarar olika beteenden på roboten snabbt utan mycket kodning

Alternativ 2: Använda en Forever Loop

Om du använder en anpassad version istället för en standardversion, eller vill kunna anpassa din kontrollenhet mer, är det här alternativet ett bra alternativ. Att använda en Forever-loop är en bra introduktion till att skapa anpassad kod för din Controller.

Det här alternativet placerar alla villkor för kontrollenheten och dess tillhörande knappar i en Forever-loop. Detta ger mer flexibilitet, särskilt med anpassade byggdesigner, men kräver också viss kodningserfarenhet. En faktor att beakta när man använder det här alternativet är dock projektets längd och komplexitet. Ju fler villkor som läggs till, desto längre kan kodstacken bli. Det här innebär att flera block måste exekveras i ordning, och när det finns många block kan detta sakta ner projektkörningen. Långsammare projektkörning kan skapa en fördröjning mellan att trycka på kontrollknapparna och att se robotens beteende.

Det specifika exemplet som visas nedan är ett sätt att använda en Forever-loop med en specialdesignad robot (till exempel en robot med en specialdesignad drivlina) för att driva roboten och manipulera klon och armen för att interagera med objekt.

VEXcode IQ-arbetsyta med Option 2-blockprojektet öppet. Projektet har en stapel med block och har konfigurerade enheter. Menyn Enheter öppnas på sidan och listar följande enheter: IQ 2:a generationens Brain, ClawMotor på port 4, ArmMotor på port 10, Controller, LeftMotor på port 1 och RightMotor på port 6. Slutligen finns det stapeln av block för att hantera regulatorns ingångar. Stacken läser När den startas, sätt ArmMotor stopping till hold och sätt ClawMotor stopping till hold. Resten av stacken finns i en Forever-loop. Den visar För alltid, ställ in vänstermotorns hastighet till regulator A-position %, snurra vänstermotorn framåt, ställ in högermotorns hastighet till regulator D-position % och snurra högermotorn framåt. Om sedan kontroller E upp trycks in, snurra ArmMotor upp, annars om kontroller E ner trycks in, snurra ArmMotor ner, annars stoppa ArmMotor. Slutligen, om kontroller F uppåt trycks in, snurra ClawMotorn upp, annars om kontroller F nedåt trycks in, snurra ClawMotorn stäng, och annars stoppa ClawMotorn.

Ladda ner projektfilen "Alternativ 2" för VEXcode IQ (2:a generationen) >

Anmärkning: Om du använder en första generationens Clawbot måste armmotorn reverseras i enhetskonfigurationen för att fungera som avsett i projektet ovan.

Förklaring av alternativ 2-kod.

Kodbit

Förklaring

Närbild av blockstapeln i VEXcode IQ-projektet med alternativ 2. Två block är markerade och ligger utanför stackens Forever-loop, de läser "set ArmMotor stopping to hold" och "set ClawMotor stopping to hold".

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

Närbild av blockstapeln i VEXcode IQ-projektet med alternativ 2. Fyra block är markerade inuti stackens Forever-slinga. De läser av För alltid, ställer in vänstermotorns hastighet till regulator A-position %, snurrar vänstermotorn framåt, ställer in högermotorns hastighet till regulator D-position % och snurrar högermotorn framåt. Diagram över IQ-kontrollen (2:a generationen) med dess knappar och joysticks märkta. Utsikten är från kontrollenhetens framsida. Den vänstra joystickens axlar är märkta A och B. Den vänstra joystickens mittknapp är märkt L3. De två runda knapparna under den vänstra joysticken är märkta E Upp och E Ner. Den högra joystickens axlar är märkta C och D. Den högra joystickens mittknapp är märkt R3. De två runda knapparna under den högra joysticken är märkta F Upp och F Ner.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

En Forever-slinga används för att kontinuerligt kontrollera vilka knappar som trycks ned på kontrollenheten.

Blocken [Ställ in motorhastighet] används för att ställa in motorhastigheten till den aktuella regulatorns position längs A- och D-axlarna. Detta motsvarar att sätta en bil i körläge. Det behöver inte nödvändigtvis få bilen att röra sig, det bara sätter igång den.

Varje joystickaxel returnerar ett värde mellan -100 och +100, och returnerar värdet noll när den är centrerad. Detta innebär då att joystickens axlar, när de trycks ned, motsvarar -100 % till 100 %. Ju längre mot 100 eller -100 axlarna trycks, desto snabbare snurrar motorn.

Blocket [Spin] används sedan för att faktiskt röra motorn. Detta motsvarar att gasa på bilen när riktningen har ställts in. Detta gör att varje motor kan styras av en av de fyra styrenhetens axlar.

Närbild av blockstapeln i VEXcode IQ-projektet med alternativ 2. Ett if, else if, else-block är markerat inuti stackens Forever-loop. Den läser om Controller E Upp trycks in, snurra ArmMotor upp, annars om Controller E Ner trycks in, snurra ArmMotor ner, och annars stoppa ArmMotor.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

Blocket [If then else if then else] används för att mappa vissa beteenden till knappar som trycks ned eller släpps på kontrollenheten. I det här kodexemplet är villkoren som ställs in om knapparna E Upp eller E Ner trycks ned. Om så är fallet kommer vissa beteenden att inträffa, som att höja och sänka armen. Det finns också den andra delen av villkoret, om ingen av knapparna trycks ner är armen inställd på att sluta röra sig.

Observera att följande kodavsnitt i projektet för Claw följer samma förklaring.

Sammanfattning av alternativ 2: Använda en Forever Loop

Fördelar

Begränsningar

Exempelsituation

  • Kan anpassas efter behov, särskilt drivlinor med fler än fyra motorer.
  • Kan tilldela flera beteenden till en enda knapp
  • Kan tilldela beteenden till olika axlar på kontrollenheten (i motsats till de enda alternativen Vänster Arkad, Höger Arkad, Delad Arkad och Tankdrift i Enhetskonfigurationen)
  • Kräver en viss mängd kodningskunskaper (villkorskommandon, loopar och kunskap om knappar/joysticks på handkontrollen)
  • Potential för långsammare projektkörning, eller fördröjd knappresponstid. Eftersom alla kommandon finns i en enda Forever-loop kan kodkörningen gå långsamt beroende på de inställda villkoren och kodens längd.
  • Använda styrenheten med en specialbyggd robot, särskilt med en icke-standardiserad drivlina
  • När man vill tilldela flera beteenden till en enda knapp. Till exempel, när F Upp-knappen trycks ner kan klon öppnas, köra framåt och sedan stängas runt ett föremål.

Alternativ 3: Använda händelser

Om du vill ha många anpassningsmöjligheter för din Controller är Använda Events det bästa alternativet för dig. Ett knapptryck kan utlösa flera robotbeteenden, som att trycka på en knapp för att öppna klon, höja armen och köra framåt ett visst avstånd. Att försöka koda flera beteenden per knapp inom en Forever-loop skulle göra att projektkörningen saktar ner dramatiskt – med hjälp av Events kan du göra detta mer effektivt.

Det här alternativet använder händelser för att dela upp projektflödet. Detta liknar att använda en Forever-loop, men gör att koden kan vara mer organiserad, så att knappkörningen har en snabbare svarstid. Snabbare svarstid innebär att du inte kommer att se någon fördröjning mellan att trycka på kontrollknapparna och att du ser robotens beteende. Det här exemplet visar samma beteenden som det föregående projektet, men utfört med hjälp av Events istället för Forever Loop.

VEXcode IQ-arbetsyta med Option 3-blockprojektet öppet. Projektet har 11 små staplar med block och konfigurerade enheter. Menyn Enheter öppnas på sidan och listar följande enheter: IQ 2:a generationens Brain, ClawMotor på port 4, ArmMotor på port 10, Controller, LeftMotor på port 1 och RightMotor på port 6. Slutligen finns det de 11 små staplarna med block som hanterar kontrollinmatning. Den första stacken läser När den startas, sätt ArmMotor stopping till hold och sätt sedan ClawMotor stopping till hold. Den andra stacken läser När regulatoraxel A ändras, ställ in vänstermotorns hastighet till regulator A-position % och snurra sedan vänstermotorn framåt. Den tredje stapeln läser När regulator D byts, ställ in högermotorns hastighet till regulator D-position % och snurra sedan högermotorn framåt. Den fjärde stapeln läser När kontrollknappen E uppåt trycks in, snurra upp ArmMotorn. Den femte stapeln läser När kontrollknappen E Upp släpps, stoppa ArmMotor. Den sjätte stapeln läser När kontrollknappen E nedtryckt, snurra ner ArmMotorn. Den sjunde stapeln läser När kontrollknappen E Down släpps, stoppa ArmMotor. Den åttonde stapeln läser När kontrollknappen F uppåt trycks in, snurra ClawMotor och öppna den. Den nionde stapeln läser När kontrollknappen F Upp släpps, stoppa ClawMotor. Den tionde stapeln läser När kontrollknapp F nedtryckt, snurra ClawMotor tills den är stängd. Den elfte och sista stapeln läser När kontrollknappen F Down släpps, stoppa ClawMotor.

Ladda ner projektfilen "Alternativ 3" för VEXcode IQ (2:a generationen) >

Anmärkning: Om du använder en första generationens Clawbot måste armmotorn reverseras i enhetskonfigurationen för att fungera som avsett i projektet ovan.

Förklaring av alternativ 3-kod.

Kodbit

Förklaring

Närbild av en stapel med block i VEXcode IQ-projektet med alternativ 3. Stacken läser När den startas, sätt ArmMotor stopping till hold och sätt sedan ClawMotor stopping till hold.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

Närbild av två staplar med block i VEXcode IQ-projektet med alternativ 3. Den första stapeln läser När regulatorns axel A ändras, ställ in vänster motorhastighet till regulator A-positionen % och snurra sedan vänster motor framåt. Den andra stacken läser När regulatorns axel D ändras, ställ in högermotorns hastighet till regulatorns D-position % och snurra sedan högermotorn framåt. Diagram över IQ-kontrollen (2:a generationen) med dess knappar och joysticks märkta. Utsikten är från kontrollenhetens framsida. Den vänstra joystickens axlar är märkta A och B. Den vänstra joystickens mittknapp är märkt L3. De två runda knapparna under den vänstra joysticken är märkta E Upp och E Ner. Den högra joystickens axlar är märkta C och D. Den högra joystickens mittknapp är märkt R3. De två runda knapparna under den högra joysticken är märkta F Upp och F Ner.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

{When controller axis} Händelseblock används för att utlösa vissa beteenden när en av de fyra axlarna på kontrollenheten ändras med hjälp av joystickarna.

Blocken [Ställ in motorhastighet] används för att ställa in motorhastigheten till den aktuella regulatorns position längs A- och D-axlarna. Detta motsvarar att sätta en bil i körläge. Det behöver inte nödvändigtvis få bilen att röra sig, det bara sätter igång den.

Varje joystickaxel returnerar ett värde mellan -100 och +100, och returnerar värdet noll när den är centrerad. Detta innebär då att joystickens axlar, när de trycks ned, motsvarar -100 % till 100 %. Ju längre mot 100 eller -100 axlarna trycks, desto snabbare snurrar motorn.

Blocket [Spin] används sedan för att faktiskt röra motorn. Detta motsvarar att gasa på bilen när riktningen har ställts in. Detta gör att varje motor kan styras av en av de fyra styrenhetens axlar.

Närbild av fyra staplar med block i VEXcode IQ-projektet Option 3. Den första stapeln läser När kontrollknappen E uppåt trycks in, snurra upp ArmMotorn. Den andra stapeln visar När kontrollknappen E Upp släpps, stoppa ArmMotor. Den tredje stapeln läser När kontrollknappen E nedtryckt, snurra ner ArmMotorn. Den fjärde stapeln läser När styrenhetens knapp E Ned släpps, stoppa ArmMotor.

En Clawbot användes för detta kodexempel. När knapparna på kontrollenheten används för att höja och sänka armen, kommer armen på grund av gravitationen att falla ner igen så snart knappen släpps. Genom att ställa in både armen och klon på "håll" säkerställs att både armen och klon förblir på plats även efter att knapparna på kontrollenheten har släppts.

{When controller axis} Händelseblock används för att koppla vissa beteenden till knappar som trycks ned eller släpps på kontrollenheten. I det här kodexemplet är villkoren som ställs in om knapparna E Upp eller E Ner trycks ned. Om så är fallet kommer vissa beteenden att inträffa, som att höja, sänka eller stanna upp armen.

Observera att den sista koden i projektet för Claw följer samma förklaring.

Sammanfattning av alternativ 3: Använda händelser

Fördelar

Begränsningar

Exempelsituation

  • Kan anpassas efter behov, särskilt drivlinor med fler än fyra motorer.
  • Kan tilldela flera beteenden till en enda knapp
  • Kan tilldela beteenden till olika axlar på kontrollenheten (i motsats till de enda alternativen Vänster Arkad, Höger Arkad, Delad Arkad och Tankdrift i Enhetskonfigurationen)
  • Snabbare kodkörning och därmed knappresponsivitet (eftersom varje villkor anropas separat och inte är inbäddat i en enda kodstack)
  • Kräver mest kodningskunskap om alternativen (villkor, loopar, händelser och kunskap om knappar/joysticks på kontrollenheten)
  • Om du använder en VEX IQ Brain av första generationen kan för många händelser i ett projekt resultera i att projektet inte körs på grund av Brains bearbetningsbegränsningar.
  • Använda styrenheten med en specialbyggd robot, särskilt med en icke-standardiserad drivlina
  • När man vill tilldela flera beteenden till en enda knapp utan fördröjning. Till exempel, när F Upp-knappen trycks ner kan klon öppnas, köra framåt och sedan stängas runt ett föremål.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: