Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/backup lqoc man ex #131

Open
wants to merge 28 commits into
base: v3.0.3-devel
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6ee68c5
backing up the test
markusgft Apr 24, 2020
55d2d87
backing up working example
markusgft Apr 26, 2020
2f7a116
working ex
markusgft Apr 26, 2020
1b1fb28
backup working example
markusgft Apr 30, 2020
5779b60
completed working example of LQOC (multiple-shooting) on composite ma…
markusgft May 12, 2020
7048b4c
remove unneeded computation
acxz May 18, 2020
f8d083d
fixed bug concerning hpipm_status display
hmcm May 20, 2020
9b9cedd
Fix links to RobCoGen in the readme
May 20, 2020
ca4fb2a
Merge pull request #132 from acxz/patch-1
markusgft May 21, 2020
796cd2a
Merge pull request #134 from hmcm/patch-hpipm
markusgft May 21, 2020
6ee83d4
Merge pull request #135 from mfrigerio17/maf
markusgft May 21, 2020
cd73120
Downgrade minimum required CMake version to 3.5 (xenial) and use newe…
romainreignier May 22, 2020
600a629
Fix histogram plot crash
romainreignier May 22, 2020
6d6ea58
Update ct_core/CMakeLists.txt with suggested commits
markusgft May 23, 2020
aac898f
Merge pull request #136 from romainreignier/compatible-old-cmake
markusgft May 24, 2020
f44104c
remove repeated header install line
acxz Jun 2, 2020
1ada03d
Merge pull request #139 from acxz/patch-1
markusgft Jun 3, 2020
4edeff3
Merge branch 'v3.0.2' into feature/backup_lqoc_man_ex
markusgft Jun 4, 2020
c2fee0e
fast forward with latest fixes.
markusgft Jun 4, 2020
4525468
non-working version
markusgft Jun 20, 2020
f8ba321
update with less coeff() work going on
markusgft Jun 21, 2020
85e378a
Merge branch 'feature/backup_lqoc_man_ex' of github.com:ethz-adrl/con…
markusgft Jun 21, 2020
88cfa2f
non-working hpipm test
markusgft Jun 25, 2020
d6572d3
Add impl for eigen-type to csv export.
markusgft Jul 13, 2020
b1940a9
backup
markusgft Jul 13, 2020
39682a7
reverse backup
markusgft Jul 13, 2020
94fb5a4
kinematic case not working with intermediate cost
markusgft Jul 14, 2020
755d93a
development backup holidays.
markusgft Dec 19, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fast forward with latest fixes.
  • Loading branch information
