Regėjimo jutiklis#
Įvadas#
Regėjimo jutiklis yra kameros pagrindu veikiantis jutiklis, galintis aptikti ir sekti spalvų parašus ir spalvų kodus. Jis leidžia robotui analizuoti aplinką ir reaguoti į vaizdinę informaciją.
Žemiau pateiktuose pavyzdžiuose sukonfigūruotas „Vision Sensor“ bus pavadintas vision_1, o sukonfigūruoti „Color Signature“ objektai, pvz., RED_BOX, bus naudojami visuose tolesniuose šios API dokumentacijos pavyzdžiuose, kai bus kalbama apie Vision klasės metodus.
Žemiau pateikiamas visų metodų sąrašas:
Getteriai – gauna duomenis iš regėjimo jutiklio.
take_snapshot– fiksuoja konkretaus parašo duomenis.installed— Ar regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.
Ypatybės – objekto duomenys, gauti iš take_snapshot.
largest_object— Iš karto pasirinkite didžiausią objektą iš regėjimo jutiklio momentinės kopijos..exists— Whether the object exists in the current detection..width— Aptikto objekto plotis..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 jutiklius.
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.
Rinkinyje objektai saugomi surūšiuoti nuo didžiausio iki mažiausio pagal plotį, pradedant indeksu 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 regėjimo 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 šablonas, sudarytas iš tam tikra tvarka išdėstytų spalvų parašų. Šie kodai leidžia regėjimo jutikliui atpažinti iš anksto nustatytus spalvų šablonus. 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 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)
installed#
installed grąžina loginę reikšmę, nurodančią, ar regėjimo jutiklis šiuo metu prijungtas prie IQ (2-osios kartos) smegenų.
True— Regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.False— Regėjimo jutiklis neprijungtas prie IQ (2-osios kartos) 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("Installed!")
Ypatybės#
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)
Tuple Properties#
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.
.egzistuoja#
.exists grąžina loginę reikšmę, nurodančią, ar indeksas egzistuoja rinkinyje, ar ne.
True— Indeksas yra.False— Indekso nėra.
# Check if at least one red objects 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)
.plotis#
.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)
.aukštis#
.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)
.kampas#
.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 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
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 jutiklių konfigūravimui už VEXcode ribų.
Vision Sensor#
Vision sukuria regėjimo jutiklį.
Naudojimas
Vision(port, brightness, sigs)
Parametrai |
Aprašymas |
|---|---|
|
Prie kurio išmaniojo prievado prijungtas regėjimo jutiklis (nuo 1 iki 12). |
|
Pasirinktinai. Regėjimo jutiklio ryškumo reikšmė nuo 1 iki 100. |
|
Pasirinktinai. Vieno ar kelių Spalvos parašo arba Spalvos kodo objektų pavadinimas. |
Pavyzdys
# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color 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.
Pavyzdys
# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color 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. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
|
Nebūtina. Anksčiau sukurtas Spalvų parašas. |
Pavyzdys
# Create two new Signatures for a red and blue box
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 for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
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(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)