QPSolverData.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 // includes
8 // SpaceVecAlg
9 #include <SpaceVecAlg/SpaceVecAlg>
10 
11 // Tasks
12 #include "QPContacts.h"
13 
14 // forward declaration
15 namespace rbd
16 {
17 class MultiBody;
18 struct MultiBodyConfig;
19 } // namespace rbd
20 
21 namespace tasks
22 {
23 
24 namespace qp
25 {
26 
27 class TASKS_DLLAPI SolverData
28 {
29 public:
30  friend class QPSolver;
31 
32  SolverData();
33 
34  int nrVars() const { return nrVars_; }
35 
36  int totalAlphaD() const { return totalAlphaD_; }
37 
38  int totalLambda() const { return totalLambda_; }
39 
40  int alphaD(int robotIndex) const { return alphaD_[robotIndex]; }
41 
42  int lambda(int contactIndex) const { return lambda_[contactIndex]; }
43 
44  int alphaDBegin() const { return 0; }
45 
46  int alphaDBegin(int robotIndex) const { return alphaDBegin_[robotIndex]; }
47 
48  int lambdaBegin() const { return totalAlphaD_; }
49 
50  int lambdaBegin(int contactIndex) const { return lambdaBegin_[contactIndex]; }
51 
52  int nrUniLambda() const { return nrUniLambda_; }
53 
54  int nrBiLambda() const { return nrBiLambda_; }
55 
56  int unilateralBegin() const { return lambdaBegin(); }
57 
58  int bilateralBegin() const { return unilateralBegin() + nrUniLambda_; }
59 
60  int nrContacts() const { return static_cast<int>(uniCont_.size() + biCont_.size()); }
61 
62  const std::vector<UnilateralContact> & unilateralContacts() const { return uniCont_; }
63 
64  const std::vector<BilateralContact> & bilateralContacts() const { return biCont_; }
65 
66  const std::vector<BilateralContact> & allContacts() const { return allCont_; }
67 
68  void computeNormalAccB(const std::vector<rbd::MultiBody> & mbs, const std::vector<rbd::MultiBodyConfig> & mbcs);
69 
70  const std::vector<std::vector<sva::MotionVecd>> & normalAccB() const { return normalAccB_; }
71 
72  const std::vector<sva::MotionVecd> & normalAccB(int robotIndex) const { return normalAccB_[robotIndex]; }
73 
74 private:
75  std::vector<int> alphaD_; //< each robot alphaD vector size
76  std::vector<int> alphaDBegin_; //< each robot alphaD vector begin in x
77  std::vector<int> lambda_; //< each contact lambda
78  std::vector<int> lambdaBegin_; //< each contact lambda vector begin in x
79  int totalAlphaD_, totalLambda_;
80  int nrUniLambda_, nrBiLambda_;
81  int nrVars_; //< total number of var
82 
83  std::vector<UnilateralContact> uniCont_;
84  std::vector<BilateralContact> biCont_;
85  std::vector<BilateralContact> allCont_;
86 
87  std::vector<int> mobileRobotIndex_; //< robot index with dof > 0
89  std::vector<std::vector<sva::MotionVecd>> normalAccB_;
90 };
91 
92 } // namespace qp
93 
94 } // namespace tasks
tasks::qp::SolverData::totalLambda
int totalLambda() const
Definition: QPSolverData.h:38
tasks::qp::QPSolver
Definition: QPSolver.h:45
tasks::qp::SolverData
Definition: QPSolverData.h:27
tasks::qp::SolverData::bilateralBegin
int bilateralBegin() const
Definition: QPSolverData.h:58
QPContacts.h
tasks::qp::SolverData::unilateralBegin
int unilateralBegin() const
Definition: QPSolverData.h:56
tasks::qp::SolverData::normalAccB
const std::vector< std::vector< sva::MotionVecd > > & normalAccB() const
Definition: QPSolverData.h:70
tasks::qp::SolverData::totalAlphaD
int totalAlphaD() const
Definition: QPSolverData.h:36
tasks::qp::SolverData::lambdaBegin
int lambdaBegin() const
Definition: QPSolverData.h:48
tasks::qp::SolverData::bilateralContacts
const std::vector< BilateralContact > & bilateralContacts() const
Definition: QPSolverData.h:64
tasks::qp::SolverData::lambdaBegin
int lambdaBegin(int contactIndex) const
Definition: QPSolverData.h:50
tasks::qp::SolverData::nrUniLambda
int nrUniLambda() const
Definition: QPSolverData.h:52
tasks::qp::SolverData::nrBiLambda
int nrBiLambda() const
Definition: QPSolverData.h:54
tasks::qp::SolverData::nrVars
int nrVars() const
Definition: QPSolverData.h:34
tasks::qp::SolverData::normalAccB
const std::vector< sva::MotionVecd > & normalAccB(int robotIndex) const
Definition: QPSolverData.h:72
rbd
Definition: GenQPSolver.h:20
tasks::qp::SolverData::nrContacts
int nrContacts() const
Definition: QPSolverData.h:60
tasks::qp::SolverData::allContacts
const std::vector< BilateralContact > & allContacts() const
Definition: QPSolverData.h:66
tasks::qp::SolverData::unilateralContacts
const std::vector< UnilateralContact > & unilateralContacts() const
Definition: QPSolverData.h:62
tasks::qp::SolverData::lambda
int lambda(int contactIndex) const
Definition: QPSolverData.h:42
tasks::qp::SolverData::alphaDBegin
int alphaDBegin(int robotIndex) const
Definition: QPSolverData.h:46
tasks::qp::SolverData::alphaD
int alphaD(int robotIndex) const
Definition: QPSolverData.h:40
tasks::qp::SolverData::alphaDBegin
int alphaDBegin() const
Definition: QPSolverData.h:44
tasks
Definition: GenQPUtils.h:18