Project Icon

Relativty

DIY开源VR头显 支持SteamVR的自制方案

Relativty是一个完全开源的VR头显项目,支持SteamVR平台。该项目原生支持2K分辨率和120Hz刷新率,兼容Arduino,并具有实验性的身体追踪功能。Relativty由两位年轻创作者开发,旨在为DIY爱好者提供平价VR解决方案。项目提供了全面的构建指南,涵盖电子组装、3D打印外壳、镜头选择和驱动配置等方面,使用户能够自行打造这款功能强大的VR头显。

Relativty

支持 SteamVR 的开源 VR 头戴设备

网站Discord

我是 Maxim xyz,当我和我最好的朋友 Gabriel Combe 15 岁时,因为买不起 VR 头戴设备,我们自己动手制作了一个。

5 年后:这个头戴设备成为了 Relativty。

  • 完全开源 - 硬件软件固件
  • 支持 Steam VR
  • 原生显示 2K 分辨率,120FPS
  • 兼容 Arduino
  • 实验性的全身追踪

本仓库作为构建指南,要了解更多关于头戴设备的信息,请访问 Relativty.com

为黑客而生

Relativty 不是消费级产品。我们在卧室里用烙铁和 3D 打印机制作了 Relativty,我们希望你也能自己动手制作。

Relativty 本质上是一个支持 3 自由度 (3-DoF) 的 VR 头戴设备,没有内置控制器支持,设计用于配合 SteamVR 使用。 这可能会限制其在需要指节式 VR 控制器的游戏中的实用性。 如果你正在寻找一个功能更全面的 DIY VR 项目,包括 6 自由度追踪和控制器支持,我们推荐你查看 HadesVR

无论你是在制作 Relativty 还是 HadesVR,或者只是想加入我们的社区和大家交流,我们邀请你加入 Discord 上的 Relativty 公会

这里是 DIY/开源 VR 社区学习、成长、分享知识和寻求帮助的地方。

开始构建 Relativty

构建硬件

1. 当前推荐构建 - 截至 2023 年 5 月

1.1 简介

这是一个更新的构建指南,旨在帮助最近发现 Relativty 的人。它解释了如何构建最小功能产品,该产品可以根据个人喜好进行进一步改进和修改。原始构建指南仍可在下方找到。

        按照本指南构建 Relativty 头戴设备需要对电子学和 Arduino 板编程有基本的了解。
        VR 头戴设备是一个复杂的系统,如果在构建过程中遇到困难,可能很难确定哪里出了问题。
        如果遇到任何问题,欢迎加入我们的 Discord 寻求帮助,我们很乐意协助。

1.2 电子部件

需要以下电子元件:

VR 显示屏注意事项:
- 显示屏不连接到微控制器,它只连接到运行 VR 应用程序的电脑。
- 理论上,任何 PC 显示器/显示屏都可以配置为 Relativty 使用的显示屏。因此,你可以先在 PC 显示器上测试你的构建,确保它能正常工作,然后再决定是否花大量资金购买镜头、显示屏和其他部件。
- 高性能、小型化的显示屏价格昂贵,而且通常非常脆弱。请小心处理!:)

1.2.1 连接 IMU 和 MCU

IMU 需要连接到 MCU 以获得电源和进行通信。 MCU通过USB连接到您的计算机,将IMU读数发送到SteamVR。

对于Arduino Pro Micro,您需要连接以下引脚:

Pro Micro       IMU
VCC         ->  VCC  
GND         ->  GND  
SDA(2号引脚) ->  SDA  
SCL(3号引脚) ->  SCL  

如果您使用不同的MCU,SDA和SCL引脚可能映射到不同的引脚号。

另外,请确保MCU的VCC与IMU的额定工作电压兼容。

为电子元件供应不正确的电压可能会导致损坏。

MCU本身只需通过USB端口连接到您的计算机即可。

1.2.2 连接显示屏

如前所述,任何与个人电脑兼容的显示器都应该能够作为您的VR显示器使用。

如果您使用推荐的或类似的通过micro-USB或其他USB标准供电的组件,可能会遇到电路板无法开机的情况。这可能是因为您使用的micro-USB线太长(导致电压下降太多,无法启动电路板),或者电路板无法开机是因为计算机端连接的USB端口无法提供足够的功率。在这种情况下,您可能需要尝试计算机上的不同端口或有源USB集线器。

1.3 机械构建

机械构建需要以下部件:

  • 外壳 - Relativty_Mechanical_build文件夹中提供了3D打印模型的.STL文件。
  • 镜片 - 对于构建3D打印头戴设备,需要直径40mm/焦距50mm的镜片。您通常可以在速卖通或类似平台上找到这些。
  • 头带和面部接触区 - 例如HTC Vive的替换头带+泡沫。您通常可以在速卖通或类似平台上找到这些。

