steamVR如何不用头显获取tracker的定位
其实在做很多项目的时候,位置是很重要的。定位的获取在做机器人的项目中也是非常重要。目前的课题是做机器人的智能编程,涉及到加工区域的定位。无意中在商场看到一个HTC的VR游戏体验的活动,从这里获取到可以用HTC的光塔来定位的想法,在网上搜查了一番,已经有很多前辈做过这个事情。时至今天在做这个事情,按照前人的路子走下来,还是有点曲折的。现在整理下来,供大家参考。
首先是设备。通过询问HTC的技术客服,他们的回答统一是可以开发,但是必须购买头显,这样就能够获取追踪器的位置。但是看前辈写的文章,可以绕过头显来启动steamvr,从而获取追踪器的位置。
所以我决定只买2只光塔,1只追踪器tracker。按照前辈的方法来获取追踪器的位置。
其次是购买设备。淘宝上直接购买,但是现在光塔已经有2.0版本的了,通过咨询淘宝客服,2.0与1.0的光塔都能够支持tracker,只有两点不同,一是价格,相差2倍左右,二就是定位的区域,注意这里是区域不是精度。1.0版本的44m,2.0版本能够66m,反正有钱就买个2.0的。
对于一般的开发项目,我觉得首先是设备,然后是设备的驱动,然后是如何获取设备的信息参数等等。
现在设备有了,那么如何安装设备的驱动呢?HTC的东西都是在steamvr中安装驱动,在HTC官网上下载一个steam,这个是一个游戏平台,在很多VR的游戏在这个平台上玩,在它的工具栏目,有个steamVR的插件,点击安装,默认应该就是最新的版本了。通过steamVR,我们来连接设备——追踪器,定位器。
那么问题来了,我们点击启动steamVR后,他会提示没有找到头显,错误代码好像是108,没有截图。这个就是所有前辈都提到的要修改参数才能避免的。网上的中文教程大多数是修改"requireHmd": false。有很多人修改了这个参数之后,就能够正常运行steamvr了,但是很不幸,我这次修改了这个参数后,依旧不能够连接,仍然是报错108。我猜想是steamvr的升级把这个漏洞修补了。
依旧找解决的方法,现在的我很迷茫,到底能不能绕过头显直接用tracker,不过有找到一个前辈的提问,里面给出了一个国外前辈的解决方法。这个方法见链接。这是国外的一个网站,我这边很难打开,用了学校的VPN才打开。现在总结一下前辈的思路。
1)既然是设备是通过steamVR来驱动链接的,那么在steamVR启动的时候,肯定就要做设备初始化等等的工作,那么设备加载初始化的时候,到底是加载了那些文件了,导致非要加载头显(HMD)。
2)如何找到steamvr启动时候加载的文件呢?如图:
在这里的设置日志目录,我们会找到日志的目录。一般是在steam\logs文件夹中。其中的vrserver.txt(驱动)就是放着驱动的加载日志。点击开可以看到,都是加载了哪些驱动。
Fri Dec 18 2020 11:40:30.116 - [Settings] Load Default Json Settings from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\htc\resources\settings\default.vrsettings
Fri Dec 18 2020 11:40:30.116 - [Settings] Load Default Json Settings from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\lighthouse\resources\settings\default.vrsettings
Fri Dec 18 2020 11:40:30.116 - [Settings] Load Default Json Settings from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\null\resources\settings\default.vrsettings
Fri Dec 18 2020 11:40:30.116 - [Settings] Load Default Json Settings from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings
Fri Dec 18 2020 11:40:30.117 - [Settings] Load Json Settings from C:\Program Files (x86)\Steam\config\steamvr.vrsettings
这里有5个文件的路径,就是接下来我们可能要修改的。这些文件都用文本打开就可以直接修改,然后记得保存。经过实验,就两个文件需要修改,第一个是Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings(上面第4个路径的文件),这个里面注意修改三个参数,一个是是否需要头盔,这个参数就是通常说的要修改的地方。另外还有两个强制驱动,改为null,还有强制多个驱动,改为true,如下表所示。
"requireHmd" : false
"forcedDriver" : "null"
"activateMultipleDrivers" : true
另外就是null driver(上面第3个路径的文件)中修改如下:
{
"driver_null" : {
"enable" : true,
"serialNumber" : "Null Serial Number",
"modelNumber" : "Null Model Number",
"windowX" : 0,
"windowY" : 0,
"windowWidth" : 2160,
"windowHeight" : 1200,
"renderWidth" : 1512,
"renderHeight" : 1680,
"secondsFromVsyncToPhotons" : 0.01111111,
"displayFrequency" : 90.0
}
}
保存一下,然后在启动steamvr后,就会绕过头盔来直接启动连接tracker。
当然第一次启动的时候,会让你设置房间,我选择头显的那种,这个设置不需要控制器就能够设置成功。连接tracker的时候,长按追踪器中间的那个蓝色三角形就好了,等灯绿了就连接上了。
然后就是如何获取位姿的六个变量值。也是有教程,通过python脚本来获取,首先就安装python等等,这个没有难度,安装好之后,就是下载运行那个tracker_test.py文件。这里下载这个代码,在github可以下载,不大,很小。下载下来会有个readme文件,一定要先读一下,可以看到他里面要修改序列号,这个设备的序列号是哪里获取?就是你运行一下就能tracker_test.py,它会先输出设备的序列号。如下图:
然后你就按照这个序列号(上图的1)来修改config.json里面的内容,注意这些文件都可以用TXT来打开的。然后你再运行这个就好了。
可能首次运行的时候,你会得到一个如上图的2的问题,这个是因为v.devices[“controller_1”].get_pose_euler() also returns None(这个是哪里来的,.py文件用文本打开,你会看到这个代码),为什么会是None呢,你可以用print来打印一下,就是在文本中把for那几行用#号注释掉,然后加个print(v.devices[“controller_1”].get_pose_euler()),记得保存,重新运行一下py文件,就会看到。
这个问题当时我觉得是不是没有头显虽然能够启动steamvr,但是依旧不能够输出数据。因为我的定位器和追踪器一直显示如下图的状态
然后在github的问题(issue)中,浏览了一下前人遇到的问题,看到也有和我一样的问题,就弱弱的问了一下前辈是否解决了问题,没想到有个前辈居然回复我了,是因为追踪器里定位器太近了。。。。好吧,之前我的定位器就在桌子上,追踪器也在桌子上,相差不到10cm,等我将定位器固定在支架上,距离拉大到1-2m 的时候 ,我就出现了之前图片中3 的情况了。至此,得到了追踪器的位姿。为后续的开发开了一个好头。
**注意:**更新steamvr之后,会将resource/setting中的文件更新(上面第4个文件),这时候需要重新修改三个参数,才能够正常使用。另外一个小技巧,开steamvr的时候断开网络,这样不会自己更新。