Телеприсутствие Tod Bot — cходить за кофе не вставая из-за стола
После неудачного предыдущего поста и вынужденного отсутствия, мы возвращаемся на Хабр и продолжаем освещать проект «Робот Tod Bot». В данном посте хочется рассказать о пополнение функционала робота — реализации телеприсутствия. Теперь управление роботом доступно из любой точки мира. Как это работает и как, по нашему мнению, должен выглядить хороший интерфейс телеприсутсвия — читайте под катом. Ну и, конечно, всеми любимая картинка в эту тему.Как говорит нам вики, телеприсутствие — это набор технологий, позволяющий получить впечатление нахождения в другом месте, отличного от нашего физического местонахождения. Высшим пилотажем реализации телеприсутствия, на мой взгляд, была бы передача осязания, обоняния, зрения, слуха, вкуса к возможности перемещения в пространстве. Таким образом, смысл технологий заключаются в возможности воздействовать на окружающую среду и получении обратной связи в виде тех ощущений, которые испытывает пользователь, присутствуя в том месте.Для того, чтобы обеспечить пользователю убедительный эффект присутствия, как минимум, необходимы ряд технологий, которые позволят: Получать и передавать видеопоток Получать и передавать звук Перемещаться в пространстве Возможность манипулировать предметами в удаленной среде Говоря о нашем роботе, у него телеприсутсвие реализовано посредством веб-интерфейса. У данного подхода есть неоспоримое преимущество — независимость от используемой платформы на стороне клиента.
Видео Для получения видео на стороне робота мы используем RGB камеру Kinect и дополнительную веб-камеру, в нашем случае это встроенная в ноутбук вебка, но возможно и использование отдельной. Одна — фронтальная, где мы, собственно, и видим все происходящее, другая — под ноги, где видны все предметы, которые потенциально могут нам помешать при управлении роботом. Изображения с камер расположены в веб-интерфейсе удобным и естественным для человека образом. Если мы хотим увидеть что у нас под ногами, то мы опускаем голову вниз, тот же принцип используется и в нашем веб-интерфейсе — мы переводим взгляд на нижний экран.Обратная видеосвязь осуществляется за счет веб-камеры, расположенной на стороне клиента. Полученная картинка отображается на дисплее робота или на ноутбуке, установленном на мобильную платформу. Передача видеопотока организована через протокол SIP — это аналог протокола Skype, который широко используется как мини-АТС в офисах и на сайтах-сервисах.Звук Для передачи звука мы задействуем встроенную в Kinect сетку микрофонов. Эти микрофоны достаточно хорошего качества, что сводит к минимуму возникновение различных шумов. Для передачи аудиопотока используем все тот же SIP.В дальнейшем мы хотим задействовать микрофоны Kinect по максимуму и реализовать передачу стереозвука. Несомненно, это позволит пользователю получить еще большее ощущение эффекта телеприсутствия.Перемещение в пространстве Что же касается перемещения, то есть два варианта удаленного управления роботом: ручное и автономное. Так как наш робот уже умеет самостоятельно ориентироваться в пространстве, то глупо было бы не использовать эту возможность и здесь. Как и человеку, для робота необходимо ориентироваться в пространстве, и для этого он использует карту помещения, предварительно построенную на основе сенсорной информации.В web-интерфейсе для более удобного ориентирования пользователя в помещении в нижнем левом углу выведена мини-карта, которая пригодится нам для любого режима управления. Мы всегда находимся в центре мини-карты, а сама карта вращается и перемещается соответственно движению роботу. Так мы можем понять, где именно находится робот, а при двойном клике по ней разворачивается глобальная карта.Ручное управление Режим настоящего хардкора. В этом режиме мы управляем робот с клавиатуры клавишами стрелок и вольны ехать куда угодно, даже невзирая на препятствия. В итоге получается подобие гоночного симулятора от первого лица, только на другом конце провода реальный робот и реальное окружение. Ко всему прочему, так же доступно управление скоростями в виде ползунков. Первый ползунок отвечает за линейную скорость, а второй — за скорость поворота робота. Не смотря на кажущуюся простоту, по первой управлять таким образом достаточно сложно из-за отсутствия ощущения габаритов.Автономная навигация Автономная навигация предполагает сведение роли пользователя к минимуму. Пользователю необходимо и достаточно будет указать одну либо несколько точек назначения, и робот, прокладывая маршрут и объезжая препятствия, самостоятельно будет перемещаться по ним. При этом будет сохраняться как визуальный, так и звуковой контакт. При необходимости, пользователь может прекратить выполнение автономного перемещения и перейти в ручной режим управления. Для автономного режима будет так же актуальна функция следования за собеседником, реализация которой в наших планах.Не смотря на кажущуюся полноту функционала, все еще есть над чем работать. Мы хотим сделать web-интерфейс своего рода «пультом управления» с индикаторами уровня заряда батареи и прочих жизненно важных для робота датчиков, через который будут доступны настройка и калибровка робота.[embedded content]
Манипулирование предметами в удаленной среде Функцией манипуляции предметами может похвастать далеко не каждый робот телеприсутствия. Для этого есть ряд причин, одними из которых является дороговизна самих манипуляторов, стоимость которых порой соизмерима со стоимостью самих роботов и сложность программной реализации.Tod Bot является исключением и рука у него все таки есть. Так что дело осталось за ПО. Самый простой в реализации способ управления манипулятором — это расположение ползунков/скроллов на панели web-интерфейса, отвечающие за каждую степень свободы манипулятора. Вот только есть одно но: схватить что-либо при таком управлении невероятно сложно. Не понаслышке знаю — пытался взять коробку спичек со стола. Потратил на все это порядка 5 минут. При этом вероятность задевания или опрокидывания рядом стоящих предметов стремится к 100%. Можно, конечно, недельку потренироваться и улучшить свои результаты, но в таком случае это не самый простой и удобный способ.Как мы видим управление манипулятором через web-интерфейс. Данный процесс должен быть максимально автоматизирован, что не требовало бы от пользователя нервов и сил. Пользователь должен ограничиться лишь выбором попавшего в видеопоток объекта, а система сделает все остальное. Поэтому управление рукой мы доверили программному модулю MoveIt, о котором писали ранее. На текущий момент рука уже умеет избегать столкновения с окружающими предметами при перемещении. Интеграцию MoveIt c веб-интерфейсом мы будем производить по достижению удовлетворительных результатов в захвате предметов. Сейчас же у нас есть определенные успехи в этом направлении.Как мы подружили веб-интерфейс c ROS? Говоря о программной реализации телеприсутствия, для начала стоит напомнить, что робот Tod Bot управляется под фреймворком ROS. В ROS вся функциональность распределена по программным узлам, общающихся между собой через публикуемые в темы сообщения. Соответственно, любое новое интегрируемое в систему ПО должно быть представлено в качестве такого узла ROS.Чтобы реализовать функционал телеприсутствия, с одной стороны, нам нужен веб-сервер с возможностью генерации HTML-страниц и обработки POST/GET запросов, с другой же стороны, нам необходимо из ROS получать данные одометрии и навигационной карты и отправлять команды патрулирования помещения и управления перемещением.Исходя из этих требований, мы решили оформить весь функционал телеприсутствия в виде программного узла ROS, в качестве веб-сервера использовать CherryPy — минималистский веб-фреймворк на Python, а сохранять данные в NoSQL хранилище Redis в простом формате ключ-значение. В качестве SIP клиента использовался HTML5 клиент sipML5, который позволяет совершать аудио/видео звонки напрямую в браузере.Как это работает вместе? Оператор в веб-браузере через AJAX запросы передает данные на веб-сервер робота. Python-скрипт узла телеприсутствия обрабатывает данные с веб-сервера и рассылает их в другие узлы ROS, которые уже непосредственно исполняют команды на роботе. От узла телеприсутствия на сторону оператора аналогичном образом поступают данные по карте, одометрии и видеопотока с Kinect, которые рендрятся в HTML5 Canvas. Параллельно через sipML5-клиенты оператора и робота транслируется аудио/видео поток. Кстати, качество бесплатных SIP-сервисов для связи SIP-клиентов претензий не вызывает. Единственное, надо имеет довольно широкий канал интернета.Так же нам хотелось бы услышать и ваше мнение. Как должна выглядеть эталонная система телеприсутствия?