Vizija#
Įvadas#
„VEX EXP“ skirtas regos jutiklis aptinka ir seka spalvų parašus ir spalvų kodus. Tai leidžia regos jutikliui analizuoti aplinką ir reaguoti pagal aptiktus vaizdinius duomenis.
Šiame puslapyje kaip pavyzdžiai „Vision Sensor“, „Color Signature“ ir „Color Code“ atitinkamai naudojami vision_1, RED_BOXir BOX_CODE Prireikus pakeiskite juos savo sukonfigūruotais pavadinimais.
Žemiau pateikiamas visų metodų sąrašas:
Getteriai – gauna duomenis iš regėjimo jutiklio.
take_snapshot– fiksuoja duomenis, skirtus konkrečiam spalvos parašui arba spalvos kodui.largest_object– Pasirinkite didžiausią objektą iš momentinės nuotraukos.installed– Ar regėjimo jutiklis prijungtas prie EXP smegenų.
Ypatybės – Objekto duomenys, grąžinti iš take_snapshot.
.exists– Ar objektas egzistuoja dabartiniame aptikime..width– Width of the detected object..height– Aptikto objekto aukštis..centerX– X position of the object’s center..centerY– objekto centro Y padėtis..angle– Spalvos kodo orientacija..originX– objekto viršutinio kairiojo kampo X padėtis..originY– objekto viršutinio kairiojo kampo Y padėtis.
Konstruktoriai – rankiniu būdu inicijuokite ir konfigūruokite regėjimo jutiklį ir jo parašus.
Getteriai#
take_snapshot#
take_snapshot filtruoja duomenis iš regėjimo jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., sukonfigūruotą spalvos parašą arba spalvos kodą – ir grąžina rinkinį.
Prieš naudojant šį metodą, pirmiausia „Vision Utility“ programoje reikia sukonfigūruoti Spalvų parašus ir Spalvų kodus.
Š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:
vision_1.take_snapshot(SIGNATURE)
Parametrai |
Aprašymas |
|---|---|
|
Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Spalvų parašai#
Spalvos parašas yra unikali spalva, kurią gali atpažinti regėjimo jutiklis. Šie parašai leidžia jutikliui aptikti ir sekti objektus pagal jų spalvą. Sukonfigūravus spalvos parašą, jutiklis gali atpažinti objektus savo matymo lauke su ta konkrečia spalva. Spalvų parašai naudojami su take_snapshot, kad būtų galima apdoroti ir aptikti spalvotus objektus realiuoju laiku.
Norint projekte naudoti sukonfigūruotą spalvos parašą, jo pavadinimas turi būti regėjimo jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos parašo pavadinimas. Pavyzdžiui: vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
Spalvų kodai#
Spalvų kodas yra struktūrizuotas modelis, sudarytas iš tam tikra tvarka išdėstytų spalvų parašų. Šie kodai leidžia regėjimo jutikliui atpažinti iš anksto nustatytus spalvų modelius. Spalvų kodai yra naudingi norint identifikuoti sudėtingus objektus arba sukurti unikalius žymeklius autonominei navigacijai.
Norint projekte naudoti sukonfigūruotą spalvos kodą, jo pavadinimas turi būti regėjimo jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos kodo pavadinimas. Pavyzdžiui: vision_1__BOX_CODE.
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
largest_object#
largest_object išrenka didžiausią aptiktą objektą, iš kurio norima gauti duomenis iš rinkinio, grąžinto paskutinio take_snapshot panaudojimo metu.
Šis metodas gali būti naudojamas norint visada gauti didžiausią objektą iš rinkinio nenurodant indekso.
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
installed#
installed grąžina loginę reikšmę, nurodančią, ar regėjimo jutiklis šiuo metu prijungtas prie EXP smegenų.
True– Regėjimo jutiklis prijungtas prie EXP smegenų.False– Regėjimo jutiklis neprijungtas prie EXP smegenų.
Usage:
vision_1.installed()
Parametrai |
Aprašymas |
|---|---|
Šis metodas neturi parametrų. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Ypatybės#
Kiekvienam objektui, saugomam rinkinyje po take_snapshot, panaudojimo, priskiriamos aštuonios savybės.
Visos savybių reikšmės apibūdina aptikto objekto padėtį ir dydį regėjimo jutiklio rodinyje tuo metu, kai buvo naudojamas take_snapshot . Šios reikšmės matuojamos pikseliais, remiantis jutiklio 316 x 212 pikselių skiriamąja geba.
.exists#
.exists grąžina loginę reikšmę, nurodančią, ar indeksas egzistuoja rinkinyje, ar ne.
True– Indeksas egzistuoja.False– Indekso nėra.
# Check if at least one red object is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
.width#
.width grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 316.
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
.height grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 212.
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 316.
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 212.
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
.angle grąžina aptikto objekto orientaciją laipsniais, kuri yra sveikasis skaičius nuo 0 iki 359.
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 70 < box_code[0].angle < 110:
drivetrain.turn_for(RIGHT, 45, DEGREES)
elif 250 < box_code[0].angle < 290:
drivetrain.turn_for(LEFT, 45, DEGREES)
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 316.
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 212.
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
Konstruktoriai#
Konstruktoriai naudojami rankiniu būdu sukurti Vision, Signatureir Code objektus, kurie yra būtini norint konfigūruoti „Vision Sensor“ ne naudojant VEXcode.
Vision#
Vision sukuria regėjimo jutiklį.
Naudojimas
Vision(smartport, brightness, sigs)
Parametrai |
Aprašymas |
|---|---|
|
Išmanusis prievadas, prie kurio prijungtas regėjimo jutiklis, užrašomas kaip |
|
Pasirinktinai. Regėjimo jutiklio ryškumo reikšmė nuo 1 iki 100. |
|
Pasirinktinai. Vieno ar kelių Color Signature arba Color Code objektų pavadinimai, atskirti kableliais ( |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)
"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)
Signature#
Signature -as parašas sukuria spalvinį parašą. Regėjimo jutiklyje vienu metu galima saugoti iki septynių skirtingų spalvinių parašų.
Naudojimas:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parametras |
Aprašymas |
|---|---|
|
|
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
Reikšmė nuo |
|
„Vision Utility“ programoje reikšmė nuo |
Norėdami gauti reikšmes, reikalingas spalvos parašui sukurti, eikite į Vision Utility. Sukonfigūravę spalvos parašą, nukopijuokite parametrų reikšmes iš konfigūracijos lango.
"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
Code#
Code sukuria spalvos kodą. Kad būtų galima naudoti, reikia bent dviejų jau apibrėžtų spalvų parašų. Regėjimo jutiklyje vienu metu galima saugoti iki aštuonių skirtingų spalvų kodų.
Naudojimas:
Code(sig1, sig2, sig3, sig4, sig5)
Parametras |
Aprašymas |
|---|---|
|
Anksčiau sukurtas Spalvų parašas. |
|
Anksčiau sukurtas Spalvų parašas. |
|
Pasirinktinai. Anksčiau sukurtas Spalvų parašas. |
|
Pasirinktinai. Anksčiau sukurtas Spalvų parašas. |
|
Pasirinktinai. Anksčiau sukurtas Spalvų parašas. |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)