Автор Тема: Самообучаващ се робот  (Прочетена 38899 пъти)

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« -: Февруари 26, 2010, 08:12:25 pm »
Докато си бях в България миналата ваканция започнах работа по един робот, за който искам да ви разкажа. Проектът все е още не е завършен - трябва му софтуер, но все пак смятам, че ще е интересен.
Проектът представлява робот, който се самообучава да избягва препядствия. Изграден е върху платформата разработена в клуба по роботика - метално шаси, 2 модифицирани сервота, гуми и трета опора. Електрониката на работа е моя разработка - роботът притежава 7 инфрачервени сензора за обекти, които се управляват от микроконтролер чрез мултиплексори. Контролерът е PIC 18F4620. На платката се намират и два H-моста изградени с MOSFET транзистори, които също се управляват от контролера. Друг основен модул, който роботът притежава, е 3-осен цифров акселерометър SMB-380 на BOSH, аз го купих от Olimex с платка, тъй като е изключително ситен за запояване. Акселерометърът поддържа i2c и spi, в случая избрах i2c.
Роботът ще използва вероятностно обучение, идеята е следната: всяка ситуация, в която се намира робота, се характеризира от сензорите му, тоест може да различава 2^7 ситуации, което са общо 128. Във всяка ситуация вероятността робота да предприеме каквото и да е действие (да завие под определен ъгъл наляво, надясно, да тръгне назад) първоначално е еднаква. След като предприеме това действие той ще се блъсне или ще избегне препядствието. Ако се блъсне, това ще бъде отчетено от акселерометъра и вероятността втори път в такава ситуация да предприеме същото действие се намалява. Така след известен брой блъскания роботът ще започне да избягва препядствия. Интересното при този метод за обучение е, че роботът може да се адаптира изцяло сам към промени в средата. Например ако се обърне захранването на някой от моторите или пък някой сензор се повреди и не подава коректна информация. В края на март, когато се прибера продължавам работа по софтуера и ще го кача и него. Имам дори и идея, ако ми остане време, да сложа едно XBee и да напиша някаква програмка, която визуализира показанията на акселерометъра в реално време. Също така мисля да направя и една симулация накрая на MS Robotics Studio и С# и да сравня резултатите, но това сигурно ще е след изпитите ми май месец. Ето снимки и очаквам всякакви въпроси и коментари :)
Снимка1
Снимка2
Снимка3
Снимка4
Снимка5
Снимка6
Снимка7
Схема
Схемата е стандартен уиндоуски векторен файл, защото битмап щеше да е прекалено голям, а пък jpeg губи някои детайли.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

kotaraka

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 114
    • Профил
Самообучаващ се робот
« Отговор #1 -: Февруари 26, 2010, 10:00:39 pm »
Добре изглежда.
Ще очаквам финалната версия.
Успех.
Радостин Киров   26г.     Бургас

http://vbox7.com/play:c8b99132
http://vbox7.com/play:c627c6b9

hunter

  • Направо Робот! :)
  • *****
  • Публикации: 638
    • Профил
Самообучаващ се робот
« Отговор #2 -: Февруари 26, 2010, 11:29:38 pm »
Поздравления за идеята ти, наистина товае добро. Електрониката със платформата изглежда превъзходно както винаги си се постарал  :D Тука класата си личи. Имам само едно допълнение което може би не си предвидил но не е за подценяване ситуация когато робота се навре на тясно. Споредмен такава не е изключено да има етозащо аз мисля че стрябва да има и сензори отзад подобен тип робот самоубочаващ се трябва да е адекватен във всяка ситуация а подобен проблем без такива сензори би го объркало  ;)
Цвятко Цветков/ Бургас

http://www.youtube.com/watch?v=I1y67hzRWQY&feature=related

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #3 -: Февруари 26, 2010, 11:53:45 pm »
Ами и аз си мислих за сенозр отзад, само, че не е необходим, защото когато всички сензори засичат обек, то това означава, че евентуално отзад е свободно. Ако е свободно и тръгне назад няма да се удари, ако се удари с времето ще се научи да се завърта и да проверява накъде може, ако не може на никъде може просто да реши да спре...Така на една лекция по мшинен интелект ми разказваше лекторът как е наблюдавал един робот с невронна мрежа, чиято задача била да се движи напред и да избягва препядствия. Пуснали го на някакво изложение и имало толкова много хора, съответно препядствия, та робота се "самоубил", просто спрял да се движи :) И все пак ако се наложи ще сложа още един или два сензора отзад, но не вярвам да трябва :)
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

