1

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

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

另一个问题是来自 Kinect 的数据并不完美,有时会有些波动。这是很好的数据,但如果我不对其进行处理,就会出现波动。

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

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

4

1 回答 1

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;
        }
于 2013-03-21T20:34:12.473 回答