Benutzerdefinierter Controller-Code in VEXcode EXP

Die Verwendung des Controllers kann es einfacher machen, Ihren Roboter zu fahren und zu bewegen, um eine Aufgabe zu erledigen. Es gibt jedoch Einschränkungen bei der Verwendung des Drive-Programms, und abhängig von der Bauart Ihres Roboters oder der anstehenden Aufgabe benötigen Sie möglicherweise unterschiedliche Steuerungen. Durch die Codierung des Controllers können Sie den Controller optimieren, damit er besser zu Ihrem Roboter und der jeweiligen Aufgabe passt. Es gibt mehrere Möglichkeiten, den Controller in VEXcode EXP zu codieren. Jede hat ihre Vor- und Nachteile, und einige Methoden sind je nach gewünschtem Ergebnis für bestimmte Situationen besser geeignet.

Dieser Artikel führt Sie durch drei verschiedene Optionen für die benutzerdefinierte Codierung des Controllers in VEXcode EXP. Jede Methode wird mit ihren Vorteilen, Einschränkungen und einem Beispielanwendungsfall beschrieben, um Sie bei der Auswahl einer Methode zu unterstützen. Für die Zwecke dieses Artikels wurden alle gezeigten Codebeispiele für den Clawbot erstellt. Dieselben Konzepte könnten jedoch auf zahlreiche andere Builds angewendet werden, die sich auf builds.vex.comund auf benutzerdefinierte Builds befinden.

Möglichkeit 1: Tastenzuordnung in der Gerätekonfiguration

Diese Option ist großartig, wenn Sie einen Standard-Build wie einen BaseBot oder Clawbot verwenden und schnell einsatzbereit sein möchten.

Mit dieser Option können Sie den Tasten auf dem Controller in der Gerätekonfiguration Motoren, einen Antriebsstrang oder Motorgruppen zuweisen. Weitere Informationen zum Zuweisen von Tasten zum Controller in der Gerätekonfiguration Sie in diesem Artikel.

VEXcode EXP Geräte-Menü mit Anzeige der Controller-Optionen. Das Diagramm der Tastensteuerung zeigt, dass die beiden Joysticks den Roboter in einer Panzerantriebskonfiguration steuern. Die Auf- und Ab-Tasten steuern eine ArmMotorGroup, die R-Achsen-Tasten steuern einen ClawMotor.

Zusammenfassung zu Option 1: Tastenzuordnung in der Gerätekonfiguration

Vorteile

Einschränkungen

Beispielsituation

  • Schnelle Einrichtung ohne Programmieraufwand
  • Einfachste Methode
  • Leicht einstellbar
  • Kann Tasten einzelne Motoren, einen Standardantriebsstrang und Motorgruppen zuweisen
  • Die Tastenzuweisungen sind auf die Anzahl der Tasten auf dem Controller beschränkt
  • Der Antriebsstrang darf nicht mehr als 4 Motoren umfassen oder individuell angepasst werden (es wird nur ein Standardantrieb unterstützt, kein H-Antrieb, holonomischer oder anderer kundenspezifischer Antriebsstrang).
  • Manipulieren eines Standard-Builds wie eines BaseBot, Clawbot oder einer einfachen Modifikation dieser Standard-Builds. Zum Beispiel ein BaseBot mit einem an der Vorderseite angebrachten Einlass, der von einer Motorgruppe gesteuert wird.
  • Schnelles Manipulieren, welche Tasten unterschiedlichen Verhaltensweisen des Roboters entsprechen, ohne viel Programmieraufwand

Option 2: Verwenden einer Endlosschleife

Wenn Sie einen benutzerdefinierten Build anstelle eines Standard-Builds verwenden oder mehr Anpassungsmöglichkeiten für Ihren Controller wünschen, ist diese Option eine gute Option. Die Verwendung einer Forever-Schleife ist eine großartige Einführung zum Erstellen von benutzerdefiniertem Code für Ihren Controller.

