11 #include <tvm/ControlProblem.h>
12 #include <tvm/LinearizedControlProblem.h>
13 #include <tvm/scheme/WeightedLeastSquares.h>
33 const sva::ForceVecd desiredContactForce(const
mc_rbdyn::
Contact &
id) const final;
35 double solveTime() final;
37 double solveAndBuildTime() final;
40 inline tvm::LinearizedControlProblem & problem() noexcept {
return problem_; }
43 inline const tvm::LinearizedControlProblem &
problem() const noexcept {
return problem_; }
71 tvm::LinearizedControlProblem problem_;
73 tvm::scheme::WeightedLeastSquares solver_;
78 tvm::TaskWithRequirementsPtr contactConstraint_;
80 tvm::VariableVector f1_;
82 std::vector<tvm::TaskWithRequirementsPtr> f1Constraints_;
84 tvm::VariableVector f2_;
86 std::vector<tvm::TaskWithRequirementsPtr> f2Constraints_;
89 std::vector<ContactData> contactsData_;
98 bool runJointsFeedback(
bool wVelocity);
120 bool runClosedLoop(
bool integrateControlState);
126 std::vector<std::vector<double>> prev_encoders_{};
127 std::vector<std::vector<double>> encoders_alpha_{};
128 std::vector<std::vector<std::vector<double>>> control_q_{};
129 std::vector<std::vector<std::vector<double>>> control_alpha_{};
132 std::unordered_map<std::string, DynamicsConstraint *> dynamics_;
134 bool run_impl(FeedbackType fType = FeedbackType::None)
final;
143 using ContactIterator = std::vector<mc_rbdyn::Contact>::iterator;
144 ContactIterator removeContact(
size_t idx);
145 std::tuple<size_t, bool> addVirtualContactImpl(
const mc_rbdyn::Contact & contact);
146 void addContactToDynamics(
const std::string & robot,
148 const std::vector<sva::PTransformd> & points,
149 tvm::VariableVector & forces,
150 std::vector<tvm::TaskWithRequirementsPtr> & constraints,
151 const Eigen::MatrixXd & frictionCone,
#define MC_SOLVER_DLLAPI
Definition: api.h:50
mc_control::Contact Contact
Definition: Controller.h:22
Definition: generic_gripper.h:15
std::shared_ptr< Robots > RobotsPtr
Definition: fwd.h:17
std::chrono::duration< double, std::milli > duration_ms
Definition: clock.h:13
TVMQPSolver & tvm_solver(QPSolver &solver) noexcept
Definition: TVMQPSolver.h:161
Definition: RobotFrame.h:22
This class is a basis to wrap Constraint functions from Tasks. The aim of such wrappers should be two...
Definition: ConstraintSet.h:21
Definition: DynamicsConstraint.h:21
Definition: QPSolver.h:102
Definition: QPSolver.h:86
Definition: TVMQPSolver.h:24
TVMQPSolver(double timeStep)
const tvm::LinearizedControlProblem & problem() const noexcept
Definition: TVMQPSolver.h:43
~TVMQPSolver() final=default
static const TVMQPSolver & from_solver(const QPSolver &solver) noexcept
Definition: TVMQPSolver.h:63
static TVMQPSolver & from_solver(QPSolver &solver) noexcept
Definition: TVMQPSolver.h:51
TVMQPSolver(mc_rbdyn::RobotsPtr robots, double timeStep)