В этой статье будет рассмотрен пример проекта, в котором отображается информационная панель, сообщающая о состоянии связи между роботами с помощью VEXlink, а также о состоянии Jetson. Проект ai_demo размещен на нашем Github. Этот демонстрационный проект собирает данные с процессора Jetson через последовательное соединение USB. Как только данные получены, они отображаются на экране V5 Brain, а также передаются партнерскому роботу V5, подключенному через VEXlink.
ПримечаниеДля этого проекта требуется последняя версия расширения VS Code Extension для V5. Загрузите расширение VS Code для V5 здесь.
NVIDIA Jetson Nano для VEX V5 Brain Communications
Процессор Jetson содержит приложение, которое собирает следующие данные из программного обеспечения VEX AI:
Данные о местоположении робота:
- Местоположение робота по X,Y в метрах от центра поля.
- Азимут (курс), высота (тангаж), вращение (крен) робота — все в радианах.
Данные обнаружения объектов (три типа):
- Эти данные представляют собой объект, обнаруженный камерой VEX AI Intel.
- Эти данные описывают объект со ссылкой на изображение с камеры.
- Значения X, Y, ширины и высоты указаны в пикселях. Значения пикселей относятся к верхнему левому углу изображения и поля обнаружения объектов. Разрешение изображения 640x480.
Обнаружение карты (тип два):
- Эти данные представляют собой местоположение объекта на поле в той же системе координат, что и GPS-датчик, и сообщается в метрах.
- Каждый объект также содержит местоположение объекта относительно центра поля. Значения X и Y указаны в метрах от центра поля по соответствующей оси. Значение Z — это метры от тайлов поля (высота).
Объект обнаружения (тип третий):
- При этом инкапсулируется вся информация об обнаруженных объектах.
- Каждый объект содержит значение, которое представляет классификацию обнаруженного объекта. (Идентификатор класса: 0 = GreenTriball, 1 = RedTriBall, 2 = BlueTriBall)
- Каждый объект также содержит вероятность, которая отражает уверенность ИИ VEX в обнаружении. Это после фильтра в model.py, который удаляет обнаружения с низкой вероятностью.
- Кроме того, камера VEX AI Intel Camera сообщает глубину объекта в метрах.
- Обнаружение изображения и обнаружение карты прикреплены к каждому объекту и представляют координаты объекта на изображении, а также в реальном мире.
Разбивка программы ai_demo:
Main.cpp
Стандарт для проектов VEX включает:
Объявите экземпляр класса Jetson. Этот класс используется для отправки запросов на данные в Jetson, а также для получения данных через последовательное соединение USB.
#define MANAGER_ROBOT 1
Объявите экземпляр класса robot_link. Этот объект будет использоваться для подключения и передачи данных между этим роботом и роботом-партнером. Этот же проект можно загрузить на двух отдельных роботов. Одному роботу понадобится строка:
//#определить MANAGER_ROBOT 1
Прежде чем загрузить код во второго робота, вам нужно будет закомментировать эту строку:
Класс robot_link устанавливает VEXlink робота и управляет передачей и получением данных между двумя роботами. В этой статье мы не будем подробно останавливаться на том, как работает этот класс. Было бы неплохо сначала понять, как работает VEXlink. Более подробную информацию об использовании API V5 VEXlink в этом документе. описываются новые библиотеки и способы их эффективного использования для взаимодействия роботов.
-
Обработчики событий соревнований
Одно из самых больших различий между VAIC и VRC заключается в отсутствии периода контроля водителя. Вместо этого есть два автономных периода: период изоляции и период взаимодействия. В этом примере для каждого автономного периода предусмотрены отдельные процедуры. Поскольку API VEX не поддерживает два разных обратных вызова, в программе должен быть флаг, определяющий, какая процедура должна быть выполнена. В этом примере программы «firstAutoFlag» используется для вызова функции изоляции при первом включении автономного режима и функции взаимодействия при втором включении автономного режима. Следует отметить, что если по какой-то причине совпадение необходимо сбросить, демонстрационную программу необходимо будет перезапустить, чтобы можно было сбросить первый AutoFlag.
-
Основной()
Это основная задача данного проекта. Он начинается с вызова vexcodeInit() для правильной настройки среды VEXcode. Далее объявляется локальный объект AI_RECORD для хранения данных, которые мы получаем от Jetson. Также настроена отдельная задача для обновления экрана самыми актуальными данными. Код этой задачи содержится в файле Dashboard.cpp. Автономный обратный вызов также регистрируется для обработки инициирования автономных периодов.
Основной цикл while() начинается с копирования последних данных из объекта jetson_comms в наш локальный объект AI_RECORD. Затем он передает информацию о местоположении робота объекту ссылки, чтобы ее можно было передать нашему роботу-партнеру. После завершения обработки данных он запрашивает дополнительные данные у Jetson и переходит в режим ожидания 66 миллисекунд. Частота опроса этих данных составляет 15 Гц. Нет смысла проводить опрос быстрее, поскольку данные системы искусственного интеллекта обновляются с частотой около 15 Гц.
Примечание: данные карты Jetson необходимо запрашивать только для одной задачи.