AddRemoveContactTask.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2022 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_rbdyn/Robots.h>
9 #include <mc_tasks/MetaTask.h>
10 #include <mc_tasks/api.h>
11 
12 #include <Tasks/QPTasks.h>
13 
14 namespace mc_rbdyn
15 {
16 struct Contact;
17 }
18 
19 namespace mc_tasks
20 {
21 
33 {
34 public:
59  std::shared_ptr<mc_solver::BoundedSpeedConstr> constSpeedConstr,
60  const mc_rbdyn::Contact & contact,
61  double direction,
62  double speed = 0.01,
63  double stiffness = 2,
64  double weight = 1000,
65  Eigen::Vector3d * userT_0_s = nullptr);
66 
87  const mc_rbdyn::Contact & contact,
88  double direction,
89  double speed = 0.01,
90  double stiffness = 2,
91  double weight = 1000,
92  Eigen::Vector3d * userT_0_s = nullptr);
93 
99  void direction(double direction);
100 
102  double speed() { return speed_; }
104  void speed(double s);
105 
107  double stiffness() { return stiffness_; }
109  double weight() { return weight_; }
110 
114  Eigen::Vector3d velError();
115 
116  void dimWeight(const Eigen::VectorXd & dimW) override;
117 
118  Eigen::VectorXd dimWeight() const override;
119 
120  Eigen::VectorXd eval() const override;
121 
122  Eigen::VectorXd speed() const override;
123 
124 public:
126  unsigned int robotIndex;
127  unsigned int envIndex;
128  std::shared_ptr<mc_solver::BoundedSpeedConstr> constSpeedConstr;
129 
131  unsigned int robotBodyIndex;
132 
133  sva::PTransformd targetTf;
134 
135  std::string bodyId;
136  Eigen::Matrix6d dofMat;
137  Eigen::Vector6d speedMat;
138  Eigen::Vector3d normal;
139 
140  double stiffness_;
141  double weight_;
142  double speed_;
143  double direction_;
144  Eigen::Vector3d targetSpeed;
147 
148 private:
149  /* Hide these virtual functions */
150  void selectActiveJoints(mc_solver::QPSolver &,
151  const std::vector<std::string> &,
152  const std::map<std::string, std::vector<std::array<int, 2>>> & = {}) override
153  {
154  }
155 
156  void selectUnactiveJoints(mc_solver::QPSolver &,
157  const std::vector<std::string> &,
158  const std::map<std::string, std::vector<std::array<int, 2>>> & = {}) override
159  {
160  }
161 
162  void resetJointsSelector(mc_solver::QPSolver &) override {}
163 
164  void reset() override {}
165 
166 private:
167  void addToSolver(mc_solver::QPSolver & solver) override;
168 
169  void removeFromSolver(mc_solver::QPSolver & solver) override;
170 
171  void update(mc_solver::QPSolver &) override;
172 
173  bool manageConstraint = false;
174 };
175 
183 {
184 public:
187  std::shared_ptr<mc_solver::BoundedSpeedConstr> constSpeedConstr,
188  mc_rbdyn::Contact & contact,
189  double speed = 0.01,
190  double stiffness = 2,
191  double weight = 1000,
192  Eigen::Vector3d * userT_0_s = nullptr);
193 
196  mc_rbdyn::Contact & contact,
197  double speed = 0.01,
198  double stiffness = 2,
199  double weight = 1000,
200  Eigen::Vector3d * userT_0_s = nullptr);
201 };
202 
210 {
211 public:
214  std::shared_ptr<mc_solver::BoundedSpeedConstr> constSpeedConstr,
215  mc_rbdyn::Contact & contact,
216  double speed = 0.01,
217  double stiffness = 2,
218  double weight = 1000,
219  Eigen::Vector3d * userT_0_s = nullptr);
220 
223  mc_rbdyn::Contact & contact,
224  double speed = 0.01,
225  double stiffness = 2,
226  double weight = 1000,
227  Eigen::Vector3d * userT_0_s = nullptr);
228 };
229 
230 } // namespace mc_tasks
mc_tasks::AddRemoveContactTask::stiffness_
double stiffness_
Definition: AddRemoveContactTask.h:140
mc_rbdyn::Robots
Definition: Robots.h:15
BoundedSpeedConstr.h
mc_tasks::AddRemoveContactTask::robotBodyIndex
unsigned int robotBodyIndex
Definition: AddRemoveContactTask.h:131
mc_tasks::AddRemoveContactTask::robots
const mc_rbdyn::Robots & robots
Definition: AddRemoveContactTask.h:125
mc_tasks::MetaTask
Represents a generic task.
Definition: MetaTask.h:39
api.h
mc_rbdyn::SurfacePtr
std::shared_ptr< Surface > SurfacePtr
Definition: Surface.h:72
MC_TASKS_DLLAPI
#define MC_TASKS_DLLAPI
Definition: api.h:50
mc_tasks::AddContactTask
Add a contact.
Definition: AddRemoveContactTask.h:182
mc_solver::QPSolver
Definition: QPSolver.h:85
mc_tasks::AddRemoveContactTask::normal
Eigen::Vector3d normal
Definition: AddRemoveContactTask.h:138
mc_tasks::AddRemoveContactTask::dofMat
Eigen::Matrix6d dofMat
Definition: AddRemoveContactTask.h:136
mc_tasks::AddRemoveContactTask::envIndex
unsigned int envIndex
Definition: AddRemoveContactTask.h:127
mc_tasks::AddRemoveContactTask
Add or remove a contact.
Definition: AddRemoveContactTask.h:32
mc_tasks::AddRemoveContactTask::impl_
mc_rtc::void_ptr impl_
Definition: AddRemoveContactTask.h:145
mc_tasks::AddRemoveContactTask::constSpeedConstr
std::shared_ptr< mc_solver::BoundedSpeedConstr > constSpeedConstr
Definition: AddRemoveContactTask.h:128
mc_tasks::AddRemoveContactTask::speedMat
Eigen::Vector6d speedMat
Definition: AddRemoveContactTask.h:137
mc_tasks::AddRemoveContactTask::stiffness
double stiffness()
Get the task stiffness.
Definition: AddRemoveContactTask.h:107
mc_tasks::AddRemoveContactTask::speed
double speed()
Get the desired dislacement speed.
Definition: AddRemoveContactTask.h:102
mc_rtc::void_ptr
std::unique_ptr< void, void(*)(void *)> void_ptr
Definition: void_ptr.h:14
Robots.h
mc_tasks::AddRemoveContactTask::speed_
double speed_
Definition: AddRemoveContactTask.h:142
mc_tasks::AddRemoveContactTask::targetSpeed
Eigen::Vector3d targetSpeed
Definition: AddRemoveContactTask.h:144
mc_tasks::AddRemoveContactTask::weight
double weight()
Get the task weight.
Definition: AddRemoveContactTask.h:109
mc_tasks::RemoveContactTask
Remove a contact.
Definition: AddRemoveContactTask.h:209
mc_tasks::AddRemoveContactTask::robotIndex
unsigned int robotIndex
Definition: AddRemoveContactTask.h:126
mc_tasks::AddRemoveContactTask::targetVelWeight
double targetVelWeight
Definition: AddRemoveContactTask.h:146
mc_tasks::AddRemoveContactTask::direction_
double direction_
Definition: AddRemoveContactTask.h:143
mc_tasks::AddRemoveContactTask::weight_
double weight_
Definition: AddRemoveContactTask.h:141
mc_rbdyn::Contact
Definition: Contact.h:48
mc_control::fsm::Contact
mc_control::Contact Contact
Definition: Controller.h:22
mc_tasks::AddRemoveContactTask::bodyId
std::string bodyId
Definition: AddRemoveContactTask.h:135
MetaTask.h
mc_rbdyn
Definition: generic_gripper.h:14
mc_tasks::AddRemoveContactTask::targetTf
sva::PTransformd targetTf
Definition: AddRemoveContactTask.h:133
mc_tasks
Definition: StabilizerStandingState.h:11
mc_tasks::AddRemoveContactTask::robotSurf
mc_rbdyn::SurfacePtr robotSurf
Definition: AddRemoveContactTask.h:130