视觉定位
接口列表
接口 | 描述 | 参数名 | 参数类型 | 参数说明 | 返回值 |
|---|---|---|---|---|---|
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会关闭自动定位,避免频繁跳变而影响调试。

