Есть ли проблемы с этим?
Основная проблема заключается в том, что, хотя предлагаемое вами решение будет мгновенно исправлять несоответствие между характеристиками двигателей, оно не будет исправлять накопленную ошибку, не говоря уже о более сложных ошибках в положении, таких как ошибка Аббе (см. Далее).
Какой подход лучше?
Есть несколько вещей, которые вы можете сделать, в зависимости от того, какова ваша терпимость к ошибкам и сколько усилий вы хотите приложить для их исправления.
Первым шагом было бы установить пару петель ПИД, по одному на каждое колесо, предоставляя им одинаковую позицию спроса. Как я предположил в своем ответе на аналогичный вопрос , если вы держите оба колеса в пределах очень жесткой границы ошибки, в которой вы их просите, тогда потребуется некоторое время, чтобы накопить достаточно ошибки, чтобы вызвать заметное отклонение.
Также будет гораздо проще настроить две номинально независимые петли ПИД-регулятора уровня двигателя, чем настроить одну сложную, взаимозависимую комбинированную систему. Чтобы выдержать любое изменение в работе регулятора более высокого уровня, вам действительно нужно, чтобы каждый двигатель работал как можно более сходно с другим двигателем в течение максимально возможного времени, а для этого действительно требуются отдельные сервоциклы.
Однако существует ряд дополнительных сложностей, и это зависит от того, какая точность вам нужна и сколько усилий вы готовы предпринять, чтобы исправить их, в отношении того, какое решение вы выберете. Может случиться так, что мертвого счета достаточно, или вам может понадобиться добавить определение относительного или абсолютного положения вашему роботу.
Одна проблема заключается в том, что даже если ваше левое и правое колеса движутся на 1000 отсчетов энкодера, вы все равно можете оказаться в другом положении на двух разных трассах.
Например, допустим, у вас есть максимальная следующая ошибка, равная 10 счетчикам энкодеров, и ваши двигатели работают со скоростью, скажем, 10 счетчиков энкодеров на одну итерацию цикла ПИД. Ваш левый мотор может двигаться 5,10,10,10 ... 10,5, в то время как ваш правый мотор может иметь профиль 4,11,10,10 ... 10,5 и даже эту небольшую разницу в ускорении на старте движения может привести к тому, что робот отправится в неправильном направлении. И не только это, но чем дальше вы движетесь в этом направлении, тем больше будет ошибка в абсолютном выражении. Это то, о чем мы говорим, когда говорим об ошибке Аббе , и без сложной кинематической модели или какой-либо внешней ссылки вы никогда не сможете исправить это.
Для получения дополнительной информации см. Мой ответ на похожий, но не совсем повторяющийся вопрос: как я могу использовать библиотеку Arduino PID для управления роботом по прямой линии?
и мой ответ на также связанную оптимизацию Line Follower