Здравейте,
Искам да ви покажа с какво се занимавам тази година в университета. Става въпрос за робот, който трябва да може да играе тенис на маса.
Роботът е разделен на няколко абстрактни части:
- зрение
- глава
- мозък
- гръбначен стълб
- крайници
Зрението трябва да може да засича топката и да изчислява позицията и спрямо робота. Главата движи двете камери по две оси, като позлволява следене на топката. Мозъкът трябва да взима тази информация и да преценява какво ще е следващото действие. Информацията за следващото действие се праща до крайниците чрез гръбначния стълб. Гръбначният стълб трябва да осигурява свъзаността на всички компоненти в системата.
Тъй като трябва доста сериозни сметки да се изпълняват в реално време, решихме да ползваме 6 компютъра, вместо един голям. Това е една от причините да изберем Robot Operating System (ROS) за проекта. ROS предлага пращане на събщения между различни компютри плюс много други разични екстри - от симулация на целия робот до автоматично конвертиране на иформацията в различни координатни системи по време на предаване на съощенията.
Моята задача в този проект е зрението и управлението на главата.
Всичко свързанео със зрението е написано на OpenCV и С++. Първо трябваше да се калибрират камерите по отделно, а след това като една стерео камера, за да може да се реконструира позицията на топката в 3Д координати спрямо робота. За да може да се сметне позицията на топката, то тя трябва да бъде намерена в изображенията от лявата и дясната камера. За сегментирането на топката ползвам както цвета, така и формата. След като се намери разликата в позицията на топката в лявото и дясното изображение, 3Д позицията на топката може бъде пресметната. Постигнатата точност е +-1мм по X и Y и +-3мм по Z oста. Всичко това работи в реално време за двете камери с по 16 фрейма за секунда.
Триангулираната позиция се праща на компютъра, който управлява главата. Компютърът е хPC Target, което означава, че върху него се пускат модели на системи проектирани чрез SIMULINK и MATLAB. Системата, която върви върху компютъра, включва два ПИД контролера за всеки мотор, като обратната връзка се осъществява чрез оптични ротационни енкодери.
На това филмче се вижда част от компютрите, както и как робота следи топката:
http://www.youtube.com/watch?v=vGCVWb4WEm0Следващата стъпка е да разработя алгоритъм, чрез който роботът ще предвижда къде ще бъде топката след няколко секунди, както и каква е равнината, върху която е топката.
За пълнота ще разкажа малко и за останалите модули.
На клипчето се вижда само една от ръцете на робота (другата още се прави), която е хаптик ръка и може да постигне изключително високи скорости. Тя също се контролира чрез xPC Target, като управлението ще се извършва от мозъка.
Планираме да ползваме два модела за мозъка на робота - единият класически, а другият изграден на базата на невронни мрежи.
Всички тези модули вървят върху различни машини и трябва да обменят информация в реално време. ROS е един отличен избор за решение на този проблем.
Надявам се като започне следващия семестър да има какво още да ви покажа