6

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

问题是,例如,如果我们的初始方向是 90 度,而我们的机器人在 45 度,那么错误将是 45 并且它会修复它。如果为 0,则错误为 90,它会修复它。问题是,如果它移动的幅度比 0 多一点,例如移动到 359,则错误将是 -269,因此不是在一个方向移动 90,而是在另一个方向移动 -269。

我使用错误的符号来决定移动哪个轮子来确定方向。知道如何解决吗?

4

4 回答 4

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

if (error < -180) {
   error += 360;
}
于 2011-04-05T13:02:11.640 回答
2

如果你的误差大于 180°,你应该从 360 角度架起它并反转标志。这样做,您可以确保您的机器人始终以最短的方向移动。

于 2011-04-05T13:03:28.527 回答
1

我对NXT和Mindstorm了解不多,但基本上都是圆周运动的通病。您可以简单地使用两个不同的坐标系并相互转换,这是最优雅的方式。否则,如果符号为负,您可以从错误中减去 360,但这是一种技巧,而不是解决问题的优雅方法;-)

于 2011-04-05T13:04:10.127 回答
1

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

于 2011-04-05T13:03:29.360 回答