spp

  • Global Moderator
  • *****
  • Публикации: 414
    • Профил
    • http://robotics.cnc-bg.net/
Самообучаващ се робот
« Отговор #4 -: Февруари 27, 2010, 01:55:02 pm »
Светльо,идеята ти е много интересна,но имам няколко въпроса .
-Ако обектите се разместят и променят разстоянието си между тях,как робота ще реагира?Мислил ли си?
Пример:
При обучението си робота вижда крака на стола,който е на 150 мм от крака на масата,но разстоянието по между им е 100мм.Генерира случайно посоката и решава,че може да мине,между двата крака.И минава спокойно.Отчита,че при този тип препятсвие това ще му е алгоритъма,но някой минава и побутва стола.Разстоянието между крака на стола и карка на масата все още е в рамките на 150мм,но между тях вече не е 100мм а 40,което няма да позволи преминаването на платформата.
-Освен,че ще трябва да определи препятсвията,мислиш ли  да му зададеш твърд маршрут с "карта"?Ако върви безцелно има вероятнос да се върти в малко пространство и всеки път да вижда едни и същи препятствия,но под различен ъгъл.Това ще доведе до много бързо запълване на 127-те комбинации и до блокирането му.
Това,което ти предлагам е нещо,което обмислях за моя робот,но за момента съм на тема ЦНЦ и робота ми е на заден план.
Предложението ми е следното:
-Да определиш поле на движение.Полето можеш да го определиш с поне 3бр датчици(например ултразвук)разположени на еднакво разстояние и достатъчно мощни да покрията областа на работа.Така робота ще има ясна работна зона.В работната зона вече ,ще получи задача да премине от точка А до точка Б,като алгоритъмът му може да му позволи или строго определен маршрут или да избере такъв сам.
Сега вече и в двата случая няма нужда да му се указва нищо друго.Той сам ще трябва да се справи с препятствията вътре в зоната си.
Слави Петков
София 49г

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #5 -: Февруари 27, 2010, 05:17:50 pm »
Ами проблемът със масата и стола мисля, че робота ще се усети, че не може да мине защото, отпред има 3 бр. датчици, от които поне един ще се активира и директно попада в друга ситуация. А пък дори и да има някакво "знание" за една ситуация, ако то доведе до лош изход, т.е. робота се блъсне, то и съответно "знанието" се променя. Идеята за сега на робота е да се учи да избягва препядствия, не да следва какъвто и да е маршрут. Иначе една реална ситуация, т.е. нареждане на препядствията по един начин, може да се възприеме по различни начини от робота, т.е. да я вижда по различен ъгъл и съответно да са активирани различни сензори. Единствения проблем е, че ако наистина се върти в малко пространство, може да се научи да прави неща, които не важат винаги, а само в конкретния случай. Но това е само на теория, какво ще стане наистин не знам, а пък и лесно може да се избегне като се пуска в разнообразни конфигурации на препядствията. Иначе, ако реша да го правя по-умен да следва маршрут от т.А до т.Б ще имам предвид идеята с работната зона. :)
П.С. Сега видях, че в първия пост съм написал, че 2^7 е 127, а то си е 128 както и да го гледа човек така, че ще го коригирам.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

hunter

  • Направо Робот! :)
  • *****
  • Публикации: 638
    • Профил
Самообучаващ се робот
« Отговор #6 -: Февруари 27, 2010, 10:26:56 pm »
Имам въпросче, гледам MOSFET си ги монтирал на цокъл може би и от там на друг цокъл как го правиш че ми се струва много добра идея :) И какви сензори си ползвал за инфрареда имам предвит.
Цвятко Цветков/ Бургас

