Всем привет. Сегодня речь пойдет о голове промо-робота Oscar. Зачастую людям интересно общаться c роботом как с себе подобным: смотреть в лицо и искать эмоциональный отклик в ходе диалога. Поэтому голова нашего промо-робота должна стать одним из основных элементов, привлекающих внимание человека.

Чтобы голова действительно “ожила”, мы обозначили следующие требования:

  • Голова должна иметь две степени свободы: наклон и поворот
  • Должен присутствовать трекинг собеседника головой
  • Глаза робота должны реагировать на собеседника

Конструктивно голову разбили на две части:

  • Шея
  • Глаза

Дизайн головы


Первым делом мы начали с дизайна головы, дабы понимать каков будет форм фактор и как разместить все желаемое в голове. Вообще данный процесс итеративный и порой очень не легкий, особенно для инженеров, которые до этого проектировали только шестерни.

После пары итераций получили набросок, которой приблизительно учитывал расположение серв и механику глаз.



Шея


Голова робота снабжена двумя степенями свободы: наклон и поворот головы. Основу конструкции шеи составляют профили и ребра, которые мы уже применяли в манипуляторе.

Для управления степенями свободы используется наша кастомная серва. Вращать головой будем через скорость, т.е. скорость вращения головы будет зависит от положения в кадре отслеживаемого лица, благо серва умеет контролировать скорость. Чем дальше лицо от центра, тем быстрее будет поворот головы. По мере приближения к центру скорость будет уменьшаться до нуля. Таким образом, получится достаточно плавное вращение головой.

Глаза


Тут тоже не хотелось тратить много времени, поэтому мы решили поискать уже существующие проекты аниматронных глаз, хорошо что таких проектов вагон и маленькая тележка. Из найденных нами, особенно хочется отметить один проект.



Его мы и взяли за основу. И все было хорошо, пока мы не начали пытаться совместить механику глаз, имеющийся дизайн головы и механику шеи. В конце концов пришлось разработать собственный «велосипед». Получилась такая конструкция глаз:




Глаза работают на базе arduino_nano. Для управления серв взяли стандартную библиотеку. Запитываются сервы от отдельного источника питания, arduino не способна выдавать достаточный ток. Сперва были незначительные проблемы с “дребезгом”, который портил всю эстетику. Потом нашли причину — некачественный стабилизатор питания, заменив на другой аналогичный — проблема ушла. И вот еще что, хобби сервы не любят длинных проводов, поэтому мы убрали лишнюю длину между сервомашинками и контроллером. Движение глазами реализовано путем задания угла поворота сервы.

В качестве теста будем использовать второе лицо нашего государства — Дмитрия Анатольевича Медведева. Вдруг за усердный труд на голову “свалится” грант на развитие проекта.



Как это работает?


Работает все это достаточно просто, т.к. голова и глаза должны реагировать на человека, то и источник информации у них будет идентичный – видео камера расположенная в голове робота. Используется камера от Raspberry. Кстати, тут мы допустили небольшой недочет — взяли камеру с небольшим углом обзора. В ходе тестирований стало понятно, что надо ставить широкоугольную камер — тогда мимику глаз можно сделать более живой, т.к. можно будет отводить глаза на больший угол.

В качестве обработчика изображения используется Raspberry Pi 3. Хочется сказать, что “малинка” справляется с этой задачей уверенно, но правда на небольшом разрешении, при этом давая ощутимую нагрузку на все 4 ядра.

Детектирование лиц осуществляется классическим инструментом — каскадом Хаара. При этом частота детектирования лица составляет 9 — 12 FPS.

По аналогии с человеком, робот сперва переводит взгляд на собеседника, а потом поворачивает голову к нему. Не смотря на доступную относительно большую скорость вращения головы, мы замедлили ее. Приведя скорость поворота головы в соответствие со скоростью детектирования лиц, мы получили плавные и грациозные движения.



Собраной головой мы остались довольны. А как считаете вы? Что еще можно добавить или сделать?

Что дальше?


