Roboterspezifisches Python#
Einführung#
Der Hero Bot, Flop, umfasst einen Ansaugmotor, einen Armmotor und einen IQ AI Vision Sensor.
Alle Standard-VEXcode-VR-Python-Befehle können im IQ 26-27 Level Up Playground verwendet werden.
Nachfolgend finden Sie eine Liste aller verfügbaren Robot-spezifischen Python-Befehle:
Bewegung – Die Motoren des Roboters bewegen und verfolgen.
Aktionen
spin – Dreht einen Motor unendlich lange in eine Richtung.
spin_for – Dreht einen Motor für eine bestimmte Anzahl von Grad oder Umdrehungen.
spin_to_position – Dreht einen Motor in eine bestimmte Position.
stop – Stoppt den Motor.
Einstellungen
set_velocity – Legt fest, wie schnell sich ein Motor dreht.
set_timeout – Legt fest, wie lange ein Motor versucht, eine Bewegung abzuschließen.
set_position – Ändert die aktuelle Position des Motors auf einen neuen Wert.
Werte
is_done – Gibt zurück, ob der Motor seine Bewegung beendet hat.
is_spinning – Gibt zurück, ob sich der Motor dreht.
position – Gibt die aktuelle Position des Motors zurück.
Geschwindigkeit – Gibt die Drehzahl des Motors zurück.
KI-Vision – Objekte mithilfe des IQ KI-Vision-Sensors erfassen und analysieren.
Getter
take_snapshot – Filtert den aktuellen Frame des Sensors nach einer bestimmten Signatur und gibt ein Tupel der erkannten Objekte zurück.
Eigenschaften
.width – Gibt die Breite des erkannten Objekts in Pixeln zurück.
.height – Gibt die Höhe des erkannten Objekts in Pixeln zurück.
.centerX – Gibt die x-Koordinate des Mittelpunkts des erkannten Objekts zurück.
.centerY – Gibt die y-Koordinate des Mittelpunkts des erkannten Objekts zurück.
.originX – Gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts zurück.
.originY – Gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts zurück.
.id – Gibt die ID der erkannten KI-Klassifizierung zurück.
Die Beispiele auf dieser Seite verwenden die standardmäßige Startposition des Playgrounds.
Bewegung#
Flop verfügt über zwei roboterspezifische Motoren: intake_motor und arm_motorBeide verwenden Standard-Motorbefehle.
Richtungskonstanten:
intake_motor:FORWARD= Ansaugung (sammelt);REVERSE= Auswurf (wirft aus)arm_motor:FORWARD= hoch (hebt);REVERSE= runter (senkt)
drehen#
Der Befehl spin lässt den Motor endlos in die angegebene Richtung laufen. Der Motor dreht sich so lange, bis er einen neuen Befehl erhält.
Usage:
motor.spin(direction)
Parameter |
Beschreibung |
|---|---|
|
Die Drehrichtung: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
spin_for#
spin_for lässt einen Motor eine bestimmte Strecke drehen. Das Projekt wartet, bis der Motor fertig ist, bevor der nächste Befehl ausgeführt wird, es sei denn wait=False wird übergeben.
Usage:
motor.spin_for(direction, amount, unit)
Parameter |
Beschreibung |
|---|---|
|
Die Drehrichtung: |
|
Der Abstand, um den sich die Achse dreht. Dies kann eine ganze Zahl oder eine Dezimalzahl sein. |
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
Drehen in Position#
spin_to_position dreht einen Motor in eine bestimmte Position. Das Projekt wartet, bis der Motor seine Position erreicht hat, bevor der nächste Befehl ausgeführt wird, es sei denn wait=False wird übergeben.
Usage:
motor.spin_to_position(position, unit)
Parameter |
Beschreibung |
|---|---|
|
Die Position, zu der gedreht werden soll. Dies kann eine ganze Zahl oder eine Dezimalzahl sein. |
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_to_position(1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
stoppen#
stop stoppt den Motor.
Usage:
motor.stop()
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
wait(1, SECONDS)
intake_motor.stop()
# VR threads — Do not delete
vr_thread(main)
set_velocity#
set_velocity legt fest, wie schnell sich ein Motor dreht, als Prozentsatz von 0 bis 100.
Usage:
motor.set_velocity(velocity, unit)
Parameter |
Beschreibung |
|---|---|
|
Die Motordrehzahl als Prozentsatz von 0 bis 100. |
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.set_velocity(100, PERCENT)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
set_timeout#
set_timeout legt fest, wie viele Sekunden ein Motor versucht, eine Bewegung abzuschließen, bevor er stoppt.
Usage:
motor.set_timeout(timeout, unit)
Parameter |
Beschreibung |
|---|---|
|
Die Anzahl der Sekunden, die der Motor versucht, eine Bewegung abzuschließen. |
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.set_timeout(2, SECONDS)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
Position festlegen#
set_position ändert die aktuelle Position des Motors auf einen neuen Wert und setzt seinen Encoder zurück.
Usage:
motor.set_position(position, unit)
Parameter |
Beschreibung |
|---|---|
|
Der neue Positionswert. |
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.set_position(0, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
ist_fertig#
is_done gibt einen booleschen Wert zurück, der angibt, ob der Motor seine Bewegung beendet hat.
True– Der Motor hat seine Bewegung beendet.False– Der Motor dreht sich noch.
Usage:
motor.is_done()
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS, wait=False)
while not arm_motor.is_done():
wait(5, MSEC)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
is_spinning#
is_spinning gibt einen booleschen Wert zurück, der angibt, ob sich der Motor gerade dreht.
True– Der Motor dreht sich.False– Der Motor dreht sich nicht.
Usage:
motor.is_spinning()
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
while intake_motor.is_spinning():
wait(5, MSEC)
intake_motor.stop()
# VR threads — Do not delete
vr_thread(main)
Position#
position gibt die aktuelle Position des Motors zurück.
Usage:
motor.position(unit)
Parameter |
Beschreibung |
|---|---|
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
while arm_motor.position(DEGREES) < 360:
arm_motor.spin(FORWARD)
wait(2, MSEC)
arm_motor.stop()
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
# VR threads — Do not delete
vr_thread(main)
Geschwindigkeit#
velocity gibt an, wie schnell sich der Motor aktuell dreht, als Prozentsatz von -100 bis 100.
Usage:
motor.velocity(unit)
Parameter |
Beschreibung |
|---|---|
|
Die Maßeinheit: |
def main():
# Score a Bean Bag in a Blue Goal
drivetrain.turn_for(LEFT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 35, INCHES)
drivetrain.turn_for(RIGHT, 90, DEGREES)
arm_motor.spin_for(FORWARD, 1, TURNS)
drivetrain.drive_for(FORWARD, 40, INCHES)
intake_motor.spin(REVERSE)
wait(0.2, SECONDS)
brain.screen.print(intake_motor.velocity(PERCENT))
# VR threads — Do not delete
vr_thread(main)
KI-Vision#
Schnappschuss aufnehmen#
take_snapshot filtert Daten aus dem IQ AI Vision Sensor-Frame zu einer einzigen Signatur – einer gespeicherten Beschreibung von etwas, das der Sensor erkennen kann, wie zum Beispiel ein Spielelement auf dem Spielfeld – und gibt ein Tupel zurück.
The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.
Usage:
ai_vision.take_snapshot(signature)
Parameter |
Beschreibung |
|---|---|
|
Filtert den Datensatz, sodass nur Daten der angegebenen Signatur enthalten sind. Verfügbare Signaturen:
|
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Turn to face a red Bean Bag
drivetrain.set_turn_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
if ai_object.centerX < 140:
drivetrain.turn(LEFT)
elif ai_object.centerX > 180:
drivetrain.turn(RIGHT)
else:
drivetrain.stop()
return
break
# VR threads — Do not delete
vr_thread(main)
Eigenschaften#
Es gibt sieben Eigenschaften, die zu jedem Objekt gehören, das nach der Verwendung von take_snapshot in einem Tupel gespeichert wird.
Alle Eigenschaftswerte außer .id beschreiben Position und Größe des erkannten Objekts im Sichtfeld des IQ AI Vision Sensors zum Zeitpunkt der Verwendung take_snapshot Diese Werte werden in Pixeln gemessen, basierend auf der Auflösung des Sensors von 320 x 240 Pixeln.
.Breite#
.width gibt die Breite des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 320.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Approach the Bean Bag, then pick it up
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
if ai_object.width > 200:
drivetrain.stop()
intake_motor.spin(FORWARD)
return
else:
drivetrain.drive(FORWARD)
break
# VR threads — Do not delete
vr_thread(main)
.Höhe#
.height gibt die Höhe des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 1 und 240.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Approach the Bean Bag, then pick it up
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
if ai_object.height > 110:
drivetrain.stop()
intake_motor.spin(FORWARD)
return
else:
drivetrain.drive(FORWARD)
break
# VR threads — Do not delete
vr_thread(main)
.centerX#
.centerX gibt die x-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Steer to keep the Bean Bag centered
drivetrain.set_turn_velocity(30, PERCENT)
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
if ai_object.centerX < 140:
drivetrain.turn_for(LEFT, 5, DEGREES)
else:
drivetrain.drive_for(FORWARD, 150, MM)
intake_motor.spin(FORWARD)
return
break
# VR threads — Do not delete
vr_thread(main)
.centerY#
.centerY gibt die y-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Print the y-position of the Bean Bag
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
brain.screen.print(ai_object.centerY)
break
# VR threads — Do not delete
vr_thread(main)
.originX#
.originX gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 320.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Steer to keep the left edge centered
drivetrain.set_turn_velocity(30, PERCENT)
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
if ai_object.originX < 100:
drivetrain.turn_for(LEFT, 5, DEGREES)
else:
drivetrain.drive_for(FORWARD, 150, MM)
intake_motor.spin(FORWARD)
return
break
# VR threads — Do not delete
vr_thread(main)
.originY#
.originY gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln zurück, eine ganze Zahl zwischen 0 und 240.
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Print the y-position of the Bean Bag's top edge
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
brain.screen.print(ai_object.originY)
break
# VR threads — Do not delete
vr_thread(main)
.Ausweis#
.id gibt die ID der erkannten KI-Klassifizierung als ganze Zahl zurück.
KI-Klassifizierung |
Ausweis |
|---|---|
BlueBeanBag |
0 |
RedBeanBag |
1 |
Gelber Bohnensack |
2 |
def main():
# Drop the preloaded Bean Bag
intake_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Pick up the Bean Bag if it's red
drivetrain.set_drive_velocity(30, PERCENT)
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
for ai_object in ai_objects:
if ai_object.id == GameElements.RED_BEANBAG:
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 150, MM)
break
# VR threads — Do not delete
vr_thread(main)
def main():
# Stop when you see the Red Goal
drivetrain.set_turn_velocity(30, PERCENT)
drivetrain.turn(RIGHT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_TAGS)
for ai_object in ai_objects:
if ai_object.id == 1:
drivetrain.stop()
brain.screen.print("Found the Red Goal!")
return
# VR threads — Do not delete
vr_thread(main)