Python Khusus Robot#
Perkenalan#
Robot Hero, Flop, mencakup IntakeMotor, ArmMotor, dan IQ AI Vision Sensor.
Semua perintah Python VEXcode VR standar tersedia untuk digunakan di IQ 26-27 Level Up Playground.
Berikut adalah daftar semua perintah Python khusus robot yang tersedia:
Gerakan – Gerakkan dan lacak motor robot.
Tindakan
spin – Memutar motor ke satu arah selamanya.
spin_for – Memutar motor untuk sejumlah derajat atau putaran tertentu.
spin_to_position – Memutar motor ke posisi tertentu.
stop – Menghentikan putaran motor.
Pengaturan
set_velocity – Mengatur seberapa cepat motor akan berputar.
set_timeout – Mengatur berapa lama motor akan mencoba menyelesaikan suatu gerakan.
set_position – Mengubah posisi motor saat ini ke nilai baru.
Nilai-nilai
is_done – Mengembalikan nilai boolean yang menunjukkan apakah motor sudah selesai bergerak.
is_spinning – Mengembalikan nilai boolean yang menunjukkan apakah motor sedang berputar.
posisi – Mengembalikan posisi motor saat ini.
velocity – Mengembalikan seberapa cepat motor berputar.
AI Vision – Tangkap dan analisis objek menggunakan Sensor AI Vision IQ.
Penangkap
take_snapshot – Memfilter frame sensor saat ini ke tanda tangan tertentu dan mengembalikan tuple objek yang terdeteksi.
Properti
.width – Mengembalikan lebar objek yang terdeteksi dalam piksel.
.height – Mengembalikan tinggi objek yang terdeteksi dalam piksel.
.centerX – Mengembalikan koordinat x dari pusat objek yang terdeteksi.
.centerY – Mengembalikan koordinat y dari pusat objek yang terdeteksi.
.originX – Mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi.
.originY – Mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi.
.id – Mengembalikan ID Klasifikasi AI yang terdeteksi.
Contoh-contoh pada halaman ini menggunakan posisi awal Playground default.
Gerakan#
Flop memiliki dua motor khusus robot: intake_motor dan arm_motorKeduanya menggunakan perintah motor standar.
Konstanta arah:
intake_motor:FORWARD= masuk (mengumpulkan);REVERSE= keluar (mengeluarkan)arm_motor:FORWARD= naik (mengangkat);REVERSE= turun (menurunkan)
putaran#
Perintah spin memutar motor ke arah yang diberikan selamanya. Motor akan terus berputar hingga diberi perintah lain.
Usage:
motor.spin(direction)
Parameter |
Keterangan |
|---|---|
|
Arah putaran: |
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)
putar_untuk#
spin_for memutar motor sejauh jarak tertentu. Proyek menunggu hingga motor selesai berputar sebelum perintah berikutnya dijalankan kecuali jika wait=False dilewatkan.
Usage:
motor.spin_for(direction, amount, unit)
Parameter |
Keterangan |
|---|---|
|
Arah putaran: |
|
Jarak putaran. Ini bisa berupa bilangan bulat atau desimal. |
|
Satuan pengukuran: |
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)
putar_ke_posisi#
spin_to_position memutar motor ke posisi tertentu. Proyek menunggu hingga motor selesai sebelum perintah berikutnya dijalankan kecuali wait=False dilewatkan.
Usage:
motor.spin_to_position(position, unit)
Parameter |
Keterangan |
|---|---|
|
Posisi yang akan diputar. Ini bisa berupa bilangan bulat atau desimal. |
|
Satuan pengukuran: |
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)
berhenti#
stop menghentikan motor agar tidak berputar.
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)
atur_kecepatan#
set_velocity mengatur seberapa cepat motor akan berputar sebagai persentase dari 0 hingga 100.
Usage:
motor.set_velocity(velocity, unit)
Parameter |
Keterangan |
|---|---|
|
Kecepatan motor sebagai persentase dari 0 hingga 100. |
|
Satuan pengukuran: |
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)
waktu habis#
set_timeout mengatur berapa detik motor akan mencoba menyelesaikan suatu gerakan sebelum berhenti.
Usage:
motor.set_timeout(timeout, unit)
Parameter |
Keterangan |
|---|---|
|
Jumlah detik yang akan dijalani motor untuk mencoba menyelesaikan suatu gerakan. |
|
Satuan pengukuran: |
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)
posisi_tetap#
set_position mengubah posisi motor saat ini ke nilai baru, mereset encoder-nya.
Usage:
motor.set_position(position, unit)
Parameter |
Keterangan |
|---|---|
|
Nilai posisi baru. |
|
Satuan pengukuran: |
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)
selesai#
is_done mengembalikan nilai Boolean yang menunjukkan apakah motor telah menyelesaikan pergerakannya.
True– Motor telah selesai bergerak.False– Motor masih bergerak.
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)
sedang berputar#
is_spinning mengembalikan nilai Boolean yang menunjukkan apakah motor saat ini sedang berputar.
True– Motor sedang berputar.False– Motor tidak berputar.
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)
posisi#
position mengembalikan posisi motor saat ini.
Usage:
motor.position(unit)
Parameter |
Keterangan |
|---|---|
|
Satuan pengukuran: |
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)
kecepatan#
velocity mengembalikan kecepatan putaran motor saat ini dalam persentase dari -100 hingga 100.
Usage:
motor.velocity(unit)
Parameter |
Keterangan |
|---|---|
|
Satuan pengukuran: |
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)
Visi AI#
ambil_foto#
take_snapshot menyaring data dari frame IQ AI Vision Sensor ke satu tanda tangan tunggal — deskripsi tersimpan dari sesuatu yang dapat dikenali sensor, seperti elemen permainan di lapangan — dan mengembalikan tuple.
Tuple menyimpan objek yang diurutkan dari lebar terbesar ke terkecil, dimulai dari indeks 0. Properti setiap objek dapat diakses menggunakan indeksnya. Tuple kosong akan dikembalikan jika tidak ada objek yang cocok yang terdeteksi.
Usage:
ai_vision.take_snapshot(signature)
Parameter |
Keterangan |
|---|---|
|
Memfilter dataset agar hanya menyertakan data dengan tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:
|
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)
Properti#
Ada tujuh properti yang disertakan dengan setiap objek yang disimpan dalam tuple setelah take_snapshot digunakan.
Semua nilai properti kecuali .id menjelaskan posisi dan ukuran objek yang terdeteksi dalam tampilan IQ AI Vision Sensor pada saat take_snapshot digunakan. Nilai-nilai ini diukur dalam piksel, berdasarkan resolusi sensor 320 x 240 piksel.
.lebar#
.width mengembalikan lebar objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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)
.tinggi#
.height mengembalikan tinggi objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan koordinat x dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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)
.asalY#
.originY mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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)
.pengenal#
.id mengembalikan ID Klasifikasi AI yang terdeteksi sebagai bilangan bulat.
Klasifikasi AI |
pengenal |
|---|---|
Kantung Biru |
0 |
Kantung Kacang Merah |
1 |
Kantung Kacang Kuning |
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)