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

от автора

Три года я делал браузерную игру, в которой игроки управляли настоящими RC‑машинками через браузер. В итоге у меня получилось: 9 самодельных машинок, помещение 110 м², около 70 м² трассы, RFID‑навигация, чекпоинты, видеострим с задержкой около 200 мс и полноценный запуск. За месяц зарегистрировалось около 500 человек. Платежей было примерно на 3000 рублей. Это история о том, как проект технически заработал, но как бизнес — нет. Расскажу, как я собирал машинки, боролся с видеозадержкой, клеил RFID‑метки на пол и какие выводы сделал после запуска.

Видео игры

Видео игры

Предыстория

  1. Началось всё с игрового проекта в GTA Criminal Russia в 2012г., я просто купил у другого человека, готовый проект-код и поставил его на игровой хостинг и люди сами стали мне платить… длилось это 5 лет, ума и опыта как это масштабировать у меня не было, пришли более крупные игроки этого рынка и меня конкуренция не пощадила.

  2. Продолжил я искать спрос… и нашёл игру у которой нет многопользовательского режима, связанная с городской ездой (виртуальная игра по типу гонок и свободной езды). На форумах этой игры сформировалась небольшая команда энтузистов, частью которой я стал. И так появился мод позволяющий сделать игру многопользовательской. К сожалению, мод долго не просуществовал, издатель игры дал ясно понять, что мододелы оскверняют его продукт. 3 года я потратил на данный проект.

  3. В 2022 году, учась на 4-м курсе своего университета мне пришла идея, не покупать или заимствовать чужие наработки, а создать полностью свою игру! Полностью, с чистого листа, с нуля и в одиночку! И пришла в голову мне эта идея, когда я прочитал статью о проекте «Isotopium» и концепции игр Remote Reality я 100 раз перечитывал данную статью, и в этой части хочу поблагодарить администрацию хабра за существование такой площадки для таких Гиков как мы все с вами 😊.

План действий

Потратив много времени на теорию прочтения статей и информации о микрокомпьютерах, микроконтроллерах, WebRTC технологии, 3D-печати и прочего… я начал подсчитывать бюджет, сроки и свои возможности, изначально мне было ясно что для работы проекта, нужно следующее:

  • Помещение 100-200 м²

  • 5 машинок, оснащённых камерами

  • Мощный роутер из бизнес сегмента

  • Компьютер

  • Фанера или гипсокартон с обклеенной фотопечатью на ней

  • 1 год времени

Начало и прототип

Начать решил с машинок: пошёл я на популярный китайский маркет искать машинки, купив пару вариантов и поездив по дому, я достаточно быстро пришёл к выводу, что шасси моих машинок должны быть полноприводными и «танковыми» способными разворачиваться на месте, чтобы радиус разворота был около нулевым. Я потратил неделю поисков и не нашёл подходящего варианта.

Что я купил и тестировал

Что я купил и тестировал
«Шасси робота Mecanum с моторами TT для Arduino и Raspberry Pi».

«Шасси робота Mecanum с моторами TT для Arduino и Raspberry Pi».

Прочитав теорию о видеотрансляциях и стримингах видео, я пришёл к выводу, что ардуинки мне не хватит, уж больно слабые они, а суть в том, чтобы игра была комфортной и качество картинки было не менее 720p и 25 FPS и при этом задержка видео была бы не более 333мс. ( мне удалось достичь 250мс внутри города и 200мс внутри локалки), такие требования я взял из воздуха к самому себе. Я параллельно писал дипломную работу в своём вузе «Северо-Кавказский федеральный университет» и тема работы, как раз и был данный проект.  Много ли студентов настолько увлеченно пишут дипломные работы, что сами в одиночку делают на эту тему проект и доводят его до рабочего коммерческого продукта? – а я довёл, уж не умею я бросать дело на полпути и очень дотошный я. Заказал я китайскую шасси, малинку и…. нашёл я такую статью с готовым кодом для малинки и вот что у меня получилось:

  • Raspberry pi 3b+

  • Серво SG90

  • Обычный самый дешёвый моторчик DC

  • Батарейный блок с батарейками

  • Пауэрбанк для питания малинки

  • Понижающий модуль напряжения DC

  • L298N драйвер моторов

  • Камера для малинки со шлейфом

  • Провода

