Полагаю ещё наверное желательно двигаться равномерно вдоль стены?
должно быть несколько уровней управления.
Самый низкий - управляет моторами
Для
каждого мотора:
1) получает на вход требуемую скорость вращения колеса
Далее зависит от конструкции, где у вас стоят энкодеры, если на самом колесе то манипулировать данными с энкодера не нужно.
Если энкодеры на моторе или между мотором и колесом (на промежуточной шестерне), то требуемую скорость колеса нужно привести к скорости энкодера через передаточное число редуктора
2) Считывает текущую скорость вращения колеса с энкодера и вычисляет ошибку
2) пропускает ошибку через пид регулятор получает значение ШИМ для мотора
3) Заносит новые значение ШИМ в таймер.
Более высокий уровень, оперирует в абсолютных координатах (V - линейная скорость, W - угловая )
1) получает на вход требуемое расстояние до стены, желаемую линейную скорость V (как быстро ехать)
2) вычисляет текущее расстояние до стены
3) пропускает через пид регулятор, ошибку расстояния до стены, получает W куда двигаться лево-право и как быстро
4) вычисляет какая скорость должна быть у каждого колеса чтобы получить необходимый вектор {V,W}
5) передаёт новые скорости колёс на уровень ниже.
Подробнее про управление тут
Еще подробнее тут Уравнения движения роботов с двумя независимыми ведущими колёсами