по точности ничего не изменилось
Тут ещё вот в чём может быть дело.
Поведение рояльного колеса я задал через апроксимацию, т.к. я точно не знаю как посчитать его положение.
- Код: Выделить всё • Развернуть
"""
_ _
| | | |
| |B-----A-----D| |
|L| | |R|
~ | ~
|
*F
_
/ /
/C/ - (caster wheel)
~
"""
Входные данные физической модели - скорости левого и правого колеса (vL, vR)
по ним как в обычной одометрии получаю скорость точки A от неё высчитываю положение точки F
а вот как вычислить угол который при этом получится между AF и FC я не знаю, я посчитал что поскольку вилка не растягивается то рояльное колесо (точка С) пойдёт по кратчайшему пути из текущего положения в сторону точки F.
поэтому новое положение точки C я определяю так
1) вычисляю угол между новым положением точки F и старым положением точки C => угол wC
2) от нового положения точки F вычитаю FC по углу wC
WheeC.pos.x = pointF.pos.x - BASE_FC*cos(wC)
WheeC.pos.y = pointF.pos.y - BASE_FC*sin(wC)
т.е. получается что точка C ползёт в сторону точки F, вроде бы вполне естественно.
затем я делаю обратную процедуру, вычисляю угол между старым положением точки C и новым
и линейную скорость точки C
это подаю на вход другой модели которая по этим данным восстанавливает положение.
я заметил что точность ухудшается в моменты когда рояльное колесо вращается относительно точки F, когда оно не вращается (угловая скорость платформы постоянна) ошибки вроде бы нет.