http://www.youtube.com/watch?v=I1y67hzRWQY&feature=related

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #7 -: Февруари 28, 2010, 12:29:02 am »
Ами за инфрачервените датчици си пише на схемата - TSOP2438. Иначе номера с мосфетите го бях видял много отдавна. Ползва се цангов цокъл, върху който мосфета може да се запои, след като се разтворят малко краката на SO8 корпуса. Ще потърся статията и ще пусна линка, ако я намеря.
Едит: Успях да намеря снимка, която май е достатъчна: ТУК
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

hunter

  • Направо Робот! :)
  • *****
  • Публикации: 638
    • Профил
Самообучаващ се робот
« Отговор #8 -: Февруари 28, 2010, 10:41:06 am »
Благодаря :)  искам да те питам TSOP при черен предмет няма ли да е неадикватен? На моя робот от много тъмно кафява мебел се бъркаше смисъл светлината не се отразяваше и TSOP убисваше.
Цвятко Цветков/ Бургас

http://www.youtube.com/watch?v=I1y67hzRWQY&feature=related

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #9 -: Февруари 28, 2010, 11:48:33 am »
Ами всичко е въпрос на излъчена светлина. Тъй като управлявам светодиодите в импулсен режим, тока който минава през тях е доста голям, от порядъка на 0.5-0.7А (зависи от настройката на тримера), но за съвсем кратко, някъде около 1-2 милисекунди. Това позволява на диодите да излъчват доста голямо количество енергия. Цвета наистина оказва влияние върху разстоянието, от което ще се засече даден обект. Например 3те сензора отпред засичат бял предмвет на максимална дистанция 60см, а черен на 15см, но въпреки това го засичат. Така, че единствения проблем е, че не можеш да кажеш на какво разстояние е даден обект от робота, освен ако не знаеш цвета му. Но сензорите в случая просто са да казват има или няма обект така, че това не е проблем за този робот.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

hunter

  • Направо Робот! :)
  • *****
  • Публикации: 638
    • Профил
Самообучаващ се робот
« Отговор #10 -: Февруари 28, 2010, 01:09:43 pm »
Светльо може ли като ти остане време да обясниш каква е ролята на мултиплексора смисъл сигнала който постъпва в него как се преработва и изпраща към контролера и от там контролера как реагира и ако моженякаква блокова схема на кода който мислиш да съсзадеш интересно ми е как ще пресмята ситуациите. Ясно е че при дадена ситуация записва резултата но как като 1 или 0 или по друг принцип. А при друга ситуация как би променило вече записан резултат в памета си. Нещо такова ако може, за да се вникне по на дълбоко в замисъла. Доколкото разбрах след като прочетах в гугъл мултиплексора ще го ползваш като един вид неврона мрежа или бъркам.
Цвятко Цветков/ Бургас

http://www.youtube.com/watch?v=I1y67hzRWQY&feature=related

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #11 -: Март 01, 2010, 12:14:54 am »
Мултиплексорът е интегрална схема, която позволява да изпратиш дадане сигнал до различен приемник, който може да се избере. Така на схемата, която съм дал U2 e мултиплексор, пинът, на който се подава входния сигнал, е Х, а самият входен сигнал е квадратен сигнал с честота 38kHz. Чрез пиновете А, B, C се избира номерът на изходния пин от X0 до Х7, на който да бъде препратен входа Х. Така, за да накарам някой сензор да излъчи светлина, например сензор 5 - 101 в двоична, просто трябва да сетна А-1, В-0, С-1. Това означава, че сигналът 38kHz се ипраща на пин Х5 и диода светва. Тъй като генерирането на сигнала се извършва в PWM периферията на микроконторлера, много по-лесно е да се настрои веднъж и да си работи постоянно, отколкото при всяко светкане на светодиод да се настройва и да се пуска. За това се ползва пинът INH (Inhibit, Забрани), когато е в активно логическо ниво входният сигнал от Х не се изпраща на нито един от изходите Х0 до Х7. Абсолютно по същия начин работи и мултиплексорът U3, при него обаче като сетнеш АВС не избираш къде да отиде Х, ами кой вход от Х0 до Х7 да бъде свързан с изхода Х. И двата мултиплексора са абсолютно идентични, въпросът е чисто концептуален. Попринцип, ако ползваш мултиплексори се печелят пинове. В случая ми трябват 6 пина вместо 16, за да управлявам максимум 8 сензора. Освен това ми трябва само един пин, на който да се генерират 38kHz, както и само един пин с външно прекъсване, който да слуша избрания в момента сензор. Ето как и работи цялата схема:
1. Задават се ABC т.е. избира се светодиод, където да бъде пратен сигнала 38kHz(единия мултиплескор) и кой TSOP да бъде слушан(другия мултиплексор)
2. Деактивира се INH.
3. Илзъчва се светлинен импулс, ТSOP-a се активира и контолера съответно обработва генерираното прекъсване.
Надявам се да е станало ясно, ако трябва още ще обяснявам :)  Идеята е, че всяка ситуация си има номер от 0 до 127. Да кажем, че роботът може да направи само четири неща в дадена ситуация, това означава, че за всяка една ситуация трябва да се помни вероятността да се извърши едно от 4те действия. Представи си 128 структури, които отговарят на всяка една ситуация и в тях е записана вероятността за всяко едно дейтствие да бъде изпълнено в тази ситуация. Иначе щом ми остане малко свободно време ще направя една блок схема на софтуера и ще я кача, най - късно като кача и кода :Р, но ще гледам да е по рано :)
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

