平滑Kinect Facetracking数据

时间:2013-03-04 21:25:28

标签: algorithm kinect tracking

我正在尝试使用Kinect Facetracking来控制机器人炮塔。当用户移动他的头部时,炮塔朝同一方向移动。我能够得到用户头部的偏航,俯仰和滚动,并使用这些数据控制炮塔。我目前的尝试是有效的,但不要流动地移动炮塔。这场运动有时是零星的,波涛汹涌。我想要的是平稳的动作和漂亮的流畅动作。

所以我遇到的主要问题是,由于数据是实时接收的,我无法可靠地预测用户接下来会做什么。我需要在接收数据和命令之间尽可能少地延迟。

另一个问题是来自Kinect的数据并不完美,有时会有一些波动。这是很好的数据,但如果我不对它做些什么,那么就会出现波动。

如何平滑来自Kinect的数据,使其尽可能流畅?

我有一些想法,但我宁愿不影响你,让你像我一样思考

1 个答案:

答案 0 :(得分:1)

TransformSmoothParameters联合过滤帮助了一些人。但是,当我偶然发现这一点时,发生了最显着的变化:http://www.dyadica.co.uk/journal/very-simple-kalman-in-c/ 所以基本上只是通过更新传递你的数据,它开始过滤它。印象非常深刻。非常简单。工作非常好。我认为这更像是移动平均而不是卡尔曼滤波器,但它正是我所需要的。希望这有助于那些尝试做类似事情的人。

        private double Q = 0.000001;
        private double R = 0.0001;
        private double P = 1, X = 0, K;

        private void measurementUpdate()
        {
            K = (P + Q) / (P + Q + R);
            P = R * (P + Q) / (R + P + Q);
        }

         public double update(double measurement)
        {
            measurementUpdate();
            double result = X + (measurement - X) * K;
            X = result;
           // Debug.WriteLine("Measurement " + result + " y: " + y);
            return result;
        }