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. Die gleichen Konzepte könnten jedoch auf zahlreiche andere Builds angewendet werden, die auf builds.vex.comzu finden sind, sowie auf benutzerdefinierte Builds.

Option 1: Tasten in der Gerätekonfiguration zuweisen

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 finden Sie

Screenshot 26.07.2023 um 15.49.03 Uhr.png

Zusammenfassung von Option 1: Zuweisen von Tasten 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.

Screenshot 26.07.2023 um 16.07 Uhr.png

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

Erläuterung des Codes für Option 2.

Codestück

Erläuterung

Stellen Sie das Stoppen des ArmMotors auf „Halten“ und das Stoppen des Klauenmotors auf „Halten“ ein

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.

Screenshot 26.07.2023 um 16.07.59 Uhr.png EXP-Controller mit Labels.png

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.

Screenshot 26.07.2023 um 16.09.52 Uhr.png

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 von Option 2: Verwenden einer Forever-Schleife

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: Ereignisse verwenden

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.

Screenshot 26.07.2023 um 16.31.57 Uhr.png

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

Erläuterung des Codes für Option 3.

Codestück

Erläuterung

Stellen Sie das Stoppen des ArmMotors auf „Halten“ und das Stoppen des Klauenmotors auf „Halten“ ein

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.

Screenshot 26.07.2023 um 16.33.05 Uhr.png EXP-Controller mit Labels.png

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.

Screenshot 26.07.2023 um 16.33.30 Uhr.png

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 von 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: