drake

Can KinematicTrajectoryOptimization support gurobi solver


currently KinematicTrajectoryOptimization only support snopt or ifopt, is it possiable to support gurobi solver ?

when use gurobi solver, it throws a not support generic constraints exception

EXPECT_EQ(trajopt_.prog().linear_constraints().size(), 0);
VectorXd desired = VectorXd::Ones(num_positions_);
auto binding = trajopt_.AddPathVelocityConstraint(desired, desired, 0.5);
std::cout << "path velocity constraint:\t" << binding.to_string() << std::endl;
EXPECT_THAT(binding.to_string(), HasSubstr("path velocity constraint"));
EXPECT_EQ(trajopt_.prog().linear_constraints().size(), 1);
// r(0) = 0, r(1) = 1.
trajopt_.AddPathPositionConstraint(VectorXd::Zero(num_positions_), VectorXd::Zero(num_positions_), 0);
trajopt_.AddPathPositionConstraint(VectorXd::Ones(num_positions_),VectorXd::Ones(num_positions_), 1);
auto lb = VectorXd::Constant(3, -10);
auto ub = VectorXd::Constant(3, 10); 
trajopt_.AddAccelerationBounds(lb, ub);
trajopt_.AddDurationConstraint(1, 1);
trajopt_.AddDurationCost(50);
GurobiSolver solver;
solver.Solve(trajopt_.prog());


unknown file: Failure
C++ exception with description "GurobiSolver is unable to solve because a GenericConstraint was declared but is not supported." thrown in the test body.

Solution

  • Gurobi only supports convex optimization problems. The error you're seeing is reporting that the optimization you're generating with KinematicTrajectoryOptimization is not convex. (That's expected).

    No, I'm afraid I wouldn't expect you to use Gurobi with KinematicTrajectoryOptimization. GcsTrajectoryOptimization uses a very similar formulation, but goes to length to formulate the problem in a way that's suitable for convex solvers.