Diese Option platziert alle Bedingungen für den Controller und die zugehörigen Schaltflächen in einer Endlosschleife. Dies bietet mehr Flexibilität, insbesondere bei benutzerdefinierten Build-Designs, erfordert aber auch etwas Programmiererfahrung. Bei der Verwendung dieser Option ist jedoch die Länge und Komplexität Ihres Projekts zu berücksichtigen. Je mehr Bedingungen hinzugefügt werden, desto länger kann der Codestapel werden. Das bedeutet, dass mehrere Blöcke der Reihe nach ausgeführt werden müssen, und wenn viele Blöcke vorhanden sind, kann dies die Projektausführung verlangsamen. Eine langsamere Projektausführung kann zu einer Verzögerung zwischen dem Drücken der Controller-Tasten und dem Erkennen des Roboterverhaltens führen.

Das unten gezeigte spezifische Beispiel ist eine Möglichkeit, wie Sie eine Forever-Schleife mit einem benutzerdefinierten Roboter (z. B. einem Roboter mit einem benutzerdefinierten Antriebsstrang) verwenden können, um den Roboter anzutreiben und die Klaue und den Arm zu manipulieren, um mit Objekten zu interagieren.

VEXcode EXP Workspace mit geöffnetem Option 2-Blockprojekt. Das Projekt besteht aus einem Stapel von Blöcken und konfigurierten Geräten. Das Menü „Geräte“ ist seitlich geöffnet und listet die folgenden Geräte auf: ArmMotor an Port 3, ClawMotor an Port 4, Controller, LeftMotor an Port 6 und RightMotor an Port 10. Zu guter Letzt gibt es noch den Stapel von Blöcken zur Verarbeitung der Controller-Eingaben. Der Stack lautet: Beim Start: ArmMotor stoppen auf halten und ClawMotor stoppen auf halten. Der Rest des Stacks befindet sich in einer Endlosschleife. Es lautet: "Forever", setze die Geschwindigkeit des linken Motors auf die Position "Controller 3", "drehe den linken Motor vorwärts", setze die Geschwindigkeit des rechten Motors auf die Position "Controller 2", "drehe den rechten Motor vorwärts". Wenn als Nächstes die Taste „Controller Up“ gedrückt wird, dreht sich der Armmotor nach oben; andernfalls wird bei gedrückter Taste „Controller E Down“ der Armmotor nach unten gedreht; andernfalls stoppt der Armmotor. Schließlich, wenn Controller A gedrückt wird, dann dreht sich der Greifmotor auf, andernfalls, wenn Controller B gedrückt wird, dann dreht sich der Greifmotor auf und schließt sich, und andernfalls stoppt der Greifmotor.

Laden Sie die VEXcode EXP-Projektdatei „Option 2“ >herunter

Erläuterung des Option 2-Codes.

Codestück

Erläuterung

Nahaufnahme des Blockstapels im VEXcode EXP-Projekt Option 2. Zwei Blöcke sind hervorgehoben und befinden sich außerhalb der Forever-Schleife des Stacks. Sie lauten: „Set ArmMotor stopping to hold“ und „Set ClawMotor stopping to hold“.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

Nahaufnahme des Blockstapels im VEXcode EXP-Projekt Option 2. Innerhalb der Forever-Schleife des Stacks sind vier Blöcke hervorgehoben. Sie lesen „Für immer“, stellen die Geschwindigkeit des linken Motors auf die Position „%“ von Controller 3 ein und drehen den linken Motor vorwärts, stellen die Geschwindigkeit des rechten Motors auf die Position „%“ von Controller 2 ein und drehen den rechten Motor vorwärts. Diagramm des EXP-Controllers mit beschrifteten Tasten und Joysticks. Die Ansicht erfolgt von der Vorderseite des Controllers. Die Achsen des linken Joysticks sind mit 3 und 4 beschriftet. Der mittlere Knopf des linken Joysticks ist mit L3 beschriftet. Die beiden runden Knöpfe unterhalb des linken Joysticks sind mit „Auf“ und „Ab“ beschriftet. Die Achsen des rechten Joysticks sind mit 1 und 2 beschriftet. Der mittlere Knopf des rechten Joysticks ist mit R3 beschriftet. Die beiden runden Knöpfe unterhalb des rechten Joysticks sind mit A und B beschriftet.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

Eine Forever-Schleife wird verwendet, um kontinuierlich zu überprüfen, welche Tasten auf dem Controller gedrückt werden.

Mit den Blöcken [Motorgeschwindigkeit einstellen] wird die Motorgeschwindigkeit entlang der 2. und 3. Achse auf die aktuelle Position des Controllers eingestellt. Dies entspricht dem Einschalten eines Autos. Das bringt das Auto nicht unbedingt in Bewegung, es setzt es nur in Bewegung.

Jede Joystick-Achse gibt einen Wert zwischen -100 und +100 zurück und gibt in der Mitte den Wert Null zurück. Das bedeutet dann, dass die Joystick-Achsen, wenn sie gedrückt werden, -100 % bis 100 % entsprechen. Je weiter die Achsen in Richtung 100 oder -100 geschoben werden, desto schneller dreht sich der Motor.

Der [Spin]-Block wird dann verwendet, um den Motor tatsächlich zu bewegen. Dies entspricht dem Gasgeben am Auto, nachdem die Richtung festgelegt wurde. Dadurch kann jeder Motor von einer der vier Controller-Achsen gesteuert werden.

Nahaufnahme des Blockstapels im VEXcode EXP-Projekt Option 2. Innerhalb der Forever-Schleife des Stacks ist ein if, else if, else-Block hervorgehoben. Es liest aus: Wenn die Taste „Controller Up“ gedrückt wird, dann dreht sich der Armmotor nach oben; andernfalls, wenn die Taste „Controller Down“ gedrückt wird, dann dreht sich der Armmotor nach unten; andernfalls stoppt der Armmotor.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

Der Block [If then else if then else] wird verwendet, um bestimmte Verhaltensweisen dem Drücken oder Loslassen von Tasten auf dem Controller zuzuordnen. In diesem Codeabschnitt werden die Bedingungen festgelegt, wenn die Auf- oder Ab-Tasten gedrückt werden. Wenn dies der Fall ist, treten bestimmte Verhaltensweisen auf, z. B. das Heben und Senken des Arms. Es gibt auch den else-Teil der Bedingung: Wenn keine Taste gedrückt wird, stoppt der Arm seine Bewegung.

Beachten Sie, dass der folgende Codeabschnitt im Projekt für die Klaue derselben Erklärung folgt.

Zusammenfassung zu Option 2: Verwenden einer Endlosschleife

Vorteile

Einschränkungen

Beispielsituation

  • Geeignet für Sonderanfertigungen, insbesondere Antriebsstränge mit mehr als 4 Motoren
  • Kann einer einzelnen Schaltfläche mehrere Verhaltensweisen zuweisen
  • Kann Verhaltensweisen verschiedenen Achsen auf dem Controller zuweisen (im Gegensatz zu den einzigen Optionen „Linke Arcade“, „Rechte Arcade“, „Split Arcade“ und „Tank Drive“ in der Gerätekonfiguration).
  • Erfordert ein gewisses Maß an Programmierkenntnissen (Bedingungen, Schleifen und Kenntnisse der Tasten/Joysticks auf dem Controller)
  • Mögliche langsamere Projektausführung oder verzögerte Reaktionszeit der Tasten. Da alle Befehle in einer einzigen Forever-Schleife enthalten sind, kann die Codeausführung abhängig von den festgelegten Bedingungen und der Länge des Codes langsam sein.
  • Verwendung des Controllers mit einem speziell angefertigten Roboter, insbesondere mit einem nicht standardmäßigen Antriebsstrang
  • Wenn Sie einer einzelnen Schaltfläche mehrere Verhaltensweisen zuweisen möchten. Wenn beispielsweise die Aufwärtstaste gedrückt wird, kann sich die Klaue öffnen, vorwärts fahren und sich dann um ein Objekt herum schließen.

Option 3: Verwenden von Ereignissen

Wenn Sie Ihren Controller umfassend anpassen möchten, ist die Verwendung von Ereignissen die beste Option für Sie. Ein Knopfdruck kann mehrere Verhaltensweisen des Roboters auslösen, wie etwa das Drücken einer Taste, um die Klaue zu öffnen, den Arm anzuheben und eine bestimmte Strecke vorwärts zu fahren. Der Versuch, innerhalb einer Forever-Schleife mehrere Verhaltensweisen pro Schaltfläche zu programmieren, würde zu einer erheblichen Verlangsamung der Projektausführung führen. Mithilfe von Ereignissen können Sie dies effektiver tun.

