Программирование с использованием датчика зрения ИИ в VEXcode EXP C++

Убедитесь, что у вас настроены цветовых сигнатур и цветовых кодов с помощью датчика AI Vision, чтобы их можно было использовать с вашими блоками. Более подробную информацию об их настройке вы можете узнать, прочитав статьи ниже:

Датчик AI Vision также может обнаруживать AI-классификации и AprilTags. Чтобы узнать, как включить эти режимы обнаружения, перейдите по ссылке:

Более подробную информацию об этих отдельных командах и о том, как их использовать в VEXcode, можно найти на сайте API.


Получайте визуальные данные с помощью датчика зрения ИИ

Каждая команда AI Vision Sensor будет начинаться с имени настроенного AI Vision Sensor. Во всех примерах в этой статье имя используемого датчика AI Vision будет AIVision.

takeSnapshot

Метод takeSnapshot делает снимок того, что в данный момент видит датчик AI Vision, и извлекает данные из этого снимка, которые затем можно использовать в проекте. При создании снимка вам необходимо указать, данные о каком типе объекта датчик AI Vision должен собирать:

  • AЦветовая подпись илиЦветовой код
    • Эти визуальные подписи начинаются с имени датчика искусственного интеллекта, двойного подчеркивания, а затем имени визуальной подписи, например: AIVision1__Blue.
  • Классификации ИИ - aivision::ALL_AIOBJS
  • апреляТеги- aivision::ALL_TAGS

При создании снимка будет создан массив всех обнаруженных объектов, которые вы указали. Например, если вы хотите обнаружить «синий» цветовой признак, а датчик AI Vision обнаружил 3 разных синих объекта, данные со всех трех будут помещены в массив.

В этом примере делается снимок цветовой сигнатуры «Синий» с помощью датчика искусственного зрения AIVision1. Он отображает количество объектов, обнаруженных в массиве, и делает новый снимок каждые 0,5 секунды.

while (true) {
// Получить снимок всех объектов синего цвета.
AIVision.takeSnapshot(AIVision1__Blue);

// Перед извлечением данных проверяем, был ли обнаружен объект на снимке.
если (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, мсек);
}

объекты

Каждый объект из снимка имеет различные свойства, которые можно использовать для предоставления информации об этом объекте. Метод объектов позволяет получить доступ к этим свойствам.

Доступны следующие объекты недвижимости:

  • идентификатор
  • centerX и centerY
  • originX и originY
  • ширина
  • высота
  • угол
  • существует
  • счет

Чтобы получить доступ к свойству объекта, используйте имя датчика зрения ИИ, затем метод объекта, а затем индекс объекта.

Индекс объекта указывает, какое конкретно свойство объекта вы хотите получить. После создания снимка датчик AI Vision автоматически сортирует объекты по размеру. Самому большому объекту присваивается индекс 0, а объектам меньшего размера присваиваются более высокие индексные номера.

Например, вызов ширины самого большого объекта будет иметь вид AIVision1.objects[0].width.

идентификатор

Свойство id доступно только для AprilTags и AI Classifications.

Утилита AI Vision отслеживает три AprilTags. Каждая метка идентифицируется, определяется местоположением и обозначается контуром, что указывает на ее отслеживание системой. Идентификаторы AprilTag в этом примере — 0, 3 и 9.

ДляAprilTagсвойство id представляет собой обнаруженный номерAprilTag ID.

Определение конкретных AprilTags позволяет осуществлять выборочную навигацию. Вы можете запрограммировать своего робота на движение к определенным меткам, игнорируя другие, эффективно используя их в качестве указателей для автоматизированной навигации.

Утилита AI Vision отслеживает четыре объекта: два BuckyBall и два Ring. Каждый объект идентифицируется, локализуется и обозначается контуром, что указывает на его отслеживание системой. Утилита запоминает идентификатор объекта, в данном примере это Красный шар, Синий шар, Зеленое кольцо и Красное кольцо.

Дляклассификаций ИИсвойство id представляет собой конкретный тип обнаруженной классификации ИИ.

Идентификация конкретных Классификации ИИпозволяет роботу фокусироваться только на определенных объектах, например, хотеть двигаться только к красному бакиболу, а не к синему.

Дополнительную информацию о классификациях ИИ AprilTags и и о том, как включить их обнаружение в утилите AI Vision, можно найти в этих статьях.

centerX и centerY

Это координаты центра обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Бакибол имеет прямоугольник отслеживания вокруг себя, а на этикетке выше указано, что его положение по оси X составляет 176, а положение по оси Y — 117. Центр прямоугольника отслеживания подсвечивается, чтобы продемонстрировать, что положение измеряется от центра.

Координаты CenterX и CenterY помогают в навигации и позиционировании. Датчик AI Vision имеет разрешение 320 x 240 пикселей.

На изображении датчик искусственного интеллекта отслеживает два синих куба. Вокруг кубов имеются прямоугольники отслеживания, один из которых расположен гораздо ближе к камере. У ближайшего из них позиция Y равна 184, а у дальнего — позиция Y равна 70.

Видно, что объект, расположенный ближе к датчику AI Vision, будет иметь более низкую координату CenterY, чем объект, расположенный дальше.

В этом примере, поскольку центр поля зрения датчика AI Vision находится в точке (160, 120), робот будет поворачивать направо до тех пор, пока координата centerX обнаруженного объекта не станет больше 150 пикселей, но меньше 170 пикселей.

