Пока ждал виртурилку, полтора месяца назад, у меня зародилась идея, сделать робота "собаку". Ну правда не совсем "собаку" в прямом смысле слова, но в некоторой степени что-то похожее на неё, в плане поведения.
Проект является чисто любительским, что называется "для души".
Сам проект назвал Гафк (Gafk).
Из чего состоит Гафк:
1. Поворотная голова
2. Мозг
3. Шасси
Поворотная голова
На данный момент это обычная веб-камера, которая приводится в движение при помощи 3-х сервоприводов.
Сервоприводы работают от Арудины. Сама Ардуина управляется прогой (Мозгом) от компа, через виртуальный COM-порт.
Мозг
Это прога на компе, написана она C++ и использует OpenCV для машинного зрения, т.е. того что видит Гафк со соей башки
Прога общается с Ардуиной и посылает ей команды по управлению сервоприводами.
Общий алгоритм работы головы Гафка таков:
1. Пробегаемся веб-камерой по горизонтали и вертикали, в поисках профиля лица
2. Если профиль лица найден, определяем в нём само лицо в фронтальном положении + запоминаем текущее положение веб-камеры в трэкинг памяти
3. Если лицо в фронтальном положении найдено, подправляем положение веб-камеры таким образом, чтобы лицо в фронтальном положении было точно по середине кадра.
4. Если лицо в фронтальном положении найдено, в нём ищем глаза
5. Если глаза найдены (а их должно быть как минимум два), то вычисляем по глазам линию отклонения от горизонтали кадра и поворачиваем веб-камеру, так, чтобы это отклонение было минимальным.
6. Держим в фокусе найденный профиль лица и стараемся его не потерять.
7. Если найденный профиль лица потеряли, то пытаемся найти профиль лица по трэкинг памяти
8. Если найденный профиль лица потеряли. а трэкинг память пуста, то возвращаемся к П.1
Шасси
Тут у меня пока точной определённости нету, ещё не знаю как Гафк будет перемещаться. У g0l'а "подсмотрел" пару вариантов:
и .
Может забью на "колёсные" варианты перемещения и сделаю что нибудь гексаподоподобное
Пока думаю над этими вариантами.
Что дальше?
В целом задач по проекту выше крыши. Вот часть из них:
0. Отказаться от Ардуины и веб-камеры, в пользу виртурилки (уж тут она рулит! )
1. Приделать гироскоп 3х осевой и акселерометр 3х осевой - для лучшей координации в просранстве
2. Приделать мозгу работу с оптическими потоками
3. На основе оптического потока, попробовать реализовать 3D видение пространства, в дальнейшем понадобится для SLAM
4. Если на основе оптического потока сделать 3D видение пространства не получится, то буду маяться со стереозрением
5. Перенести часть работы с машинный зрением с CPU на GPU. уж OpenCV это позволяет
6. Подрубить СУБД для "памяти" Мозга - что да и как, пока сам не знаю
7. Либо самом реализовать, либо подрубить бота для ведения диалогов, причём в устной форме - спасибо Гуглу за такую возможность
8. Приделать к голове "уши" - для этого будет достаточно 2-х чувствительных микрофонов типа Шорох
В общем работы по проекту Гафк много, но по маленьку делаю
Кому интересно, как на данный момент работает "Голова" + "Мозг", прошу глянуть видео: