Съдържание:

Самообучаващ се хаотичен робот: 3 стъпки
Самообучаващ се хаотичен робот: 3 стъпки

Видео: Самообучаващ се хаотичен робот: 3 стъпки

Видео: Самообучаващ се хаотичен робот: 3 стъпки
Видео: В СУ-Златица демонстрираха самообучаващ се дрон 2024, Декември
Anonim
Самообучаващ се хаотичен робот
Самообучаващ се хаотичен робот

Интересувате ли се от машинно обучение, AI и роботи? Не е нужно да работите в някакъв фантастичен университет. Това е описание на моя хаотичен робот. Това е много прост робот, който да демонстрира как да използвате кода за самообучение и как да го внедрите в платформа arduino, в този случай дължима Arduino. Това е много евтина платформа!

Кодът развива робота, така че роботът да се научи да пълзи. Той получава обратна връзка от мишката, която е изтеглена отзад. Кодът е "генетичен". Това означава, че редица индивиди се тестват, а най -добрите се пазят и ще имат бебета. Това означава, че кодът се развива по еволюционен начин.

Стъпка 1: Хардуер AKA на робота

Хардуер AKA на робота
Хардуер AKA на робота
Хардуер AKA на робота
Хардуер AKA на робота
Хардуер AKA на робота
Хардуер AKA на робота

Имате нужда от:

- 1 Arduino Due

- 8 микросерва

- 1 мишка PS/2

- 1 превключвател на нива

- някакъв вариант на сензорен щит или подобен, уморих се от сензорния щит и заварих своя.

-жици

-външно 5V захранване за сервомоторите

- няколко парчета метален скрап, малко лепило и някои стоманени нишки. И лента!

Затова поставете Due на пода. Поставете сервомоторите в пръстен около него. Сложете ги заедно с метален скрап, лепило и конец. Това е частта от хаоса! Тъй като е хаотичен в дизайна си, е непредсказуемо да се определи как да се движи, за да го накара да пълзи. Ето защо кодът за самообучение е пътят!

Съвети: използвайте някои доста тежки метални части, това улеснява движението на робота.

Свържете сервомоторите към дължимото, в моя случай те са свързани към D39, 41, 43, 45, 47, 49, 51, 53.

Свържете сервомоторите към външното 5V захранване. За целта изградете някакъв щит или използвайте сензорен щит или подобен. НЕ захранвайте сервомоторите от извода 5V на дължимите такси, това не е достатъчно, Due ще изгори. Използвах малка прототипна платка, за да разпределя 5 V към всички серво. Тази платка също така поддържа превключвателя на нивата за часовника на мишката PS/2 и линиите за данни. Платката захранва и мишката с 5V. Не забравяйте да свържете земята от външно захранване към Arduino дължината! схемите показват как да свържете всичко това.

Свържете PS/2 към захранване (5V) и заземяване. Свържете часовника и линията за данни на PS/2 към Due чрез превключвател на нивата. (дължи 3,3 V, PS/2 - 5 V). Свържете часовника на D12 и данните на D13.

За подробности относно протокола PS/2, това е много добра инструкция:

www.instructables.com/id/Optical-Mouse-Od…

Библиотеката PS/2 от jazzycamel, която използвах:

Стъпка 2: Кодът

Кодът
Кодът

Първо да кажа: НЕ съм програмист. Някои части са много обширни, разбира се, опитен програмист би могъл да го съкрати и така и така.

Кодът се самообучава и това е ядрото на проекта. Това е забавната част от това! Това означава, че роботът се развива и става все по -добър, в този случай той става по -добър в пълзенето. Удивителното в това е, че роботът ще еволюира до онова, на което му дадете обратна връзка. В този случай той плъзга PS/2 мишка и колкото по -дълго мишката се влачи, толкова по -високи точки получава.

Това също означава, че можете да използвате този код, за да обучите вашия робот да прави нещо друго, стига да се измерва и връща обратно на робота!

Както можете да видите на изображенията, мишката се влачи по тънък шнур. Отначало се влачеше в кабела на мишката. Кабелът обаче е някак твърд, така че роботът се научи да разклаща мишката, вместо да я влачи. Разтърсването доведе до високи точки …

Кодът използва 50 лица. Ядрото на това е масив от 50x50 байта.

Индивидът е масив от байтове. Когато индивида се използва за управление на робота, този индивидуал се изпраща до функция в кода, наречен "tolken".

В началото на пробег има 8 променливи m1, m2, m3, m4, m5, m6, m7 и m8 (по една за всяко серво). В този робот всички те имат постоянни начални стойности. В "tolken" mś се трансформират в цикъл случай/swich в зависимост от стойностите на индивида. например стойност "1" изпълнява следното: m1 = m1 + m2.

Ако индивидът е: 1, 2, 3, 0, 0, 0, 0….. тогава mś ще се трансформира по следния начин:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken е списък от 256 различни математически операции, така че всяка възможна стойност на масива individ представлява математическа промяна на m стойностите.

Процесът на tolken се извършва 4 пъти, с отчитане между всяка обиколка, генерирайки четири различни кода на двигателя за всеки "m". Моторните кодове са стойностите, които по -късно се изпращат към сервомоторите.

На всяка стъпка от еволюцията 4 индивида се състезават в пълзене. Най -добрите двама индивиди ще бъдат родители на две бебета, бебетата ще заменят двете най -лоши индивиди. Когато се правят бебета, сплит от "генетичен код" от единия родител се търгува за парче от другия родител, това създава два нови индивида.

Ако изобщо не изпълнява нито един индивид, ще настъпи мутация на индивидите, за да се генерират нови.

Можете да намерите кода в GitHub:

Стъпка 3: Как да го тренирате?

Това е сложната част. За да тренирате правилно, трябва да го "нулирате" след всяко бягане. Това означава, че трябва да го поставяте в едно и също положение всеки път.

Поставих няколко контролни точки вътре в кода, за да се уверя, че роботът е в началната си позиция.

Така че подравнете робота и го оставете да работи.

Той тества 4 индивида и след това избира най -добрите 2 за родители. След като замени най -лошото с бебетата, той отпечатва някои данни за представянето на индивидите. Той също така отпечатва масива 50x50. Разумно е да копирате това в Excel лист или подобен. (или напишете някакъв нужен код при обработка) Ако дължимата сума се нулира (това се случва по различни причини), тогава няма да загубите обучението си. Можете да копирате/поставите масива в кода и да продължите да тренирате, ако сте останали.

Роботът ми се научи да пълзи след няколко часа. Изтеглете видеото, за да го обходите. Не тръгна в посоката, която си мислех, че ще стане!

Опитайте и различни подове! Моят робот се представи най -добре на найлонов килим.

Възможни подобрения:

1. Би било по -добре да имате отделно nano, за да четете PS/2 мишката и да изпращате обработеното разстояние, преместено през сериен, към nano. Четенето на мишката ми PS/2 беше малко треперещо. Това е причината мишката да чете/изчиства части от кода.

2. някаква тестова платформа, която издърпа робота обратно в изходното му положение, ще ускори обучението.

3. Мисля, че е разумно да го тренирам малко по -бавно от мен. По -бавното обучение гарантира, че се тренира „в правилната посока“. Средното представяне на няколко тестови проби би могло да бъде възможен начин.

Препоръчано: