Robotspecifieke Python#
Invoering#
De Hero Bot, Flop, bevat een IntakeMotor, een ArmMotor en een IQ AI Vision Sensor.
Alle standaard VEXcode VR Python-commando’s zijn beschikbaar voor gebruik in de IQ 26-27 Level Up Playground.
Hieronder vindt u een lijst met alle beschikbare Robot-specifieke Python-opdrachten:
Beweging – Beweeg en volg de motoren van de robot.
Acties
spin – Laat een motor voor altijd in één richting draaien.
spin_for – Laat een motor een specifiek aantal graden of omwentelingen draaien.
spin_to_position – Draait een motor naar een specifieke positie.
stop – Stopt een motor met draaien.
Instellingen
set_velocity – Stelt in hoe snel een motor zal draaien.
set_timeout – Stelt in hoe lang een motor erover doet om een beweging te voltooien.
set_position – Wijzigt de huidige positie van de motor naar een nieuwe waarde.
Waarden
is_done – Geeft aan of de motor klaar is met bewegen.
is_spinning – Geeft aan of de motor draait.
positie – Geeft de huidige positie van de motor terug.
velocity – Geeft aan hoe snel de motor draait.
AI Vision – Leg objecten vast en analyseer ze met de IQ AI Vision-sensor.
Verdieners
take_snapshot – Filtert het huidige frame van de sensor op een specifieke signatuur en retourneert een tuple van gedetecteerde objecten.
Eigenschappen
.width – Geeft de breedte van het gedetecteerde object in pixels terug.
.height – Geeft de hoogte van het gedetecteerde object in pixels terug.
.centerX – Retourneert de x-coördinaat van het middelpunt van het gedetecteerde object.
.centerY – Retourneert de y-coördinaat van het middelpunt van het gedetecteerde object.
.originX – Retourneert de x-coördinaat van de linkerbovenhoek van de begrenzingsbox van het gedetecteerde object.
.originY – Retourneert de y-coördinaat van de linkerbovenhoek van de begrenzingsbox van het gedetecteerde object.
.id – Retourneert de ID van de gedetecteerde AI-classificatie.
De voorbeelden op deze pagina gebruiken de standaard startpositie van de Playground.
Beweging#
Flop heeft twee robotspecifieke motoren: intake_motor en arm_motorBeide gebruiken standaard motorcommando’s.
Richtingsconstanten:
intake_motor:FORWARD= inlaat (verzamelt);REVERSE= uitlaat (werpt uit)arm_motor:FORWARD= omhoog (tilt op);REVERSE= omlaag (laat zakken)
draaien#
spin laat een motor oneindig in de aangegeven richting draaien. De motor blijft draaien totdat er een nieuw commando wordt gegeven.
Usage:
motor.spin(direction)
Parameters |
Beschrijving |
|---|---|
|
De draairichting: |
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 laat een motor een specifieke afstand draaien. Het project wacht tot de motor klaar is voordat de volgende opdracht wordt uitgevoerd, tenzij wait=False wordt doorgegeven.
Usage:
motor.spin_for(direction, amount, unit)
Parameters |
Beschrijving |
|---|---|
|
De draairichting: |
|
De afstand die moet worden afgelegd om te draaien. Dit kan een geheel getal of een decimaal getal zijn. |
|
De meeteenheid: |
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_to_position#
spin_to_position laat een motor naar een specifieke positie draaien. Het project wacht tot de motor klaar is voordat de volgende opdracht wordt uitgevoerd, tenzij wait=False wordt doorgegeven.
Usage:
motor.spin_to_position(position, unit)
Parameters |
Beschrijving |
|---|---|
|
De positie waarnaar de draaiing moet plaatsvinden. Dit kan een geheel getal of een decimaal getal zijn. |
|
De meeteenheid: |
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)
stop#
stop zorgt ervoor dat een motor stopt met draaien.
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 stelt de draaisnelheid van een motor in als een percentage van 0 tot 100.
Usage:
motor.set_velocity(velocity, unit)
Parameters |
Beschrijving |
|---|---|
|
De snelheid van de motor als percentage van 0 tot 100. |
|
De meeteenheid: |
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 bepaalt hoeveel seconden een motor de tijd krijgt om een beweging te voltooien voordat hij stopt.
Usage:
motor.set_timeout(timeout, unit)
Parameters |
Beschrijving |
|---|---|
|
Het aantal seconden dat de motor nodig heeft om een beweging te voltooien. |
|
De meeteenheid: |
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)
set_position#
set_position verandert de huidige positie van de motor naar een nieuwe waarde en reset de encoder.
Usage:
motor.set_position(position, unit)
Parameters |
Beschrijving |
|---|---|
|
De nieuwe positiewaarde. |
|
De meeteenheid: |
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)
is_klaar#
is_done retourneert een Booleaanse waarde die aangeeft of de motor zijn beweging heeft voltooid.
True– De motor is gestopt met bewegen.False– De motor draait nog steeds.
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)
draait#
is_spinning retourneert een Booleaanse waarde die aangeeft of de motor momenteel draait.
True– De motor draait.False– De motor draait niet.
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)
positie#
Positie position geeft de huidige positie van de motor weer.
Usage:
motor.position(unit)
Parameters |
Beschrijving |
|---|---|
|
De meeteenheid: |
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)
snelheid#
velocity geeft aan hoe snel de motor momenteel draait, uitgedrukt als een percentage tussen -100 en 100.
Usage:
motor.velocity(unit)
Parameters |
Beschrijving |
|---|---|
|
De meeteenheid: |
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)
AI-visie#
momentopname maken#
take_snapshot filtert gegevens uit het frame van de IQ AI Vision Sensor tot één enkele signatuur — een opgeslagen beschrijving van iets dat de sensor kan herkennen, zoals een spelelement op het veld — en retourneert een tuple.
De tuple slaat objecten op, gesorteerd van groot naar klein op basis van breedte, beginnend bij index 0. De eigenschappen van elk object kunnen worden benaderd via de index. Er wordt een lege tuple geretourneerd als er geen overeenkomende objecten worden gevonden.
Usage:
ai_vision.take_snapshot(signature)
Parameters |
Beschrijving |
|---|---|
|
Filtert de dataset zodat alleen gegevens met de opgegeven signatuur worden weergegeven. Beschikbare signaturen zijn:
|
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)
Eigenschappen#
Er zijn zeven eigenschappen die worden opgenomen bij elk object dat in een tuple is opgeslagen nadat take_snapshot is gebruikt.
Alle eigenschapswaarden behalve .id beschrijven de positie en grootte van het gedetecteerde object in het gezichtsveld van de IQ AI Vision Sensor op het moment dat take_snapshot werd gebruikt. Deze waarden worden gemeten in pixels, gebaseerd op de resolutie van de sensor van 320 bij 240 pixels.
.breedte#
.width retourneert de breedte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 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)
.hoogte#
.height retourneert de hoogte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 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 retourneert de x-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 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 retourneert de y-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 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 retourneert de x-coördinaat van de linkerbovenhoek van de begrenzingsbox van het gedetecteerde object in pixels, wat een geheel getal tussen 0 en 320 is.
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 retourneert de y-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object in pixels, wat een geheel getal tussen 0 en 240 is.
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)
.id#
.id retourneert de ID van de gedetecteerde AI-classificatie als een geheel getal.
AI-classificatie |
id |
|---|---|
Blauwe zitzak |
0 |
Rode zitzak |
1 |
Gele zitzak |
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)