EasyAR sdk与英特尔Realsense sdk问题

本文关键字:sdk 问题 Realsense EasyAR 英特尔 | 更新日期: 2023-09-27 18:13:40

我同时使用英特尔realsense sdk和EasyAR sdk在我的项目中得到这个错误。我的想法是增强一个3D对象和移动它使用英特尔实感相机手势跟踪。请帮助。

NullReferenceException:对象引用未设置为对象的实例UnityEditor.DockArea.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:272) PXCMSenseManager: pxcmsensemaner_init (IntPtr, IntPtr) PXCMSenseManager:Init(Handler) PXCMSenseManager:Init() EasyAR. realityplanebehaviour:Start() (at Assets/EasyAR/Scripts/RealityPlaneBehaviour.cs:51)**

我正在使用两个sdk提供的示例代码。将它们合并为一个项目。我成功地增强了3D对象,但不能通过手势跟踪移动3D对象。

这是我使用的代码:

using UnityEngine;
using System.Collections;
namespace EasyAR
{
    public class RealityPlaneBehaviour : RealityPlaneBaseBehaviour
    {
        public GameObject Paddle1;
        public GameObject Paddle2;
        private PXCMSenseManager _pxcmSenseManager;
        private PXCMHandModule _pxcmHandModule;
        private PXCMHandData handData;
        private pxcmStatus status;
        // Use this for initialization
        private void Start()
        {
            _pxcmSenseManager = PXCMSenseManager.CreateInstance();

            if (_pxcmSenseManager == null)
            {
                Debug.LogError("SenseManager Initialization Failed");
            }
            else
            {
                //pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
                pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
                if (pxcmResult != pxcmStatus.PXCM_STATUS_NO_ERROR)
                {
                    Debug.LogError("EnableHand: " + pxcmResult);
                }
                else
                {
                    Debug.LogError("Reached Here:1 " + pxcmResult);
                    _pxcmHandModule = _pxcmSenseManager.QueryHand();
                    Debug.LogError("Reached Here:1 " + _pxcmHandModule.ToString());
                    handData = _pxcmHandModule.CreateOutput();
                    Debug.LogError("Reached Here:1 " + handData.ToString());
                    if(_pxcmHandModule == null)
                    {
                        Debug.LogError("PxcmHandModule is null during Setup");
                        return;
                    }   
                    _pxcmSenseManager.Init();
                    PXCMHandConfiguration configuration = _pxcmHandModule.CreateActiveConfiguration();
                    configuration.EnableAllGestures();
                    configuration.ApplyChanges();
                    configuration.Dispose();

                }
            }
        }

        // Update is called once per frame
        private void Update()
        {
            if (_pxcmSenseManager == null)
            {
                Debug.LogError("PxcmSenseManager is null");
                return;
            }
            _pxcmSenseManager.AcquireFrame(false, 0);
            status = _pxcmSenseManager.AcquireFrame(true);
            if (status != pxcmStatus.PXCM_STATUS_NO_ERROR) 
                return;
            _pxcmHandModule = _pxcmSenseManager.QueryHand();
            if(_pxcmHandModule == null)
            {
                Debug.LogError("PxcmHandModule is null");
                return;
            }   
            PXCMHandData handData = _pxcmHandModule.CreateOutput();
            handData.Update();
            MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_LEFT_HANDS, Paddle1);
            MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_RIGHT_HANDS, Paddle2);
            _pxcmSenseManager.ReleaseFrame();
        }
        private void MoveBall(PXCMHandData handData, PXCMHandData.AccessOrderType accessOrderType, GameObject gameObject)
        {
            // Get first hand data (index 0),
            PXCMHandData.IHand pxcmHandData;

            if (handData.QueryHandData(accessOrderType, 0, out pxcmHandData) == pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                PXCMHandData.JointData jointData;
                if (pxcmHandData.QueryTrackedJoint(PXCMHandData.JointType.JOINT_CENTER, out jointData) ==
                    pxcmStatus.PXCM_STATUS_NO_ERROR)
                {   
                    gameObject.GetComponent<Rigidbody>().velocity = new Vector3(-9, jointData.positionWorld.y*100f, 0);
                }
            }
        }
        private void OnDisable()
        {
            _pxcmHandModule.Dispose();
            _pxcmSenseManager.Dispose();
        }



    }
}

EasyAR sdk与英特尔Realsense sdk问题

这是一个读/写问题,因为当安装Realsense SDK时,它被安装在一个受保护的目录(C:/Program Files)中,您通常没有权限写入。

重新安装Realsense SDK,但这次将安装目录更改为C:/RealsenseSDK。权限问题应该消失,你不会再得到对象引用异常。