- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用编码器获取车辆的行驶距离和航向角。 At turn it does not give precise angle,车辆正在转弯。在我的算法中,我使用所有角度的累加来找到相对于世界(X-O-Y)的总角度。
与轮径比和轮距有关系吗?
我想到了这个问题,因为相同的算法适用于另一个具有不同尺寸(车轮直径和车轮到车轮距离)的硬件,并且它也返回精确的转向角。
如有宝贵建议,将不胜感激。
最佳答案
机器人的角度取决于特定的硬件,例如车轮尺寸、编码器尺寸和车辆宽度。也许你很幸运,因为另一个机器人轮径和轮距的变化相互抵消,所以方程是一样的,但通常你不会那么幸运
假设您有一个双轮机器人,两种不同设置的相同读数可能会产生不同的结果。在我的简单示例中,我有一个双轮机器人的轴,两个机器人都具有相同的 wheel_diameter
并使用相同的旋转编码器。一个机器人的轮子之间有距离 R1
另一个有距离 R2
假设两个机器人都保持一个轮子静止并且另一个轮子在轮子编码器上向前移动 5 次点击(并且两个机器人使用相同的编码器和相同尺寸的轮子)。使用半圆周长的简单方程式,我们可以找到车轮移动的距离。
dist_trav = (pi * wheel_diameter) * (#ticks/编码器上的总刻度数)
当然,由于一个轮子是静止的,所以机器人实际上是在另一个半圆上转动。我们可以使用
计算新的角度circumference = 2*pi*dist_between_wheels
dist_between_wheels 是我们圆的半径
angle = % of circumferent 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。这只是一个玩具示例,但您可以很容易地看出不同的轮子直径和轮子之间的距离会产生巨大的差异。
关于algorithm - 轮径和轮距之比对车辆的定位和所需航向有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411393/
我是一名优秀的程序员,十分优秀!