Я работаю над реализацией алгоритма оптимизации траектории под названием DIRTREL, который, по сути, представляет собой прямую транскрипцию с добавленной функцией стоимости. Однако функция стоимости включает в себя K матриц, полученных путем линеаризации системы вокруг переменных решения (x, u) и использования дискретного изменяющегося во времени LQR. Мой вопрос заключается в том, как наиболее эффективно и кратко express это в drake, поскольку мой текущий подход описывает систему символически и приводит к чрезвычайно длинным символьным c уравнениям (которые будут только увеличиваться в длине с увеличением временных шагов) из-за рекурсивного характера уравнение разности Риккати, и если этот символ c подход даже подходит.
Для получения дополнительных сведений:
- Укажите мою систему как LeafSystem
- Объявить Математическая программа с переменными решения x, u
- Чтобы получить изменяющуюся во времени линеаризованную динамику, укажите класс, который принимает переменные динамики и решения на одном временном шаге и возвращает якобианы для этого временного шага с символом c. Якобиан ( args)
- Добавить функцию стоимости, которая принимает всю траекторию, так что все x, u
Внутри функции стоимости:
- Получить линеаризованные матрицы A_i , B_i, G_i (G_i для шума) для каждого временного шага с использованием класса, который принимает решение va riables и возвращает якобианы
- Вычислите стоимость TVLQR (S [n]) с помощью разностных уравнений Риккати, используя матрицы A_i и B_i и решив для Ks
- , верните стоимость математической программы, которая по сути, большая линейная комбинация K-матриц
С одной стороны, я не уверен в наиболее удобном способе символьного вычисления обратного, но меня больше всего беспокоит моя методология и то, будут ли эти символы c описание соответствующее.