markusgft committed Jun 4, 2020
commit c2fee0eb9e05718d56c68bc811ddbccc54138df1
80 changes: 39 additions & 41 deletions ct_optcon/include/ct/optcon/solver/lqp/GNRiccatiSolver-impl.hpp
Original file line number Diff line number Diff line change
@@ -9,31 +9,30 @@ namespace ct {
namespace optcon {


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::GNRiccatiSolver(const std::shared_ptr<LQOCProblem_t>& lqocProblem)
: LQOCSolver<STATE_DIM, CONTROL_DIM, SCALAR>(lqocProblem), N_(-1)
template <typename MANIFOLD, size_t CONTROL_DIM>
GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::GNRiccatiSolver(const std::shared_ptr<LQOCProblem_t>& lqocProblem)
: LQOCSolver<MANIFOLD, CONTROL_DIM>(lqocProblem), N_(-1)
{
Eigen::initParallel();
Eigen::setNbThreads(settings_.nThreadsEigen);
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::GNRiccatiSolver(int N)
template <typename MANIFOLD, size_t CONTROL_DIM>
GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::GNRiccatiSolver(int N)
{
changeNumberOfStages(N);
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::solve()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::solve()
{
for (int i = this->lqocProblem_->getNumberOfStages() - 1; i >= 0; i--)
solveSingleStage(i);
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::solveSingleStage(int N)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::solveSingleStage(int N)
{
if (N == this->lqocProblem_->getNumberOfStages() - 1)
initializeCostToGo();
@@ -44,16 +43,15 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::solveSingleStage(int N)
computeCostToGo(N);
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::configure(const NLOptConSettings& settings)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::configure(const NLOptConSettings& settings)
{
settings_ = settings;
H_corrFix_ = settings_.epsilon * ControlMatrix::Identity();
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::computeStatesAndControls()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::computeStatesAndControls()
{
LQOCProblem_t& p = *this->lqocProblem_;

@@ -65,28 +63,33 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::computeStatesAndControls()
this->u_sol_[k] = this->lv_[k] + this->L_[k] * this->x_sol_[k];

//! state update rule in diff coordinates
this->x_sol_[k + 1] = p.A_[k] * this->x_sol_[k] + p.B_[k] * (this->u_sol_[k]) + p.b_[k];
StateMatrix A_orig = p.Adj_x_[k + 1] * p.A_[k]; // A "without trick for backward pass" //TODO: document this
StateControlMatrix B_orig = p.Adj_x_[k + 1] * p.B_[k]; // B "without trick for backward pass"
typename MANIFOLD::Tangent b_orig = p.Adj_x_[k + 1] * p.b_[k]; // b "without trick for backward pass"
// Note that we need to transport the state update into the tagent space of k+1
this->x_sol_[k + 1] =
p.Adj_x_[k + 1].transpose() * (A_orig * this->x_sol_[k] + B_orig * (this->u_sol_[k]) + b_orig);
}
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::computeFeedbackMatrices()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::computeFeedbackMatrices()
{ /*no action required, already computed in backward pass */
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::compute_lv()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::compute_lv()
{ /*no action required, already computed in backward pass*/
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
SCALAR GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::getSmallestEigenvalue()
template <typename MANIFOLD, size_t CONTROL_DIM>
auto GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::getSmallestEigenvalue() -> SCALAR
{
return smallestEigenvalue_;
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::setProblemImpl(std::shared_ptr<LQOCProblem_t> lqocProblem)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::setProblemImpl(std::shared_ptr<LQOCProblem_t> lqocProblem)
{
if (lqocProblem->isConstrained())
{
@@ -98,9 +101,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::setProblemImpl(std::shared
changeNumberOfStages(N);
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::changeNumberOfStages(int N)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::changeNumberOfStages(int N)
{
if (N <= 0)
return;
@@ -127,9 +129,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::changeNumberOfStages(int N
N_ = N;
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::initializeCostToGo()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::initializeCostToGo()
{
//! since intializeCostToGo is the first call, we initialize the smallestEigenvalue here.
smallestEigenvalue_ = std::numeric_limits<SCALAR>::infinity();
@@ -142,9 +143,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::initializeCostToGo()
sv_[N] = p.qv_[N];
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::computeCostToGo(size_t k)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::computeCostToGo(size_t k)
{
LQOCProblem_t& p = *this->lqocProblem_;

@@ -160,9 +160,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::computeCostToGo(size_t k)
sv_[k]/*.noalias()*/ += G_[k].transpose() * this->lv_[k]; // TODO: bring back all the noalias()
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the noalias() must be fixed properly, maybe requires changing manif.

}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::designController(size_t k)
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::designController(size_t k)
{
LQOCProblem_t& p = *this->lqocProblem_;

@@ -259,9 +258,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::designController(size_t k)
}
}


template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::logToMatlab()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::logToMatlab()
{
#ifdef MATLAB_FULL_LOG

@@ -280,8 +278,8 @@ void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::logToMatlab()
#endif
}

template <size_t STATE_DIM, size_t CONTROL_DIM, typename SCALAR>
void GNRiccatiSolver<STATE_DIM, CONTROL_DIM, SCALAR>::initializeAndAllocate()
template <typename MANIFOLD, size_t CONTROL_DIM>
void GNRiccatiSolver<MANIFOLD, CONTROL_DIM>::initializeAndAllocate()
{
// do nothing
}