Rocky Rover:система роботизированного зрения PixyCam и Arduino 101
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Ровер на базе Intel Arduino 101 с PixyCam!
События Hackster Live - это круто! Intel спонсировала наше мероприятие Hackster Dallas и прислала нам немного Intel Arduino 101 для сборки роверов. Спасибо Intel, спасибо Arduino. А вот и Ровер, который я построил для этого мероприятия.
Я построил это устройство, следуя инструкциям Джонатана Хоттелла. Он снял несколько видеороликов, чтобы построить BLE Rover. И за этим легко следить! Посмотрите здесь. Вот видео от Джонатана Хоттелла.
У меня есть Ровер с 4-мя моторами, поэтому я последовал этому.
После постройки Ровера и подключения его к Блинку. Решил улучшить сборку и добавить PixyCam. Я переместил батарейный отсек вперед, чтобы установить камеру панорамирования / наклона.
PixyCam
PixyCam упрощает роботизированное зрение. Pixy - это датчик быстрого зрения для робототехники DIY, который легко научить Pixy объекту, просто нажав кнопку. Он способен одновременно отслеживать сотни объектов и предоставляет только те данные, которые отслеживает.
Я решил выследить апельсиновую тыкву.
Я удивлен, насколько легко это сделать. Вот ссылка на инструкции по подключению PixyCam к Arduino. Щелкните здесь для получения инструкций по сборке механизма поворота / наклона. Я рад, что на нем много фотографий, за которыми очень легко следить. Я выполнил инструкции по установке и сборке, как интегрироваться с Arduino. Я протестировал их примеры.
Вот что я узнал об API.
PixyCam Arduino API
Использовать Pixy с Arduino действительно просто. Вы просто включаете заголовки SPI и Pixy:
#include #include
И создайте глобальный экземпляр Pixy, поместив этого человечка за пределы вашего setup ()
и loop ()
функции:
Pixy pixy;
Самый важный метод в библиотеке Arduino - это getBlocks ()
. , который возвращает количество объектов, обнаруженных Pixy. Затем вы можете просмотреть pixy.blocks []
массив для информации о каждом обнаруженном объекте (один член массива для каждого обнаруженного объекта). Каждый член массива ( i
) содержит следующие поля:
-
pixy.blocks [i] .signature
Номер подписи обнаруженного объекта (1-7 для обычных подписей)
-
pixy.blocks [i] .x
Положение центра обнаруженного объекта по оси x (от 0 до 319)
-
pixy.blocks [i] .y
Положение центра обнаруженного объекта по оси Y (от 0 до 199).
-
pixy.blocks [i] .width
Ширина обнаруженного объекта (от 1 до 320)
-
pixy.blocks [i] .height
Высота обнаруженного объекта (от 1 до 200)
-
pixy.blocks [i] .angle
Угол наклона обнаруженного объекта, если обнаруженный объект имеет цветовой код.
-
pixy.blocks [i] .print ()
Функция-член, которая выводит информацию об обнаруженном объекте в последовательный порт.
Так что разговаривать с Pixy с помощью Arduino просто! Для получения дополнительной информации о библиотеке и API Arduino перейдите сюда. Вот код, используемый для Ровера. Я изменил исходный код BLE и добавил отслеживание объектов. Во время настройки:
void setup () {..... pixy.init (); ....}
Основной цикл выглядит примерно так:
void loop () {...... // считываем данные pixy и получаем блоки static int i =0; int j; uint16_t блоки; char buf [32]; int32_t panError, tiltError; блоки =pixy.getBlocks (); // если есть блоки if (блоки) {panError =X_CENTER-pixy.blocks [0] .x; tiltError =pixy.blocks [0] .y-Y_CENTER; panLoop.updatePan (panError); tiltLoop.update (tiltError); pixy.setServos (panLoop.m_pos, tiltLoop.m_pos); я ++; // фрейм остановит Arduino if (i% 10 ==0) {int trackedBlock =0; sprintf (buf, «Обнаружено% d:\ n», блоки); Serial.print (buf); длинный maxSize =0; for (j =0; j <блоки; j ++) {sprintf (buf, "блок% d:", j); Serial.print (buf); pixy.blocks [j] .print (); long newSize =pixy.blocks [j] .height * pixy.blocks [j] .width; если (newSize> maxSize) {trackedBlock =j; maxSize =newSize; }} int32_t followError =RCS_CENTER_POS - panLoop.m_pos; // Размер - это площадь объекта. // Мы сохраняем текущее среднее значение за последние 8. size + =pixy.blocks [trackedBlock] .width * pixy.blocks [trackedBlock] .height; размер - =размер>> 3; int forwardSpeed =ограничение (400 - (размер / 256), -100, 400); int32_t дифференциал =(followError + (followError * forwardSpeed))>> 8; int leftSpeed =ограничение (forwardSpeed + дифференциал, -400, 400); int rightSpeed =constrain (forwardSpeed - дифференциал, -400, 400); мотор1-> setSpeed (leftSpeed); // левый мотор3-> setSpeed (leftSpeed); мотор2-> setSpeed (rightSpeed); // левый мотор4-> setSpeed (rightSpeed); двойная ширина =pixy.blocks [trackedBlock] .width; if (width <=5) {} else if (width <20 &&! работает) {Serial.println ("работает"); мотор1-> бег (ВПЕРЕД); мотор3-> бег (ВПЕРЕД); мотор2-> бег (ВПЕРЕД); мотор4-> бег (ВПЕРЕД); running =true; } иначе, если (ширина> 80 &&! работает) {Serial.println ("работает"); motor1-> run (НАЗАД); motor3-> run (НАЗАД); motor2-> run (НАЗАД); motor4-> run (НАЗАД); running =true; } else if (width> =20 &&width <=80 &&running) {motor1-> setSpeed (128); мотор2-> setSpeed (128); мотор3-> setSpeed (128); мотор4-> setSpeed (128); motor2-> run (РЕЛИЗ); motor4-> run (РЕЛИЗ); motor1-> run (РЕЛИЗ); motor3-> run (РЕЛИЗ); работает =ложь; }}}}
Чтобы запустить Blynk без управления PixyCam, наденьте крышку объектива. Это гарантирует, что PixyCam не будет мешать управлению ботом. Если этот проект заинтересовал вас программированием на Arduino или использованием PixyCam в вашем следующем проекте, нажмите кнопку «Уважать проект» и подписывайтесь на меня.
Не стесняйтесь задавать вопросы.
Код
Рокки Ровер
Производственный процесс
- Часы видения Arduino pov
- Система сигнализации Arduino:SERENA
- Роботизированная рука, напечатанная на 3D-принтере Arduino
- Arduino Power
- Роботизированная рука, управляемая нунчук (с Arduino)
- Intel Arduino 101 BLE Blynk Tank
- Arduino101 / tinyTILE BLE:подходящие солнцезащитные очки
- Постоянство видения
- Arduino Apple Watch
- Рекомендации по проектированию освещения для роботизированных хирургических систем машинного зрения