Appearance
如何自定义空间定位算法配置
TIP
SDK 提供了灵活的空间定位配置。开发者可以根据自己的需求自定义使用空间计算的特性。
算法配置
使用
如果没有特殊需求,可以不使用配置,算法内部有默认配置。启动 EZXRSpatialComputingManager.startSCLocSession(string assetPath)可传入空字符串。
如果有特别的需求,比如调整定位成功后的平滑速度,定位频次等,就需要修改配置。
参数说明
在 SDK SpatialComputing Sample 中,使用的是默认的算法资源,位于“Samples/.../Demos/SpatialComputing/AlgAssets/scAlgAssets_Case1”中,包含三个文件:
localizer_fusion_config.json,mock_vpsc_config.json,vps_image_state.json。
- 其中 vps_image_state.json 中的参数原则上不可以被修改.。
- mock_vpsc_config.json 可以设置定位请求的频率(REGULAR->regular_interval_second), 其他参数原则上不可以被修改。
json
/*
下面是mock_vpsc_config.json的示意参数:
其中, "INIT", "REGULAR", "LOST", "USER_TRIGGER"代表VPS的状态,
"INIT"表示第一次VPS成功之前, 定位间隔是1s一次.
"REGULAR"表示正常模式下, VPS定位间隔是5s一次.
"LOST"表示长时间没有VPS成功的情况下, VPS定位间隔是2s一次.
"USER_TRIGGER"表示用户点击触发VPS的情况下, VPS定位间隔是0.5s一次.
*/
{
"vps_strategy":
[
{"name":"INIT",
"id":0,
"regular_interval_second":1,
"frame_scores_tolerance":1
},
{"name":"REGULAR",
"id":1,
"regular_interval_second":5,
"frame_scores_tolerance":0
},
{"name":"LOST",
"id":2,
"regular_interval_second":2,
"frame_scores_tolerance":2
},
{"name":"USER_TRIGGER",
"id":3,
"regular_interval_second":0.5,
"frame_scores_tolerance":2
}
]
}
- localizer_fusion_config.json 表示定位融合平滑相关配置,可以自定义修改,具体参数含义如下
json
/*
小于min_apply_loc_distance的跳动被认为是tiny_drift,使用tiny_drift_method;
大于min_apply_loc_distance,且小于max_apply_loc_distance的跳动被认为
是normal_drift,使用normal_drift_method;
大于large_drift_method的跳动被认为是large_drift,使用large_drift_method。
三种drift_method具体可以使用的模式共三种:
忽略此次跳动不应用 LOCF_METHOD_IGNORE = 0,
平滑移动到最新定位位置LOCF_METHOD_SMOOTH = 1
直接跳动到最新定位位置LOCF_METHOD_APPLY = 2
smooth_mode: 0 按时间切片 1 按距离切片
smooth_delta_distance : 按距离切片参数,仅"smooth_mode": 1时生效,每帧移动5mm
smooth_slice_num : 按时间切片参数,仅"smooth_mode": 0时生效,分150帧应用完毕
*/
{
"LocalizerFusionManager":{
"version":20230718,
"min_apply_loc_distance": 0.2,
"max_apply_loc_distance": 1.2,
"tiny_drift_method": 0,
"normal_drift_method": 1,
"large_drift_method": 2,
"smooth_mode": 0,
"smooth_delta_distance":0.005,
"smooth_slice_num":150
}
}
配置资源文件的管理
SDK 默认资源位于“Assets/.../Demos/SpatcialComputing/xxxx”。
开发者修改过资源后,可以存放于眼镜存储的任意可以访问的位置,只需保证最后可以获得的路径,是空间计算模块可以直接访问的。
SDK Sample 中如何管理资源的?
考虑到算法模块不能直接访问 Unity 资源,也不能直接访问 StreamingAssets 目录中的资源,SDK Samples,额外对资源做了两次拷贝。
Sample 中如此处理的优点是,可以简单地修改 Unity Assets/StreamingAssets 中的资源,就可以在运行时执行最新的算法配置。 但同样,缺点是每次都会复制,且必须等待资源复制完成后,才可以初始化 ZXRSpatialComputingManager。实际应用中,这个步骤略显冗余。