Diese Option verwendet Ereignisse, um den Projektfluss zu unterbrechen. Dies ähnelt der Verwendung einer Forever-Schleife, ermöglicht jedoch eine bessere Organisation des Codes, sodass die Schaltflächenausführung eine schnellere Reaktionszeit hat. Eine schnellere Reaktionszeit bedeutet, dass Sie keine Verzögerung zwischen dem Drücken der Controller-Tasten und dem Erkennen des Roboterverhaltens bemerken. Dieses Beispiel zeigt die gleichen Verhaltensweisen wie das vorherige Projekt, jedoch unter Verwendung der Ereignisse anstelle der Forever-Schleife.

VEXcode EXP Workspace mit geöffnetem Option 3-Blockprojekt. Das Projekt besteht aus 11 kleinen Blockstapeln und konfigurierten Geräten. Das Menü „Geräte“ ist seitlich geöffnet und listet die folgenden Geräte auf: ArmMotor an Port 3, ClawMotor an Port 4, Controller, LeftMotor an Port 6 und RightMotor an Port 10. Zu guter Letzt gibt es noch die 11 kleinen Blockstapel, die die Eingaben des Controllers verarbeiten. Der erste Stack lautet: Beim Start den ArmMotor auf Halten stellen und anschließend den ClawMotor auf Halten stellen. Der zweite Stack lautet: Wenn die Controllerachse 3 geändert wird, setze die Geschwindigkeit des linken Motors auf die Controller 3-Position % und drehe den linken Motor dann vorwärts. Der dritte Stack lautet: Wenn die Controller-Achse 2 geändert wird, setze die RightMotor-Geschwindigkeit auf die Controller 2-Position % und drehe RightMotor dann vorwärts. Im vierten Stapel steht: Wenn die Taste „Oben“ des Controllers gedrückt wird, dreht sich der Armmotor nach oben. Der fünfte Stapel lautet: Wenn die Taste „Oben“ des Controllers losgelassen wird, stoppe ArmMotor. Im sechsten Stapel steht: Wenn die Taste „Down“ des Controllers gedrückt wird, dreht sich der Armmotor nach unten. Im siebten Stapel steht: Wenn die Controller-Taste losgelassen wird, stoppe ArmMotor. Im achten Stapel steht: Wenn die Taste A am Controller gedrückt wird, dreht sich der Greifmotor. Der neunte Stapel lautet: Wenn die Taste A des Controllers losgelassen wird, stoppe den Greifmotor. Im zehnten Stapel steht: Wenn die Controller-Taste B gedrückt wird, dreht sich der Greifermotor. Der elfte und letzte Stack lautet: Wenn die Controller-Taste B losgelassen wird, stoppe den Greifmotor.

Laden Sie die VEXcode EXP-Projektdatei „Option 3“ >herunter

Erläuterung des Option 3-Codes.

Codestück

Erläuterung

Nahaufnahme eines Blockstapels im VEXcode EXP-Projekt Option 3. Der Stack lautet: Beim Start den ArmMotor auf Halten und anschließend den ClawMotor auf Halten einstellen.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

Nahaufnahme von zwei Blockstapeln im VEXcode EXP-Projekt Option 3. Der erste Stack lautet: Wenn die Controller-Achse 3 geändert wird, wird die Geschwindigkeit des linken Motors auf die Controller-3-Position % gesetzt und dann der linke Motor vorwärts gedreht. Der zweite Stack lautet: Wenn die Controller-Achse 2 geändert wird, setze die Geschwindigkeit des rechten Motors auf die Controller-2-Position in Prozent und drehe den rechten Motor dann vorwärts. Diagramm des EXP-Controllers mit beschrifteten Tasten und Joysticks. Die Ansicht erfolgt von der Vorderseite des Controllers. Die Achsen des linken Joysticks sind mit 3 und 4 beschriftet. Der mittlere Knopf des linken Joysticks ist mit L3 beschriftet. Die beiden runden Knöpfe unterhalb des linken Joysticks sind mit „Auf“ und „Ab“ beschriftet. Die Achsen des rechten Joysticks sind mit 1 und 2 beschriftet. Der mittlere Knopf des rechten Joysticks ist mit R3 beschriftet. Die beiden runden Knöpfe unterhalb des rechten Joysticks sind mit A und B beschriftet.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

{When controller axis} Ereignisblöcke werden verwendet, um bestimmte Verhaltensweisen auszulösen, wenn eine der vier Achsen auf dem Controller mithilfe der Joysticks geändert wird.

