我正在使用编码器来获得车辆行驶的距离和方向角。在转弯时,它没有给出准确的角度,车辆正在转弯。在我的算法中,我使用所有角度的累加来找到相对于世界的总角度(X-O-Y)。
这与车轮直径和车轮与车轮的距离之比有关吗?
这个问题之所以出现在我的脑海中,是因为相同的算法适用于不同尺寸(车轮直径和车轮距离)的另一种硬件,而且它也返回了精确的转角。
如果能提供一些有价值的建议,我将不胜感激。
发布于 2015-10-30 03:28:17
机器人的角度取决于特定的硬件,例如车轮大小、编码器大小和车辆宽度。也许你在另一个机器人上是幸运的,轮子直径和轮子到轮子距离的变化相互抵消,所以方程是相同的,但通常你不会这么幸运。

假设你有一个两轮的机器人,在两个不同的设置上,相同的读数可能会产生不同的结果。在我的简单说明中,我有一个两轮机器人的轴,两个机器人都有相同的wheel_diameter,并使用相同的旋转编码器。一个机器人的轮子之间的距离为R1,另一个机器人的距离为R2。假设两个机器人都保持一个轮子不动,另一个轮子在轮子编码器上向前移动5次(两个机器人都使用相同的编码器和相同大小的轮子)。利用半圆圆周的简单方程,我们可以求出轮子移动的距离。
dist_trav = (pi * wheel_diameter) * (#ticks / total ticks on encoder)
当然,由于一个轮子是静止的,机器人实际上是在另一个半圆上旋转。我们可以使用以下命令来计算新角度
circumference = 2*pi*dist_between_wheels dist_between_wheels是我们圆的半径
angle = % of circumference traveled * units = (dist_trav / circumference) * 360我们使用360度,所以角度是以度为单位的,但如果需要,您也可以使用弧度
你会看到,即使在这个例子中,除了轮子之间的距离之外,机器人是相同的,相同的刻度数意味着非常不同的角度。如果r2=2*r1,我们可以看到两个机器人的dist_trav是相同的(因为轮子的直径是相同的),但是当我们计算出角度时,我们得到了
黑色机器人
angle_black = (dist_traveled / 2*pi*R1) * 360
红色机器人
angle_black = (dist_traveled / 2*pi*2*R1 ) * 360
= (dist_traveled / 4*pi *R1 ) * 360因此,对于相同的轮子运动,红色机器人的角度只有黑色机器人的1/2。这只是一个玩具示例,但您可以很容易地看到不同的轮子直径和它们之间的距离如何产生巨大的差异。
https://stackoverflow.com/questions/33411393
复制相似问题