2011-04-05 46 views
6

我正在尝试使用指南针移动机器人。我们使用罗盘使机器人直线移动,它使用2个轮子,它们移动有点不同。 所以我们设置一个介于0和359之间的值作为方向,然后检查当前的方向,计算错误并修复它。像error = current_direction - 实际方向。指南针:从359到0度

问题是,如果例如我们的init方向是90度,而我们的机器人是45,那么错误将会是45,它会修复它。如果它是0,错误将是90,它会修复它。问题是,如果它移动的比例大于0并且例如变为359,则错误将是-269,因此不是在一个方向上移动90,而是在另一个方向上移动-29。

我使用错误的符号来决定要移动哪个轮来修复方向。 任何想法如何解决它?

回答

6
if (error > 180) { 
    error -= 360; 
} 

if (error < -180) { 
    error += 360; 
} 
+3

将这些'if's改为'while':D – 2011-04-05 13:03:51

+0

@Jakub Hampl:你叫它Dizzybot? :D – Piskvor 2011-04-05 13:19:24

2

如果你的错误大于180°,你应该将它从360架起并且反转符号。这样做,你可以确保你的机器人总是以最短的方向移动。

1

如果您的误差> 180度,只需切换您的校正算法,通过向相反方向移动来计算校正。一个简单的if-else语句应该这样做。

1

我不知道很多关于NXT和头脑风暴,但基本上是圆形运动的共同问题。您可以简单地使用两个不同的坐标系并互相转换,这是最优雅的方式。否则,你可以从你的错误中减去360,如果符号为负,但是这是一个黑客,而不是优雅的方式来解决,我曾经有一个机器人,能得到如此混乱,我们不得不问题;-)

+0

嗯,极坐标?优雅,但我认为这可能是慢的计算(尤其是在嵌入式平台上)。 – Piskvor 2011-04-05 13:14:18

+0

是的,你可能是对的,因为嵌入的东西大多是被黑客入侵的东西,但我不认为NXT是_such embedded_ ;-) – tamasgal 2011-04-05 13:20:14

+2

我在考虑CPU速度以及它带来的一切。虽然我对架构不太了解,但我不认为NXT拥有四核i5 @ 2.8GHz,对吗?我猜测速度可能会达到几十MHz,最高可达几百。是的,这比20年前我的电脑还要多,但在这样的限制下你仍然必须认真对待性能。 – Piskvor 2011-04-05 13:32:05