HTC Vive Tracker Developer Guide

HTC 发布的 Vive 配件 Vive Tracker 可以用来扩展与 SteamVR 连接的设备。而且还具有 Pogo 引脚,可以自己 DIY 出特殊功能的配件,最近看到了一些使用 Vive Tracker 来实现的非常棒的创意。相关的资料和技术细节在本篇文章里整理辑录。

HTC Vive Tacker

一些使用 Vive Tracker 来实现的非常棒的创意:
使用 Vive Tracker 来为移动手机加入位置追踪,使手机可以加入 VR 游戏以及为 Daydream 增加位置追踪:

注:它的实现实际上是 PC 创建房间并作为 Server,让移动设备通过网络加入游戏并具有 Camera,然后在 Server 上将追踪到的 Tracker 位置信息同步到移动设备上并修改 Camera 的位置,移动设备上的画面就是 Camera 修改后的,使其看起来像手机具有位置追踪,很鸡贼的一个做法(我预计使用 Tracker 为 DayDream 增加位置追踪也是相同的做法)。

使用 Vive Tracker 的引脚扩展,做出特殊功能的硬件设备(喷雾罐):

HTC 也开源了一个使用三个 Tracker 进行全身 IK 的实现:vive_ik_demo
VIVE Tracker 官方推荐的案例教程:New Project Code and Tutorials Released for VIVE Tracker
HTC Vive Tracker 的指南 v1.6:

相关资讯:Vive Tracker Now Available for Developer Purchase

Set Vive Controller/Tracker Type

Vive Tracker 可以用来追踪位置,但是它并不仅仅只能用来追踪位置那么简单。正常情况下 Tracker 识别后的默认类型是tracker,但是再某些情况下希望用 tracker 来代替手柄实现操作,如:

  • 将 Tracker 当作 MR 的第三个摄像机,替代需要的第三只手柄
  • 用 Tracker 或者 Tracker 做的外设来替代手柄玩游戏

实现上面两个目标需要将 Tacker 的类型修改为 controller,让基站认为 Tracker 是 Controller。HTC 曾经提供过一个工具用来修改 Tracker 的类型:Vive Tracker Role Changer(这个版本是 v0.8 的,最新的是 v1.0,但是由于 一些原因 HTC 停止了这个软件的下载)。
不使用这个工具,也可以实现相同的功能 (我这里演示的是将 Controller 修改为 Tracker 做示例),方法如下。
首先,拔掉电脑上的其他任何 VR 设备,然后使用 USB 线将 Controller/Tracker 连接到计算机。
打开 Steam 的安装路径(SteamVR):

1
Steam\steamapps\common\SteamVR\tools\lighthouse\bin\win64

找到lighthouse_console.exe,在控制台中运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Program Files (x86)\Steam\steamapps\common\SteamVR\tools\lighthouse\bin\win64>lighthouse_console.exe
ue_version: lighthouse_console.exe (buildbot_vortex-windows_steamvr_rel_win64@vortex-windows) 04924513
Attached lighthouse receiver devices: 3
LHR-AE438993
lighthouse_console: Connected to receiver LHR-AE438993
Attempting HID Open IMU: LHR-AE438993
Lighthouse IMU HID opened
LHR-AE438993: Firmware Version 1518829406 watchman@runner-watchman 2018-02-17 FPGA 531(2.19/0/2) BL 1517470641
Data request is out of range
Request Starting:0x0
Ending:0x18
Max Address is:0x3
LHR-AE438993: Successfully fetched gyro/accelerometer range modes from the device. GyroRangeMode:3 AccelRangeMode:2
Attempting HID Open Optical: LHR-AE438993
Lighthouse Optical HID opened
Attempting HID Open VrController: LHR-AE438993
Lighthouse VrController HID opened
LHR-AE438993: Read config of 2214 bytes from [vid:28de, pid:2300] (LHR-AE438993) and inflated to 9317 bytes

lh>

会检测到当前插入的设备 LHR-AE438993 并进入 lh 的控制台。
lh 控制台里输入命令:

1
2
3
lh> downloadconfig
LHR-AE438993: Read config of 2214 bytes from [vid:28de, pid:2300] (LHR-AE438993) and inflated to 9317 bytes
Wrote 9317 bytes to LHR-AE438993.json

会在当前目录下产生一个 LHR-*.json 文件,其中内容如下:
一代手柄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"acc_bias": [
-0.163,
0.08808,
-0.2593
],
"acc_scale": [
1,
1,
0.9959
],
"device_class": "controller",
"device_pid": 8210,
"device_serial_number": "LHR-F7099945",
"device_vid": 10462,
"gyro_bias": [
0.01332,
-0.003239,
0.01065
],
"gyro_scale": [
1.0,
1.0,
1.0
],
// ...
}

二代手柄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"device_class": "controller",
"device_pid": 8960,
"device_serial_number": "LHR-AE438993",
"device_vid": 10462,
"firmware_config": {
"bwd_config": "0x392B",
"charge_current_low_temp_ma": 256,
"charge_current_ma": 512,
"charge_current_nominal_ac_ma": 768,
"charge_current_nominal_usb_ma": 512,
"charge_term_current_ma": 128,
"charge_voltage_limit_mv": 4400,
"charging_low_temp_threshold_c": 10,
"mode": "controller",
"radio": true,
"recharge_voltage_mv": 100,
"sensor_env_on_pin_a": 0,
"spi_flash": false,
"sys_min_voltage_mv": 3500,
"trackpad": true,
"trigger": true,
"trigger_adc_max": 3900,
"trigger_adc_min": 300,
"trigger_adc_zero": 400,
"vrc": true
},
// ...
}

可以看到 device_class 标识着当前设备的类型。
可以将其值改为controller/generic_tracker(我这里是将 controller 变成 tracker,反过来也同理):

1
"device_class": "generic_tracker",

保存并关闭文件,回到 lh 控制台的命令行窗口,输入以下命令:

1
lh>uploadconfig

完成之后输入 exit 退出 lh(不要直接关闭窗口),重启 SteamVR, 然后它的设备类型就变成的Tracker.

相关链接:

SteamVR 多驱动支持

需要修改 Steam 目录下的 config/steamvr.vrsetting 文件,在这个 json 格式的文件中的 steamvr 项下增加activateMultipleDrivers

1
2
3
4
5
6
7
{
"steamvr" : {
"lastVersionNotice" : "1.3.20",
"lastVersionNoticeDate" : "1553731712",
"activateMultipleDrivers" : true
}
}

保存之后重启 SteamVR 即可。

在拍摄 MR 视频时使用第三只 Controller 来作为虚拟摄像机,但是如果没有第三只 Controller 可以用一个工具来虚拟出一个 Controller:VirtualControllerDriver,需要启动 SteamVR 的多驱动支持。