更新时间:2025-01-10 GMT+08:00
分享

视觉定位

接口列表

表1 视觉定位接口列表

接口

描述

参数名

参数类型

参数说明

返回值

init

初始化视觉定位模块。

config

{

access: string,

secret: string,

beforeLocateDelta: number,

afterLocateDelta: number,

autoRequest: boolean,

workerPath: string,

url: string

}

初始化配置参数。

  • access:认证用的AK。
  • secret:认证用的SK。
  • beforeLocateDelta:首次定位成功前每隔几秒触发一次自动请求。
  • afterLocateDelta:定位成功后每隔几秒触发一次自动请求。
  • autoRequest:是否开启Vps自动请求。
  • workerPath:Vps模块用到的worker文件路径。
  • url:触发定位请求时使用的域名。

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会关闭自动定位,避免频繁跳变而影响调试。

相关文档