我有一个有趣的(无论如何对我来说)问题。我正在 OpenServo.org for V4 上工作,我正在尝试确定行进弧的长度及其方向。
我有一个磁性编码器,可以返回从 0 到 4095 的轴位置。
伺服系统有两个逻辑终点,称为 MAX 和 MIN,它们在软件中设置,可以随时更改,并且轴必须在 MAX 和 MIN 位置之间旋转(即行进)一圈弧。例如,在图片中,蓝色弧线有效,但红色弧线不适用于 MIN 和 MAX 之间(包括 MIN 和 MAX)之间的所有行程。
我正在尝试制定一个仅使用整数数学的简单算法,该算法可以告诉我可以在圆周上任何位置的任意两点 A 和 B 之间的距离,以 MIN 和 MAX 为界,并且 A 作为当前位置,B 为目标位置,或者B是当前位置,A是目标(用B到A的负距离表示)。请注意,我允许旅行的一侧是已知的,它是“红色”或“蓝色”。
问题是当 ARC 中存在 4095/0 时,计算就会变得有点有趣。
您需要调整所有坐标,使它们位于限制点的同一侧。由于它是一个循环系统,您可以添加 4096 而不会影响绝对位置。
lowest = min(MIN, MAX);
if (A < lowest)
A += 4096;
if (B < lowest)
B += 4096;
distance = B - A; /* or abs(B - A) */
在您的示例中,A 不会调整,但 B 会调整为 5156。差异将为正 1116。
在第二个示例中,A=3000 和 B=2500,它们都高于 2000,因此都不需要调整。差异为-500。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)