От диплома до подвала: история браузерной игры с настоящими RC-машинками

Страницы:  1

Ответить
 

Professor Seleznov


Три года я делал браузерную игру, в которой игроки управляли настоящими RC‑машинками через браузер. В итоге у меня получилось: 9 самодельных машинок, помещение 110 м², около 70 м² трассы, RFID‑навигация, чекпоинты, видеострим с задержкой около 200 мс и полноценный запуск. За месяц зарегистрировалось около 500 человек. Платежей было примерно на 3000 рублей. Это история о том, как проект технически заработал, но как бизнес — нет. Расскажу, как я собирал машинки, боролся с видеозадержкой, клеил RFID‑метки на пол и какие выводы сделал после запуска.
pic
Видео игры
Предыстория
  • Началось всё с игрового проекта в GTA Criminal Russia в 2012г., я просто купил у другого человека, готовый проект-код и поставил его на игровой хостинг и люди сами стали мне платить… длилось это 5 лет, ума и опыта как это масштабировать у меня не было, пришли более крупные игроки этого рынка и меня конкуренция не пощадила.
  • Продолжил я искать спрос… и нашёл игру у которой нет многопользовательского режима, связанная с городской ездой (виртуальная игра по типу гонок и свободной езды). На форумах этой игры сформировалась небольшая команда энтузистов, частью которой я стал. И так появился мод позволяющий сделать игру многопользовательской. К сожалению, мод долго не просуществовал, издатель игры дал ясно понять, что мододелы оскверняют его продукт. 3 года я потратил на данный проект.
  • В 2022 году, учась на 4-м курсе своего университета мне пришла идея, не покупать или заимствовать чужие наработки, а создать полностью свою игру! Полностью, с чистого листа, с нуля и в одиночку! И пришла в голову мне эта идея, когда я прочитал статью о проекте «Isotopium» и концепции игр Remote Reality я 100 раз перечитывал данную статью, и в этой части хочу поблагодарить администрацию хабра за существование такой площадки для таких Гиков как мы все с вами 😊.
План действий
Потратив много времени на теорию прочтения статей и информации о микрокомпьютерах, микроконтроллерах, WebRTC технологии, 3D-печати и прочего… я начал подсчитывать бюджет, сроки и свои возможности, изначально мне было ясно что для работы проекта, нужно следующее:
  • Помещение 100-200 м²
  • 5 машинок, оснащённых камерами
  • Мощный роутер из бизнес сегмента
  • Компьютер
  • Фанера или гипсокартон с обклеенной фотопечатью на ней
  • 1 год времени
Начало и прототип
Начать решил с машинок: пошёл я на популярный китайский маркет искать машинки, купив пару вариантов и поездив по дому, я достаточно быстро пришёл к выводу, что шасси моих машинок должны быть полноприводными и «танковыми» способными разворачиваться на месте, чтобы радиус разворота был около нулевым. Я потратил неделю поисков и не нашёл подходящего варианта.
pic
Что я купил и тестировал
pic
«Шасси робота Mecanum с моторами TT для Arduino и Raspberry Pi».
Прочитав теорию о видеотрансляциях и стримингах видео, я пришёл к выводу, что ардуинки мне не хватит, уж больно слабые они, а суть в том, чтобы игра была комфортной и качество картинки было не менее 720p и 25 FPS и при этом задержка видео была бы не более 333мс. ( мне удалось достичь 250мс внутри города и 200мс внутри локалки), такие требования я взял из воздуха к самому себе. Я параллельно писал дипломную работу в своём вузе «Северо-Кавказский федеральный университет» и тема работы, как раз и был данный проект.  Много ли студентов настолько увлеченно пишут дипломные работы, что сами в одиночку делают на эту тему проект и доводят его до рабочего коммерческого продукта? – а я довёл, уж не умею я бросать дело на полпути и очень дотошный я. Заказал я китайскую шасси, малинку и…. нашёл я такую статью с готовым кодом для малинки и вот что у меня получилось:
  • Raspberry pi 3b+
  • Серво SG90
  • Обычный самый дешёвый моторчик DC
  • Батарейный блок с батарейками
  • Пауэрбанк для питания малинки
  • Понижающий модуль напряжения DC
  • L298N драйвер моторов
  • Камера для малинки со шлейфом
  • Провода
