Зрение#
Введение#
Дрон VEX AIR оснащен двумя визуальными датчиками, которые обнаруживают и отслеживают идентификаторы AprilTag. Это позволяет дрону анализировать окружающую среду, следить за объектами и реагировать на основе обнаруженных визуальных данных.
Ниже приведён список всех доступных блоков:
Действия — Управление видеопотоком и захват данных об объекте.
получить данные объекта — Захватывает данные для идентификаторов AprilTag.
Настройки — Отрегулируйте, к каким обнаруженным объектам будет осуществляться доступ.
Установить элемент объекта Vision — Выбирает конкретный объект из списка обнаруженных объектов.
Значения — Получение информации о наличии объекта, его классификации и свойствах.
Объект визуализации существует — Сообщает, обнаружен ли объект.
Идентификатор объекта Vision — AprilTag — Проверяет, совпадает ли обнаруженный идентификатор AprilTag с конкретным идентификатором.
Количество обнаруженных объектов в поле зрения — Сообщает количество обнаруженных объектов.
Свойство объекта Vision — Извлекает такие подробности, как:
centerX & centerY — Координаты положения центра в поле зрения датчика.
аэродинамический — Угол объекта относительно переднего датчика зрения или градусы, необходимые для того, чтобы дрон был направлен на объект.
вращение — Ориентация объекта.
originX & originY — Координаты положения верхнего левого угла в поле зрения датчика.
id — Идентификационный номер AprilTag ID.
Действия#
получить данные объекта#
Блок стека получить данные объекта фильтрует данные из кадра датчика зрения. Датчики зрения могут распознавать идентификаторы AprilTag.
В наборе данных хранятся объекты, упорядоченные по ширине от наибольшего к наименьшему, начиная с индекса 0. Доступ к свойствам каждого объекта осуществляется с помощью блока Свойство объекта Vision. Если соответствующие объекты не обнаружены, сообщается о пустом наборе данных.
получить данные [все AprilTags v] из камеры Vision [вперёд v]
Параметр |
Описание |
|---|---|
подпись |
Фильтрует набор данных, чтобы включить только данные с указанной подписью. Доступные подписи: все AprilTags. |
камера |
Датчик изображения используется для получения данных либо вперед, либо вниз. |
Пример
при запуске
[Climb upward when an AprilTag ID is detected.]
взлететь на [300] [мм v] ▶
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
если <объект Vision существует?> то
набор высоты [вверх v] на [200] [мм v] ▶
Настройки#
установить элемент объекта Vision#
Блок стека set Vision object item задает, какой элемент в наборе данных следует использовать.
установить элемент объекта Vision [1]
Параметры |
Описание |
|---|---|
элемент |
Номер элемента в наборе данных, который следует использовать. |
Пример
при запуске
[Display the smallest-appearing AprilTag ID.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
установить элемент объекта Vision (количество объектов Vision)
вывести (объект Vision [id v]) в консоль ▶
Ценности#
Объект зрения существует#
Логический блок Объект Vision существует сообщает, обнаруживает ли указанный датчик Vision в данный момент какие-либо объекты.
Верно — Указанный датчик зрения обнаруживает объект.
Ложь — Указанный датчик зрения не обнаруживает объект.
<объект Vision существует?>
Параметр |
Описание |
|---|---|
Этот блок не имеет параметров. |
Пример
при запуске
[Climb upward when an AprilTag ID is detected.]
взлететь на [300] [мм v] ▶
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
если <объект Vision существует?> то
набор высоты [вверх v] на [200] [мм v] ▶
Объект визуализации — AprilTag ID#
Объект Vision — это AprilTag ID. Логический блок указывает, является ли AprilTag ID конкретным идентификационным номером.
Верно — Идентификатор AprilTag — это число.
Неверно — Идентификатор AprilTag не является числом.
<Vision object is AprilTag ID [1]>
Параметры |
Описание |
|---|---|
Идентификационный номер AprilTag |
Число для сравнения с обнаруженным идентификационным номером AprilTag от 0 до 37. |
Пример
при запуске
[Display when the target AprilTag ID is detected.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
если <Vision object is AprilTag ID [21]> то
вывести [Target found!] в консоль ▶
конец
Количество объектов в поле зрения#
Блок отчета Vision object count отображает количество обнаруженных объектов в наборе данных в виде целого числа.
(количество объектов Vision)
Параметры |
Описание |
|---|---|
Этот блок не имеет параметров. |
Пример
при запуске
[Display how many AprilTag IDs are detected.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
вывести (количество объектов Vision) в консоль ▶
ждать [0.2] секунд
Свойство объекта Vision#
После использования блока получить данные объекта каждому объекту (показано ниже) присваивается несколько свойств.
(объект Vision [ширина v])
Все значения свойств, кроме id, описывают положение, размер, ориентацию или направление обнаруженного объекта в момент использования блока получить данные объекта. Эти значения измеряются в пикселях или градусах. Каждый датчик зрения имеет разное разрешение:
Разрешение лицевой стороны: 640 x 480 пикселей.
Направлено вниз: 640 x 400 пикселей
Параметр |
Описание |
|---|---|
свойство |
Which property of the detected object to use: |
ширина#
Свойство width отображает ширину обнаруженного объекта в пикселях в виде целого числа от 1 до 640.
(объект Vision [ширина v])
Пример
при запуске
[Show if the AprilTag ID appears large or small.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
если <(объект Vision [ширина v]) [math_greater_than v] [100]> то
вывести [Large] в консоль ▶
иначе
вывести [Small] в консоль ▶
конец
конец
ждать [0.2] секунд
высота#
Свойство height отображает высоту обнаруженного объекта в пикселях в виде целого числа от 1 до 480.
(объект Vision [высота v])
Пример
при запуске
[Show if the AprilTag ID appears large or small.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
если <(объект Vision [высота v]) [math_greater_than v] [100]> то
вывести [Large] в консоль ▶
иначе
вывести [Small] в консоль ▶
конец
конец
ждать [0.2] секунд
центрX#
Свойство centerX отображает x-координату центра обнаруженного объекта в пикселях в виде целого числа от 1 до 640.
(объект Vision [centerX v])
Пример
при запуске
[Show if an AprilTag ID is to the left or the right of the camera.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
если <(объект Vision [centerX v]) [math_less_than v] [320]> то
вывести [To the left] в консоль ▶
иначе
вывести [To the right] в консоль ▶
конец
конец
ждать [0.2] секунд
центрY#
Свойство centerY отображает y-координату центра обнаруженного объекта в пикселях в виде целого числа от 1 до 480.
(объект Vision [centerY v])
Пример
при запуске
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
взлететь на [800] [мм v] ▶
получить данные [все AprilTags v] из камеры Vision [вперёд v]
если <объект Vision существует?> то
если <(объект Vision [centerY v]) [math_less_than v] [240]> то
вывести [Below the target!] в консоль ▶
иначе
вывести [Above the target!] в консоль ▶
конец
иначе
вывести [No target found!] в консоль ▶
несущий#
Свойство пеленг сообщает угол, указывающий положение объекта относительно дрона. Поведение зависит от используемого датчика зрения.
Значение 0° указывает на то, что центр объекта и датчик выровнены. Положительные значения означают, что объект находится справа, а отрицательные — слева.
Датчик |
Возвраты |
|---|---|
Вниз |
Передняя часть дрона должна повернуться на несколько градусов, чтобы выровняться с центром объекта, от –180º до 180º. |
Вперед |
Смещение объекта влево или вправо от центра датчика зрения составляет от –180º до 180º. |
(объект Vision [азимут v])
Примеры
при запуске
[Align the front of the drone to an AprilTag ID.]
установить скорость поворота (15)%
взлететь на [500] [мм v] ▶
вечно
получить данные [все AprilTags v] из камеры Vision [вниз v]
если <объект Vision существует?> то
если <[-20] [math_less_than v] (объект Vision [азимут v]) [math_less_than v] [20]> то
[Hover once sensor is centered on the AprilTag ID.]
зависнуть
воспроизвести звук [успех v] ▶
иначе если <(объект Vision [азимут v]) [math_less_than v] [-21]> то
поворот [влево v]
иначе
поворот [вправо v]
вращение#
Свойство rotation отображает ориентацию обнаруженного идентификатора AprilTag в виде целого числа в градусах от 1 до 359.
(объект Vision [вращение v])
Пример
при запуске
[Turn left or right based on the rotation of an AprilTag ID.]
взлететь на [1000] [мм v] ▶
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
если <объект Vision существует?> то
если <[240] [math_less_than v] (объект Vision [вращение v]) [math_less_than v] [300]> то
поворот [влево v] на [90] градусов ▶
иначе если <[60] [math_less_than v] (объект Vision [вращение v]) [math_less_than v] [120]> то
поворот [вправо v] на [90] градусов ▶
иначе
зависнуть
originX#
Свойство originX отображает координату x верхнего левого угла ограничивающего прямоугольника обнаруженного объекта в пикселях в виде целого числа от 1 до 640.
(объект Vision [originX v])
Пример
при запуске
[Draw lines to the AprilTag ID origin from all corners.]
вечно
очистить экран
get [all AprilTags v] data from vision [forward v] camera
если <объект Vision существует?> то
нарисовать линию [0] [0] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [0] [480] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [640] [0] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [640] [480] (объект Vision [originX v]) (объект Vision [originY v]) на экране
конец
ждать [0.2] секунд
происхождениеY#
Свойство originY отображает Y-координату верхнего левого угла ограничивающего прямоугольника обнаруженного объекта в пикселях в виде целого числа от 1 до 480.
(объект Vision [originY v])
Пример
при запуске
[Draw lines to the AprilTag ID origin from all corners.]
вечно
очистить экран
get [all AprilTags v] data from vision [forward v] camera
если <объект Vision существует?> то
нарисовать линию [0] [0] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [0] [480] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [640] [0] (объект Vision [originX v]) (объект Vision [originY v]) на экране
нарисовать линию [640] [480] (объект Vision [originX v]) (объект Vision [originY v]) на экране
конец
ждать [0.2] секунд
идентификатор#
Свойство id отображает идентификационный номер обнаруженного идентификатора AprilTag в виде целого числа.
(объект Vision [id v])
Пример
при запуске
[Display the detected AprilTag ID.]
вечно
получить данные [все AprilTags v] из камеры Vision [вперёд v]
очистить консоль
если <объект Vision существует?> то
вывести (объект Vision [id v]) в консоль ▶
конец
ждать [0.2] секунд