Robotams skirtas Python#
Įvadas#
Didvyriškasis robotas „Flop“ turi įsiurbimo variklį, rankos variklį ir IQ AI regėjimo jutiklį.
Visos standartinės „VEXcode VR Python“ komandos yra prieinamos IQ 26–27 lygio kėlimo žaidimų aikštelėje.
Žemiau pateikiamas visų galimų robotams skirtų Python komandų sąrašas:
Judėjimas – judinkite ir sekite roboto variklius.
Veiksmai
suktis – Suka variklį viena kryptimi amžinai.
spin_for – Suka variklį tam tikrą laipsnių arba apsisukimų skaičių.
spin_to_position – Suka variklį į konkrečią padėtį.
stop – Sustabdo variklio sukimąsi.
Nustatymai
set_velocity – Nustato variklio sukimosi greitį.
set_timeout – Nustato, kiek laiko variklis bandys užbaigti judesį.
set_position – Pakeičia dabartinę variklio padėtį į naują reikšmę.
Vertės
is_done – Grąžina, ar variklis baigė judėti.
is_spinning – Grąžina, ar variklis sukasi.
position – Grąžina dabartinę variklio padėtį.
greitis – Grąžina variklio sukasi greitį.
AI vizija – fiksuokite ir analizuokite objektus naudodami IQ AI vizijos jutiklį.
Getteriai
take_snapshot – Filtruoja dabartinį jutiklio kadrą pagal konkretų parašą ir grąžina aptiktų objektų rinkinį.
Ypatybės
.width – Grąžina aptikto objekto plotį pikseliais.
.height – Grąžina aptikto objekto aukštį pikseliais.
.centerX – Grąžina aptikto objekto centro x koordinatę.
.centerY – Grąžina aptikto objekto centro y koordinatę.
.originX – Grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę.
.originY – Grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę.
.id – Grąžina aptiktos dirbtinio intelekto klasifikacijos ID.
Šiame puslapyje pateiktuose pavyzdžiuose naudojama numatytoji „Playground“ pradžios pozicija.
Judesys#
„Flop“ turi du robotui būdingus variklius: intake_motor ir arm_motorAbu naudoja standartines variklių komandas.
Krypties konstantos:
intake_motor:FORWARD= įsiurbimas (surenka);REVERSE= išmetimas (išmeta)arm_motor:FORWARD= aukštyn (kelia);REVERSE= žemyn (nuleidžia)
sukimasis#
spin suka variklį nurodyta kryptimi amžinai. Variklis suksis tol, kol jam bus duota kita komanda.
Usage:
motor.spin(direction)
Parametrai |
Aprašymas |
|---|---|
|
Sukimosi kryptis: |
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)
sukimo_skirtas#
spin_for suka variklį tam tikrą atstumą. Projektas laukia, kol variklis bus baigtas, prieš paleidžiant kitą komandą, nebent būtų perduota wait=False.
Usage:
motor.spin_for(direction, amount, unit)
Parametrai |
Aprašymas |
|---|---|
|
Sukimosi kryptis: |
|
Sukimosi atstumas. Tai gali būti sveikasis skaičius arba dešimtainė trupmena. |
|
Matavimo vienetas: |
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)
sukimo_į_poziciją#
spin_to_position suka variklį į konkrečią padėtį. Projektas laukia, kol variklis bus baigtas, prieš paleidžiant kitą komandą, nebent būtų perduota wait=False.
Usage:
motor.spin_to_position(position, unit)
Parametrai |
Aprašymas |
|---|---|
|
Sukimo vieta. Tai gali būti sveikasis skaičius arba dešimtainis skaičius. |
|
Matavimo vienetas: |
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)
sustoti#
stop sustabdo variklio sukimąsi.
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)
nustatytas_greitis#
set_velocity nustato variklio sukimosi greitį procentais nuo 0 iki 100.
Usage:
motor.set_velocity(velocity, unit)
Parametrai |
Aprašymas |
|---|---|
|
Variklio greitis procentais nuo 0 iki 100. |
|
Matavimo vienetas: |
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)
nustatytas_laikas#
set_timeout nustato, kiek sekundžių variklis bandys užbaigti judesį prieš sustodamas.
Usage:
motor.set_timeout(timeout, unit)
Parametrai |
Aprašymas |
|---|---|
|
Sekundžių skaičius, kurį variklis bandys užbaigti judesį. |
|
Matavimo vienetas: |
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)
nustatyta_pozicija#
set_position pakeičia dabartinę variklio padėtį į naują reikšmę, iš naujo nustatydamas jo kodavimo įrenginį.
Usage:
motor.set_position(position, unit)
Parametrai |
Aprašymas |
|---|---|
|
Nauja pozicijos vertė. |
|
Matavimo vienetas: |
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)
baigta#
is_done grąžina loginę reikšmę, nurodančią, ar variklis baigė judėti.
True– Variklis nustojo judėti.False– Variklis vis dar juda.
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)
sukasi#
is_spinning grąžina loginę reikšmę, nurodančią, ar variklis šiuo metu sukasi.
True– Variklis sukasi.False– Variklis nesisuka.
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)
pozicija#
position grąžina dabartinę variklio padėtį.
Usage:
motor.position(unit)
Parametrai |
Aprašymas |
|---|---|
|
Matavimo vienetas: |
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)
greitis#
velocity grąžina variklio sukasi greitį procentais nuo -100 iki 100.
Usage:
motor.velocity(unit)
Parametrai |
Aprašymas |
|---|---|
|
Matavimo vienetas: |
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)
Dirbtinio intelekto vizija#
fotografuoti_momentinę nuotrauką#
take_snapshot filtruoja duomenis iš IQ AI regėjimo jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., žaidimo elementą lauke, – ir grąžina rinkinį.
Šiame rinkinyje objektai saugomi surūšiuoti nuo didžiausio iki mažiausio pagal plotį, pradedant nuo indekso 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama atitinkamų objektų, grąžinama tuščia rinkinio reikšmė.
Usage:
ai_vision.take_snapshot(signature)
Parametrai |
Aprašymas |
|---|---|
|
Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:
|
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)
Ypatybės#
Kiekvienam objektui, saugomam rinkinyje po take_snapshot, panaudojimo, priskiriamos septynios savybės.
Visos ypatybių reikšmės, išskyrus .id apibūdina aptikto objekto padėtį ir dydį IQ AI regėjimo jutiklio rodinyje tuo metu, kai buvo naudojamas take_snapshot Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.
.plotis#
.width grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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)
.aukštis#
.height grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 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)
.id#
.id grąžina aptiktos dirbtinio intelekto klasifikacijos ID kaip sveikąjį skaičių.
DI klasifikacija |
id |
|---|---|
Mėlynųjų pupelių maišelis |
0 |
RaudonpupųMaišas |
1 |
Geltonpupų maišelis |
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)