diff --git a/include/CCC/DdpCentroidal.h b/include/CCC/DdpCentroidal.h index 8375a65..71c4bf4 100644 --- a/include/CCC/DdpCentroidal.h +++ b/include/CCC/DdpCentroidal.h @@ -362,5 +362,8 @@ class DdpCentroidal //! Force scale limits (i.e., limits of \f$\lambda_i\f$ in the order of lower, upper) std::array force_scale_limits_ = {0.0, 1e6}; + + //! Latest returned value from DDP solver + bool ddp_solved_ = false; }; } // namespace CCC diff --git a/include/CCC/DdpSingleRigidBody.h b/include/CCC/DdpSingleRigidBody.h index 86e9eac..5618665 100644 --- a/include/CCC/DdpSingleRigidBody.h +++ b/include/CCC/DdpSingleRigidBody.h @@ -402,5 +402,8 @@ class DdpSingleRigidBody //! Force scale limits (i.e., limits of \f$\lambda_i\f$ in the order of lower, upper) std::array force_scale_limits_ = {0.0, 1e6}; + + //! Latest returned value from DDP solver + bool ddp_solved_ = false; }; } // namespace CCC diff --git a/include/CCC/DdpZmp.h b/include/CCC/DdpZmp.h index 71bab6f..c6b5a93 100644 --- a/include/CCC/DdpZmp.h +++ b/include/CCC/DdpZmp.h @@ -297,5 +297,8 @@ class DdpZmp //! DDP solver std::shared_ptr> ddp_solver_; + + //! Latest returned value from DDP solver + bool ddp_solved_ = false; }; } // namespace CCC diff --git a/src/DdpCentroidal.cpp b/src/DdpCentroidal.cpp index e09b242..404c703 100644 --- a/src/DdpCentroidal.cpp +++ b/src/DdpCentroidal.cpp @@ -226,11 +226,11 @@ Eigen::VectorXd DdpCentroidal::planOnce(const std::function double t = current_time + i * ddp_problem_->dt(); current_u_list.push_back(DdpProblem::InputDimVector::Zero(ddp_problem_->inputDim(t))); } - ddp_solver_->solve(current_time, initial_param.toState(ddp_problem_->mass_), current_u_list); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(ddp_problem_->mass_), current_u_list); } else { - ddp_solver_->solve(current_time, initial_param.toState(ddp_problem_->mass_), initial_param.u_list); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(ddp_problem_->mass_), initial_param.u_list); } return ddp_solver_->controlData().u_list[0]; diff --git a/src/DdpSingleRigidBody.cpp b/src/DdpSingleRigidBody.cpp index c09a9c3..e44ec2b 100644 --- a/src/DdpSingleRigidBody.cpp +++ b/src/DdpSingleRigidBody.cpp @@ -296,11 +296,11 @@ Eigen::VectorXd DdpSingleRigidBody::planOnce(const std::functiondt(); current_u_list.push_back(DdpProblem::InputDimVector::Zero(ddp_problem_->inputDim(t))); } - ddp_solver_->solve(current_time, initial_param.toState(), current_u_list); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(), current_u_list); } else { - ddp_solver_->solve(current_time, initial_param.toState(), initial_param.u_list); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(), initial_param.u_list); } return ddp_solver_->controlData().u_list[0]; diff --git a/src/DdpZmp.cpp b/src/DdpZmp.cpp index ef361f9..c791966 100644 --- a/src/DdpZmp.cpp +++ b/src/DdpZmp.cpp @@ -157,13 +157,13 @@ DdpZmp::PlannedData DdpZmp::planOnce(const std::function & ref_ if(initial_param.u_list.empty()) { - ddp_solver_->solve(current_time, initial_param.toState(), - std::vector(ddp_solver_->config().horizon_steps, - DdpProblem::InputDimVector::Zero())); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(), + std::vector(ddp_solver_->config().horizon_steps, + DdpProblem::InputDimVector::Zero())); } else { - ddp_solver_->solve(current_time, initial_param.toState(), initial_param.u_list); + ddp_solved_ = ddp_solver_->solve(current_time, initial_param.toState(), initial_param.u_list); } PlannedData planned_data;