指南针:从 359 到 0 度

发布于 2024-10-30 07:25:36 字数 335 浏览 6 评论 0原文

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

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

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

I am trying to move a robot using a compass. We use the compass to make the robot move in straight line, it uses 2 wheels and they move a bit different.
So we set a value between 0 and 359 as direction, and then check the current direction, calculate the error and fix it. Like error = current_direction - actual direction.

The problem is that if for example our init direction is 90 degrees and our robot is at 45, the error will be 45 and it will fix it. If it is 0, the error will be 90 and it will fix it. The problem is that if it moves a bit more than 0 and it goes for example to 359, the error will be -269 so instead of moving 90 in one direction it will move -269 in the other.

I use the sign of the error to decide which wheel to move to fix the direction.
any idea how to fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不再见 2024-11-06 07:25:36
if (error > 180) {
   error -= 360;
}

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

if (error < -180) {
   error += 360;
}
痞味浪人 2024-11-06 07:25:36

如果误差大于 180°,则应从 360 度开始旋转并反转符号。这样做,您可以确保您的机器人始终以最短的方向移动。

if your error is greater than 180°, you should rack it from 360 and invert the sign. Doing so, you can be sure your robot will always move in the shortest direction.

那伤。 2024-11-06 07:25:36

如果你的错误是>超过 180 度时,只需切换校正算法即可通过向相反方向移动来计算校正。一个简单的 if-else 语句就可以了。

If your error is > than 180 degree simply switch your correction algorithm to calculate the correction by moving in the opposite direction. A simple if-else statement should do.

始终不够 2024-11-06 07:25:36

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

I don't know much about NXT and Mindstorm, but basically it is a common problem in circular motions. You could simply use two different coordinate systems and translate between each other, thats the most elegant way. Otherwise you could subtract 360 from your error, if the sign is negative, but that's a hack and not an elegant way to solve the problem ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文