如果您无法进行3D打印,也可以(而且更简单)使用Android VR手机壳,并对其进行改装以适配您的屏幕,并能够将IMU和MCU安装到上面。

这种方法的优点是您可以一次性获得所有东西,通常还包括IPD调节功能。

1.4 软件设置

1.4.1 简介

Relativty依赖两个主要软件组件:

  • Arduino固件
  • SteamVR驱动程序

由于系统设计为与SteamVR配合使用,您需要在计算机上安装Steam并下载SteamVR。

1.4.2 给MCU编程

如前所述,我们建议您使用Arduino Pro Micro和FastIMU库支持的IMU。 FastIMU是一个很棒的软件包,支持许多常用的IMU,并附带了一个预先编写好的、可与Relativty配合使用的Arduino草图。

首先,您需要安装Arduino IDE并通过USB连接器将MCU连接到计算机。

一旦连接并验证Arduino IDE可以与MCU正常工作,请从库管理器下载FastIMU。

按照1.2.1节中的建议连接IMU。

在Arduino IDE中找到Examples/Fastimu/Calibrated_relativty草图:

最后,将其上传到MCU。

FastIMU还包含一个内置的校准工具,可以将校准数据存储在IMU的EEPROM中。

校准IMU可能有助于减少使用Relativty时可能遇到的传感器漂移。

将Calibrated_relativty草图上传到IMU后,您可以打开Arduino串行监视器来启动校准序列:

  注意:您只需执行一次,但请确保按照串行监视器中给出的说明操作。

1.4.3 安装SteamVR驱动程序

要安装Relativty SteamVR驱动程序:

  • 下载master仓库
  • 在Relativty-master中找到Relativty_Driver\Relativty文件夹,将其复制到SteamVR安装目录的drivers文件夹中。

1.4.4 配置SteamVR驱动程序

复制驱动程序文件后,是时候配置驱动程序以适配你的设置和计算机了。

在drivers\Relativty\resources\settings目录下,应该有一个名为default.vrsettings的文件。

这是驱动程序的配置文件。

有几处需要你修改。

配置驱动程序与MCU通信

假设你使用Arduino Pro Micro和FastIMU库:

在Relativty_hmd段中找到这些值:

  • hmdPid
  • hmdVid
  • hmdIMUdmpPackets

并按如下方式更改值:

      "hmdPid" : 32823,
      "hmdVid": 9025,
      "hmdIMUdmpPackets":  false,

如果你使用不同的MCU,需要找出USB PID和VID值。

最简单的方法是将其通过USB连接到计算机,然后在Arduino IDE中查看。

在菜单栏中,选择工具/获取开发板信息:

获取PID和VID值,并使用十六进制转换器将其转换为十进制。

然后将转换后的值填入default.vrsettings中的hmdPid和hmdVid。

配置显示设置

现在让我们配置驱动程序以适配你的显示器。

显示器的配置变量在Relativty_extendedDisplay段中:

VR视口窗口的原点:

      "windowX" : 3440,
      "windowY" : 0,

VR视口的实际大小:

      "windowWidth" : 1920,
      "windowHeight" : 1080,

VR视口的渲染分辨率 - 通常应与大小相同:

      "renderWidth" : 1920,
      "renderHeight" : 1080,

以及一些其他设置:

      "DistortionK1" : 0.4,
      "DistortionK2" : 0.5,
      "ZoomWidth" : 1,
      "ZoomHeight" : 1,
      "EyeGapOffsetPx" : 0,
      "IsDisplayRealDisplay" : true,
      "IsDisplayOnDesktop" : true

如果原点和大小配置不正确,驱动程序将崩溃,SteamVR将无法显示任何内容!

因此,我们需要了解SteamVR使用的显示坐标系统。

Windows始终假定其中一个连接的显示器为主显示器。

你可以在显示设置中验证哪一个是主显示器。

你可以用鼠标选择每个显示器。"将此显示器设为主显示器"复选框呈灰色的那个就是你的主显示器。

本指南假设所有显示器的上边缘在Windows显示设置中对齐(如屏幕截图所示)

因此,在另一个非主显示器上勾选相同的选项将使其成为主显示器。

主显示器的左上角是SteamVR显示坐标系统的原点。

为了能够告诉SteamVR在显示器上绘制VR视口的位置,你需要确保理解这一点,并因此能够确定视口的正确原点。

例如,在这样的设置中:

因为"1"屏幕是主屏幕,而"3"屏幕是VR显示器,所以原点(0,0坐标)位于"1"屏幕的左上角。 这个屏幕的分辨率是3440x1440。

这意味着它在X轴上占据了从0到3439的空间,下一个屏幕从3440点开始。

因此,在这种情况下,正确的windowX和windowY值为:

      "windowX" : 3440,
      "windowY" : 0,

如果"2"号屏幕是VR显示器(而"1"号仍是主显示器),正确的值应该是:

      "windowX" : -1920,
      "windowY" : 0,

因为"2"号屏幕的坐标占据了原点另一侧的空间。

对于windowWidth、windowHeight、renderWidth、renderHeight,只需设置为VR显示器的原生分辨率。

设置完成后,保存设置文件。

现在你应该可以启动SteamVR了。

如果一切设置正确,你应该直接进入VR全息甲板区域:

如果你在构建过程中遇到任何问题:

  • 打开SteamVR Web控制台并复制整个日志文件
  • 加入Relativty的Discord群组,告诉我们你遇到的问题,并在聊天中上传日志文件。

如果你的VR窗口在点击后消失:

打开Windows PowerShell并将这些命令粘贴到命令行中,然后按回车:

get-process vrcompositor | stop-process -Force;cd "C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64";.\vrcompositor.exe

之后VRCompositor应该保持稳定,所以你每次会话只需要执行一次。

2. 旧版构建

硬件基于Relativty主板,包括Atmel SAM3X8E ARM Cortex-M3处理器,并使用MPU-6050作为其IMU。 或者,任何支持ArduinoCore并连接到MPU-6050/MPU-9250的处理器都可以用作Relativty的硬件。下面将解释这两种方法。

构建Relativty主板

PCB制造

我们首先从裸PCB开始。

可以在jlcpcb等网站上以约4美元的价格制造和购买。

你需要提供Gerber文件夹Relativty_Electronics_build/GerberFiles.zip,其中描述了电路板的形状。

组装

将元件焊接到裸PCB上。

你需要购买以下两个BOM之一中列出的元件,具体取决于可用性:

  • Relativty_Electronics_build/Assembly/jlcpcb.com_motherboard_BOM.csv
  • Relativty_Electronics_build/Assembly/motherboard_BOM.xlsx

这些元件在PCB上的放置位置在文件Relativty_Electronics_source/motherboard.brd中描述,可以用Eagle打开。

使用Arduino

Relativty主板的替代方案是使用Arduino Due并将其连接到MPU-6050。

5V      -> VCC  
GND     -> GND  
SDA(20) -> SDA  
SCL(21) -> SCL  
PIN 2   -> INT  

如果你使用提供的替代固件的MPU-9250,引脚分布为:

5V      -> VCC  
GND     -> GND  
SDA(20) -> SDA  
SCL(21) -> SCL   

然后按下Arduino Due上的ERASERESET按钮,你就可以安装Relativty固件了。

安装Relativty固件

现在你需要在Arduino IDE中安装Relativty板。 要做到这一点,复制以下JSON URL: https://raw.githubusercontent.com/relativty/Relativty/master/Relativty_Firmware/package_Relativty_board_index.json 并打开Arduino IDE

在Arduino中,点击文件然后选择首选项:

  • 如果你使用的是Relativty PCB,将JSON URL添加到"附加开发板管理器"文本框中。
  • 转到"工具 > 开发板 > 开发板管理器",你应该能看到Relativty开发板,点击安装。
  • 重启Arduino IDE,在工具 > 开发板下选择Relativty。
  • 现在你可以打开Relativty_Firmware/firmware/firmware.ino并上传到你的开发板。

如果你使用的是其他开发板,例如Arduino Due:

  • Relativty_Firmware\Relativty_board\的内容安装到Arduino IDE
  • 如果使用MPU-6050,使用Relativty_Firmware/firmware/firmware.ino
  • 如果使用MPU-9250,使用Relativty_Firmware\MP9250-HID\MP9250-HID\MP9250-HID.ino

制作机械部件

组装头显

所有3D打印所需的文件都可以在Relativty_Mechanical_build文件夹中找到,组装头显所需的螺丝列在screws_BOM.xlsx中。

我们使用了来自阿里巴巴的零件:

头显的屏幕

Relativty头显运行双屏2K 120FPS,但由于Relativty的开放性,你可以搭配任何屏幕。

我们的型号可以在阿里巴巴上找到,但根据卖家不同,类似的屏幕价格从150美元到190美元不等。你需要寻找并可能等待合适的卖家以合适的价格获得显示器(或批量购买)。

这是我们使用的型号

设置软件

为SteamVR安装Relativty驱动程序

Relativty驱动程序包含在Relativty_Driver/Relativty文件夹中。

⚠️ 你需要通过编辑JSON文件Relativty_Driver/Relativty/resources/settings/default.vrsettings来设置它

如果你不使用Relativty PCB,你需要更改以下内容:

  "hmdPid" : 9,
  "hmdVid": 4617,

这些是USB HID设备的唯一供应商和产品标识符(pid/vid)

如果你使用的是Arduino Due,正确的值应该是:

  "hmdPid" : 62,
  "hmdVid" : 9025,

如果你使用的是其他开发板,获取正确值的过程如下:

  1. 插入你的开发板

  2. 在Arduino IDE中选择你的开发板,点击工具/获取开发板信息。你会看到类似这样的信息:

	BN: Arduino Due (Native USB Port)
	VID: 2341
	PID: 003e
	SN: HIDHB
  1. 记下VID和PID数字。这些是十六进制值。

    要将它们应用到配置中,需要将它们转换为整数。

    如果你不确定如何操作,网上有很多可用的转换器。

    比如: https://www.rapidtables.com/convert/number/hex-to-decimal.html

  2. 将你的hmdPid和hmdVid值更改为转换后的值。

接下来,你需要设置显示坐标和分辨率。

首先,你应该将HMD的显示设置为扩展你的桌面的辅助屏幕,

与主显示器的右上角对齐。

在配置文件的"Relativty_extendedDisplay"段中,找到并设置以下内容:

      "windowX" : *你的主屏幕分辨率宽度*,
      "windowY" : 0,
      "windowWidth" : *HMD的原生分辨率宽度*,
      "windowHeight" : *HMD的原生分辨率高度*,

"renderWidth":HMD 原生分辨率宽度, "renderHeight":HMD 原生分辨率高度

在此段底部:

"IsDisplayRealDisplay":true, "IsDisplayOnDesktop":true


确保不要删除任何","符号,因为这会破坏配置。

配置中只有最后一项不应有","符号。

如果上述设置因任何原因不适合你,请尝试:

将HMD显示器设置为主显示器的镜像显示。

按如下方式更改配置:

"windowX":0, "windowY":0, "windowWidth":HMD 原生分辨率宽度, "windowHeight":HMD 原生分辨率高度, "renderWidth":HMD 原生分辨率宽度, "renderHeight":HMD 原生分辨率高度

"IsDisplayRealDisplay":false, "IsDisplayOnDesktop":true

⚠️ 请注意,这可能导致VR窗口无法捕获键盘/鼠标输入,如果你的游戏需要它,可能会变得无法玩。

你还可以在配置文件中调整IPD(瞳距):

在"Relativty_hmd"段中找到并调整:

"IPDmeters":0.063,


你还可以通过更改以下内容来调整镜头畸变校正:

"DistortionK1":0.4, "DistortionK2":0.5,


现在你可以安装Relativty驱动程序:
- 找到你的`vrpathreg.exe`程序,通常位于`C:/Steam/steamapps/common/SteamVR/bin/win64/vrpathreg.exe`
- 然后打开Windows命令提示符并运行以下命令:
`cd C:/Steam/steamapps/common/SteamVR/bin/win64
vrpathreg.exe`

假设你的`Relativty_Driver/Relativty`驱动程序文件夹位于:
`C:/code/Relativty_Driver/Relativty`
- 运行`vrpathreg adddriver C:/code/Relativty_Driver/Relativty`

Relativty驱动程序现已安装。你可以随时通过运行以下命令卸载它:
- `vrpathreg removedriver C:/code/Relativty_Driver/Relativty`

#### 设置实验性3D跟踪

跟踪仍处于非常实验性的阶段,由于使用了CUDA,只能在NVIDIA GPU上运行。跟踪仅使用视频输入和经过训练的人工神经网络AI来估计3D身体位置。

这种方法在精度或动作自由度上远不及专用传感器,但我们相信模型可以经过训练和改进,提高数个数量级。

首先,你需要将网络摄像头连接到计算机,并安装Python 3.8.4,选择将其添加到路径的选项。然后安装`PyTorch`,你可以通过运行以下命令来完成:

`python -m pip install torch===1.6.0 torchvision===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html`

然后继续安装`CUDA Toolkit 11.0`。

接下来,你需要在https://github.com/relativty/Relativty/releases下载`PYTHONPATH`文件夹,并将其位置添加到`JSON Relativty_Driver/Relativty/resources/settings/default.vrsettings`中的`PyPath`。

将`tracking`设置为1。跟踪现在已开启,可以随时通过将`tracking`设置为0来关闭。跟踪也可以根据你的摄像头进行校准,这可以通过调整`scalesCoordinateMeter`和`offsetCoordinate`来完成。`scalesCoordinateMeter`对应于在给定轴上移动1米时,AI计算的归一化后该轴坐标的增量。

**注意:**如果你计划使用mpu9250固件,别忘了在驱动程序中切换到它,方法是将`hmdIMUdmpPackets`设置为`false`:
`"hmdIMUdmpPackets":false,`

## 最后步骤

现在一切都设置好了,可以开始玩游戏了。

要开始使用Relativty:
- 将头戴设备放在平坦表面上,前面板朝下
- 插入头戴设备。
几秒钟后它会自动校准。

现在你可以运行任何SteamVR游戏了!
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号