pic
И всё заработало, без танцев с бубном, ураа… однако, дьявол кроется в деталях! 
pic
  • Вид машинки «непродажный»
  • Ненадёжные моторы как и сама конструкция
  • Нету на моторчиках датчиков холла, из-за чего, когда жмёшь вперёд машинка реагирует не сразу, а с подлагом, постепенно увеличивая напряжение на моторы, а если машинка будет на склоне? Игрок подумает, что игра зависла! Игра должна сразу реагировать на действие пользователя. Вариант подавать сразу большое напряжение я не рассматривал, всё таки это игра, и в любых гоночках транспорт постепенно набирает скорость
  • Нет рук для возможности вернуться на колёса если перевернулся
  • Трафик видеотрансляции огромный, 20мб/с при 720p 😔
Действие #1 — 3D-печать и разработка
Снова ознакомившись с материалами уже запущенного и заброшенного проекта «Isotopium», я решил, что надо идти про уже протоптанной дорожке. Чтобы было более понятно читателям, я немного расскажу о своём опыте в технической отрасли:
  • Я ни разу не держал паяльник в руках до старта данного проекта
  • У меня никогда не было опыта работы ни с ардуинкой, ни с микроконтроллерами, ни микрокомпьютерами
  • У меня была мечта – сделать хороший качественный игровой продукт
У меня был небольшой опыт с робототехникой в вузе, мне дали стенд с рукой, с которой никто не хотел (или не мог) работать и мне сказали, литературы нет, документации нет, преподавателя, который даст ей ума тоже нет. Делай что хочешь, только сделай что-нибудь, красочное, чтобы можно было продемонстрировать руководству или делегациям. Пришлось произвести небольшой реверс-инжиниринг данного оборудования 😊. Буквально, через неделю я её сломал…вдребезги, мне были интересны минимумы и максимумы движения моторчиков данной руки, кто же знал, что если моторчики не смогут достичь необходимого заданного положения, то появится эффект джиттера и они снесут стол, на котором стоят… однако, железная рука робота оказалась слабее железного стенда. Старшекурсники и другие лаборанты, склеили её, но она, мягко говоря, стала нерабочей. Как и у любой другой техники должна быть кнопка экстренного отключения!? Да, она была, но не была подключена, я на ней прыгал, прыгал, а она не работала и не сработала. Помните! Проверяйте периодически системы экстренной остановки станков, роботов и прочего, возможно эти кнопки просто стоят, для галочки 😊.
 
pic
Я на этапе награждения за победу в олимпиаде по дисциплине веб дизайн и разработка 18-22, и с антропоморфным роботом
pic
Вот сама рука, которой я занимался в вузе, да у меня были мысли и наработки и возможно готовый код есть, чтобы использовать руку по её прямому предназначению, как использовал Говард из сериала «Теория большого взрыва».
pic
pic
pic
Моя самая первая печать, после популярнейшего кораблика, были домино с кошачьими мордочками.  
После нескольких экспериментов с разными материалами пластика, я остановился на ABS+(eSUN), моделировал я в Fusion 360, ну а слайсерил в cura.
pic
По видеоурокам я самостоятельно научился моделировать, вот примерно так я себе представил самую простую модель шасси. Моторчики и колёса я взял из предыдущего набора мной купленного шасси, шестерёнки и валы -> всё напечатано из ABS+ пластика.
pic
pic
Первую версию напечатанной машинки, я решил делать, крайне, топорно, методом бутерброда. Первый этаж ходовая, понижающий модуль напряжения и драйер мотора, второй этаж малинка и батарейный блок, третий этаж камера и серво.
pic
Батарейный блок я нашёл готовый на маркетплейсе, для работы с 18650 аккумуляторами, его уникальность в том, что он на выходе даёт 12в 3A (методом измерений, мне было достаточно 2A для силовых моторов) + USB выход для малинки, имеет индикатор уровня заряда и ещё можно подключить адаптер для зарядки и цена ему была всего 10$.
pic
 После тестовых заездов, были выявлены недостатки:
  • В ходовой, зубцы шестерёнок скалывались и ходовые валы просто расслаивалис, буквально после нескольких часов езды.
  • Центр тяжести был на втором этаже, а должен быть как можно ниже к полу, тем самым машинка была неустойчивой и здесь я понял, что машинке надо делать лапки, чтобы она могла сама встать на колёса, а не бегать к каждой машинке каждые 5 минут.
  • Моторчики, что я использовал были слишком громоздкими и были слишком мощными.
  • Камера должна быть жестко зафиксирована, а не болтаться только на серво.
  • Нужны бампера и боковая защита колёс, чтобы при ударе они не выламывались.
  • Обнаружил баг в видеотрансляции ровно каждую минуту изображение зависало на 2-3 секунды, и ровно через 1 минуту это повторялось. Баг был в том, что по какой-то причине если ПО на малинке стоит с графическим интерфейсом то, есть такой баг, а если управление через консоль, то бага нет – у меня ушло 2 недели, чтобы выявить причину.
  • Если робот заезжал за угол, сигнал падал и начинались «тормоза» в видеотрансляции. Окончательно решил проблему, установив внешнюю антенну на малинку путём распайки дорожки wifi антенны и припаивания U.FL разъёма. Разумеется, роутер пришлось «подобрать» из сегмента бизнес-решений с мощным процессором – выбрал «MikroTik».