Сейчас мы завершаем сборку второго манипулятора, после чего переключимся на изготовление платформы с туловищем. И все это надо будет обличить в достойный корпус. Будем надеяться, что в следующей статье мы представим наше детище в полной красе.

Вы держитесь здесь, вам всего доброго, хорошего настроения и здоровья!
Поделиться с друзьями
-->

Комментарии (26)


  1. zikolach
    15.03.2017 13:59
    +1

    Отличная работа! Почему-то всегда казалось что камеры правильнее устанавливать непосредственно в глаза :)


    1. Seredin
      15.03.2017 14:09

      На самом деле все зависит от поставленных задач.
      В большинстве случаев, когда речь заходит о антропоморфных роботах, то люди пытаюсь проводить параллель с устройством человеческого организма… некоторые даже ЭВМ пытаются разместить в голове)) встречал такой проект на просторах инета.
      В нашем случае камера — это импровизированный нос… не хотелось делать дырку во лбу — похоже на меткий выстрел снайпера)


      1. zikolach
        15.03.2017 14:17

        Главное вовремя остановить фантазию! ;) Камеру кажется можно замаскировать полупрозрачной пленкой...


        1. Seredin
          15.03.2017 14:52

          Про пленку думали, но т.к. у нас лицо белого цвета, то черный объектив камеры все равно был бы виден, Поэтому отказались от этого варианта и оставили ярко выраженную черную точку) Думаю маскировка пленкой уместна при черном или темном фоне.


          1. Hateman31
            15.03.2017 21:24

            родимое пятно? ))


  1. noonv
    15.03.2017 14:32

    Смотрится очень хорошо!


  1. BelBES
    15.03.2017 14:38

    Крутотенюшка!


  1. kgbplus
    15.03.2017 14:49

    А можете рассказать подробнее — как управляли сервами (программный ШИМ?) и как запитывали их (сервы)? А то я делал давно подобный проект, здорово намучился как раз с этим.


    1. Seredin
      15.03.2017 15:44
      +1

      Добавил описание в статью.


  1. CharlesFrost
    15.03.2017 15:07

    А рот у него будет? Хотя бы небольшая световая полоска.

    p.s. В боевом варианте в глаза можно лазеры встроить… :) Система наведения у вас уже есть.


    1. Seredin
      15.03.2017 15:53

      По задумке старались сделать так что бы верхний изгиб подбородка напоминал улыбку. Дабы из бежать светодиодов и прочего. Как-то так это должно было выглядить:

      Чуть позже доработаем форму подбородок — сделаем его немного тоньше, а изгиб более ярко выраженным.


  1. IronHead
    15.03.2017 18:12
    +3

    Я бы вместо рта встроил светодиодные матрицы. На них можно показывать различную мимику.
    Вот тут человек подобное делал, только для глаз


  1. AVI-crak
    15.03.2017 21:43

    Вижу отсутствие дрожания рамки захвата изображения, поздравлю.
    Это весит больше чем представленная механика.
    Почти все используют стандартную библиотеку, без попытки разобраться как она работает.

    У вас задача — управлять шариком в двух плоскостях. С этой функцией хорошо справляется линейный электродвигатель. В вашем варианте — шарообразный линейный двигатель. Это то-же шаговый двигатель — только вывернутый мехом на изнанку. Подобным направлением плотно занимается http://www.differentr.ru/.


    1. Seredin
      15.03.2017 21:49

      Спасибо за похвалу касательно детектирования лица.
      Что такое линейный привод/актуатор — знаю, а вот про «шарообразный линейный двигатель» не слышал. Попробовал погуглить и ничего не нашел. Можете дать ссылку или картинку показать?


      1. AVI-crak
        16.03.2017 01:55

        Что такое линейный привод/актуатор — это отдельно двигатель + отдельно механика.
        Линейный электродвигатель — это отдельно плоский статор + отдельно плоский ротор. Поезд на магнитной подвеске имеет схожую технологию.
        Но случае с шариком трудно будет разместить в нём полый магнит, да ещё и на уникальное сочетание полюсов. А вот намотать обмотку — легко.
        Вам просто нужно отпечатать шарик глаза с готовыми микроканалами для обмоток на поверхности, и уже потом в ручном или машинкой — намотать туда провод. После аккуратно замазать лишнюю пустоту эпоксидкой, и отполировать. Шлейф, наверное придётся оставить пустое окно для него.
        Есть вариант с короткозамкнутым витком (не нужны шлейфы) — но управление получается сложным для старта.

        Ответная часть сложнее в сборке и намотке. Точнее обмотку придётся мотать на шарике отдельно, фиксировать стойкой эпоксидкой, и растворять шарик. И уже потом клеить на внутреннюю часть сферы глаза.

        В идеале — камера должна быть в глазе.


        1. Seredin
          16.03.2017 10:14

          Технология интересная, но простой ее не назовешь. По сути предлагаете сделать перекрестную намотку как на картинке, где красная полоска — одна степень, синя — другая? Если с намоткой все понятно, то как должен выглядеть магнит внутри сферы? или я что-то путаю?

          image


          1. AVI-crak
            16.03.2017 15:01

            Магнит у вас получится в случае свободного доступа к высокоточному чпу станку по металлу. Выточить полый шарик из магнитной стали — это достаточно сложно и очень, очень дорого.
            Дешевле намотать обмотки на пластик.
            Наверное имеет смысл поставить что-то уровня 3dmax, и потренироваться.
            Обмотка секционная, но не перехлёст. Там получается большой сдвиг, весь диапазон на одну полосу разместить не получится. Но их можно размещать в шахматном порядке, с разным шагом.


        1. SvSh123
          17.03.2017 16:59

          Из пушки по воробьям.
          Не спорю, идея хорошая, но в реализации, мягко говоря, сложновата. Не нужны здесь такие точность и быстродействие.


  1. yurisv3
    16.03.2017 09:32

    просто глаза смотрелись лучше, чем голова+шея, вот чего-то явно (и хорошо заметно) не хватает. вы не пробовали посадить живого человека на аналогичный тест и понаблюдать? там должна быть совсем нехитрая мелочь, типа где-то задержаться, а где-то ускориться


  1. yurisv3
    16.03.2017 09:42

    P.S. понаблюдал сам.

    получается так — живой человек поворачивает голову и головой же в основном отслеживает. НО. человек не истукан, поэтому его поза постоянно меняется, в т.ч. и поворот головы, и вот тогда работают глаза. вообще, это очень интересно выходит — не мешало бы поштудировать на тему body language.


    1. Seredin
      16.03.2017 10:29

      Предложение интересное — «Робот владеющий невербальной техникой общения», если рассматривать мимику и жесты в целом. Тут думаю хорошо бы подошла нейросеть. Или уже есть решения на данную тему?


      1. yurisv3
        16.03.2017 11:20

        не совсем так, или даже совсем не так. эмоции — это как раз то, что не связано (напрямую) с интеллектом, но создают характер, индивидуальность. «щенок глуп, но очень мил!». а эмоции очень даже транслируются посредством движения. посмотрите внимательно на роботов в «Звездных войнах», тот же C-3PO. вам просто надо час-два посидеть и пообщаться с аниматором, который «оживляет» персонажи. не надо никаких нейронных сетей — несколько базовых движений и их комбинации, хорошо еще генератор энтропии прикрутить, чтобы перемешивать их случайным образом.


  1. OstrovCity
    17.03.2017 21:51

    Хорошо, но моргает медленно, словно засыпает


    1. Seredin
      18.03.2017 15:30

      Тут да… на веки поставили серву которая не шибко быстрая, другой под рукой не оказалось)


  1. evg_voronov
    19.03.2017 19:29

    Интересно узнать, почему сервы плохо работают с длинными проводами, и какая максимальная безопасная длинна?


    1. Seredin
      19.03.2017 21:05

      Основная проблема заключается в помехах которые могут создавать другие электронные устройства. Если просто подключить серву к ардуино и пошевелить ею, то может и с 1 метром провода будет нормально работать, а вот когда будет подключено несколько серв от одного источника питания и находиться рядом, тот тут будет твориться бесовщина)