第三方点云的接入可参考本章节内容,我们已将SLAM数据按照行业标准输出成特定的数据格式。
获取SLAM 状态
UXR2.0 SDK 提供了SLAM 状态获取接口。通过接口NativeInterface.NativeAPI.GetHeadTrackingStatus()
,返回值为HeadTrackingStatus
类型。
HeadTrackingStatus status = NativeInterface.NativeAPI.GetHeadTrackingStatus();
NativeInterface.NativeAPI.GetHeadTrackingStatus(out SlamTrackingStatus trackingStatus,
out SlamImageQaulity imageQuality,
out SlamKinecticQaulity kineticQuality);
public enum HeadTrackingStatus
{
Unknow = 0,
UnInit = 1,
Detecting = 2,//RESERVED
Tracking = 3,
Track_Limited = 4,//RESERVED
Tracking_Bad = 5,//RESERVED
Tracking_Paused = 6,
Tracking_Stopped = 7,
Tracking_Error = 99
}
public enum SlamTrackingStatus
{
Success = 0,
Bad = 1,
Fail = 2,
Unknow = 404
}
public enum SlamImageQaulity
{
Good = 0,
Weak = 1,
Dark = 2,
Bright = 3,
Unknow = 404
}
public enum SlamKinecticQaulity
{
Good = 0,
FootFast = 1,
Unknow = 404
}
获取相机内参
/// <summary>
/// Get fx,fy
/// </summary>
/// <param name="data"></param>
public static void GetFocalLength(float[] data)
{
if (Utils.IsAndroidPlatfrom())
getFocalLength(data);
}
/// <summary>
/// Get cx,cy
/// </summary>
/// <param name="data"></param>
public static void GetPrincipalPoint(float[] data)
{
if (Utils.IsAndroidPlatfrom())
getPrincipalPoint(data);
}
/// <summary>
/// Get width,height
/// </summary>
/// <param name="data"></param>
public static void GetImageDimensions(int[] data)
{
if (Utils.IsAndroidPlatfrom())
getImageDimensions(data);
}
/// <summary>
/// pinhole:k1,k2,k3,p1,p2
/// fisheye:alpha,k1,k2,k3,k4;
/// </summary>
/// <param name="data"></param>
public static void GetDistortion(float[] data)
{
if (Utils.IsAndroidPlatfrom())
getDistortion(data);
}
获取渲染时刻Pose
UXR2.0 SDK 提供了SLAM 渲染上屏时刻的位姿。通过接口NativeInterface.NativeAPI.GetHeadPose(out long ts)
获取。
var pose = NativeInterface.NativeAPI.GetHeadPose(out long ts);
其中ts 是返回的时间戳。
获取Camera Image 时刻Pose
Native
//Set Camera Preview Date Type first, 1-ARGB,2-NV21
NativeInterface.NativeAPI.SetCameraPreviewDataType(2);
//Start SharedCamera Preview
NativeInterface.NativeAPI.StartCameraPreview();
//Add camera data listener
NativeInterface.OnCameraDataUpdate += OnCameraDataUpdate;
public void OnCameraDataUpdate(int width, int height, byte[] yuvImage, long ts)
{
///Get the Slam pose of Physical Camera on Max Pro.
var pose = NativeInterface.NativeAPI.GetHistoryCameraPhysicsPose(ts)
}
获取Camera View
UXR2.0 SDK提供了相机数据的接口。
/// <summary>
/// Listener of Camera data
/// </summary>
/// <param name="width">preview size width</param>
/// <param name="height">preview size height</param>
/// <param name="yuvImage">camera image</param>
/// <param name="ts">timestamp</param>
public void OnCameraDataUpdate(int width, int height, byte[] yuvImage, long ts)
{
}
在必要的地方添加监听。
//Set Camera Preview Date Type first, 1-ARGB,2-NV21
NativeInterface.NativeAPI.SetCameraPreviewDataType(2);
//Start SharedCamera Preview
NativeInterface.NativeAPI.StartCameraPreview();
//Add camera data listener
NativeInterface.OnCameraDataUpdate += OnCameraDataUpdate;
在不使用,或者当前生命周期结束时,要及时反注册。
//remove camera data listener
NativeInterface.OnCameraDataUpdate -= OnCameraDataUpdate;