我有一个使用光学鼠标作为位置跟踪的机器人。基本上,作为机器人移动它能够跟踪在使用鼠标X和Y方向改变。鼠标还跟踪要移动的方向 - 即负X或正X.这些值求和成单独的X和Y寄存器。结果

现在,机器人代替旋转并向前移动只。因此,机器人的运动是理想直线(虽然鼠标跟踪可以拾取偏差如果偏离了)以特定的角度。机器人的动作的一个特定组是这样的: 点击 答:逆时针旋转45度,移动3英寸结果 B:旋转90度,移动10英寸结果 C:旋转-110度,移动5英寸结果 d:旋转10度时,移动1英寸,点击 但每次鼠标X和鼠标Y寄存器给你在每个方向上移动的距离实际。 搜索结果 现在,如果我要重复的动作会集从A到d而已,我怎么能做到这一点使用的信息我已经收集。我知道我可以基本上总结所有我送入它已经在角度和距离,但是这将被证明,如果有在每一个动作订单大的误差是不准确的。如何使用从我的鼠标的原始信息?一位朋友提供了一个想法,我可以不断的正弦和余弦鼠标值和计算最终的载体,但我真的不知道如何做到这一点的工作。

的问题是,鼠标只给出相对读数,以便旋转或向后移动,则潜在地擦除信息。所以呀,我想知道你是如何实现的算法,它可以不断地跟踪变化,给你的最短路径,如果你在曲折搬到那里原本。

有帮助吗?

解决方案

我认为你需要做的基本算法是这样的:

currentX = currentY = 0;
heading = 0; // radians
while (true)
{
    deltas = SampleMouseDeltas();
    heading += deltas.Heading;
    currentX += Math.Cos(heading) * deltas.Distance;
    currentY += Math.Sin(heading) * deltas.Distance;
}

您是正确的你的想法,这不会是精确的。它被称为“航位推测法”的一个原因。

,你可以得到你的deltas.Heading基于“X”坐标(公式为(以英寸为单位DELTAX)以英寸/(鼠标传感器距离旋转中心)。此外,deltas.Distance将来自该“Y”传感器,之后从像素将其转换为英寸。

然后执行步骤,你可以这样做:

robot.RotateLeft();
heading = 0;
while (heading < 45 degrees)
    heading += SampleMouseDeltas.Heading;
robot.StopRotateLeft();

... etc ...

其他提示

不回答你的问题,但也许一个警世故事... 我确实做到了这种机器人作为学校项目一年回。这是一个彻底失败,但我学到了很多,在做的。 至于使用鼠标跟踪你有多远驱动的:它没有为我们很好地工作在所有的,或其他任何团体。可能是因为在鼠标摄像头则为失焦的原因在于,我们需要有鼠标的几个毫米地板上面的事实。次年没有组做同样的项目中使用这个methid。它们代替放在weels标记和使用简单的IR传感器来计算车轮多少转制成。

我知道我有点necroing这个线程,但如果你想更准确的角度跟踪,两个光学鼠标将是理想的。基本上,如果你在同一个方向抵消运动,你会留下运动的老鼠做相对海誓山盟。从那里,它也只是一些简单的数学精确地确定了“机器人多远打开。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top