И всё заработало, без танцев с бубном, ураа… однако, дьявол кроется в деталях! 

  • Вид машинки «непродажный»

  • Ненадёжные моторы как и сама конструкция

  • Нету на моторчиках датчиков холла, из-за чего, когда жмёшь вперёд машинка реагирует не сразу, а с подлагом, постепенно увеличивая напряжение на моторы, а если машинка будет на склоне? Игрок подумает, что игра зависла! Игра должна сразу реагировать на действие пользователя. Вариант подавать сразу большое напряжение я не рассматривал, всё таки это игра, и в любых гоночках транспорт постепенно набирает скорость

  • Нет рук для возможности вернуться на колёса если перевернулся

  • Трафик видеотрансляции огромный, 20мб/с при 720p 😔

Действие #1 — 3D-печать и разработка

Снова ознакомившись с материалами уже запущенного и заброшенного проекта «Isotopium», я решил, что надо идти про уже протоптанной дорожке. Чтобы было более понятно читателям, я немного расскажу о своём опыте в технической отрасли:

  • Я ни разу не держал паяльник в руках до старта данного проекта

  • У меня никогда не было опыта работы ни с ардуинкой, ни с микроконтроллерами, ни микрокомпьютерами

  • У меня была мечта – сделать хороший качественный игровой продукт

У меня был небольшой опыт с робототехникой в вузе, мне дали стенд с рукой, с которой никто не хотел (или не мог) работать и мне сказали, литературы нет, документации нет, преподавателя, который даст ей ума тоже нет. Делай что хочешь, только сделай что-нибудь, красочное, чтобы можно было продемонстрировать руководству или делегациям. Пришлось произвести небольшой реверс-инжиниринг данного оборудования 😊. Буквально, через неделю я её сломал…вдребезги, мне были интересны минимумы и максимумы движения моторчиков данной руки, кто же знал, что если моторчики не смогут достичь необходимого заданного положения, то появится эффект джиттера и они снесут стол, на котором стоят… однако, железная рука робота оказалась слабее железного стенда. Старшекурсники и другие лаборанты, склеили её, но она, мягко говоря, стала нерабочей. Как и у любой другой техники должна быть кнопка экстренного отключения!? Да, она была, но не была подключена, я на ней прыгал, прыгал, а она не работала и не сработала. Помните! Проверяйте периодически системы экстренной остановки станков, роботов и прочего, возможно эти кнопки просто стоят, для галочки 😊.

 

Я на этапе награждения за победу в олимпиаде по дисциплине веб дизайн и разработка 18-22, и с антропоморфным роботом

Я на этапе награждения за победу в олимпиаде по дисциплине веб дизайн и разработка 18-22, и с антропоморфным роботом

Вот сама рука, которой я занимался в вузе, да у меня были мысли и наработки и возможно готовый код есть, чтобы использовать руку по её прямому предназначению, как использовал Говард из сериала «Теория большого взрыва».

Моя самая первая печать, после популярнейшего кораблика, были домино с кошачьими мордочками.  

После нескольких экспериментов с разными материалами пластика, я остановился на ABS+(eSUN), моделировал я в Fusion 360, ну а слайсерил в cura.

По видеоурокам я самостоятельно научился моделировать, вот примерно так я себе представил самую простую модель шасси. Моторчики и колёса я взял из предыдущего набора мной купленного шасси, шестерёнки и валы -> всё напечатано из ABS+ пластика.

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

Батарейный блок я нашёл готовый на маркетплейсе, для работы с 18650 аккумуляторами, его уникальность в том, что он на выходе даёт 12в 3A (методом измерений, мне было достаточно 2A для силовых моторов) + USB выход для малинки, имеет индикатор уровня заряда и ещё можно подключить адаптер для зарядки и цена ему была всего 10$.

 После тестовых заездов, были выявлены недостатки:

  • В ходовой, зубцы шестерёнок скалывались и ходовые валы просто расслаивалис, буквально после нескольких часов езды.

  • Центр тяжести был на втором этаже, а должен быть как можно ниже к полу, тем самым машинка была неустойчивой и здесь я понял, что машинке надо делать лапки, чтобы она могла сама встать на колёса, а не бегать к каждой машинке каждые 5 минут.

  • Моторчики, что я использовал были слишком громоздкими и были слишком мощными.

  • Камера должна быть жестко зафиксирована, а не болтаться только на серво.

  • Нужны бампера и боковая защита колёс, чтобы при ударе они не выламывались.

  • Обнаружил баг в видеотрансляции ровно каждую минуту изображение зависало на 2-3 секунды, и ровно через 1 минуту это повторялось. Баг был в том, что по какой-то причине если ПО на малинке стоит с графическим интерфейсом то, есть такой баг, а если управление через консоль, то бага нет – у меня ушло 2 недели, чтобы выявить причину.

  • Если робот заезжал за угол, сигнал падал и начинались «тормоза» в видеотрансляции. Окончательно решил проблему, установив внешнюю антенну на малинку путём распайки дорожки wifi антенны и припаивания U.FL разъёма. Разумеется, роутер пришлось «подобрать» из сегмента бизнес-решений с мощным процессором – выбрал «MikroTik».

Для придания продажного вида роботу-машинки: я решил вдохновляться популярнейшим автомобилем «Bugatti».

Проблему с переворотами машинки я решил с помощью мощных серво, по левому и правому борту машинки сделал лапки. Камеру посадил на подшипник с толстым слоем пластика.

На счёт ходовой, было много танцев с бубном… я стремился сделать продукт максимально качественным и дешёвым, подходящего моторчика ни в магазинах, ни в маркетплейсах я найти не смог за адекватную цену, приходилось ждать доставку из Китая и с третьего заказа я получил, идеальный моторчик «Bringsmart» 250rpm, с датчиком холла, он обошёлся 7.5$ за единицу.

Ходовую и шестерёнки же я решил печатать из композита нейлона PA-CF. Я пробовал сломать ходовую методом полного газа и резкого заднего хода 10 часов без остановки, после этого времени ходовая моей машинки осталась в прежнем неизношенном состоянии, а вот смазка из самого моторчика потекла и он очень перегрелся, но после остывания, он вновь был исправен.

Проблему слишком тяжёлого трафика видеотрансляции исправил, переведя трансляцию на CV2, в данной библиотеки для малинки есть много параметров изображения и трафик упал с 20➔10 мб/с при 720p и 25fps формат видеотрансляции MJPEG, далее на компьютере, который выступает сервером видео проходит преобразование ffmpeg -mpeg1video кодеком и на выходе получаем 4-5мб/с трафик видеоизображения на 1 машинку, что уже допустимо, задержка при этом 200мс в локальной сети, трансляция прямо в браузер без дополнительных библиотек в MJPEG.

Как и любая другая игра, должна быть миникарта, где будут позиционироваться все игроки. Для этого, выбрал rfid датчик с расстоянием действия до 1 метра и преобразователем через usb-ttl, питается он от этого же usb. Идея была в том, чтобы расклеить много-много меток на полу и покрасить весь пол в один цвет, чтобы их не было видно, датчик разместить на дне машинок и метки внести в базу данных. И это сработало у меня в квартире на паркетном полу.

RFID Reader + USB-TTL

RFID Reader + USB-TTL
Можно увидеть на полу белые наклейки, это тестовые RFID метки навигации

Можно увидеть на полу белые наклейки, это тестовые RFID метки навигации

Я немного увлёкся и сделал 9 машинок, вместо 5 как предполагал изначально, на некоторые комплектующие за партию в десяток китайцы давали неплохую скидку.

Себестоимость 1 машинки вышла в 20-25 тыс руб. или около 300$, на 3D принтер паяльник и прочий перебор деталей ушло порядка 400 тыс руб. или 5000$

 Итог, потрачено на этот этап разработки прототипа и автопарка:

  • 400тыс на разработку + 200тыс на машинки (9шт) = 600 000руб;

  • 15 месяцев суммарного времени (1 человека — меня). 

Отдельную благодарность хочу выразить своему любимому коту «Барнику», без его помощи, у меня ничего бы не получилось! 

Действие #2 — помещение и площадка

Изначально, я думал взять помещение в аренду, но… я принципиально исходил из того, что мне надо будет покрасить полы в один цвет, из-за RFID меток навигации. Желающих арендодателей, которые согласились бы на то, что я изменю их напольное покрытие не нашлось. Брать помещение в аренду без ремонта, для проекта, который ещё ни рубля прибыли не принёс тоже, весьма сомнительно.

Выбор пал на покупку помещения, подвала, и как раз, проходил аукцион приватизация имущества у моего города, в котором я и принял участие. Суммарно на помещение и его ремонт под мой проект ушло около 1’200’000руб. Ремонт помещения делали своими руками, мне помогали в этом несколько моих родственников, но иногда приходилось для ремонта и нанимать рабочую силу местами, это был первый объект недвижимости который я купил в своей жизни и тем более, в котором я делал ремонт (я никогда в руках и дрель то, не держал до этого)!

Пол я покрасил в асфальтный серый цвет, алкидно-уретановой краской в 2 слоя. Тесты с метками, показали, что из-за краски читаемость меток с 80-100см уменьшилось до 10-15см и путём вычислений мне потребовалось вместо ожидаемых 8-9 меток на м², 36 меток на м². Мы с моей женой потратили неделю на обклейку 70 м², дальше, просто устали… и решили запускать проект как есть. Общая площадь помещения 110 м².

После ремонта помещения, я смоделировал площадку, по которой будут ездить машинки, при этом так, чтобы везде могли они разъехаться, даже в случае саботажной игры одного из игроков. Я спроектировал: аркаду, домики, парковку… На уровне машинок мы расклеили пейзаж многоквартирных домов, на постеры и «домики» ушло порядка 100 000руб. Всю площадку, было решено делать из фанеры, я заказал распилы у фрезеровщика на чпу станке, после просто забрал и на саморезах всё скрутил.

Действие #3 — Реклама и работа проекта

Ещё на этапе разработки, нужны были игроки для проведения тестовых заездов, по квартире. Потратив неделю на поиски блогера, которые за бесплатно или вменяемые деньги прорекламировал бы, я нашёл одного и за очень адекватные деньги он сделал интеграцию. Но увы, никто не записался на тестовый заезд. Решил, видоизменить подход, и платить за тестовую езду игрокам, по 1 рублю за 1 минуту игры, и сработало, при новом подходе, пришло 30 человек на тестовый заезд от блогера у которого было всего 10 000 просмотров под его видео с интеграцией, все машинки были задействованы, и таким образом, я ещё заказал несколько интеграций у этого же блогера и «добил» число подписчиков в телеграмм группе до 100 человек.

После открытия проекта, всем игрокам было интересно, что же получилось, но никто не захотел платить за игру! Я попробовал ещё у двоих блогеров заказать рекламу, но увы, удалось добиться только 150 подписчиков в телеграмме и 50 в дискорде и на этом всё, буквально. Суммарно написал около 300 разным блогерам, на email, инстаграм, в facebook и воз и ныне там. Меня просто везде игнорят, тотально, а рекламные агенства хотят неадекватно большие деньги. Суммарно на рекламу я потратил порядка 50 000руб. И расчёт был, что хотя бы 1/3 от суммы отобьётся, однако этого не произошло.

Я топорно пошёл по твичу рекламироваться в чатах у стримеров, и нашёл блогера, который прошёл по ссылке и целых 2 часа играл у меня на проекте со своими зрителями (в тот день, была бесплатная игра без ограничений с целью рекламы). Очередь на игру была 60-70 человек при 9 машинках, я был уверен, что это успех, однако на следующий день пришло 0. Этот блогер на мои сообщения и попытки договориться о дальнейшим сотрудничестве ответил полным игнором.

ИТОГ

Сюжет игры был в собирании контрольных точек – нужно было мордочкой машинки ударяться в белые коробочки (они на 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. Ещё есть возможность, вернуть проект в рабочее состояние, если появится партнёр, который окажет медиа или финансовую поддержку проекту.

ссылка на оригинал статьи https://habr.com/ru/articles/1030332/