Бачення#
Вступ#
Датчик зору для VEX V5 виявляє та відстежує колірні сигнатури та колірні коди. Це дозволяє датчику зору аналізувати навколишнє середовище та реагувати на основі виявлених візуальних даних.
На цій сторінці використовується vision_1, RED_BOXта BOX_CODE як приклади назв датчика зору, кольорової сигнатури та кольорового коду відповідно. За потреби замініть їх власними налаштованими назвами.
Нижче наведено список усіх методів:
Отримувачі – Отримуйте дані з датчика зору.
take_snapshot– Збирає дані для певної колірної сигнатури або колірного коду.largest_object– Вибрати найбільший об’єкт зі знімка.installed– Чи підключено датчик зору до V5 Brain.
Властивості – Дані об’єкта, повернуті з take_snapshot.
.exists– Whether the object exists in the current detection as a Boolean..width– Width of the detected object in pixels..height– Висота виявленого об’єкта в пікселях..centerX– X position of the object’s center in pixels..centerY– Y position of the object’s center in pixels..angle– Орієнтація колірного коду в градусах..originX– X position of the object’s top-left corner in pixels..originY– Y position of the object’s top-left corner in pixels.
Конструктори – ініціалізують та налаштовують датчик зору та його сигнатури вручну.
Геттери#
take_snapshot#
take_snapshot фільтрує дані з кадру датчика зору до єдиної сигнатури — збереженого опису чогось, що датчик може розпізнати, наприклад, налаштованої колірної сигнатури або колірного коду — та повертає кортеж.
Кольорові підписи та Кольорові коди необхідно спочатку налаштувати в утиліті Vision, перш ніж їх можна буде використовувати з цим методом.
Кортеж зберігає об’єкти, відсортовані від найбільшого до найменшого за шириною, починаючи з індексу 0. Доступ до properties кожного об’єкта можна отримати за його індексом. Якщо не виявлено відповідних об’єктів, повертається порожній кортеж.
Usage:
vision_1.take_snapshot(SIGNATURE)
Параметри |
Опис |
|---|---|
|
Фільтрує набір даних, щоб включити лише дані заданого підпису. Доступні підписи:
|
# 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)
Кольорові підписи#
Колірна сигнатура – це унікальний колір, який може розпізнати датчик зору. Ці сигнатури дозволяють датчику виявляти та відстежувати об’єкти на основі їхнього кольору. Після налаштування колірної сигнатури датчик може ідентифікувати об’єкти з цим певним кольором у своєму полі зору. Колірні сигнатури використовуються разом з take_snapshot для обробки та виявлення кольорових об’єктів у режимі реального часу.
Щоб використовувати налаштований колірний підпис у проєкті, його назва має бути назвою датчика Vision Sensor, двома символами підкреслення, а потім назвою колірного підпису. Наприклад: 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)
Колірні коди#
Колірний код — це структурований візерунок, що складається з колірних сигнатур, розташованих у певному порядку. Ці коди дозволяють датчику зору розпізнавати заздалегідь визначені кольорові візерунки. Колірні коди корисні для ідентифікації складних об’єктів або створення унікальних маркерів для автономної навігації.
Щоб використовувати налаштований колірний код у проєкті, його назва має бути назвою датчика Vision, двома символами підкреслення, а потім назвою колірного коду. Наприклад: 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 отримує найбільший виявлений об’єкт для отримання даних з кортежу, повернутого з останнього використання take_snapshot.
Цей метод можна використовувати для того, щоб завжди отримувати найбільший об’єкт з кортежу без вказівки індексу.
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 повертає логічне значення, яке вказує, чи підключено датчик зору до V5 Brain наразі.
True– Датчик зору підключено до V5 Brain.False– Датчик зору не підключено до V5 Brain.
Usage:
vision_1.installed()
Параметри |
Опис |
|---|---|
Цей метод не має параметрів. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Властивості#
Існує вісім властивостей, які додаються до кожного об’єкта, що зберігається в кортежі після використання take_snapshot.
Усі значення властивостей описують положення та розмір виявленого об’єкта в області зору датчика зору в момент використання take_snapshot Ці значення вимірюються в пікселях, виходячи з роздільної здатності датчика 316 на 212 пікселів.
.exists#
.exists повертає логічне значення, яке вказує, чи існує індекс у кортежі чи ні.
True: Індекс існує.False: Індекс не існує.
# 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 повертає ширину виявленого об’єкта в пікселях, що є цілим числом від 1 до 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 повертає висоту виявленого об’єкта в пікселях, що є цілим числом від 1 до 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 повертає x-координату центру виявленого об’єкта в пікселях, яка є цілим числом від 0 до 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 повертає y-координату центру виявленого об’єкта в пікселях, яка є цілим числом від 0 до 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 повертає орієнтацію виявленого об’єкта в градусах, що є цілим числом від 0 до 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 повертає x-координату верхнього лівого кута рамки визначення виявленого об’єкта в пікселях, яка є цілим числом від 0 до 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 повертає y-координату верхнього лівого кута рамки визначення виявленого об’єкта в пікселях, що є цілим числом від 0 до 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)
Конструктори#
Конструктори використовуються для ручного створення об’єктів Vision, Signatureта Code , які необхідні для налаштування Vision Sensor поза VEXcode.
Vision#
Vision створює Датчик Зору.
Використання
Vision(smartport, brightness, sigs)
Параметри |
Опис |
|---|---|
|
Розумний порт, до якого підключено датчик зору, записується як |
|
Необов’язково. Значення яскравості для датчика зору, від 1 до 100. |
|
Необов’язково. Назва одного або кількох об’єктів Колірний підпис або Код кольору, розділених комами ( |
# 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 створює колірний підпис. На датчику зору можна одночасно зберігати до семи різних колірних підписів.
Використання:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Параметр |
Опис |
|---|---|
|
Індекс об’єкта |
|
Значення від |
|
Значення від |
|
Значення від |
|
Значення від |
|
Значення від |
|
Значення від |
|
Значення від |
|
Значення від |
Щоб отримати значення для створення колірного підпису, перейдіть до Vision Utility. Після налаштування колірного підпису скопіюйте значення параметрів з вікна конфігурації.
"""
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 створює колірний код. Для його використання потрібні щонайменше дві вже визначені колірні сигнатури. На датчику зору можна одночасно зберігати до восьми різних колірних кодів.
Використання:
Code(sig1, sig2, sig3, sig4, sig5)
Параметр |
Опис |
|---|---|
|
Раніше створений Кольоровий підпис. |
|
Раніше створений Кольоровий підпис. |
|
Необов’язково. Раніше створений Кольоровий підпис. |
|
Необов’язково. Раніше створений Кольоровий підпис. |
|
Необов’язково. Раніше створений Кольоровий підпис. |
# 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)