Рождение концепции Remote Reality
История нашего «безумного» проекта началась три года назад, когда размышляя о будущих перспективах развития игровой индустрии, мой друг Леша сказал: «Представь себе будущее, в котором люди в виде развлечения, из любой части мира управляют на игровом полигоне настоящими роботами, как «аватарами»».
![image](https://habrastorage.org/getpro/habr/post_images/d65/02d/853/d6502d853d2dd9f254cd304995f32c59.jpg)
Идея изначально показалась нам достаточно интересной и не сложной в реализации. Мы тут же «засели» за поиски похожих проектов и с удивлением обнаружили, что никто, ничего подобного не делал. Это казалось странным, ведь идея лежала буквально «на поверхности». Мы нашли множество следов любительских проектов создания прототипов в виде шасси с камерой на основе Arduino, но никто так и не довел ни один проект до логического завершения. Позднее, преодолевая казалось бесконечные трудности и проблемы, мы поняли причину отсутствия аналогов, но изначально идея нам казалось крайне простой и быстро реализуемой.
Следующую неделю мы посвятили проработке концепции. Мы представляли себе десятки разновидностей роботов с разными возможностями и сотни игровых полигонов, между которыми игроки могут мгновенно перемещаться через «телепорт». Любой желающий, на основе нашего «решения», имел возможность построить свой собственный игровой полигон самого разного масштаба.
Мы сразу решили, что эти мысли укладываются больше в концепцию развлекательного аттракциона, а не компьютерной игры. Люди любят развлечения и хотят чего-то нового, и мы знали, что им предложить. Как и в любом бизнесе, сразу всплыл вопрос окупаемости, ведь на первый взгляд кажется, что наша физическая модель ограничена количеством роботов. Но умножив роботов на 24 часа и на цену часа в 5-10 долларов, сомнения отпали. Финансовая модель не являлось «Клондайком», но вполне окупалась даже при 10% загрузке.
Очень быстро у нас в голове появилось название новой концепции: Remote Reality, по аналогии с Virtual Reality и Augmented Reality.
![image](https://habrastorage.org/getpro/habr/post_images/14e/26d/b83/14e26db83d139b0bdade1fb8f522295d.jpg)
Как и остальные «экспериментаторы», первым делом, мы взяли машинку на радиоуправлении, поставили на нее китайскую Wi-Fi камеру, установили плату Arduino и наш робот «поехал». Мы попросили нашего знакомого из США подключиться к машинке через Интернет. Он смог ездить по нашему офису и мы были в восторге. Задержки управления и видеопотока в несколько секунд нам не казались проблемой.
С этой минуты мы распределили нашу работу на два направления:
- моделирование и строительство игрового полигона
- разработка и создание роботов и системы управления
Гулливеры в городе Припять
Начну свой рассказ с полигона. Мы понимали, что люди должны были где-то играть. Место должно быть известное во всем мире, «загадочное» и несложное в технической реализации. Перебирая множество вариантов, нам внезапно пришла в голову мысль о Чернобыле. Чернобыльская зона соответствовала всем нашим требованиями, а главное все возможные будущие поломки и повреждения игрового полигона, можно было списать на пост апокалипсис.
Найдя помещение площадью 200 квадратных метров, мы принялись за работу, которая в итоге длилась два года. Мы рисовали улицы и текстуры домов, создавали трехмерные модели зданий, включая внутренние этажи. Потом вырезали все из ДСП плит и фанеры, собирали здания из сотен разнообразных частей.
![image](https://habrastorage.org/getpro/habr/post_images/d46/3d3/7cb/d463d37cb16736f1d9d1dd4937b70234.jpg)
Мы пытались воссоздать, как можно точнее все текстуры Припяти, «подсматривая» в Google карты. Разумеется, размеры помещения не позволяли нам создать все в точности, а упускать детали не хотелось, поэтому, например, нам пришлось ЧАЭС переместить поближе к Припяти.
Сложно подсчитать сколько сотен досок, десятков листов фанеры, ДВП и прочих «расходников» мы потратили. Последние три месяца мы буквально ползали на четвереньках c кисточками и красками, оформляя дома и этажи. Нам хотелось, чтобы детализация была максимальной. Масштаб города получился 1:16 и дома высотой в 9 этажей были примерно на уровне груди взрослого человека. Находясь в этом городе мы ощущали себя настоящими великанами.
![image](https://habrastorage.org/getpro/habr/post_images/2c3/b04/cb1/2c3b04cb14f1575f611203df5bdcfd59.jpg)
Немножко о нас
Тут наверное пришло время рассказать о нашей команде. Изначально, нас было всего двое друзей-инженеров. Задумывая проект, мы понимали, что найти инвестора на такую «авантюрную» идею будет сложно и мы приняли решение делать все за свои деньги. В ходе работ нам помогали многие люди. Кто-то бесплатно, кого-то мы нанимали для помощи.
![image](https://habrastorage.org/getpro/habr/post_images/8c2/1d0/e84/8c21d0e84ad1ec83699dd61f5a9e4c88.jpg)
Хорошим примером командной работы послужила история с 3D печатью. Мы собрали свой принтер и печатали первое время детали самостоятельно, пока не пришли к выводу, что нельзя быть специалистом во всем. Печать занимала у нас много времени, части деталей были большого размера и неожиданный брак в конце печати детали портил нам все планы. В итоге, мы нашли «узкого» специалиста по 3D печати, который стал впоследствии частью нашей команды. Разделив наши мечты, он помогал нам изготавливать корпуса роботов просто по себестоимости пластика.
Собирая роботов, мы не могли так же обойтись без помощи токаря. В этом нам помогал один из друзей. Строительные работы на полигоне требовали зачастую нестандартных и сложных решений, нам очень повезло встретить ребят, которые тоже нам активно помогали в этих вопросах.
Проекту очень повезло с художником оформителем, его талант оказался бесценным.
![image](https://habrastorage.org/getpro/habr/post_images/102/9f9/d34/1029f9d348c200b29b808820394a81d3.jpg)
![image](https://habrastorage.org/getpro/habr/post_images/58f/d79/c00/58fd79c0035edfe072bf68cd47f05236.jpg)
![image](https://habrastorage.org/getpro/habr/post_images/211/41b/179/21141b1792516ca1f868a0ccafc93cfa.jpg)
Чтобы максимально сэкономить на строительстве игровой арены, нам практически все приходилось делать самим. Но кроме большого полигона была еще и техническая часть…
Победа над задержкой видео сигнала
Наверняка вопросы инженерной реализации проекта Вам будут более интересны, чем описание нашего “градостроительства”.
Вернемся к моменту, когда, как Вы помните, мы поставили камеру на “тележку” и смогли ей управлять. Вслед за этим пришла пора выбрать железо и технологии для создания наших роботов. Тут нас ждал первый сюрприз: перебрав десяток камер, мы так и не смогли добиться задержки сигнала при котором управление роботом через интернет было бы комфортным. Все осложнялось временем, которое требовалось, чтобы заказать образцы камер в Китае и их протестировать.
![image](https://habrastorage.org/getpro/habr/post_images/cdd/ec5/b7a/cddec5b7a3b501da5c5b2d524e287140.jpg)
Мы хотели сделать систему управления роботами полностью в браузере без всяких «скачайте наш замечательный клиент» и устаревших Flash плееров. Это значительно сузило список технологий и камер, которые их поддерживают. Мы долго экспериментировали с передачей видеопотока в формате MJPEG, но в итоге отказались от этой идеи. Эти эксперименты стоили нам потери полугода времени. Мы даже полностью собрали первых пять роботов и запустили открытое тестирование для всех желающих, но...
Живые тесты показали неспособность роутера обработать огромный видеопоток по радиоканалу от нескольких роботов в формате MJPEG, как только мы ни пытались оптимизировать разрешение картинки. Видео поток с одного робота не получалось сделать менее 20-30 МБит, что делало невозможным стабильную одновременную работу планируемых нами 20 роботов. Также мы не смогли найти готового решения передачи звука без задержки. Это привело к тому, что нам пришлось искать заново подходящую для наших задач технологию.
В итоге наш выбор остановился на WebRTC. Это обеспечило нам передачу видео изображения и звука с задержкой всего 0.2 секунды.
![image](https://habrastorage.org/getpro/habr/post_images/672/91b/463/67291b463b28b76bbdb8e3e7454a8d3c.jpg)
Дальше пришло время моделировать и собирать роботов. Чтобы меньше зависеть от внешних поставщиков, все детали наших ботов мы печатали на 3D принтере. Это позволило создать нам максимально компактную модель робота, и оптимально поместить внутрь всю электронику и мощные аккумуляторы.
Система электропитания
Следующий вопрос был связан с электропитанием, ведь нам очень хотелось менять аккумуляторы, как можно реже. Перебрав много готовых вариантов, мы остановились на собственном аккумуляторе, собранном из элементов Panasonic 18650B. Батарея напряжением 17 вольт и емкостью 6800 мАч дала возможность нашим роботам ездить фактически по 10-12 часов на одном заряде.
![image](https://habrastorage.org/getpro/habr/post_images/348/514/d30/348514d30bae29a846ad9d8541d509ac.jpg)
В процессе экспериментов мы успешно «угробили» сотню элементов, потому, что нам хотелось использовать емкость элементов максимально, а напряжение в конце разряда падало очень быстро и наш простой индикатор напряжения, собранный на делителе, не всегда давал точные показания. Но в итоге мы подняли порог минимально допустимого напряжения с 2.5 вольт до 3.2, плюс поставили микросхему для точного контроля напряжения и случаи «смерти» Панасоников прекратились.
В качестве зарядных устройств мы выбрали популярные среди моделистов устройства iMax B6 с опцией заряда в режиме балансировки элементов. Часть аккумуляторов мы “угробили” по причине неправильной калибровки китайских копий iMax B6. Мы соединили пять банок и заряжали их в режиме балансировки. В конце заряда проверялось общее напряжение батареи без разбивки на элементы, а фактически одна банка не была заряжена до конца и «умирала» первой.
Двигатели для роботов
Наверняка многие из вас задали себе вопрос: а почему 17 вольт? Ответ скрывается в моторах. Моторы — это вторая часть наших «китайских мук» после выбора камер. Мы перебрали много разных моторов. К нашему ужасу, почти все они имели маленький ресурс и быстро выходили из строя. Через 3-4 месяца, в ходе экспериментов, нам удалось найти производителя “нормальных” моторов в плане надежности, но финального решения все еще не было.
![image](https://habrastorage.org/getpro/habr/post_images/949/b57/d2c/949b57d2c6dd721080e5b8a4ccca5cad.gif)
В обычной машине при передаче усилия с двигателя на колеса ключевую роль играет коробка передач. У нас ее не было. Снижая напряжение на моторах, мы успешно снижали скорость робота, но при этом терялась и его мощность и наши «танчики» не могли медленно развернуться на месте. Вскоре мы решили и эту проблему.
Ох, я сказал, это слово — «танчики».
Почему «танчики»?
Почему именно «танчики»? Ответ прост. Если к задержке камеры добавить неизвестную нам задержку Интернет канала, то какой нибудь житель Австралии сможет комфортно управлять только чем-то относительно медленным. Это был первый аргумент в пользу выбора танков, а второй аргумент, который нас убедил окончательно, заключался в комфортном управлении роботом. Человек привык, нажимая на “стрелочку” вправо, ожидать поворота робота вправо, а без гусениц это было невозможно сделать, ведь только танки поворачивают «на месте». Также мы радовались, ожидаемой «супер проходимости». Заказав в Китае ящик резиновых гусениц, мы принялись печатать «колеса-катки» под гусеницы.
![image](https://habrastorage.org/getpro/habr/post_images/202/13f/eae/20213feae0f0b8affa1c147d5f0e0d85.jpg)
Первые же тесты разбили наши мечты в «пух и прах», гусеницы частенько слетали с танка при наезде на низкие препятствия. Изучив основы танковой механики и испробовав разные натяжители и вспомогательные колеса, мы все равно не решили эту проблему. С гусеницами пришлось расстаться. Так, как роботы уже были напечатаны и собраны, нам пришлось искать какое-то быстрое и несложное решение, а оно было одно — хорошие колеса с резиновым протектором. И как же поворот на месте спросите Вы? Мы «выкрутились», связав две оси между собой тонким ремешком от 3D принтера. В общем получился колесный робот с полным приводом и поворотом на месте.
![image](https://habrastorage.org/getpro/habr/post_images/3d6/deb/38f/3d6deb38f5124e0b130e7aed77a23944.jpg)
Сердце робота
Мы рассказали уже о большинстве элементов нашего робота и ничего не сказали о самой важной составляющей.
![image](https://habrastorage.org/getpro/habr/post_images/d3e/ea3/3f6/d3eea33f618e52cf2e4c10cbc175667e.jpg)
В основу нашего бота «лег» мини компьютер Raspberry Pi на ОС Linux и специально разработанное ПО, которое позволяет общаться роботу с сервером. Raspberry Pi работает совместно с разработанной нами платой контроля и управления. Плата включает в себя микроконтроллер, драйвер моторов, микросхемы обработки сигналов с различных датчиков, модуль точного контроля напряжения АКБ. Для удобства сборки, мы реализовали абсолютно все подключения периферии на отдельных разъемах.
![image](https://habrastorage.org/getpro/habr/post_images/841/8cc/883/8418cc883ee48a46a76a2bff838e0c09.jpg)
Как я уже упоминал ранее, нам часто приходилось менять комплектующие, когда мы сталкивались с непредвиденными проблемами. Так получилось и в это раз. Изначально мы собрали первых роботов на Orange Pi, для экономии. В дальнейшим нам пришлось их заменить на Raspberry Pi 2 B. Но и это был не конец. Нам вскоре опять пришлось заменить этот мини компьютер на версию Raspberry Pi 3 B+ которая имела на борту WiFi модуль 5 Ггц. Но об этом далее.
Настройка Wi-Fi
Следующая проблема, которая нас поджидала, заключалась в Wi-Fi радио канале. О ней мы узнали только, начав тесты сразу 10 роботов в движении. Наш полигон располагался в закрытом подвале и «переотраженка» от железобетонных стен была просто ужасной. Команды управления проходили нормально, а вот видеопоток дико «тормозил», стоило одному из роботов уехать в дальний угол помещения.
Справиться с загрузкой канала нам помог переход с 2.4 ГГц на 5 ГГц. Но сложности на этом не закончились. Если робот заезжал за угол, сигнал падал ниже -80 dBm и начинались «тормоза». Окончательно мы решили проблему, установив секторную антенну с разнесенным приемом и подняв мощность передатчика до полу ватта. Разумеется, роутер пришлось «подобрать» из сегмента бизнес решений с мощным процессором.
Стоит упомянуть, что мы долго пытались вместо увеличения мощности, настроить режим “бесшовного” роуминга на основе решения Ubiquity, но увы, нужный нам модуль Wi-Fi “отказывался “его поддерживать, а вот iPhone работал великолепно, перемещаясь между несколькими точками доступа.
![image](https://habrastorage.org/getpro/habr/post_images/a2b/8db/958/a2b8db95853e92d10c62bb484cea1648.jpg)
![image](https://habrastorage.org/getpro/habr/post_images/0b1/1ec/659/0b11ec6599b1f25d2c6386f479029013.jpg)
Собрав «десяток» роботов и запустив сервер контроля и управления мы в ноябре 2018 года вышли на Кикстартер с проектом Isotopium Chernobyl. Мы даже не догадывались, что нашу игру вскоре попробуют десятки тысяч человек.
О том, что нас ждало дальше и почему мы почти закрыли проект, читайте в нашей следующей статье: Онлайн игра с RC моделями, управляемыми через интернет
![image](https://habrastorage.org/getpro/habr/post_images/d4e/ae0/84b/d4eae084b232421574b49cf880522db1.gif)