这有什么问题吗?
这样做的主要问题是,虽然您提出的解决方案可以立即纠正电动机性能之间的不匹配,但不能纠正累积的误差,更不用说诸如阿贝误差之类的更复杂的位置误差了(请参阅下文)。
有什么更好的方法?
您可以执行几项操作,具体取决于您对错误的容忍度以及要为纠正错误付出的努力。
第一步是建立一对PID回路,每个车轮一个,分别给它们两个相同的需求位置。正如我在对类似问题的回答中所建议的那样,如果将两个轮子都保持在要求它们的位置的非常严格的误差范围内,那么将花费一些时间来积累足够的误差以引起明显的转向。
调谐两个名义上独立的电动机水平PID回路比调谐单个复杂的,相互依存的组合系统要容易得多。为了经受住更高级别控制工作的任何变化,您确实需要每个电动机在尽可能长的时间内尽可能地与另一个电动机保持相似的性能,这确实需要单独的伺服回路。
但是,还有许多其他的复杂情况,这取决于您需要什么精度以及您准备付出多少努力来纠正它们,以寻求哪种解决方案。航位推算可能就足够了,或者您可能需要在机器人中添加相对或绝对位置确定。
一个问题是,即使您的左轮和右轮都移动了1000个编码器计数,您仍然可能在两次不同的行程中最终处于不同的位置。
例如,假设您的最大跟随误差为10个编码器计数,并且您的电机以每个PID循环迭代10个编码器计数的速度运行。您的左马达可能会移动5,10,10,10 ... 10,5,而您的右马达可能会具有4,11,10,10 ... 10,5的轮廓,甚至在开始时的加速度也略有不同此举可能导致机器人朝错误的方向出发。不仅如此,您朝该方向移动的越远,绝对误差就会越大。这就是我们谈论Abbe错误时所要谈论的内容,并且如果没有复杂的运动学模型或某种外部参考,您将永远无法对其进行校正。
有关更多信息,请参见我对类似但并非完全重复的问题的回答:如何使用Arduino PID库直线驱动机器人?
还有我对相关的线路跟随器优化的回答