- Необходим хардуер:
- Изискване за програмиране:
- Настройване на обработка на Raspberry Pi:
- Електрическа схема:
- Програма за проследяване на топка Raspberry Pi:
- Работа на Raspberry Pi Ball Tracking Robot:
Полето на роботиката, изкуствения интелект и машинното обучение се развива бързо, че със сигурност ще промени начина на живот на човечеството в близко бъдеще. Смята се, че роботите разбират и взаимодействат с реалния свят чрез сензори и обработка на машинно обучение. Разпознаването на изображения е един от популярните начини, по които се смята, че роботите разбират обекти, като гледат на реалния свят през камера, точно както го правим ние. В този проект нека използваме силата на Raspberry Pi, за да изградим робот, който може да проследява топката и да я следва точно като роботите, които играят футбол.
OpenCV е много известен инструмент с отворен код, който се използва за обработка на изображения, но в този урок, за да улесним нещата, използваме IDE за обработка. Тъй като обработката за ARM също пусна библиотеката GPIO за обработка, вече няма да се налага да превключваме между python и обработка, за да работим с Raspberry Pi. Звучи готино нали? Така че нека започнем.
Необходим хардуер:
- Raspberry Pi
- Модул на камерата с лентов кабел
- Шаси за роботи
- Зъбни мотори с колело
- L293D двигател драйвер
- Банка за захранване или друг преносим източник на захранване
Изискване за програмиране:
- Монитор или друг дисплей за Raspberry pi
- Клавиатура или мишка за Pi
- Обработка на ARM софтуер
Забележка: Задължително е да имате дисплей, свързан към Pi чрез проводници по време на програмиране, защото само тогава може да се гледа видеото на камерата
Настройване на обработка на Raspberry Pi:
Както беше казано по-рано, ние ще използваме средата за обработка за програмиране на Raspberry Pi, а не начина по подразбиране за използване на python. И така, следвайте стъпките по-долу:
Стъпка 1: - Свържете вашия Raspberry Pi към монитора, клавиатурата и мишката и го включете.
Стъпка 2: - Уверете се, че Pi е свързан с активна интернет връзка, защото предстои да изтеглим няколко неща.
Стъпка 3: - Щракнете върху Processing ARM, за да изтеглите IDE за обработка за Raspberry Pi. Изтеглянето ще бъде под формата на ZIP файл.
Стъпка 4: - След като изтеглите, извлечете файловете в ZIP папката в предпочитаната от вас директория. Току-що го извадих на работния си плот.
Стъпка 5: - Сега отворете извлечената папка и кликнете върху файла с име обработка. Трябва да отвори прозорец, както е показано по-долу.
Стъпка 6: - Това е средата, в която ще въвеждаме кодовете си. За хората, които са запознати с Arduino, не се стряскайте ДА IDE изглежда подобно на Arduino, както и програмата.
Стъпка 7: - Имаме нужда от две библиотеки за нашия топка след програма за работа, за да инсталирате след това просто кликнете върху Sketch -> Import Library -> Добавяне на библиотека . Ще се отвори следният диалогов прозорец.
Стъпка 8: - Използвайте горното ляво текстово поле, за да потърсите Raspberry Pi и натиснете Enter, резултатът от търсенето трябва да изглежда така.
Стъпка 9: - Потърсете библиотеките с имена „GL Video“ и „Hardware I / O“ и кликнете върху install, за да ги инсталирате. Уверете се, че сте инсталирали и двете библиотеки.
Стъпка 10: - Въз основа на вашия интернет инсталацията ще отнеме няколко минути. След като приключим, сме готови със софтуер за обработка.
Електрическа схема:
Схемата на този проект за проследяване на топки Raspberry Pi е показана по-долу.
Както можете да видите схемата включва PI камера, модул за драйвер на двигателя и двойка двигатели, свързани към Raspberry pi. Цялата верига се захранва от мобилна банка за захранване (представена от AAA батерия в схемата по-горе).
Тъй като подробностите за щифтовете не са споменати на Raspberry Pi, трябва да проверим щифтовете, като използваме долната снимка
За да задвижваме двигателите, са ни необходими четири щифта (A, B, A, B). Тези четири щифта са свързани съответно от GPIO14,4,17 и 18. Оранжевата и бялата жица заедно образуват връзката за един двигател. Имаме две такива двойки за два двигателя.
Двигателите са свързани към модула L293D Motor Driver, както е показано на снимката, а модулът на драйвера се захранва от захранваща банка. Уверете се, че земята на захранващата банка е свързана със земята на Raspberry Pi, само тогава връзката ви ще работи.
Това е, че приключихме с нашата хардуерна връзка, нека се върнем към нашата обработваща среда и да започнем да програмираме, за да научим нашия робот как да проследява топката.
Програма за проследяване на топка Raspberry Pi:
Най- пълната програма за обработка на този проект се дава в края на тази страница, която можете директно да използвате. По-нататък, малко по-долу, обясних работата на кода, за да можете да го използвате за други подобни проекти.
Концепцията на програмата е много проста. Въпреки че намерението на проекта е да проследи топката, всъщност няма да го направим. Просто ще идентифицираме топката, използвайки нейния цвят. Както всички знаем, видеоклиповете не са нищо друго освен непрекъснати рамки от снимки. Затова правим всяка снимка и я разделяме на пиксели. След това сравняваме всеки цвят на пиксела с цвета на топката; ако се намери съвпадение, тогава можем да кажем, че сме намерили топката. С тази информация можем да идентифицираме и позицията на топката (цвят на пиксела) на екрана. Ако позицията е вляво, преместваме робота надясно, ако позицията е вдясно, преместваме робота наляво, така че позицията на пикселите винаги да остане в центъра на екрана. Можете да гледате видеото на Computer Vision на Даниел Шифман, за да получите ясна картина.
Както винаги започваме с импортиране на двете библиотеки, които изтегляме. Това може да стане чрез следващите два реда. Хардуерната I / O библиотека се използва за достъп до GPIO пиновете на PI директно от обработващата среда, библиотеката glvideo се използва за достъп до модула на камерата Raspberry Pi.
внос обработка.io. *; внос gohai.glvideo. *;
Във функцията за настройка ние инициализираме изходните щифтове, за да управляваме двигателя, а също така получаваме видеото от камерата pi и го оразмеряваме в прозорец с размер 320 * 240.
void setup () {размер (320, 240, P2D); видео = нов GLCapture (това); video.start (); trackColor = цвят (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
В невалидни Жребият е като безкраен цикъл кода вътре в този цикъл ще се изпълни, докато програмата се прекратява. Ако е наличен източник на камера, четем видеото, което излиза от него
void draw () {background (0); ако (video.available ()) {video.read (); }}
След това започваме да разделяме видео кадъра на пиксели. Всеки пиксел има стойност на червено, зелено и синьо. Тези стойности се съхраняват в променливата r1, g1 и b1
за (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Какво представлява текущият цветен цвят currentColor = video.pixels; float r1 = червен (currentColor); float g1 = зелено (currentColor); плаващ b1 = син (текущColor);
За да открием цвета на топката първоначално, трябва да кликнете върху цвета. След като щракнете, цветът на топката ще се съхранява в променлива, наречена trackColour .
void mousePress () {// Запазване на цвета там, където е щракната мишката в trackColor променлива int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
След като имаме цвета на пистата и текущия цвят, трябва да ги сравним. Това сравнение използва функцията dist. Той проверява колко близък е текущият цвят до цвета на пистата.
float d = dist (r1, g1, b1, r2, g2, b2);
В стойността на дист ще бъде нула точно съвпадение. Така че, ако стойността на dist е по-малка от определена стойност (световен рекорд), тогава приемаме, че сме намерили цвета на пистата. След това получаваме местоположението на този пиксел и го съхраняваме в най-близката променлива X и най-близо Y, за да намерим местоположението на топката
if (d <worldRecord) {worldRecord = d; най-близъкX = x; най-близо Y = y; }
Също така изчертаваме елипса около намерения цвят, за да покажем, че цветът е намерен. Стойността на позицията също се отпечатва на конзолата, това ще помогне много при отстраняване на грешки.
if (worldRecord <10) {// Начертайте кръг при запълване на проследявания пиксел (trackColor); инсулт тегло (4.0); удар (0); елипса (най-близкаX, най-близкаY, 16, 16); println (най-близъкX, най-близъкY);
Накрая можем да сравним позицията на най-близкото X и най-близкото Y и да регулираме двигателите по такъв начин, че цветът да стигне до центъра на екрана. Кодът по-долу се използва за завъртане на робота надясно, тъй като е установено, че X позицията на цвета е в лявата част на екрана (<140)
ако (най-близоX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); забавяне (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Завийте надясно"); }
По същия начин можем да проверим позицията на X и Y, за да управляваме двигателите в необходимата посока. Както винаги можете да прегледате долната част на страницата за пълната програма.
Работа на Raspberry Pi Ball Tracking Robot:
След като сте готови с хардуера и програмата, е време да се позабавлявате. Преди да тестваме нашия бот на земята, трябва да се уверим, че всичко работи добре. Свържете вашия Pi за наблюдение и стартиране на кода за обработка. Трябва да видите видео емисията на малък прозорец. Сега вкарайте топката в рамката и кликнете върху нея, за да научите робота, че трябва да проследява този конкретен цвят. Сега преместете топката около екрана и ще забележите, че колелата се въртят.
Ако всичко работи според очакванията, пуснете бота на земята и започнете да играете с него. Уверете се, че стаята е равномерно осветена за най-добри резултати. Цялостната работа на проекта е показана във видеото по-долу. Надявам се, че сте разбрали проекта и сте се радвали да изградите нещо подобно. Ако имате някакви проблеми, можете да ги публикувате в раздела за коментари по-долу или да помогнете.