Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为十字线GUI使用陀螺仪数据_Python_User Interface - Fatal编程技术网

Python 为十字线GUI使用陀螺仪数据

Python 为十字线GUI使用陀螺仪数据,python,user-interface,Python,User Interface,我用手中的手机代表玩具枪,移动它(“瞄准”,如果你愿意的话),并将方向数据(俯仰、偏航、滚动)传输到我的笔记本电脑,在笔记本电脑上,我绘制了一个相对于指向前方的网络摄像头馈送的移动十字线 我通过让用户在笔记本电脑上按enter键启动应用程序,同时将手机笔直地放在他们面前-这是初始校准步骤,我使用初始偏航/俯仰作为瞄准中心的参考 然后,在摄影机馈送循环期间,我在其中绘制十字线,我测量相对于这些初始校准值的俯仰/偏航变化,并使用它们左/右/上/下重新绘制十字线 这是我当前的代码: pitchDi

我用手中的手机代表玩具枪,移动它(“瞄准”,如果你愿意的话),并将方向数据(俯仰、偏航、滚动)传输到我的笔记本电脑,在笔记本电脑上,我绘制了一个相对于指向前方的网络摄像头馈送的移动十字线

我通过让用户在笔记本电脑上按enter键启动应用程序,同时将手机笔直地放在他们面前-这是初始校准步骤,我使用初始偏航/俯仰作为瞄准中心的参考

然后,在摄影机馈送循环期间,我在其中绘制十字线,我测量相对于这些初始校准值的俯仰/偏航变化,并使用它们左/右/上/下重新绘制十字线

这是我当前的代码:

  pitchDiff = initPitch - newPitch   #corresponds to Y axis
  yawDiff = 0-(initYaw - newYaw)     #corresponds to X axis
  pitchChangeFactor = 10
  yawChangeFactor = 10

  xC = int((imgWidth/2) + yawDiff*yawChangeFactor) 
  yC = int((imgHeight/2) - pitchDiff*pitchChangeFactor)

  ## THE TARGETING GUI
  cR = 40 #circle radius
  cv2.circle(img, (xC,yC), cR, (20, 20, 255), 3)
我在这个问题上想问的是,我如何才能更准确、更顺利地完成这项工作。陀螺仪数据是有噪声的,所以当我每30帧每秒采样一次时,我实际上取了大约60个陀螺仪读数的中间值,用于俯仰/偏航

此外,我认为我的动力学模型是错误的:我只是根据角度的变化在屏幕上移动固定数量的目标十字线。我认为需要三角函数,但我不清楚应该尝试什么。仅使用一个摄像头,我显然缺乏深度数据。然而,我可以假设我想要瞄准的目标是,比如说,在我前面3-4米


感谢您的帮助

如何才能更准确、更顺利地完成此操作?

陀螺仪测量横摆角速度、横摆角速度和俯仰角速度,但不能直接测量横摆角、俯仰角和横摆角。当您从手机请求俯仰和偏航角度时,它会结合陀螺仪和加速计数据(可能还有磁强计数据),为您提供俯仰和偏航的估计。 通过陀螺仪数据,我假设你是指估计偏航和俯仰,你的手机提供。 确保使用的是偏航角和俯仰角,而不是偏航率、俯仰率等

如果您使用的是估计角度,那么在进行计算之前,您可以查看过滤这些信号的不同方法。您提到了一个60个样本的中值滤波器。你试过其他过滤器吗?简单的低通滤波器可能对您的情况有更好的效果。如果你的信号中出现大而突然的尖峰,中值滤波器是好的,但低通滤波器或移动平均可能会对你的情况表现更好。正确的方法是在采集数据的同时固定手机的位置一段时间,然后分析噪声的频率成分,并选择一个具有适当截止频率的滤波器,以尽可能多地去除噪声,尽管这可能会对您的尝试造成过大的伤害

我建议从一个简单的移动平均或低通滤波器开始。网上有很多资源展示了如何在软件中实现过滤器。()

动力学模型

就你的计算而言,只要你的手机提供的是角度,而不是上面讨论的速率,我就觉得它们不错

你不需要三角函数。如果您只是尝试将角度映射到屏幕位置,那么您所需要的只是一个简单的线性映射,这样x度的角度变化对应于M*x像素的屏幕位置变化

另一个可以帮助你的是,如果你的手机可以提供数据的速度超过30赫兹。您仍然可以以30 Hz的频率更新屏幕,但当采样速度加快时,您的过滤可能会更有效。这一切都取决于噪音的性质,如果可以的话,你应该尝试一下采样率

祝你的项目好运