rsLQR
0.1
|
This is the documentation for the rsLQR solver for solving LQR problems on a many-core CPU. The linear-quadratic regulator is the canonical optimal control problem, and has significant practical applications. The current software package works with the follow form, which includes the affine terms on the cost and dynamics:
\begin{align*} \underset{x_{1:N}, u_{1:N-1}}{\text{minimize}} &&& \frac{1}{2} x_N^T Q_N x_N + q_N^T x_N + \sum_{k-1}^{N-1} \frac{1}{2} x_k^T Q_k x_k + q_k^T x_k + u_k^T R_k u_k + r_k^T u_k \\ \text{subject to} &&& x_{k+1} = A_k x_k + B_k u_k + f_k \\ &&& x_1 = x_\text{init} \end{align*}
where \( x \in \mathbb{R}^n, u \in \mathbb{R}^m \) are the state and control vectors. This optimization problem is a simple quadratic program (QP) that can be solved using any of the methods to solve this generic class of optimization problems, as well as extensions including equality and inequality constraints on the states and the controls. However, in the form presented, it can also be solved by solving a single sparse, symmetric, and banded linear system encoding the optimality conditions. This package provides two methods for solving this linear system:
The rsLQR (or recursive Schur compliment LQR) algorithm solves the LQR problem using a hierarchical set of 3x3 Schur compliments. The details and derivation of the algorithm are published [in this conference paper](). This software package provides the open-source implementation of the proposed algorithm, while this documentation is meant to provide some further details on the implementation that were left out of the original paper.
Solving the LQR problem using a backward Riccati recursion is perhaps the most well-known and most popular method for solving these problems, given it's extreme computation efficiency and straightforward implementation. It is, however, inherently serial in nature. The current software package provides an implementation in pure C, and provided as a comparison baseline benchmark for the proposed rsLQR algorithm.
See the Installation page for detailed instructions on building, installing, and using the library in your own CMake projects.
Please cite the following paper when using this package: