Чи є з цим проблеми?
Основна проблема з цим полягає в тому, що хоча запропоноване вам рішення миттєво виправить невідповідність між характеристиками двигунів, воно не виправить накопичену помилку, не кажучи вже про більш складні помилки в положенні, такі як помилка Abbe (див. Пізніше).
Який кращий підхід?
Ви можете зробити декілька речей, залежно від того, яка ваша толерантність до помилок та скільки зусиль ви хочете докласти, щоб виправити їх.
Першим кроком було б встановити пару циклів PID, по одній на кожне колесо, надавши їм обом однакове положення попиту. Як я запропонував у своїй відповіді на подібне запитання , якщо ви будете тримати обидва колеса в дуже чіткій помилці, де ви попросите їх знаходитись, знадобиться певний час, щоб накопичити достатню кількість помилок, щоб викликати помітну оцінку.
Налаштувати дві номінально незалежні петлі PID рівня двигуна буде набагато простіше, ніж налаштувати єдину складну, взаємозалежну комбіновану систему. Щоб витримати будь-яку зміну управління вищого рівня, вам дійсно потрібно, щоб кожен мотор поводився якомога подібніше до іншого двигуна протягом більшої кількості часу, наскільки це можливо, і для цього потрібні окремі сервокруги.
Однак є низка подальших ускладнень, і це залежить від того, яка точність вам потрібна і скільки зусиль ви готові докласти, щоб виправити для них рішення щодо вирішення питання. Може статися, що Dead Reckoning є достатнім, або вам може знадобитися додати роботу відносне або абсолютне визначення положення.
Одна з проблем полягає в тому, що навіть якщо ваше ліве і праве колеса переміщаються на 1000 кодерів, ви все одно можете опинитися в іншому положенні на двох різних пробігах.
Наприклад, скажімо, що ви маєте максимум наступних помилок у 10 підрахунках кодерів, і ваші двигуни працюють зі швидкістю, наприклад 10 підрахунків кодера за ітерацію циклу PID. Ваш лівий мотор може рухатися 5,10,10,10 ... 10,5, а правий мотор може мати профіль 4,11,10,10 ... 10,5 і навіть незначну різницю в прискоренні на старті рух може призвести до того, що робот рушив трохи в неправильному напрямку. Мало того, але чим далі ви рухаєтесь у цьому напрямку, тим більшою буде помилка в абсолютних показниках. Це те, про що ми говоримо, коли ми говоримо про помилку Abbe , і без складної кінематичної моделі чи якоїсь зовнішньої посилання ви ніколи не зможете її виправити.
Для отримання додаткової інформації дивіться мою відповідь на подібний, але не зовсім повторюваний питання: Як я можу використовувати бібліотеку PID Arduino для керування роботом по прямій лінії?
і моя відповідь на також пов'язану оптимізацію послідовника рядків