Библиотеки: фильтрация
Реализация различных динамических фильтров. Дифференцирование сигналов. Интегрирование сигналов. Объединение двух поз для целей плановой стыковки траектории. Реализации стандартных динамических звеньев: передаточная функция, гистерезис и т.п.
Классы добавляются по мере необходимости.
Интерфейс
Интерфейс соответствует s-функциям MATLAB.
Фильтр имеет состояние, меняющееся с течением времени. Время дискретно с постоянным периодом.
Схема работы стандартная: на каждом шаге фильтр получает новое значение входа u[k], по текущему состоянию x[k] и входу u[k] вычисляет новое состояниеx[k+1] и выход y[k].
Здесь k --- дискретное время.
Filter(параметры, начальные условия x0) --- конструктор.
virtual void start(), void start(начальные условия x0) --- установить состояние фильтра на начальное значение: x[k] = x0.
virtual OutputType output(InputType u) --- вычислить выход фильтра на текущем шаге при данном входе, но не модифицирует состояние фильтра: y[k] = g(x[k], u[k]).
virtual OutputType update(InputType ) --- вычислить выход фильтра на текущем шаге при данном входе, модифицирует состояние фильтра: x[k+1] = f(x[k], u[k]), y[k] = g(x[k], u[k])
Замечание: для ряда приложений может быть удобнее другой вариант update:
virtual void update() --- сделать шаг, используя последний заднный при помощи `output` вход, модифицирует состояние фильтра: x[k+1] = f(x[k], u[k]), y[k] = g(x[k], u[k])
Такая реализация может просто буфферизовать в output новое сотояние. Выбор конкретной реализации зависит от удобства применния.
Интегратор
Интегрирует входной сигнал.
Имена интерфейсов: Integrator, IntegratorArray, IntegratorJointState.
Типы данных:
* Вход, выход: double, JntArray, JointState, Quaternion, Pose, Vector3.
Базовая реализация:
x[k+1] = x[k] + T*u[k],
y[k] = x[k].
Здесь и далее T --- период дискретизации.
Замечание: в случае ориентации надо интегрировать уравнение Пуассона.
Замечание: возможна реализация без состояния. В этом случае входа два (x --- позиция, u --- скорость), а
шаг возвращает новое значение позиции x. однако тогда несколько усложняется реализация метода трапеций и метода Симпсона.
Дифференцирование
Вычисляет производную входного сигнала.
Имена интерфейсов: Integrator, IntegratorArray, IntegratorJointState.
Типы данных:
* Вход, состояние, выход: double, JntArray, JointState.
Базовая реализация:
x[k+1] = u[k],
y[k] = (u[k] - x[k])/T.
Варианты реализации:
* инерционно-дифференцирующее звено,
* дифференцирующий полиномиальный фильтр КИХ,
Объединение траекторий
Предназначены для синтеза "переходной" траектории между двумя заданным, синтеза "переходной" траектории от некоторой начальной позиции к заданной траектории.
Вычисления могут проводиться в угловой, декартовой и сферической системе координат. Для представления ориентации используются кватернионы.
Варианты исполнения включают: фильтры позиции/скорости первого порядка обеспечивают только непрерывность, при работе с позой не учитывают скорости, фильтры второго порядка одновременно работают со скоростью и позицией.
Области применения фильтров:
- Стыковка траекторий для не опорной конечности.
- Стыковка траекторий тела, для последующего пересчета в траекторию опорных конечностей.
- Обеспечение плавных движений ушами и хвостом.
Объединение двух траекторий: первый порядок
На вход фильтра подаются две траектории u1 и u2.
Имена интерфейсов: FusionTypename
Типы данных:
Вход, выход: double, JntArray, Vector3, Quaternion, Pose, Twist
Состояние: duoble x.
Варианты реализации:
-
линейный переход
FusionTypenameLineary[k] = x[k]*u1[k] + (1-x[k])*u2[k], x[k+1] = max(0, x[k] - T/tau), x0 = 1.tau--- длительность процесса. -
экспоненциальный переход
FusionTypenameExpy[k] = x[k]*u1[k] + (1-x[k])*u2[k], x[k+1] = x[k]*(1 - T/tau), x0 = 1.tau--- характерная длительность процесса. -
экспоненциальный переход c ограничением скорости
Переход от заданного состояния к траектории: первый порядок
На вход фильтра подается желаемая траектория ur и текущее состояние (скорость, поза) u.
Переменная u фактически играет роль состояния фильтра, т.к. предполагается, что после после вычисления
его выхода y[k] он присваивается очередному значению u[k+1], т.е.
u[k+1] = y[k].
В контуре задатчик-агрегатор это присваивание происходит естественным образом, если в качестве источника текущей позы задатчик использует выход агрегатора.
Однако, если используется реальная поза возможны нежелательные эффекты.
Имена интерфейсов: TransientTypename
Типы данных:
* Вход, выход: double, JntArray, Vector3, Quaternion, Pose, Twist
Варианты реализации:
-
линейный переход
y[k] = u[k] + ort(ur[k] - u[k])*min(v*T,|ur[k] - u[k]|),v--- скорость. -
экспоненциальный переход
y[k] = u[k]*(1 - tau/T) + ur[k]*tau/T,tau--- характерная длительность процесса. -
экспоненциальный переход c ограничением скорости
Переход от заданного состояния к траектории: второй порядок
Базируются на том факте, что позиция получается интегрирование уравнений кинематики. Пока законы приводятся только для позиции без управления ориентацией.
Используются следующие обозначения:
x, v --- текущая позиция и скорость робота,
xr, vr --- желаемая позиция и скорость, ar --- желаемое ускорение.
Очевидно, они подчиняются следующим уравнениям:
.
x = v, (1)
. .
xr = v, vr = ur, (2)
Введем ошибку:
xe = xr - x, ve = vr - v. (3)
Зададимся желаемой динамикой ошибки:
. .
xe = ve, ve = - f(xe,ve). (4)
К примеру, выбрать линейный закон f(xe, ve) = -a0*xe - a1*ve, обеспечивающий экспоненциальную сходимость.
Аналогично легко ввести экспоненциальный закон с ограниченным ускорением и/или скоростью
Тогда выходная траектория определяется уравнениями:
. .
x = v, v = ur + f(xr-x, vr-v). (5)
Замечание: в случае ориентации ситуация несколько усложняется. Для описания ее эволюции в (1)-(2) надо использовать уравнение Пуассона, ошибка вводится при помощи групповой операции группы Ли SO(3). Некоторую сложность может представить выбор уравнения (4).
Типы данных (без ориентации):
Вход: x, v, xr, vr (double, Vector3)
Выход: x, v (double, Vector3)
* Состояние: нет, фактически роль состояния играют x и v.
Варианты реализации (основаны на дискретизации (5)): экспоненциальный переход, экспоненциальный переход c ограничением ускорения, * экспоненциальный переход c ограничением ускорения и скорости.