pic
Для придания продажного вида роботу-машинки: я решил вдохновляться популярнейшим автомобилем «Bugatti».
pic
Проблему с переворотами машинки я решил с помощью мощных серво, по левому и правому борту машинки сделал лапки. Камеру посадил на подшипник с толстым слоем пластика.
На счёт ходовой, было много танцев с бубном… я стремился сделать продукт максимально качественным и дешёвым, подходящего моторчика ни в магазинах, ни в маркетплейсах я найти не смог за адекватную цену, приходилось ждать доставку из Китая и с третьего заказа я получил, идеальный моторчик «Bringsmart» 250rpm, с датчиком холла, он обошёлся 7.5$ за единицу.
Ходовую и шестерёнки же я решил печатать из композита нейлона PA-CF. Я пробовал сломать ходовую методом полного газа и резкого заднего хода 10 часов без остановки, после этого времени ходовая моей машинки осталась в прежнем неизношенном состоянии, а вот смазка из самого моторчика потекла и он очень перегрелся, но после остывания, он вновь был исправен.
Проблему слишком тяжёлого трафика видеотрансляции исправил, переведя трансляцию на CV2, в данной библиотеки для малинки есть много параметров изображения и трафик упал с 20➔10 мб/с при 720p и 25fps формат видеотрансляции MJPEG, далее на компьютере, который выступает сервером видео проходит преобразование ffmpeg -mpeg1video кодеком и на выходе получаем 4-5мб/с трафик видеоизображения на 1 машинку, что уже допустимо, задержка при этом 200мс в локальной сети, трансляция прямо в браузер без дополнительных библиотек в MJPEG.
pic
Как и любая другая игра, должна быть миникарта, где будут позиционироваться все игроки. Для этого, выбрал rfid датчик с расстоянием действия до 1 метра и преобразователем через usb-ttl, питается он от этого же usb. Идея была в том, чтобы расклеить много-много меток на полу и покрасить весь пол в один цвет, чтобы их не было видно, датчик разместить на дне машинок и метки внести в базу данных. И это сработало у меня в квартире на паркетном полу.
pic
RFID Reader + USB-TTL
pic
Можно увидеть на полу белые наклейки, это тестовые RFID метки навигации
Я немного увлёкся и сделал 9 машинок, вместо 5 как предполагал изначально, на некоторые комплектующие за партию в десяток китайцы давали неплохую скидку.
Себестоимость 1 машинки вышла в 20-25 тыс руб. или около 300$, на 3D принтер паяльник и прочий перебор деталей ушло порядка 400 тыс руб. или 5000$
pic
 Итог, потрачено на этот этап разработки прототипа и автопарка:
  • 400тыс на разработку + 200тыс на машинки (9шт) = 600 000руб;
  • 15 месяцев суммарного времени (1 человека - меня). 
pic
Отдельную благодарность хочу выразить своему любимому коту «Барнику», без его помощи, у меня ничего бы не получилось! 
pic
Действие #2 — помещение и площадка
Изначально, я думал взять помещение в аренду, но… я принципиально исходил из того, что мне надо будет покрасить полы в один цвет, из-за RFID меток навигации. Желающих арендодателей, которые согласились бы на то, что я изменю их напольное покрытие не нашлось. Брать помещение в аренду без ремонта, для проекта, который ещё ни рубля прибыли не принёс тоже, весьма сомнительно.
Выбор пал на покупку помещения, подвала, и как раз, проходил аукцион приватизация имущества у моего города, в котором я и принял участие. Суммарно на помещение и его ремонт под мой проект ушло около 1’200’000руб. Ремонт помещения делали своими руками, мне помогали в этом несколько моих родственников, но иногда приходилось для ремонта и нанимать рабочую силу местами, это был первый объект недвижимости который я купил в своей жизни и тем более, в котором я делал ремонт (я никогда в руках и дрель то, не держал до этого)!
Пол я покрасил в асфальтный серый цвет, алкидно-уретановой краской в 2 слоя. Тесты с метками, показали, что из-за краски читаемость меток с 80-100см уменьшилось до 10-15см и путём вычислений мне потребовалось вместо ожидаемых 8-9 меток на м², 36 меток на м². Мы с моей женой потратили неделю на обклейку 70 м², дальше, просто устали… и решили запускать проект как есть. Общая площадь помещения 110 м².
pic
pic
После ремонта помещения, я смоделировал площадку, по которой будут ездить машинки, при этом так, чтобы везде могли они разъехаться, даже в случае саботажной игры одного из игроков. Я спроектировал: аркаду, домики, парковку… На уровне машинок мы расклеили пейзаж многоквартирных домов, на постеры и «домики» ушло порядка 100 000руб. Всю площадку, было решено делать из фанеры, я заказал распилы у фрезеровщика на чпу станке, после просто забрал и на саморезах всё скрутил.
pic
Действие #3 — Реклама и работа проекта
Ещё на этапе разработки, нужны были игроки для проведения тестовых заездов, по квартире. Потратив неделю на поиски блогера, которые за бесплатно или вменяемые деньги прорекламировал бы, я нашёл одного и за очень адекватные деньги он сделал интеграцию. Но увы, никто не записался на тестовый заезд. Решил, видоизменить подход, и платить за тестовую езду игрокам, по 1 рублю за 1 минуту игры, и сработало, при новом подходе, пришло 30 человек на тестовый заезд от блогера у которого было всего 10 000 просмотров под его видео с интеграцией, все машинки были задействованы, и таким образом, я ещё заказал несколько интеграций у этого же блогера и «добил» число подписчиков в телеграмм группе до 100 человек.
После открытия проекта, всем игрокам было интересно, что же получилось, но никто не захотел платить за игру! Я попробовал ещё у двоих блогеров заказать рекламу, но увы, удалось добиться только 150 подписчиков в телеграмме и 50 в дискорде и на этом всё, буквально. Суммарно написал около 300 разным блогерам, на email, инстаграм, в facebook и воз и ныне там. Меня просто везде игнорят, тотально, а рекламные агенства хотят неадекватно большие деньги. Суммарно на рекламу я потратил порядка 50 000руб. И расчёт был, что хотя бы 1/3 от суммы отобьётся, однако этого не произошло.
Я топорно пошёл по твичу рекламироваться в чатах у стримеров, и нашёл блогера, который прошёл по ссылке и целых 2 часа играл у меня на проекте со своими зрителями (в тот день, была бесплатная игра без ограничений с целью рекламы). Очередь на игру была 60-70 человек при 9 машинках, я был уверен, что это успех, однако на следующий день пришло 0. Этот блогер на мои сообщения и попытки договориться о дальнейшим сотрудничестве ответил полным игнором.
ИТОГ
pic
Сюжет игры был в собирании контрольных точек – нужно было мордочкой машинки ударяться в белые коробочки (они на Arduino с светодиодом внутри), раскинутые на карте. В тот момент, когда они загорались разными цветами, их можно было собрать, в них находится датчик чтения RFID, а в бамперах машинках обычные пропускные карточки с метками. При собирании начислялись монетки, которые можно было обменять на дополнительное время игры.
Игру я назвал «Remote Race» или «RemRace» (Дистанционная гонка/заезд), за полный месяц работы (работал с 15:00-21:00 каждый день), зарегистрировалось, около 500 человек. Было получено порядка 3 000руб(35$) платежей. Стоимость одного интернета обходилось мне в 3500руб/мес + коммуналка 6000руб + моей время.
Суммарно на весь проект, помещение и коммунальные платежи, я потратил порядка 2млн руб. и 3 года. Для меня это огромная сумма денег, я её откладывал с 15 лет…
И на этом мой энтузиазм умер, работал я с 15 ноября по 15 декабря 2025г. В среднем, в игру заходило 1-2 человека за весь день, минут на 20 суммарно, заходили на бесплатный пробный заезд – 5 минут бесплатно я давал всем при регистрации, смотрели все и уходили. Стоимость платной игры была всего 2 руб. за 1 минуту. Что пошло не так, я не знаю, видимо мне не удалось добиться привлекательной, продающей картинки. Из-за ИИ я потерял работу, с которой я и спонсировал весь этот проект.  
На данный момент проект выключен, и я нахожусь в поисках: инвестиций, или медиа поддержки, чтобы привлечь игроков, или работы для себя – сейчас я уже 4 месяца нахожусь в активном поиске работы, и ото всюду одни отказы.

, за 10 000руб, как и домики свои я тоже продаю.
P.S. Ещё есть возможность, вернуть проект в рабочее состояние, если появится партнёр, который окажет медиа или финансовую поддержку проекту.-Источник
 
Loading...
Error