Автор оригинала: Tim Stevens
С виртуальной реальностью сейчас всё как-то странно. В 1990-х она много обещала и мало дала, а в 2016 году вернулась вместе с Oculus Rift. Какое-то время казалось, что VR, AR, XR, метавселенная или как это ни назови вот-вот станет огромной. Марк Цукерберг в это точно верил, и даже Apple поддалась ажиотажу и выпустила Vision Pro.
Но к тому моменту интерес к альтернативным реальностям под любой аббревиатурой уже шёл на спад и дальше только угасал. Новые шлемы выходят всё реже, многие компании (Apple в том числе) урезали работы или отложили проекты. Steam Frame и Pimax Dream Air всё-таки выходят, но многое из самого интересного в этой области сейчас происходит у энтузиастов.
Да, самодельная VR существует. За пару сотен долларов на детали и много часов своего времени вы попадёте в виртуальную реальность, а по дороге испытаете все радости и горести пайки, прошивки и 3D-печати. Я прокатился на этих горках сам и понял, почему это занятие до сих пор остаётся уделом немногих.

Стандартная накладка от VR-шлема делает конструкцию хоть сколько-то удобной. Фото: Tim Stevens
Что есть в самодельной VR
Я наткнулся на эту тему около года назад. VR мне нужна в основном для симрейсинга: дома в пижаме я тренируюсь водить лучшие машины мира на лучших трассах мира. Тогда у меня был HP Reverb G2, шлем на стандарте Windows Mixed Reality (WMR).
Microsoft как раз остывала к VR и сворачивала поддержку WMR, и я боялся, что придётся покупать новый шлем. (Зря боялся: умельцы поддерживают WMR-шлемы сторонними драйверами вроде OASIS в Steam.)
Тогда-то я и нашёл видео ютубера CNCDan о том, как собрать VR-шлем за 150 долларов. Цена подкупала, а у меня есть кое-какие навыки в электронике: я годами разбираю и чиню пинбольные автоматы. Звучало как весёлое занятие.
За этим видео открылся целый мир самодельной VR, с программами и советами по железу для новичков.
Лучше всего начинать с Relativty VR. Этот проект в конце 2010-х запустили Йонас Чеккон, Габриэль Комб и Максим Кутте, и в нём есть весь код, конфигурации и инструкции, которые понадобятся.
Есть и другие: OpenVR Arduino HMD, Project North Star и SlimeVR для отслеживания всего тела. Собрать шлем можно очень по-разному. Для первой попытки я не стал усложнять: взял софт Relativty и 3D-модели корпуса, которые CNCDan выложил вместе со своей сборкой. Начинаем с железа.

Arduino, IMU и пара маленьких дисплеев — по сути, больше ничего и не нужно. Фото: Tim Stevens
Список деталей
Самодельный VR-шлем — это смесь железа и софта. Софт ставится в пару кликов, а вот детали, скорее всего, придётся подождать. Тем более что с международной доставкой сейчас ничего не понятно.
Самая большая и, пожалуй, самая важная железка — 3D-принтер. Я видел вполне достойные самоделки из переделанных держателей для телефона (Google Cardboard и подобных), но в большинстве проектов корпус печатают. Если принтера нет, детали можно заказать по почте, например у Formlabs, но возиться придётся много, и печатать дома всё-таки удобнее.
Купить в любом случае придётся немало. Начнём с самого дорогого — дисплеев. Кажется, что пара панелей, достаточно маленьких и достаточно хороших для VR-шлема, — редкость и стоит неподъёмно. Потратить тут можно сколько угодно, но стандартный вариант — пара 2,9-дюймовых ЖК-дисплеев, которые вместе с нужным контроллером обходятся примерно в 125 долларов.
У каждого разрешение 1440×1440, яркость 150 нит и контрастность 600:1. Характеристики не мирового уровня, но для этой задачи хватает. Под углом смотреть на них неприятно, но вы будете держать их в нескольких сантиметрах от глаз, так что это неважно.

Дешёвые пластиковые линзы фокусируют картинку. Фото: Tim Stevens
Следующая деталь — модуль с инерциальным измерительным блоком, IMU. Он определяет положение шлема. Нужен GY-91: на этой плате есть акселерометр, гироскоп, магнитометр и барометр. Стоит она около 5 долларов, но будьте осторожны, почему — расскажу ниже.
Дальше схема, которая всё это связывает. В некоторых самодельных шлемах стоят собственные платы, усыпанные компонентами. Relativty обходится Arduino Pro Micro, которая продаётся в куче магазинов электроники за 5 долларов или дешевле.
Ещё нужны две линзы диаметром 34 мм, чтобы сфокусировать крошечные дисплеи, мелкий крепёж и нейлоновый ремень, чтобы всё это держалось на голове. И накладка от HTC Vive: острые края слоёв пластика из 3D-принтера на лице никому не нужны.
Всё вместе обошлось мне чуть меньше чем в 180 долларов.

Макетная плата не обязательна, но на первых тестах здорово помогает. Фото: Tim Stevens
Время макетки
Прежде чем доставать паяльник и запускать 3D-принтер, советую начать с макетной платы и перемычек. Проводов в проекте немного, но поверьте: разбираться, почему не прошивается прошивка, гораздо проще с компонентами на столе, чем с теми, что уже втиснуты в шлем.
Всю распиновку я приводить не буду, лучше следовать инструкции из репозитория на GitHub. В общих чертах IMU нужно подключить к Arduino и по питанию, и по данным.
Контроллер дисплеев тоже можно запитать от Arduino, как предлагают в видео. Для тестов я так и сделал, но имейте в виду: это не лучшая идея, дисплеям нужно больше тока, чем Arduino может дать. Лучше протянуть к дисплею отдельный USB-кабель или поставить USB-разветвитель внутри шлема.
Когда всё подключено и включилось без происшествий, можно переходить к софту.

Настоящая Arduino и поддельный IMU. Фото: Tim Stevens
Весёлая прошивка
Прошить Arduino должно быть проще всего, но именно здесь у меня всё начало разваливаться. В теории вы ставите на компьютер Arduino IDE, скачиваете проект FastIMU, подключаете Arduino по USB и жмёте «Скомпилировать». Проще некуда.
У меня прошивка раз за разом падала с невнятной ошибкой e:-1. Я почитал, повозился и наконец разобрался, и новость была плохая.
Я заказал и оплатил GY-91 с IMU 9250 на борту, и плата именно так и представлялась. А на деле на ней стоял более простой и дешёвый 6500, у которого нет магнитометра.
Как я узнал на собственном опыте, такое случается пугающе часто. Многие сомнительные продавцы электроники охотно продают не тот компонент по цене того. Оба чипа совместимы и работают почти одинаково, но без магнитометра отслеживание заметно хуже.
Как только я поправил код под мой 6500 вместо 9250, который я думал, что купил, всё прошилось как по маслу и сразу заработало. Откалибровал IMU через Arduino IDE и был готов к финальной сборке.

С дисплеями обращайтесь предельно осторожно. Фото: Tim Stevens
Собираем всё вместе
В сети есть разные корпуса для самодельных VR-шлемов, и многие рассчитаны именно на тот набор плат, что используется в Relativty. Я взял файлы CNCDan: конструкция выглядела аккуратной и продуманной и даже позволяла менять расстояние между дисплеями под межзрачковое расстояние (IPD).
Из-за этого сборка непростая: много печатных деталей, в которые надо вплавить резьбовые втулки, плюс стержни и винты, на которых всё держится. Ещё понадобятся два «окуляра», в каждом с одной стороны линза, с другой — дисплей.
Тут я и совершил болезненную ошибку. В окулярах этой конструкции есть маленькие защёлки, и инструкция предлагает просто вщёлкнуть в них дисплеи.
Так делать не надо. Открытые ЖК-панели невероятно хрупкие, и, вщёлкивая их, я разбил обе. Небольшого усилия хватило, чтобы они треснули, и повреждение не было видно, пока я их не включил.
Поэтому очень советую переделать окуляры: либо напечатать их без защёлок, либо отломать защёлки после печати. Я закрепил свои дисплеи несколькими полосками тонкого малярного скотча.

Немного скотча — и всё держится. Фото: Tim Stevens
Запускаем игру
Я затолкал все провода на место, свинтил шлем, приклеил накладку для лица, продел ремень и минут пять пытался надеть всё это удобно. Так и не получилось.
Я загрузился в домашнее пространство SteamVR, и меня сразу повело. Во-первых, я смотрел прямо в пол. Во-вторых, при повороте головы картинка крутилась куда попало, и быстро подступила тошнота.
Я забыл заново откалибровать шлем после того, как установил все компоненты, и мой дешёвый IMU теперь был повёрнут не так, как лежал на столе.
После повторной калибровки и ещё небольшой возни с прошивкой я вернулся в стартовую комнату SteamVR и понял, что проблема осталась. Если держать голову совершенно неподвижно, было видно, как картинка медленно поворачивается.
Вдобавок оси IMU, похоже, были слегка перекошены, и картинка двигалась не совсем так, как голова. Я проверил, что IMU в корпусе стоит правильно, несколько раз откалибровал заново, но лучше не стало.

Корпус для шлема можно напечатать какой угодно. Фото: Tim Stevens
Я не сдавался и запустил iRacing, мой любимый гоночный симулятор с поддержкой SteamVR. Ещё до выезда с пит-лейна картинку начало уводить в сторону. Я назначил команду «вернуть вид по центру» на кнопку руля, и тянуться к ней приходилось часто.
При этом картинка оказалась куда лучше, чем я ожидал. Дешёвые пластиковые линзы работают на удивление хорошо, и хотя пиксели на дисплеях были различимы (тот самый «эффект москитной сетки», которого все боятся в VR), меня это не раздражало. Яркости и контраста хватало с запасом, а 60 Гц было достаточно для неспешных тренировок.
А вот дрейф датчика и неудобство были настоящими проблемами. Кабели ничем не были уложены, и шлем всё время тянуло в одну сторону. Накладка не спасала: шлем давил на нос и скулы.
В серийных VR-шлемах я проводил многочасовые гонки на выносливость. В этом через 15 минут мне хотелось всё бросить.

Такие проекты никогда по-настоящему не заканчиваются. Фото: Tim Stevens
Итоги и будущие апгрейды
Всего на проект я потратил 239,93 доллара. Но сюда входят лишние 62 доллара за второй комплект дисплеев. Если не повторять мою дорогую ошибку, детали обойдутся примерно в 180 долларов.
Это примерно половина цены Meta Quest 3S, одного из самых дешёвых шлемов на рынке. Экономия солидная, но большинству я бы посоветовал доплатить. Отслеживание у моего шлема сводит с ума, картинка в лучшем случае средняя, и это самый неудобный шлем из всех, что я носил.
Но всё это поправимо. В некоторых проектах ставят IMU MinIMU-9: он выглядит куда точнее, и подделывают его реже, но и стоит он заметно дороже, 35 долларов. Можно взять ЖК-панели получше или даже крошечные OLED с любыми цветами и контрастом, каких только захочется. Есть варианты со встроенным аккумулятором или беспроводным адаптером, и, конечно, можно сколько угодно времени проектировать сверхудобный корпус.
Но даже если не считать потраченного времени, с такими апгрейдами вы быстро приближаетесь к цене того самого Quest — шлема далеко не идеального, но который просто и удобно работает прямо из коробки.
Как всегда с такими проектами, всё зависит от того, чего вы хотите. Если нужен дешёвый, простой и надёжный шлем для очередной порции погружения в игры, это, скорее всего, не он.
А если хочется интересного проекта, после которого начинаешь ценить промышленный дизайн, без которого не бывает красивого и удобного носимого устройства, — возможно, это он. Я многому научился и, несмотря на все мучения, рад, что за это взялся.
Впрочем, хотя я продолжу возиться и, скорее всего, поставлю в эту штуку ещё пару апгрейдов, заменить им мой основной шлем для гонок я не готов, каким бы устаревшим тот ни был.
413x
В качестве контроллеров для таких вр шлемов можно использовать Razer Hydra, которые найти сложно, но можно найти тысяч за 5-6 на авито
413x
Также в принципе если есть смартфон с гироскопом можно обойтись и без дисплеев, и датчиков, достаточно будет купить, к сожалению уже на авито - Bobo VR Z4 (рекомендую модель сразу с наушниками). С помощью Sunshine и OpenVR‑OpenTrack можно выводить картинку, ну либо с помощью других драйверов.