我正在使用编码器来获取行驶的距离和车辆的航向角。在转弯时它没有给出精确的角度,车辆正在转动。在我的算法中,我使用所有角度的累积来找到相对于世界的总角度(X-O-Y)。
是否与车轮直径比和车轮距离有任何关系?
这个问题在我的脑海中提出,因为同样的算法与另一个具有不同尺寸(车轮直径和车轮到车轮距离)的硬件一起工作,它确实也返回了精确的转弯角度。
如果提供一些有价值的建议,我们将不胜感激。
答案 0 :(得分:1)
机器人的角度取决于特定的硬件,例如车轮尺寸,编码器尺寸和车辆宽度。也许你对另一个机器人很幸运,车轮直径和车轮到车轮距离的变化相互抵消,所以方程式是相同的,但通常你不会那么幸运
假设您有一个两轮机器人,两个不同设置上的相同读数会产生不同的结果。在我的简单插图中,我有一个两轮机器人的轴,两个机器人具有相同的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
是相同的(因为轮子直径相同),但是当我们计算出我们获得的角度时
black bot
angle_black = (dist_traveled / 2*pi*R1) * 360
red bot
angle_black = (dist_traveled / 2*pi*2*R1 ) * 360
= (dist_traveled / 4*pi *R1 ) * 360
因此,对于车轮的相同运动,红色机器人将只有黑色机器人所做的角度变化的1/2。这只是一个玩具示例,但您可以很容易地看到不同直径的车轮和它们之间的距离如何产生巨大差异。