while (true) {
  // Получить снимок всех объектов синего цвета.
  AIVision.takeSnapshot(AIVision__Blue);

  // Перед извлечением данных убедитесь, что объект был обнаружен в снимке.
  если (AIVision.objectCount > 0) {

    если (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Привод.поворот(направо);
    } иначе {
      Привод.остановка();
    }
  }
  wait(5, мс);
}

originX и originY

OriginX и OriginY — координаты верхнего левого угла обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Бакибол имеет прямоугольник отслеживания вокруг себя, а на этикетке выше указано, что его положение по оси X составляет 176, а положение по оси Y — 117. Верхний левый угол прямоугольника отслеживания подсвечен, чтобы показать, что исходное положение измеряется от его верхнего левого угла.

Координаты OriginX и OriginY помогают в навигации и позиционировании. Объединив эту координату с шириной и высотой объекта, можно определить размер ограничивающей рамки объекта. Это может помочь при отслеживании движущихся объектов или навигации между объектами.

ширина и высота

Это ширина или высота обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Вокруг бакибола имеется прямоугольник отслеживания, а на этикетке выше указано, что его ширина составляет 80 пикселей, а высота — 78 пикселей. Красные стрелки выделяют прямоугольник отслеживания, демонстрируя его ширину и высоту.

Измерения ширины и высоты помогают идентифицировать различные объекты. Например, Бакибол будет иметь большую высоту, чем Кольцо.

На изображении датчик искусственного интеллекта отслеживает два синих куба. Вокруг кубов имеются прямоугольники отслеживания, один из которых расположен гораздо ближе к камере. Ближний имеет ширину 144 и высоту 113, а дальний — ширину 73 и высоту 84.

Ширина и высота также указывают расстояние до объекта от датчика AI Vision. Меньшие значения обычно означают, что объект находится дальше, тогда как большие значения говорят о том, что он ближе.

В этом примере для навигации используется ширина объекта. Робот будет приближаться к объекту до тех пор, пока ширина не достигнет определенного размера, а затем остановится.

while (true) {
  // Получить снимок всех синих объектов.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Перед извлечением данных убедитесь, что объект был обнаружен в снимке.
  если (AIVision.objectCount > 0) {

    если (AIVision.objects[0].width < 250.0) {
      Привод.движение(вперед);
    } иначе {
      Привод.остановка();
    }
  }
  ждать(5, мсек);
}

угол

Анимация красного и зеленого квадратов, вращающихся вместе, демонстрирующая значение угла на 360 градусов.

Свойство angle доступно только дляцветовых кодов и

Это показывает, ориентирован ли обнаруженный Цветовой кодили AprilTag по-разному.

Датчик искусственного интеллекта на изображении отслеживает цветовой код: зеленый, затем синий. На видеотрансляции виден зеленый куб, установленный на синем кубе. Значение угла цветового кода выделено и составляет 87 градусов, что указывает на то, что цветовой код ориентирован вертикально.

Вы можете увидеть, ориентирован ли робот по-разному относительно цветового кода илиAprilTag , и принять решения по навигации в соответствии с этим.

Датчик искусственного интеллекта на изображении отслеживает цветовой код: зеленый, затем синий. На видеозаписи видно, как зеленый куб находится рядом с синим кубом, но они расположены под неудобным углом по сравнению с датчиком. Значение угла цветового кода подсвечивается и составляет 0 градусов, что указывает на то, что угол цветового кода не может быть считан.

Например, если цветовой код не обнаружен под правильным углом, то робот не сможет правильно захватить представляемый им объект.

счет

Свойство баллов используется при обнаруженииклассификаций ИИ с помощью датчика зрения ИИ.

Утилита AI Vision отслеживает четыре объекта: два BuckyBall и два Ring. Каждый объект идентифицируется, локализуется и обозначается контуром, что указывает на его отслеживание системой. Утилита также выводит оценку классификации ИИ для каждого объекта, в этом примере каждая оценка составляет 99%.

Показатель уверенности показывает, насколько точно датчик AI Vision определяет объект. На этом изображении он на 99% уверен в идентификации классификаций ИИ этих четырех объектов. Эту оценку можно использовать, чтобы убедиться, что ваш робот фокусируется только на очень надежных обнаружениях.

существует

Свойство существует используется для определения того, была ли обнаружена указанная Визуальная сигнатура в последнем сделанном снимке.

Это позволяет проверить, были ли обнаружены какие-либо объекты в предыдущем снимке. Это свойство вернет True, если объект существует, и False, если объект не существует.


objectCount

Метод objectCount возвращает количество обнаруженных объектов в последнем снимке.

На изображении датчик искусственного интеллекта отслеживает два синих куба. Вокруг кубов имеются прямоугольники отслеживания, один из которых расположен гораздо ближе к камере.

В этом примере обнаружено два объекта с цветовой сигнатуройи кодом «Синий». Они оба будут помещены в массив при использовании метода takeSnapshot.

Этот фрагмент кода постоянно обновляет EXP Brain, сообщая ему количество обнаруженных объектов. Исходя из приведенного примера, он будет многократно отправлять значение 2, что указывает на то, что обнаружено два объекта.

while (true) {
// Получить снимок всех синих объектов.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Перед извлечением данных проверяем, был ли обнаружен объект на снимке.
если (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, мсек);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: