{"id":15033574,"url":"https://github.com/relativty/relativty","last_synced_at":"2025-05-14T12:11:05.656Z","repository":{"id":43380028,"uuid":"112928128","full_name":"relativty/Relativty","owner":"relativty","description":"An open source VR headset with SteamVR supports for $200","archived":false,"fork":false,"pushed_at":"2024-07-21T16:01:36.000Z","size":177204,"stargazers_count":6481,"open_issues_count":29,"forks_count":342,"subscribers_count":254,"default_branch":"master","last_synced_at":"2024-10-29T15:35:13.007Z","etag":null,"topics":["diy","hardware","maxim-xyz","oculus","virtual-reality","vr","vr-headset"],"latest_commit_sha":null,"homepage":"https://www.relativty.com/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/relativty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-03T12:59:30.000Z","updated_at":"2024-10-29T15:01:50.000Z","dependencies_parsed_at":"2024-08-01T07:06:49.551Z","dependency_job_id":null,"html_url":"https://github.com/relativty/Relativty","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relativty%2FRelativty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relativty%2FRelativty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relativty%2FRelativty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relativty%2FRelativty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/relativty","download_url":"https://codeload.github.com/relativty/Relativty/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247968374,"owners_count":21025823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diy","hardware","maxim-xyz","oculus","virtual-reality","vr","vr-headset"],"created_at":"2024-09-24T20:21:47.967Z","updated_at":"2025-04-09T03:11:23.609Z","avatar_url":"https://github.com/relativty.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\r\n\t\u003cimg\r\n\t\twidth=\"400\"\r\n\t\talt=\"Relativty\"\r\n\t\tsrc=\"ressources/img/title.png\"\u003e\r\n\u003c/h1\u003e\r\n\r\n\u003ch3 align=\"center\"\u003e\r\n\tOpen-source VR headset with SteamVR support.\r\n\u003c/h3\u003e\r\n\u003cp align=\"center\"\u003e\r\n\t\u003cstrong\u003e\r\n\t\t\u003ca href=\"https://relativty.com\"\u003eWebsite\u003c/a\u003e\r\n\t\t•\r\n\t\t\u003ca href=\"https://discord.gg/jARCsVb\"\u003eDiscord\u003c/a\u003e\r\n\t\u003c/strong\u003e\r\n\u003c/p\u003e\r\n\r\nI’m \u003ca href=\"https://twitter.com/maxim_xyz?lang=en\"\u003eMaxim xyz\u003c/a\u003e and when my best friend Gabriel Combe and I were 15 years old we built our own VR headset because we couldn't afford to buy one.\r\n\r\n5 years later : this headset became Relativty.\r\n\r\n* Fully Open-source - **hardware**, **software**, **firmware**.\r\n* **Steam VR** support.\r\n* Natively displays **2K** resolution at **120FPS**.\r\n* Compatible with **Arduino**.\r\n* Experimental **Body-Tracking**\r\n\r\n\r\n**This repo serves as a Build guide, to learn more about the headset see you at \u003ca href=\"https://relativty.com\"\u003eRelativty.com\u003c/a\u003e**\r\n\r\nMade for Hackers\r\n-\r\nRelativty is **NOT A CONSUMER PRODUCT**. We made Relativty in my bedroom with a soldering iron and a 3D printer and we expect you to do the same: **build it yourself**.\r\n\r\nRelativty at its basics is a 3 Degrees of Freedom (3-DoF) VR headset with no built-in controller support, designed to work with SteamVR.\r\nThis may limit its practical usability for games that demand knuckle-style VR controllers.\r\nIf you are looking for a more full-featured DIY VR project 6-Dof tracking and controller support, we recommend you check out \u003ca href=\"https://github.com/HadesVR/HadesVR\"\u003eHadesVR\u003c/a\u003e.\r\n\r\nWhether or not you are building either Relativty or HadesVR, or if you just want to join our community and hang out, we invite you to \u003ca href=\"https://discord.gg/F8GNKjy6RF\"\u003eRelativty's Guild on Discord\u003c/a\u003e.\r\n\r\nIt is a place for the DIY/Open-Source VR community to learn, grow, share knowledge, and ask for help. \r\n\r\n# Start Building Relativty\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/open.jpg\"\u003e \u003c/p\u003e\r\n\r\n# Building The Hardware\r\n## 1. CURRENT RECOMMENDED BUILD - As of May 2023\r\n### 1.1 Introduction\r\nThis is an updated build guide to help people who recently discovered Relativty. It aims to explain how to build the minimum functional product, which can be further improved upon and modified to the individual's liking. The original build guide can still be found further below.\r\n\r\n            Following this guide to build a Relativty headset assumes basic understanding of electronics and programming Arduino boards.\r\n            A VR headset is a complex system and can be difficult to figure out what is not working if you get stuck with the build.\r\n            If you encounter any issues, join our Discord and ask for help, we are happy to assist.\r\n\r\n### 1.2 ELECTRONICS\r\n\r\nThe following electronic components are required:\r\n\r\n- ATmega32U4 Microcontroller (MCU) with USB HID support, such as an \u003ca href=\"https://www.amazon.co.uk/diymore-Atmega32U4-Development-Microcontroller-Header/dp/B0BKGSVX2X\"\u003eArduino Pro Micro\u003c/a\u003e\r\n- Inertial Measurement Unit (IMU) that is supported by the \u003ca href=\"https://github.com/LiquidCGS/FastIMU\"\u003eFastIMU Library\u003c/a\u003e\r\n- A small, high resolution and high refresh rate PC display + driver board. \u003ca href=\"https://github.com/HadesVR/HadesVR/blob/main/docs/Headset.md#displays\"\u003eThis segment of the HadesVR documentation presents possible good options you can choose from\u003c/a\u003e. It is important to note that these displays connect to a DRIVER BOARD, which then connects to your computer. ALWAYS purchase the driver board and display(s) in the same bundle if you can to ensure they are compatible with each other. If you have further questions about displays, join us at \u003ca href=\"https://discord.gg/F8GNKjy6RF\"\u003eRelativty's Guild on Discord\u003c/a\u003e.\r\n```\r\nNOTES on VR DISPLAYS:\r\n- The display does not connect to the Microcontroller, it only connects to the Computer running your VR Apps.\r\n- Technically, any PC display/monitor can be configured as the display used by Relativty. Therefore, you can simply test your build on your PC monitor\r\nfirst to make sure it works, before you decide to spend a significant amount of money on lenses, display(s) and other parts.\r\n- High performance, small form factor displays are expensive, and often very delicate. Handle them with care! :)\r\n```\r\n\r\n### 1.2.1 Wiring the IMU and MCU\r\nThe IMU needs to be connected to the MCU for power and communication.\r\nThe MCU connects to your computer via USB to send the IMU readings to SteamVR.\r\n\r\nIn case of an Arduino Pro Micro, you need to connect the following pins:\r\n```\r\nPro Micro       IMU\r\nVCC         -\u003e  VCC  \r\nGND         -\u003e  GND  \r\nSDA(pin 2)  -\u003e  SDA  \r\nSCL(pin 3)  -\u003e  SCL  \r\n```  \r\nIf you use a different MCU, the SDA and SCL pins might be mapped to different pin numbers.\r\n\r\nAlso, make sure that the VCC of your MCU is compatible with the rated operating voltage of your IMU.\r\n\r\nSupplying incorrect voltage to electronic components may cause damage to them.\r\n\r\nThe MCU itself simply connects to your computer via the USB port.\r\n\r\n### 1.2.2 Connecting the display\r\nAs mentioned previously, any display that is compatible with a personal computer should be able to function as your VR display.\r\n\r\nIn case you are using the recommended one or a similar component that is powered via micro-USB or other USB standard, it is possible that you will encounter situations where the board does not power up. This could be either because the micro-USB cable you are using is too long (so the board cannot power up because the voltage dropped too much), or the board is unable to turn on because the USB port it connects to on the computer side is simply unable to supply enough power. In this case, you might need to try different ports on your computer or a powered USB hub.\r\n\r\n### 1.3 MECHANICAL BUILD\r\n\r\nThe following parts are required for the Mechanical Build:\r\n\r\n- Housing - .STL files for 3D-printable model provided in Relativty_Mechanical_build folder.\r\n- Lenses -  for building the 3D-printable headset, Lenses with 40mm diameter/50mm focal length required. You can often find these on Aliexpress or similar.\r\n- Strap and Facial Interface - e.g. replacement strap + foam for HTC Vive. You can often find these on Aliexpress or similar.\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/front.jpg\"\u003e \u003c/p\u003e\r\n\r\nIf you do not have access to 3D-printing, it is also possible (and MUCH simpler) to just use an Android VR Phone case, and modify it to fit your screen and so that you can attach your IMU and MCU to it.\r\n\r\nThe advantage of this approach is that you get everything in one package, often including IPD adjustment.\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/android-vr.jpg\"\u003e \u003c/p\u003e\r\n\r\n### 1.4 SOFTWARE SETUP\r\n\r\n### 1.4.1 Introduction\r\n\r\nRelativty depends on 2 main software components:\r\n- the Arduino firmware\r\n- the SteamVR driver\r\n\r\nAs the system is designed to work with SteamVR, you need to have Steam installed and SteamVR downloaded on your computer.\r\n\r\n### 1.4.2 Programming your MCU\r\n\r\nAs previously mentioned, we recommend you use an Arduino Pro Micro and an IMU supported by the FastIMU Library.\r\nFastIMU is an awesome package that supports many commonly used IMUs and comes with a pre-written Arduino sketch that works with Relativty.\r\n\r\nFirst, you will need to install the Arduino IDE and connect your MCU to your computer via the USB connector.\r\n\r\nOnce you have it connected and verified your Arduino IDE can work with your MCU, download FastIMU from the library manager.\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/FastIMU-lib.jpg\"\u003e \u003c/p\u003e\r\n\r\nWire up your IMU as recommended in Section 1.2.1.\r\n\r\nFind the Examples/Fastimu/Calibrated_relativty sketch in your Arduino IDE:\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/FastIMU-sketch.jpg\"\u003e \u003c/p\u003e\r\n\r\nAnd finally, Upload it to your MCU.\r\n\r\nFastIMU also includes a built-in calibration tool that can store the calibration data on the IMUs EEPROM.\r\n\r\nCalibrating the IMU may help with sensor drift that you can experience over time while using Relativty.\r\n\r\nAfter uploading Calibrated_relativty sketch to the IMU, you can open the Arduino Serial Monitor to initiate a calibration sequence:\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/FastIMU-calib.jpg\"\u003e \u003c/p\u003e\r\n\r\n      NOTE: you only have to do this once, but make sure to follow the instructions given to you in the serial monitor.\r\n\r\n\r\n### 1.4.3 Installing The SteamVR Driver\r\n\r\nTo install the Relativty SteamVR driver:\r\n- download the \u003ca href=\"https://github.com/relativty/Relativty/archive/refs/heads/master.zip\"\u003emaster repository\u003c/a\u003e\r\n- inside Relativty-master find the Relativty_Driver\\Relativty folder and copy it to your SteamVR installation's drivers directory.\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/driver-copy.jpg\"\u003e \u003c/p\u003e\r\n\r\n\r\n### 1.4.4 Configuring The SteamVR Driver\r\n\r\nOnce you copied the driver files, it is time to configure the driver to work with your setup and computer.\r\n\r\nInside drivers\\Relativty\\resources\\settings, there should be a file called default.vrsettings.\r\n\r\nThis is the configuration file for the driver.\r\n\r\nThere are a few things that you need to change.\r\n\r\n\r\n### Configuring the driver to talk to the MCU\r\nASSUMING you use an Arduino Pro Micro and the FastIMU library:\r\n\r\nIn the Relativty_hmd segment find these values:\r\n- hmdPid\r\n- hmdVid\r\n- hmdIMUdmpPackets\r\n\r\nand change the values like so:\r\n\r\n```\r\n      \"hmdPid\" : 32823,\r\n      \"hmdVid\": 9025,\r\n      \"hmdIMUdmpPackets\":  false,\r\n```\r\n\r\nIf you are using a different MCU, you need to figure out the USB PID and VID values.\r\n\r\nEasiest way is to connect it to your computer via USB and check in Arduino IDE.\r\n\r\nIn the menu bar, select Tools/Get Board Info:\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/board-info.jpg\"\u003e \u003c/p\u003e\r\n\r\nTake the PID and VID values and convert them to decimal with a \u003ca href=\"https://www.rapidtables.com/convert/number/hex-to-decimal.html\"\u003ehex converter\u003c/a\u003e.\r\n\r\nThe converted values then go into the hmdPid and hmdVid values in default.vrsettings.\r\n\r\n### Configuring the Display Settings\r\nNow let's look at configuring the driver to work with your Display.\r\n\r\nThe config variables for the display are in the Relativty_extendedDisplay segment:\r\n\r\n\r\nFor the VR Viewport window's point of origin:\r\n```\r\n      \"windowX\" : 3440,\r\n      \"windowY\" : 0,\r\n```\r\n\r\nFor the VR Viewport's actual size\r\n```\r\n      \"windowWidth\" : 1920,\r\n      \"windowHeight\" : 1080,\r\n```\r\n\r\nFor the VR Viewport's rendering resolution - this should be normally the same as the size\r\n```\r\n      \"renderWidth\" : 1920,\r\n      \"renderHeight\" : 1080,\r\n```\r\n\r\nAnd some miscellaneous settings:\r\n```\r\n      \"DistortionK1\" : 0.4,\r\n      \"DistortionK2\" : 0.5,\r\n      \"ZoomWidth\" : 1,\r\n      \"ZoomHeight\" : 1,\r\n      \"EyeGapOffsetPx\" : 0,\r\n      \"IsDisplayRealDisplay\" : true,\r\n      \"IsDisplayOnDesktop\" : true\r\n```\r\nIf the point of origin and size is not configured correctly, the driver will crash and SteamVR will not display anything!\r\n\r\nTherefore we need to have a look at and understand the coordinate system SteamVR uses for displays.\r\n\r\nWindows always assumes one of the connected displays as your Primary Display.\r\n\r\nYou can verify which one is your Primary in Display Settings.\r\n\r\nYou can select each of your displays with the mouse. The one that has \"Make this my main display\" checkbox greyed out is your Primary Display.\r\n\r\nTHIS GUIDE ASSUMES THAT THE TOP EDGE OF ALL OF YOUR DISPLAYS ARE ALIGNED IN WINDOWS DISPLAY SETTINGS (as seen on the screenshots)\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/display-settings.jpg\"\u003e \u003c/p\u003e\r\n\r\nConsequently, checking the same on another, non-primary display will make that one your Primary.\r\n\r\nThe TOP LEFT corner of your Primary Display is the ORIGIN POINT of SteamVR's display coordinate system.\r\n\r\nTo be able to tell SteamVR where to draw the VR Viewport on your displays, you need to make sure you understand this fact and as a result can identify the correct point of origin for the Viewport.\r\n\r\nFor example, in a setup like this:\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/display-coordinates.jpg\"\u003e \u003c/p\u003e\r\n\r\nBecause the \"1\" screen is the primary, and the \"3\" screen is the VR Display, the origin point (the 0,0 coordinate) is on the top left of the \"1\" screen.\r\n\r\nThis screen has 3440x1440 resolution.\r\n\r\nThis means it occupies the X axis from 0 to 3439, and the next screen on its right starts at point 3440.\r\n\r\nTherefore, in this case the correct windowX and windowY values are:\r\n\r\n```\r\n      \"windowX\" : 3440,\r\n      \"windowY\" : 0,\r\n```\r\n\r\nIf \"2\" screen was the VR display (and \"1\" is still the Primary), the correct values would be:\r\n\r\n```\r\n      \"windowX\" : -1920,\r\n      \"windowY\" : 0,\r\n```\r\nBecause the \"2\" screen's coordinates occupy space over the other side of the origin point.\r\n\r\nFor windowWidth,windowHeight,renderWidth,renderHeight, simply set the Native Resolution of your VR display.\r\n\r\nOnce this is all set, save the settings file.\r\n\r\nNow you should be ready to start SteamVR.\r\n\r\nIf everything is set up right, you should get straight into the vr holodeck area:\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/electronics-assembled.jpg\"\u003e \u003c/p\u003e\r\n\r\nIf you are encountering any issues with your build:\r\n- open the SteamVR Web Console and copy the entire log file\r\n- Join \u003ca href=\"https://discord.gg/F8GNKjy6RF\"\u003eRelativty's Guild on Discord\u003c/a\u003e, tell us about the issues you are facing, and upload the log file in the chat. \r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/steamvr-logs.jpg\"\u003e \u003c/p\u003e\r\n\r\n### IF YOUR VR WINDOW DISAPPEARS AFTER CLICKING ON IT:\r\n\r\nOpen Windows PowerShell and paste these commands into the command line, then hit enter:\r\n\r\n```\r\nget-process vrcompositor | stop-process -Force;cd \"C:\\Program Files (x86)\\Steam\\steamapps\\common\\SteamVR\\bin\\win64\";.\\vrcompositor.exe\r\n```\r\n\r\nAfterwards the VRCompositor should remain stable, so you only have to do this once per session.\r\n\r\n\r\n# 2. LEGACY BUILD\r\nThe hardware is based on the Relativty Motherboard which includes an Atmel SAM3X8E ARM Cortex-M3 processor and uses an MPU-6050 as it’s IMU.\r\nAlternatively, any processor that supports the ArduinoCore and is connected to an MPU-6050/MPU-9250 can be used as the hardware for Relativty. Both methods are explained below.\r\n\r\n## Building The Relativty Motherboard\r\n### PCB Manufacturing.\r\n\r\nWe first start with the naked PCB.\r\n\r\nit can be manufactured and bought for around $4 on websites like \u003ca href=\"https://jlcpcb.com/\"\u003ejlcpcb\u003c/a\u003e.\r\n\r\nYou’ll need to provide the Gerber file folder `Relativty_Electronics_build/GerberFiles.zip` which describes the shape of the board.\r\n\r\n\r\n### Assembling\r\n\r\nSoldering the components onto the naked PCB. \r\n\r\nYou’ll have to buy the components listed in one of the two BOMs, depending on availability:\r\n- `Relativty_Electronics_build/Assembly/jlcpcb.com_motherboard_BOM.csv` \r\n- `Relativty_Electronics_build/Assembly/motherboard_BOM.xlsx`\r\n\r\nWhere to position those components on the PCB is described in the file `Relativty_Electronics_source/motherboard.brd` which can be opened in Eagle.\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/motherboard.jpg\"\u003e \u003c/p\u003e\r\n\r\n#### Using an Arduino\r\n\r\nAn alternative to the Relativty Motherboard is to use an Arduino Due and to connect it to an MPU-6050.\r\n```\r\n5V      -\u003e VCC  \r\nGND     -\u003e GND  \r\nSDA(20) -\u003e SDA  \r\nSCL(21) -\u003e SCL  \r\nPIN 2   -\u003e INT  \r\n```\r\n\r\nIf you are using an MPU-9250 with the alternative firmware provided the pinout is:\r\n\r\n```\r\n5V      -\u003e VCC  \r\nGND     -\u003e GND  \r\nSDA(20) -\u003e SDA  \r\nSCL(21) -\u003e SCL   \r\n```\r\n\r\nThen push the `ERASE` and the `RESET` button on the Arduino Due and you’ll be able to install the Relativty Firmware.\r\n\r\n#### Installing The Relativty Firmware\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/cards.jpg\"\u003e \u003c/p\u003e\r\nYou’ll now need to install the Relativty board in the Arduino IDE. \r\n\r\nTo do that copy that JSON URL: https://raw.githubusercontent.com/relativty/Relativty/master/Relativty_Firmware/package_Relativty_board_index.json and open the Arduino IDE\r\n\r\nIn Arduino, Click File and then Preferences:\r\n\r\n- If you are using the Relativty PCB, aad the JSON URL to the `Additional Boards Manager` text box.\r\n- Go to `Tools \u003e Board \u003e Board Manager` and you should see the Relativty Board, click install.\r\n- Reboot the Arduino IDE and under Tools \u003e Boards, select Relativty.\r\n- You can now open `Relativty_Firmware/firmware/firmware.ino` and upload it to your board.\r\n\r\nIf you are using a different board e.g. Arduino Due:\r\n\r\n- install contents of `Relativty_Firmware\\Relativty_board\\` to your Arduino IDE\r\n- if you are using MPU-6050, use `Relativty_Firmware/firmware/firmware.ino`\r\n- if you are using MPU-9250, use `Relativty_Firmware\\MP9250-HID\\MP9250-HID\\MP9250-HID.ino`\r\n\r\n\r\n\r\n# Building The Mechanical Parts\r\n\r\n## Assembling the HMD\r\n\r\nAll the files needed for the 3D printing can be found in the `Relativty_Mechanical_build` folder and the screws needed to assemble the Headset are listed in `screws_BOM.xlsx`.\r\n\r\nWe've used parts from Aliexpress:\r\n\r\n- \u003ca href=\"https://www.aliexpress.com/item/33058848848.html\"\u003eThe Strap\u003c/a\u003e, \r\n- \u003ca href=\"https://www.aliexpress.com/item/4000199486058.html\"\u003eThe Foam\u003c/a\u003e,\r\n- \u003ca href=\"https://www.aliexpress.com/item/33029909783.html\"\u003eThe Lenses\u003c/a\u003e (40mm diameter/50mm focal length).\r\n\r\n### The screen for the HMD\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/display.jpg\"\u003e \u003c/p\u003e\r\n\r\nRelativty Headset runs a dual-screen at 120FPS 2K, however, because of the open nature of Relativty you can equip it with any screen.\r\n\r\nOur model can be found on Aliexpress, but depending on the vendor similar screens can cost from $150 to $190. You'll have to hunt and maybe wait for the right vendor at the right price to get the display for cheap (or buy in bulk). \r\n\r\nThis is [the model we used](https://www.aliexpress.com/item/32975198897.html).\r\n\r\n### Setting Up the Software\r\n\r\n\u003cp align=\"center\"\u003e \u003cimg src=\"ressources/img/front.jpg\"\u003e \u003c/p\u003e\r\n\r\n#### Installing Relativty Driver for SteamVR\r\n\r\nThe Relativty Driver is contained within `Relativty_Driver/Relativty` folder. \r\n\r\n⚠️ You’ll need to set it up by editing the JSON file `Relativty_Driver/Relativty/resources/settings/default.vrsettings`\r\n\r\nIf you are not using a Relativty PCB, you will need to change these:\r\n\r\n      \"hmdPid\" : 9,\r\n      \"hmdVid\": 4617,\r\n\t  \r\nThese are the USB HID device's unique Vendor and Producit Identifieres (pid/vid)\r\n\r\nIf you are using and Arduino Due, the correct values will be:\r\n\r\n      \"hmdPid\" : 62,\r\n      \"hmdVid\" : 9025,\r\n\t  \r\nIn case you are using a different board, the process to get the right values is as below:\r\n\r\n1.\tPlug your board in\r\n\r\n2.\tSelect your board in Arduino IDE and click Tools/Get Board info. you will see something like this:\r\n\r\n```\r\n\tBN: Arduino Due (Native USB Port)\r\n\tVID: 2341\r\n\tPID: 003e\r\n\tSN: HIDHB\r\n```\r\n3.\tMake note of the VID and PID numbers. These are hexadecimal values.\r\n\r\n\tTo apply them to the config, they need to be converted to int.\r\n\t\r\n\tIf you are unsure how to do that, there is plenty online converters available.\r\n\t\r\n\tSuch as: https://www.rapidtables.com/convert/number/hex-to-decimal.html\r\n\r\n4.\tChange your hmdPid and hmdVid values to the converted values.\r\n\r\nNext, you need to set up the display coordinates and resolution.\r\n\r\nAt first, you should have the HMD's display set up as a secondary screen extending your desktop,\r\n\r\naligned onto the top right corner of your primary display.\r\n\r\n\r\nIn the config file's \"Relativty_extendedDisplay\" segment, find and set these:\r\n```\r\n      \"windowX\" : *whatever your primary screen resolution's width is*,\r\n      \"windowY\" : 0,\r\n      \"windowWidth\" : *HMD's native resolution width*,\r\n      \"windowHeight\" : *HMD's native resolution height*,\r\n      \"renderWidth\" : *HMD's native resolution width*,\r\n      \"renderHeight\" : *HMD's native resolution height*,\r\n\t  \r\n\t  And at the bottom of this segment:\r\n\t  \r\n      \"IsDisplayRealDisplay\" : true,\r\n      \"IsDisplayOnDesktop\" : true\r\n```  \r\n\t  \r\nMake sure not to delete any \",\" symbols as that will break the config.\r\n\r\nOnly the last item in the config should not have a \",\" symbol.\r\n\r\n\r\nIf for whatever reason the above settings do not work out for you try:\r\n\r\n\r\nSet your HMD display as a mirrored display of your primary display.\r\n\r\nChange config as follows:\r\n```\r\n      \"windowX\" : 0,\r\n      \"windowY\" : 0,\r\n      \"windowWidth\" : *HMD's native resolution width*,\r\n      \"windowHeight\" : *HMD's native resolution height*,\r\n      \"renderWidth\" : *HMD's native resolution width*,\r\n      \"renderHeight\" : *HMD's native resolution height*,\r\n\t\r\n      \"IsDisplayRealDisplay\" : false,\r\n      \"IsDisplayOnDesktop\" : true\r\n\t\r\n```\t\r\n⚠️ Please note that this may result in keyboard/mouse input not being captured by the VR window, should your game require it, it might become unplayable.\r\n\r\nYou can also make IPD (Interpupillary Disance) adjustments within the configuration file:\r\n\r\nIn the \"Relativty_hmd\" segment find and adjust:\r\n\r\n```\r\n      \"IPDmeters\" : 0.063,\r\n```\r\n\r\nYou can also change the lens distortion correction by changing these:\r\n\r\n```\r\n      \"DistortionK1\" : 0.4,\r\n      \"DistortionK2\" : 0.5,\r\n```\r\n\r\nYou can now install Relativty Driver:\r\n- Locate your `vrpathreg.exe` program, usually located at `C:/Steam/steamapps/common/SteamVR/bin/win64/vrpathreg.exe`\r\n- Then open the Windows Command Prompt and run the following commands:\r\n`cd C:/Steam/steamapps/common/SteamVR/bin/win64\r\nvrpathreg.exe`\r\n\r\nAnd then assuming your `Relativty_Driver/Relativty` driver folder is located at:\r\n`C:/code/Relativty_Driver/Relativty`\r\n- run `vrpathreg adddriver C:/code/Relativty_Driver/Relativty`\r\n\r\nRelativty Driver is now installed. You can uninstall it any time by running:  \r\n- `vrpathreg removedriver C:/code/Relativty_Driver/Relativty`\r\n\r\n#### Setting up the Experimental 3D Tracking\r\n\r\nThe tracking is still very experimental and can only be run on NVIDIA GPU due to the usage of CUDA. The tracking makes uses of only a video input and an Artificial Neural Network AI trained to estimate a 3D body position. \r\n\r\nThis method is nothing close to the precision or freedom of movements of a dedicated sensor however we believe that the model can be trained and improved by orders of magnitude.\r\n\r\nYou first need to connect a webcam to your computer and install Python 3.8.4 and select the option to add it to the path. Then install `PyTorch`, you can do so by running the following commands:\r\n\r\n`python -m pip install torch===1.6.0 torchvision===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html`\r\n\r\nThen proceed to install `CUDA Toolkit 11.0.`\r\n\r\nYou’ll then need to download the Folder `PYTHONPATH` at https://github.com/relativty/Relativty/releases and add its location to `PyPath` in the `JSON Relativty_Driver/Relativty/resources/settings/default.vrsettings`\r\n\r\nSet `tracking` to 1. The tracking is now turned on and can be turned off anytime by setting `tracking` to 0. The tracking can also be calibrated depending on your camera, this can be done by tweeking `scalesCoordinateMeter` and `offsetCoordinate`. `scalesCoordinateMeter` correspond to the delta of coordinates in a given axis calculated by the AI after normalization when you move 1 meter in that given axis.\r\n\r\n**Note:** If you plan on using mpu9250 firmware do not forget to switch to it in the driver by setting `hmdIMUdmpPackets` to `false`:\r\n`\"hmdIMUdmpPackets\":  false,`\r\n\r\n## Final Steps\r\n\r\nEverything is now set up to start playing. \r\n\r\nTo start using Relativty:\r\n- Lay the headset on a flat surface with the front panel facing the ground\r\n- Plug in the Headset.\r\nIt’ll automatically calibrate after a few seconds.\r\n\r\nYou can now run any SteamVR game!\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelativty%2Frelativty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frelativty%2Frelativty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelativty%2Frelativty/lists"}