3 #include "drake/solvers/branch_and_bound.h" 
    5 #include "drake/solvers/osqp_solver.h" 
    6 #include "drake/solvers/gurobi_solver.h" 
   10     drake::solvers::MathematicalProgram prog;
 
   11     std::cout << 
"is gurobi solver available?: " << drake::solvers::GurobiSolver::is_available() << 
"is it enabled?: " << drake::solvers::GurobiSolver::is_enabled() << 
"is the license valid? " << drake::solvers::GurobiSolver::AcquireLicense() << std::endl;
 
   12     ROS_INFO(
"adding decision variables");
 
   14     bool enforce_goal_hard = 
true;
 
   15     ROS_INFO(
"setting initial and goal position");
 
   18     ROS_INFO(
"setting theta limits");
 
   21     ROS_INFO(
"setting geometry limits");
 
   24     ROS_INFO(
"setting relative position limits");
 
   27     ROS_INFO(
"one stone per foot");
 
   30     ROS_INFO(
"foot in stepping stone");
 
   33     ROS_INFO(
"minimize step length");
 
   35     ROS_INFO(
"minimize remaining length");
 
   37     if (!enforce_goal_hard)
 
   47         ROS_INFO(
"Using Gurobi solver");
 
   48         drake::solvers::GurobiSolver solver;
 
   50         drake::solvers::MathematicalProgramResult result = solver.Solve(prog);
 
   52         decision_variables_opt.
position = result.GetSolution(decision_variables.
position);
 
   54         decision_variables_opt.
theta = result.GetSolution(decision_variables.
theta);
 
   58         decision_variables_opt.
bin_sin = result.GetSolution(decision_variables.
bin_sin);
 
   60         decision_variables_opt.
bin_cos = result.GetSolution(decision_variables.
bin_cos);
 
   62         decision_variables_opt.
lin_sin = result.GetSolution(decision_variables.
lin_sin);
 
   64         decision_variables_opt.
lin_cos = result.GetSolution(decision_variables.
lin_cos);
 
   66         decision_variables_opt.
stone = result.GetSolution(decision_variables.
stone);
 
   68         decision_variables_opt.
cost = result.get_optimal_cost();
 
   70         if (!result.is_success())
 
   72             ROS_ERROR(
"Infeasible optimization problem.");
 
   73             decision_variables_opt.
success = 
false;
 
   77             decision_variables_opt.
success = 
true;
 
   81         ROS_INFO(
"Using naive branch-and-bound solver");
 
   82         drake::solvers::MixedIntegerBranchAndBound solver(prog, drake::solvers::OsqpSolver::id());
 
   92         drake::solvers::SolutionResult result = solver.Solve();
 
   93         ROS_INFO(
"done solving");
 
   95         decision_variables_opt.
position = solver.GetSolution(decision_variables.
position);
 
   97         decision_variables_opt.
theta = solver.GetSolution(decision_variables.
theta);
 
  101         decision_variables_opt.
bin_sin = solver.GetSolution(decision_variables.
bin_sin);
 
  103         decision_variables_opt.
bin_cos = solver.GetSolution(decision_variables.
bin_cos);
 
  105         decision_variables_opt.
lin_sin = solver.GetSolution(decision_variables.
lin_sin);
 
  107         decision_variables_opt.
lin_cos = solver.GetSolution(decision_variables.
lin_cos);
 
  109         decision_variables_opt.
stone = solver.GetSolution(decision_variables.
stone);
 
  111         decision_variables_opt.
cost = solver.GetOptimalCost();
 
  113         if (result != drake::solvers::kSolutionFound)
 
  115             ROS_ERROR(
"Infeasible optimization problem.");
 
  116             decision_variables_opt.
success = 
false;
 
  120             decision_variables_opt.
success = 
true;
 
void foot_in_stepping_stone(drake::solvers::MathematicalProgram &prog, Terrain &terrain, int n_steps, DecVars &decision_variables)
void relative_position_limits(drake::solvers::MathematicalProgram &prog, int n_steps, double step_span, DecVars &decision_variables)
void set_initial_and_goal_position(drake::solvers::MathematicalProgram &prog, Terrain &terrain, DecVars &decision_variables)
DecVars add_decision_variables(drake::solvers::MathematicalProgram &prog, Terrain &terrain, int n_steps)
void minimize_step_length(drake::solvers::MathematicalProgram &prog, int n_steps, DecVars &decision_variables)
void step_sequence(drake::solvers::MathematicalProgram &prog, int n_steps, double step_span, DecVars &decision_variables)
void one_stone_per_foot(drake::solvers::MathematicalProgram &prog, int n_steps, DecVars &decision_variables)
void theta_limits(drake::solvers::MathematicalProgram &prog, int n_steps, int n_legs, DecVars &decision_variables)
DecVars_res get_decvars_res(DecVars_res_raw &decision_variables_raw, int n_steps, int n_legs, Leg step_sequence[])
void geometry_limits(drake::solvers::MathematicalProgram &prog, int n_steps, int n_legs, double length_legs, Leg step_sequence[], Terrain &terrain, double bbox_len, DecVars &decision_variables)
void minimize_remaining_length(drake::solvers::MathematicalProgram &prog, Terrain &terrain, int n_steps, int n_legs, DecVars &decision_variables)
Eigen::MatrixXd sequence_offset
MatrixXDecisionVariable position
MatrixXDecisionVariable bin_cos
MatrixXDecisionVariable stone
MatrixXDecisionVariable bin_sin
MatrixXDecisionVariable lin_sin
MatrixXDecisionVariable theta
MatrixXDecisionVariable lin_cos