机器人寻路算法

我有一个机器人,它使用光电鼠标作为位置跟踪。基本上,当机器人移动时,它能够使用鼠标跟踪 X 和 Y 方向的变化。鼠标还可以跟踪您移动的方向——即负 X 或正 X。这些值被加总到单独的 X 和 Y 寄存器中。

现在,机器人原地旋转并仅向前移动。因此,机器人的运动理想情况下是直线(尽管如果偏离方向,鼠标跟踪可以捕捉到偏差),以特定的角度运动。机器人的一组特定运动可能如下所示:
A:旋转 45 度,移动 3 英寸
B:旋转 90 度,移动 10 英寸
C:旋转 -110 度,移动 5 英寸
D:旋转 10 度,移动 1 英寸
但每次鼠标 X 和鼠标 Y 寄存器都会给出您在每个方向上移动的实际距离。

现在,如果我只想重复从 A 到 D 的运动序列,我如何利用我已经收集到的信息来做到这一点呢?我知道我基本上可以对所有角度和距离进行求和,但这如果在每个运动指令中存在较大误差,将被证明是不准确的。我该如何使用鼠标的原始信息呢?一个朋友提出了一个想法,我可以连续对鼠标值进行正弦和余弦运算并计算最终向量,但我不太确定这会如何工作。

问题在于鼠标只提供相对读数,因此旋转或向后移动可能会擦除信息。所以是的,我想知道的是如何实现该算法,使其可以持续跟踪变化,以便在您最初以锯齿形移动到达那里时,为您提供最短路径。


回答:

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

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

你的想法是对的,这不会很精确。它被称为“航位推算”是有原因的。

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

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注