LBE大空间
概念
现在我目前的理解是:LBE大空间(Large Boundary Environment)是一个范围比较大的“安全边界”,以往的VR都是用户自定义或者固定半径的原地:这样限制了玩家:
1.只能站在原地走。2.玩家的移动只能依靠手柄的遥杆移动。
这样其实不算是真正的“虚拟现实”,现实是靠腿走路的,不是拿手上的控制器走路的。所以,我认为LBE大世界就是目前VR实现更加逼真的效果,是现在VR的“加强版”。
另外,刚刚提到了控制器的摇杆被人的腿代替。那么,控制器其他的功能就也可以被手代替。手势识别就这样相辅相成的出现了。
并且,LBE大空间一个很大的优点是可以让多人在同一个房间进行游戏。
(就我目前现在对LBE大空间的体验是这样的,可能很不严谨并且有错误,希望批评指正)
大空间定位
视觉特征提取 → 地图构建 → 实时对比与定位 → Marker辅助纠正,这几个步骤循环进行,不断确保虚拟和真实世界精确同步。
环境搭建
详细官方地址:文档中心 | PICO 企业服务
在【大空间】这一节点,把整个节点看完
环境纹理贴图
方便VR空间定位。
在官方文档中:纹理和光线,是视觉定位方案的核心元素,确保头显摄像头可捕捉到充分的纹理信息。
纹理:遵循【丰富、杂乱、不重复】三大原则
光线:需要明亮,并且避免镜子、光滑地面造成的反射对定位的影响。如果场景很暗,就得需要红光进行辅助。
Marker
静态Marker
为防止SLAM算法长期运行产生累计漂移,在空间特定位置放置Marker,通过快速扫描Marker进行误差校准。
Marker识别原理:首先检测图像中所有四边形,然后根据四边形中黑白块的顺序在ArUco字典中寻找对应的编码,若寻找成功即识别成功,识别成功后计算出ArUco在地图中的6dof位姿信息,该ArUco的id和位姿信息就加到地图中了。
ArUco图案命名:纸号_ArUco唯一识别号,如A3_50为需用A3纸打印的编号为50的ArUco图案
上述PDF文件已调整为所需打印尺寸,选择正确大小纸张。不能更改大小! 白边保留!
部署要求
基本要求:【1、2、3一定要满足,其他条件尽量满足】
【重要】一个地图中同一个Marker只能出现一次,即保证Marker的唯一性【重要】Marker必须按照规定的尺寸打印,打印完检查一下尺寸,打印误差的最大容忍度为±1mm【重要】Marker不能被折叠,不能褶皱,必须被完整摆放在平面上,若发生褶皱请重新固定,且一旦固定,位置不可移动,请选择可靠方式固定粘贴背景尽量为浅色背景,白色最好;若实在有深色背景,按照pdf默认打印也可使用(默认打印会留足白边,利于识别)Marker摆放高度在1m~1.8m之间,Marker尺寸越大放置越高(A0 Marker的上边沿可在1.8m位置,其他尺寸可在1.7m位置);Marker也可放置于地面,但要尽量保证该处地面平整、无法被踩踏且能被良好观测同一面墙两个相邻Marker之间的距离至少1.5m,最好在3~5m左右(大Marker就远一些,小Marker就近一些)放置相邻两Marker时,中间不能有障碍物,防止无法测量两Marker之间距离;Marker要贴在利于观测的位置,即Marker前方没有明显的障碍物阻挡(例如不要放在植物后面)
动态Marker
进行环境中动态场景的辅助检测:
如果用户使用场景中存在推动箱子等小范围的移动检测,可以将动态Marker平整的张贴在箱子的表面,尽量使头戴 camera 的下双目可以比较好的捕捉到张贴的动态Marker,以保证追踪质量。
部署要求
基本要求:【1、2、3一定要满足,其他条件尽量满足】
【重要】一个地图中同一个Marker只能出现一次,即保证Marker的唯一性【重要】Marker必须按照规定的尺寸打印,打印完检查一下尺寸,打印误差的最大容忍度为±1mm【重要】Marker不能被折叠,不能褶皱,必须被完整摆放在平面上,若发生褶皱请重新固定,且一旦固定,位置不可移动,请选择可靠方式固定粘贴背景尽量为浅色背景,白色最好;若实在有深色背景,按照pdf默认打印也可使用(默认打印会留足白边,利于识别)Marker摆放位置:尽量保证头戴 camera 的下双目可以比较好的捕捉到张贴的动态Marker
Marker与环境纹理图的联系与区别
Marker和环境纹理贴图是不一样的。因为这俩都是贴在墙上、地上一开始我把这两个搞混了。
作用的区别:
Marker的作用:为防止SLAM算法长期运行产生累计漂移,在空间特定位置放置Marker,通过快速扫描Marker进行误差校准。
环境纹理图的作用:方便头显捕捉纹理信息进行空间定位。
两个都是为了空间定位,所以都贴在墙上和地上。但是两者还是有差别的,Marker是为了误差校正的,环境纹理图是为了头显定位的。
这两个的逻辑是:头显通过摄像头或深度传感器采集环境纹理特征,利用视觉 SLAM(如 ORB-SLAM、DSO 等算法)计算设备在空间中的 6DoF(六自由度)位姿。这一过程会随着时间产生累计误差,导致定位漂移。为解决漂移问题,系统会在环境中预设固定 Marker(如 AprilTag、ArUco 码等),当头显检测到 Marker 时,会根据其已知位置信息对当前估计位姿进行校正,大幅提高长期定位精度。
创建虚拟地图
打开大空间-->设定原点和正方向-->绘制安全边界-->自动划分小区块-->小区块内移动扫描-->完成
进入大空间面板
设置-通用-关于本机-软件版本号(连续点击10次)-开发者选项-企业设置-大空间(设备不一样,具体步骤不一样。我使用的是pico4 Ultra 企业版,点击设置-通用-软件版本号(连续10次)-左侧往下拉,有一个开发者选项-企业设置-大空间)
点击创建后,跟着头显的提示做就好。具体步骤可以看文档中心 | PICO 企业服务中大空间-PICO大空间最佳解决方案-建图中
复制虚拟地图
按照以上步骤创建了一个地图后,应该就发现创一个虚拟地图很麻烦,而且费时间。所以,扫描出的数据怎么也要保存下来,之后还能再用。并且,前面说过大空间的优点是方便多人在同一个房间进行游戏,这对位置同步要求很严换。如果是每一个人都是不同的虚拟地图,不同虚拟地图对物理位置的距离计算不同,那玩家发生冲撞的概率是相当大的。这要求,多人的虚拟地图必须是同一个。所以,需要复制虚拟地图。
方法一:通过PICO企业设备管理平台管理地图文件
头戴端选择【上传地图至企业设备管理平台】,地图文件会上传到企业设备管理平台,可通过后台完成地图的批量下发
方法二:通过U盘导入/导出地图文件
将U盘通过转接线连接到头戴type-c口,进行导入/导出地图
1.头戴A点击“导出地图”,检测到U盘则将地图从头戴自动拷贝到U盘maps文件夹下;U盘中如有同名文件将会被删除。
2.头戴B点击“导入地图”,检测到U盘且有地图文件,将U盘maps下的地图自动复制到设备,地图导入成功。
方法三:通过电脑拷贝地图文件
1.头戴A绘制地图后点击导出,地图会导出至设备根目录maps文件夹
2.头戴A连接电脑,将地图压缩包拷贝至电脑
3.头戴B连接电脑,将地图压缩包手动拷贝至根目录maps文件夹中
4.头戴B点击导入地图,完成地图导入
本质上就是,创建一次虚拟地图后,头显中会存下来地图的数据。这个数据可以通过云端传送,也可以以文件的形式存放在U盘或者是PC的磁盘中。想要用这个地图数据,导入就可以。
也就是:一个设备扫描过后,打包地图。其他设备直接导入地图就可以,不用再创建了。
虚拟地图的理解
我对这个大空间的虚拟地图的理解和最开始的LBE大空间相同:一个大一点的安全边界。我一开始想的十分的复杂。我创建了虚拟地图后,以为导出地图文件是需要导入unity中,根据这个地图文件创建unity场景,以达到unity地图和虚拟地图的匹配。
但是我现在的理解是:上面的想法是不正确的。制作LBE的VR游戏与普通的VR游戏的步骤是相同的,也是在unity创建场景,打包为apk,一体机实现游玩。变成LBE的VR游戏就是在普通的VR游戏基础上:1.需要一个空旷的、贴了环境纹理图和Marker的房间。2.PICO的头显进入了LBE大空间,创建了虚拟地图并导入。
以我的理解,unity的地图是头显渲染,让玩家看到的是虚拟的unity世界。与此同时,头显还需要同时测算出玩家在真实空间的物理位置,保证玩家的安全并且和unity的地图匹配。玩家往一个方向走,头显需要测算物理位置,也需要渲染出玩家运动后的unity场景。
在空间上,LBE的VR游戏和普通VR游戏的区别就是:普通的VR游戏,玩家使用手柄就可以实现移动,玩家在游戏中的移动范围是很大的。而LBE的VR游戏的物理空间(也就是玩家所处的房间)是有限的,这需要开发者充分的利用空间。我体验过的LBE大空间VR游戏的思路有一个比较好,是游戏有一天指引线,带着玩家走,防止玩家乱走。并且,这条指引线可以让玩家在物理空间中折返,让玩家以为这个房间是“无限大”。