指南针:从359到0度

时间:2011-04-05 12:56:37

标签: compass-geolocation robotics lego mindstorms nxt

我正在尝试使用指南针移动机器人。我们使用指南针使机器人沿直线移动,它使用2个轮子,它们移动有点不同。 因此我们将0到359之间的值设置为方向,然后检查当前方向,计算错误并修复它。像error = current_direction - 实际方向。

问题是,例如,如果我们的初始方向是90度而我们的机器人是45,那么错误将是45并且它将修复它。如果为0,则错误将为90并且将修复它。问题是如果它移动了一点多于0并且例如变为359,那么错误将是-269,所以不是在一个方向上移动90而是在另一个方向移动-269。

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

如果您的误差大于180°,则应将其从360中折叠并反转符号。这样做,您可以确定您的机器人将始终以最短的方向移动。

答案 2 :(得分:1)

如果您的错误是&gt;超过180度只需切换校正算法,通过向相反方向移动来计算校正。应该使用简单的if-else语句。

答案 3 :(得分:1)

我对NXT和Mindstorm知之甚少,但基本上它是圆形运动中的常见问题。您可以简单地使用两个不同的坐标系并在彼此之间进行转换,这是最优雅的方式。否则你可以从错误中减去360,如果符号为负,但这是一个黑客而不是解决问题的优雅方法; - )