Appearance
在 Rokid StationPro + Max 中接入
基于 Rokid StationPro 和 Max 套装设备,提供云定位算法能力
1. 获取SDK
插件下载地址:通过 git 方式导入,详见下文。
版本支持: Unity2020 及以上
2. 更新说明
- V 1.0.0
基于 Rokid StationPro 和 Max 套装设备,提供云定位算法能力
3. 接入流程
本文示例代码是基于 Unity2021 版本
- 下载示例工程。
- AR SDK 工程配置。
- 打开“ARSDK/Project Settings”
- ROKID SDK 工程配置。
- 打开“UXR/Env/Project Environment Fix”
3.1 场景说明
打开场景 EZXRSpatialComputingSample
设置云定位地址,启动自动定位,其中
设置待显示的模型。在云定位未成功之前,模型将会被隐藏。
2. 示例代码
示例代码脚本 EZXRSpatialComputingManager.cs 和 SpatialComputingDemo.cs
csharp
//启动AR
//1.拷贝算法文件至可读路径下)
//2.初始化VPS,成功后默认自动云定位
private CopyStreamingAssets m_CopyStreamingAssets;
void Start()
{
if (m_CopyStreamingAssets != null)
{
m_CopyStreamingAssets.OnCopyCompleted += OnCopyCompleted;
}
}
private void OnDestroy()
{
if (m_CopyStreamingAssets != null)
{
m_CopyStreamingAssets.OnCopyCompleted -= OnCopyCompleted;
}
}
void OnCopyCompleted(string assetPath)
{
//...
}
csharp
//监听云定位结果
public class SpatialComputingDemo : MonoBehaviour
{
//public SpatialPanel locResultPanel;
public Text locResultLabel;
public SpatialComputingController locController;
public GameObject displayModel;
private bool modelShowing = false;
// Start is called before the first frame update
void Start()
{
if(displayModel) {
displayModel.SetActive(false);
}
modelShowing = false;
InvokeRepeating("checkingLocResults", 1.0f, 1.0f);
}
// Update is called once per frame
void Update()
{
}
public void onTrigerApplyLocResultImmediately()
{
if (locController != null)
locController.TrigerApplyLocResultImmediately();
}
private void checkingLocResults() {
showLocResultStatus();
showModel();
}
private void showLocResultStatus() {
if (locResultLabel != null && locController != null)
{
locResultLabel.text = "LocResult : " + locController.currentVpsResultState.vps_result_status.ToString();
}
}
private void showModel() {
if(locController!=null && displayModel != null && !modelShowing)
{
if(locController.currentVpsResultState.vps_result_status == LOCSTATUS.SUCCESS){
displayModel.SetActive(true);
modelShowing = true;
}
}
}
}
3.2 必要参数说明
EZXR.Glass.SpatialComputing.EZXRSpatialComputingManager, 算法的参数及状态相关数据。
- currentVpsResultState : SC_VPSResultState,云定位结果,相关结构体参数见下图。
csharp
//SC_VPSResultState
public struct SC_VPSResultState
{
public double t_s; //unix时间戳,以s为单位,精确到小数点后3或4位
public LOCSTATUS vps_result_status;
}
public enum LOCSTATUS
{
SUCCESS = 0x01, //定位成功,返回pose等信息
FAIL_UNKNOWN = 0x10, //定位失败,走完了定位算法流程,但是图像无法定位到给定地图中
FAIL_MATCH = 0x11, //定位失败,具体原因1 hy: not used
FAIL_INLIER = 0x12, //定位失败,具体原因2 hy: not used
INVALID_DEVICEINFO = 0x20, //数据不合法,传入的protobuf.deviceInfo不符合规范
INVALID_LOCALIZER = 0x21, //数据不合法,部署阶段的localizer未成功初始化
INVALID_IMAGE = 0x22, //数据不合法,传入的图像或protobuf.deviceInfo中出现不被接受的图像格式(仅接收通道数为1或3,且类型为CV_8U或CV_8UC3的图像)
INVALID_IMAGE_PROTO_MATCH = 0x23, //数据不合法,传入的图像文件长度,与protobuf.deviceInfo中记录的图像字节数不匹配
INVALID_MESSAGE = 0x24, //传入的message不合法
FAIL_SUMMARY_UNKNOWN = 0x30, //hy: not used
FAIL_SUMMARY_NOMAP = 0x31 //未加载完成可用的summary map hy: not used
}
4. 建议说明
- 开发时,虚拟内容请参考建图产物(Mesh 或点云文件)进行摆放,其中 Mesh 或 点云文件不得修改其默认的Transform属性;