| /********************************************************************************************************************** |
| This file is part of the Control Toolbox (https://adrlab.bitbucket.io/ct), copyright by ETH Zurich, Google Inc. |
| Authors: Michael Neunert, Markus Giftthaler, Markus Stäuble, Diego Pardo, Farbod Farshidian |
| Licensed under Apache2 license (see LICENSE file in main directory) |
| **********************************************************************************************************************/ |
| |
| /*! |
| * This Example displays some constraint toolbox outputs, giving the user a feeling for |
| * sparsity patterns, etc. |
| */ |
| |
| #include <ct/optcon/optcon.h> |
| |
| using namespace ct::core; |
| using namespace ct::optcon; |
| |
| // some random state and control dimensions |
| const size_t state_dim = 10; |
| const size_t control_dim = 5; |
| |
| |
| void controlInputBoxConstraintExample() |
| { |
| // create constraint container |
| std::shared_ptr<ConstraintContainerAnalytical<state_dim, control_dim>> constraints( |
| new ct::optcon::ConstraintContainerAnalytical<state_dim, control_dim>()); |
| |
| // desired boundaries |
| ControlVector<control_dim> u_lb = -ControlVector<control_dim>::Ones(); |
| ControlVector<control_dim> u_ub = ControlVector<control_dim>::Ones(); |
| |
| // constraint term |
| std::shared_ptr<ControlInputConstraint<state_dim, control_dim>> controlConstraint( |
| new ControlInputConstraint<state_dim, control_dim>(u_lb, u_ub)); |
| controlConstraint->setName("ControlInputConstraint"); |
| |
| // add and initialize constraint term |
| constraints->addIntermediateConstraint(controlConstraint, true); |
| constraints->initialize(); |
| |
| std::cout << "=============================================" << std::endl; |
| std::cout << "Printing example for control input constraint:" << std::endl; |
| std::cout << "=============================================" << std::endl; |
| constraints->printout(); |
| } |
| |
| |
| void terminalConstraintExample() |
| { |
| // create constraint container |
| std::shared_ptr<ConstraintContainerAnalytical<state_dim, control_dim>> constraints( |
| new ct::optcon::ConstraintContainerAnalytical<state_dim, control_dim>()); |
| |
| // desired terminal state |
| StateVector<state_dim> x_final = StateVector<state_dim>::Random(); |
| |
| // terminal constrain term |
| std::shared_ptr<TerminalConstraint<state_dim, control_dim>> terminalConstraint( |
| new TerminalConstraint<state_dim, control_dim>(x_final)); |
| terminalConstraint->setName("TerminalConstraint"); |
| |
| // add and initialize terminal constraint term |
| constraints->addTerminalConstraint(terminalConstraint, true); |
| constraints->initialize(); |
| |
| std::cout << "==============================================" << std::endl; |
| std::cout << "Printing example for terminal state constraint:" << std::endl; |
| std::cout << "==============================================" << std::endl; |
| constraints->printout(); |
| } |
| |
| |
| void boxConstraintsExample() |
| { |
| // create constraint container |
| std::shared_ptr<ConstraintContainerAnalytical<state_dim, control_dim>> constraints( |
| new ct::optcon::ConstraintContainerAnalytical<state_dim, control_dim>()); |
| |
| // desired terminal state |
| ControlVector<control_dim> u_lb = -1.11 * ControlVector<control_dim>::Ones(); |
| ControlVector<control_dim> u_ub = 1.11 * ControlVector<control_dim>::Ones(); |
| StateVector<state_dim> x_lb = -3.33 * StateVector<state_dim>::Ones(); |
| StateVector<state_dim> x_ub = 3.33 * StateVector<state_dim>::Ones(); |
| |
| // constrain terms |
| std::shared_ptr<ControlInputConstraint<state_dim, control_dim>> controlConstraint( |
| new ControlInputConstraint<state_dim, control_dim>(u_lb, u_ub)); |
| controlConstraint->setName("ControlInputConstraint"); |
| std::shared_ptr<StateConstraint<state_dim, control_dim>> stateConstraint( |
| new StateConstraint<state_dim, control_dim>(x_lb, x_ub)); |
| stateConstraint->setName("StateConstraint"); |
| |
| // add and initialize constraint terms |
| constraints->addIntermediateConstraint(controlConstraint, true); |
| constraints->addIntermediateConstraint(stateConstraint, true); |
| constraints->initialize(); |
| |
| std::cout << "=============================================" << std::endl; |
| std::cout << "Printing example for combined box constraint:" << std::endl; |
| std::cout << "=============================================" << std::endl; |
| constraints->printout(); |
| } |
| |
| |
| void sparseBoxConstraintsExample() |
| { |
| // create constraint container |
| std::shared_ptr<ConstraintContainerAnalytical<state_dim, control_dim>> constraints( |
| new ct::optcon::ConstraintContainerAnalytical<state_dim, control_dim>()); |
| |
| // box constraint boundaries with sparsities |
| Eigen::VectorXi sp_control(control_dim); |
| sp_control << 0, 1, 0, 0, 1; |
| Eigen::VectorXd u_lb(2); |
| Eigen::VectorXd u_ub(2); |
| u_lb.setConstant(-1.11); |
| u_ub = -u_lb; |
| |
| Eigen::VectorXi sp_state(state_dim); |
| sp_state << 0, 1, 0, 0, 1, 0, 1, 1, 0, 0; |
| Eigen::VectorXd x_lb(4); |
| Eigen::VectorXd x_ub(4); |
| x_lb.setConstant(-3.33); |
| x_ub = -x_lb; |
| |
| // constrain terms |
| std::shared_ptr<ControlInputConstraint<state_dim, control_dim>> controlConstraint( |
| new ControlInputConstraint<state_dim, control_dim>(u_lb, u_ub, sp_control)); |
| controlConstraint->setName("ControlInputConstraint"); |
| |
| std::shared_ptr<StateConstraint<state_dim, control_dim>> stateConstraint( |
| new StateConstraint<state_dim, control_dim>(x_lb, x_ub, sp_state)); |
| stateConstraint->setName("StateConstraint"); |
| |
| // add and initialize constraint terms |
| constraints->addIntermediateConstraint(controlConstraint, true); |
| constraints->addIntermediateConstraint(stateConstraint, true); |
| constraints->initialize(); |
| |
| std::cout << "=============================================" << std::endl; |
| std::cout << "Printing example for sparse box constraint:" << std::endl; |
| std::cout << "=============================================" << std::endl; |
| constraints->printout(); |
| } |
| |
| |
| int main(int argc, char **argv) |
| { |
| controlInputBoxConstraintExample(); |
| terminalConstraintExample(); |
| boxConstraintsExample(); |
| sparseBoxConstraintsExample(); |
| return 1; |
| } |