Mit den Blöcken [Motorgeschwindigkeit einstellen] wird die Motorgeschwindigkeit auf die aktuelle Position des Controllers entlang der A- und D-Achse eingestellt. Dies entspricht dem Einschalten eines Autos. Das bringt das Auto nicht unbedingt in Bewegung, es setzt es nur in Bewegung.

Jede Joystick-Achse gibt einen Wert zwischen -100 und +100 zurück und gibt in der Mitte den Wert Null zurück. Das bedeutet dann, dass die Joystick-Achsen, wenn sie gedrückt werden, -100 % bis 100 % entsprechen. Je weiter die Achsen in Richtung 100 oder -100 geschoben werden, desto schneller dreht sich der Motor.

Der [Spin]-Block wird dann verwendet, um den Motor tatsächlich zu bewegen. Dies entspricht dem Gasgeben am Auto, nachdem die Richtung festgelegt wurde. Dadurch kann jeder Motor von einer der vier Controller-Achsen gesteuert werden.

Nahaufnahme von vier Blockstapeln im VEXcode EXP-Projekt Option 3. Der erste Stapel lautet: Wenn die Taste „Oben“ des Controllers gedrückt wird, dreht sich der ArmMotor nach oben. Der zweite Stapel lautet: Wenn die Taste „Oben“ des Controllers losgelassen wird, stoppe ArmMotor. Im dritten Stapel steht: Wenn die Taste „Down“ des Controllers gedrückt wird, dreht sich der Armmotor nach unten. Im vierten Stapel steht: Wenn die Taste „Down“ des Controllers losgelassen wird, stoppe den ArmMotor.

Für dieses Codebeispiel wurde ein Clawbot verwendet. Wenn die Tasten am Controller zum Anheben und Absenken des Arms verwendet werden, fällt der Arm aufgrund der Schwerkraft wieder nach unten, sobald die Taste losgelassen wird. Wenn Sie sowohl den Arm als auch die Klaue auf „Halten“ stellen, stellen Sie sicher, dass sowohl der Arm als auch die Klaue an Ort und Stelle bleiben, auch nachdem die Tasten am Controller losgelassen wurden.

{When controller axis} Ereignisblöcke werden verwendet, um bestimmte Verhaltensweisen dem Drücken oder Loslassen von Tasten auf dem Controller zuzuordnen. In diesem Codeabschnitt werden die Bedingungen festgelegt, wenn die Auf- oder Ab-Tasten gedrückt werden. Wenn dies der Fall ist, treten bestimmte Verhaltensweisen auf, z. B. das Heben, Senken oder Anhalten des Arms.

Beachten Sie, dass der letzte Codeabschnitt im Projekt für die Klaue derselben Erklärung folgt.

Zusammenfassung zu Option 3: Verwenden von Ereignissen

Vorteile

Einschränkungen

Beispielsituation

  • Geeignet für Sonderanfertigungen, insbesondere Antriebsstränge mit mehr als 4 Motoren
  • Kann einer einzelnen Schaltfläche mehrere Verhaltensweisen zuweisen
  • Kann Verhaltensweisen verschiedenen Achsen auf dem Controller zuweisen (im Gegensatz zu den einzigen Optionen „Linke Arcade“, „Rechte Arcade“, „Split Arcade“ und „Tank Drive“ in der Gerätekonfiguration).
  • Schnellere Codeausführung und damit schnellere Reaktionsfähigkeit der Schaltflächen (da jede Bedingung separat aufgerufen wird und nicht in einen einzigen Codestapel eingebettet ist)
  • Erfordert die meisten Programmierkenntnisse der Optionen (Bedingungen, Schleifen, Ereignisse und Kenntnisse der Tasten/Joysticks auf dem Controller)
  • Verwendung des Controllers mit einem speziell angefertigten Roboter, insbesondere mit einem nicht standardmäßigen Antriebsstrang
  • Wenn Sie mehrere Verhaltensweisen ohne Verzögerung einer einzelnen Taste zuweisen möchten. Wenn beispielsweise die Aufwärtstaste gedrückt wird, kann sich die Klaue öffnen, vorwärts fahren und sich dann um ein Objekt herum schließen.

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

Last Updated: