视觉定位
接口列表
接口 |
描述 |
参数名 |
参数类型 |
参数说明 |
返回值 |
---|---|---|---|---|---|
init |
初始化视觉定位模块。 |
config |
{ access: string, secret: string, beforeLocateDelta: number, afterLocateDelta: number, autoRequest: boolean, workerPath: string, url: string } |
初始化配置参数。
|
void |
requestVps |
触发定位请求。 |
- |
- |
- |
void |
updatePerFrame |
更新相机位姿。 |
- |
- |
- |
void |
getCameraOffset |
获取相机偏移量。 |
- |
- |
- |
number[3] |
getUTMPosition |
获取UTM(UNIVERSAL TRANSVERSE MERCARTOR GRID SYSTEM,通用横墨卡托格网系统)坐标。 |
- |
- |
- |
number[3] |
destroyVps |
销毁视觉定位实例。 |
- |
- |
- |
void |
mockVps |
模拟定位。 |
position |
Vector3 |
位置,使用UTM坐标系。 |
void |
rotation |
Vector3 |
朝向,以弧度制表示的欧拉角。 |
接口调用示例
- 初始化视觉定位模块
设置初始化参数:
handleReady({ detail }) { this.scene = detail.value; //获取场景实例 }, handleARReady: function ({ }) { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 let config = { access: process.env.HUAWEICLOUD_SDK_AK, secret: process.env.HUAWEICLOUD_SDK_SK, beforeLocateDelta: 15, afterLocateDelta: 60, autoRequest: false, workerPath: 'SDK/workers/ImageProcessWorker.js', url:'' } XRClient.init(config);//初始化视觉定位模块 XRClient.dispatchEvent(GlobalBus.SCENE_INSTANCE, { info: this.scene });//派发scene实例事件 XRClient.addEvent(GlobalBus.VPS_RESULT, this.onVpsResult,this); },
设置相机的节点:需在xr-start组件的.wxml文件中,设置ar-system,并配置ready、ar-ready和tick回调函数。
<xr-scene ar-system="modes:Plane;" bind:ready="handleReady" bind:ar-ready="handleARReady" bind:tick="handleTick"> <xr-node node-id="cameraParent" position="0 0 0" rotation="0 0 0"> <xr-camera id="camera" node-id="camera" clear-color="0.925 0.925 0.925 1" background="ar" far="2000" is-ar-camera></xr-camera> </xr-node> </xr-scene>
- 触发定位请求
手动触发定位请求,获取当前位置。在手动触发请求时,如果自动请求正在处理中,则此次手动请求将视为无效。
XRClient.requestVps();//返回定位结果。
- 更新相机位姿
在xr-start组件的handleTick里调用该函数,更新相机位姿。
handleTick() { XRClient.updatePerFrame(); //结合定位结果、AR算法更新相机的位置和姿态以及计时处理。 },
- 获取相机偏移量
将相机和数字内容等量偏移至较小值,避免过大的坐标值引起一些渲染上的异常(例如模型闪烁,抖动等)。
let arr = XRClient.getCameraOffset(); //返回记录的偏移量,使用该偏移量对数字内容进行偏移,得到正确的渲染结果。 this.mod.setPosition(arr[0], arr[1], arr[2]);
- 获取UTM坐标
XRClient.getUTMPosition();//函数返回当前时刻的UTM坐标,数组长度为3。
- 销毁视觉定位实例
lifetimes:{ detached(){ if(this.arInited){ XRClient.destroyVps();//销毁Vps实例,在xr-start组件的detached方法中调用。 XRClient.removeEvent(GlobalBus.VPS_RESULT, this.onVpsResult); } } },
- 模拟定位
如果开发者在办公区进行调试,但办公区没有进行地图采集,无法定位成功时,可使用模拟定位接口。
let posi = { x: 366676, y: 3457911, z: 43 }; let rot = { x: 0, y: 1.57, z: 0 }; XRClient.mockVps(posi, rot);
- 模拟定位情况下,使用输入的位置和旋转作为定位结果。
- XRLightSDK会关闭自动定位,避免频繁跳变而影响调试。