У цій статті буде розглянуто приклад проекту, який відображає інформаційну панель, яка повідомляє про стан зв’язку між роботами за допомогою 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 AI у виявленні. Це після фільтра в model.py, який видаляє виявлення з низькою ймовірністю.
- Крім того, камера VEX AI Intel повідомляє про глибину об’єкта в метрах.
- Виявлення зображення та виявлення карти додаються до кожного об’єкта для відображення координат об’єкта на зображенні, а також у реальному світі.
Розбивка програми ai_demo:
Main.cpp
Стандарт включає для проектів VEX:
Оголошення екземпляра класу Jetson. Цей клас використовується для надсилання запитів на дані до Jetson, а також для отримання даних через послідовне з’єднання USB.
#define MANAGER_ROBOT 1
Оголосити екземпляр класу robot_link. Цей об’єкт використовуватиметься для з’єднання та передачі даних між цим роботом і роботом-партнером. Цей самий проект можна завантажити на двох окремих роботів. Для одного робота знадобиться рядок:
//#define MANAGER_ROBOT 1
Перш ніж завантажити код на другого робота, вам потрібно буде закоментувати цей рядок:
Клас robot_link встановлює VEXlink робота та керує передачею та отриманням даних між двома роботами. У цій статті ми не будемо вдаватися в подробиці того, як працює цей клас. Було б гарною ідеєю спочатку зрозуміти, як працює VEXlink. Для отримання більш детальної інформації про використання V5 VEXlink API, цей документ пояснює нові бібліотеки та те, як їх ефективно використовувати для спілкування між роботами.
-
Організатори змагань
Однією з найбільших відмінностей між VAIC і VRC є те, що немає періоду контролю водія. Натомість є два автономних періоди, період ізоляції та період взаємодії. У цьому прикладі існують окремі підпрограми для кожного автономного періоду. Оскільки VEX API не підтримує два різні зворотні виклики, у програмі має бути позначка, щоб визначити, яку процедуру потрібно виконати. У цьому прикладі програми «firstAutoFlag» використовується для виклику функції ізоляції, коли автономний увімкнено вперше, і функції взаємодії, коли автономний увімкнено вдруге. Слід зазначити, що якщо з якоїсь причини збіг потрібно скинути, демонстраційну програму потрібно буде перезапустити, щоб можна було скинути firstAutoFlag.
-
Головна()
Це головне завдання для цього проекту. Він починається з виклику vexcodeInit(), щоб правильно налаштувати середовище VEXcode. Далі оголошується локальний об’єкт AI_RECORD для зберігання даних, які ми отримуємо від Jetson. Також встановлюється окреме завдання для оновлення екрана з найновішими даними. Код для цього завдання міститься у файлі dashboard.cpp. Автономний зворотний виклик також зареєстрований для обробки, коли ініціюються автономні періоди.
Основний цикл while() починається з копіювання останніх даних з об’єкта jetson_comms у наш локальний об’єкт AI_RECORD. Потім він передає інформацію про місцезнаходження робота об’єкту посилання, щоб її можна було передати нашому роботу-партнеру. Після завершення обробки даних він запитує додаткові дані від Jetson і перебуває в режимі сну на 66 мілісекунд. Частота опитування для цих даних становить 15 Гц. Немає причин проводити опитування швидше, оскільки дані системи AI оновлюються приблизно з частотою 15 Гц.
Примітка: дані карти Джетсона потрібно запитувати лише одним завданням.