hunter

  • Направо Робот! :)
  • *****
  • Публикации: 638
    • Профил
Самообучаващ се робот
« Отговор #12 -: Март 01, 2010, 02:17:39 pm »
Стана ми ясно :D , но от това което ми стана ясно разбрах че сигнала няма да се излъчва едновремено по всички свето диоди както и няма едновремено да слушат всички приемници. Според зависи от АВС ще е избрана само една двойка (излъчвател и приемник), тогава обаче ако е избрана да излъчва и слуша лявата двойка а имаш предмет от дясно как става номера. Или през определен инервал от време се сменят последователно двойките за да проверява навсякъде или трябва да спира и да проверява това как си го замислил?
Цвятко Цветков/ Бургас

http://www.youtube.com/watch?v=I1y67hzRWQY&feature=related

Alternative

  • Вече знае какво е робот!
  • *****
  • Публикации: 48
    • Профил
Самообучаващ се робот
« Отговор #13 -: Март 01, 2010, 11:02:21 pm »
Според мен просто ще се посетят всеки от 8-те сензора последователно(т.е. няма да слушаш само за точно един определен), практически без да се изчаква излишно време м/у тяx (всъщност какво е необходимото време на мултиплексорите да изменят избрания пин- може ли да се пренебрегне?). След това по вече изцяло създадената картина на околността ще се вземе решение какво да се направи. Това  поне ми се струва логичният вариант.
За мен е по интересно какъв тип ще са вземаните решения, от колко ще може да избира(напред/назад/ 90'ляво/ 90' дясно или ще бъде завой на Х градуса на тази страна - което би вдигнало възможните решения поне според мен прекалено много), и кога всъщност ще се счете едно решение за правилно (т.е например сензорите предизвикали това събитие да се променят(намалеят), или изцяло всички сензори да виждат празното пространство, или Х време след вземането на решение да няма сблъсък).
Даниел Ангелов, гр. София

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Самообучаващ се робот
« Отговор #14 -: Март 02, 2010, 03:50:25 pm »
Ами сензорите просто ще се обхождат последователно. На сензор му трябва около 1-2 мс да реагира, което прави сканирането на 7те сензора не повече 15мс, което е достатъчно кратък период. Ами това са двата въпроса, на които и аз се чудя. Мисля да може да избира в дадена ситуация следните действия: напред, назад, завой 45 градуса наляво, завой 45 градуса надясно, завой 90 градуса надясно, завой на 90 градуса наляво. За завиването ще има и допълнителен фактор дали да завие около оста си, тоест да движи двете колела в противоположни посоки, или просто да спира едното колело. В ситуациите с повече от един изход с толкова възможности роботът ще може да развива по-сложно поведение, отколкото ако бяха само 4 - напред, назад, наляво и надясно. Иначе нова ситуация е когато състоянието на някой сензор се промени. Това означава, че ако до тогава роботът не се е блъснал, значи последното решение е било правилно.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания