我正在致力于实现一种名为 DIRTREL 的轨迹优化算法,该算法本质上是带有附加成本函数的直接转录。然而,成本函数包含通过围绕决策变量 (x, u) 线性化系统并采用离散时变 LQR 获得的 K 矩阵。我的问题是如何在 drake 中最有效、最简洁地表达这一点,因为我当前的方法以符号方式描述系统,并由于 Riccati 差分方程的递归性质而导致极其冗长的符号方程(随着时间步长的增加,长度只会增加),以及这种象征性的做法是否合适。
更多细节:
- 将我的系统指定为 LeafSystem
- 声明一个包含决策变量 x、u 的数学程序
- 要获得随时间变化的线性动力学,请指定一个类,该类在单个时间步长处接收动力学和决策变量,并使用 symbolic.Jacobian(args) 返回该时间步长的雅可比矩阵
- 添加包含整个轨迹的成本函数,因此所有 x, u
成本函数内部:
- 通过使用接受决策变量并返回雅可比行列式的类,获得每个时间步长的线性化矩阵 A_i、B_i、G_i(G_i 表示噪声)
- 使用 A_i 和 B_i 矩阵通过 Riccati 差分方程计算 TVLQR 成本 (S[n]) 并求解 Ks
- 返回数学程序的成本,该数学程序本质上是 K 矩阵的大型线性组合
附带说明的是,我不确定以符号方式计算逆的最容易处理的方法,但我最关心的是我的方法以及这种符号描述是否合适。
我认为DIRTREL有几个细节值得讨论:
- 成本矩阵
S[n]
取决于线性化动力学Ai, Bi
。我认为在 DIRTREL 中你需要解决一个非线性优化问题,这需要成本的梯度。因此,要计算成本的梯度,您将需要梯度S[n]
,这需要梯度Ai, Bi
. Since Ai
and Bi
是动力学函数的梯度f(x, u)
,您将需要计算动力学的二阶梯度。
- 我们有一个paper http://groups.csail.mit.edu/robotics-center/public_papers/Dai12a.pdf进行轨迹优化并优化与 LQR 成本相关的成本函数。 DIRTREL 对我们的论文做了一些改进。在我们的实施中,我们处理了
S
也作为决策变量,所以我们的决策变量是x, u, S
,约束包括动力学约束x[n+1] = f(x[n], u[n])
,以及 Riccati 方程作为约束S
。我认为 DIRTREL 的方法在决策变量较少的情况下可以更好地扩展,但我还没有比较这两种方法之间的数值性能。
- 我不知道为什么你需要以符号方式计算逆矩阵。首先,您需要计算的逆是什么?其次,Drake 支持使用自动微分来计算数值梯度。我建议进行数值计算而不是符号计算。由于在数值优化中,您只需要成本/约束的值和梯度,因此以数值方式计算这些值通常比首先推导符号表达式,然后评估符号表达式要高效得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)