Предлагаю обсудить такой вариант управления шасси:
1. Создаём очередь из команд вида (Ls,Rs,Lf,Rf,T), где *s,*f - начальные и конечные скорости вращения соответственно левого и правого колёс, T - желаемое время выполнения команды.
2. Разрешено докладывать команды в очередь, обнулять очередь, узнавать размер очереди и расчетный % выполнения текущей команды.
3. Если по обратной связи видим, что не вписываемся в заданную траекторию, тогда снижаем скорости, увеличивая время манёвра и всё равно выполняем маневр по заданной траектории.
4. При включении специального режима - можно автоматически сглаживать переходы между командами, типа если с места подали команду поехать на полном ходу вперед и больше команд нету - можем её преобразовать в 3 команды - разогнаться по прямой, проехать, аккуратно замедлиться.
Очевидно, что такой формат команд позволяет совершать движение с ускорением, замедлением, ехать прямо, поворачиваться на месте, по дуге, с ходу без остановки и выполнять другие интересные манёвры.
Кто что может сказать по поводу недостатков такого подхода и или еще что-то дельное?
По итогам думаю сделать реализацию такого протокола в рамках своего модуля GATE-A8D8M2 и выложить исходники.