mc_rtc  2.16.0
generic_gripper.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_control/api.h>
8 #include <mc_rbdyn/RobotModule.h>
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 
14 namespace mc_rbdyn
15 {
16 struct Robot;
17 } // namespace mc_rbdyn
18 
19 namespace mc_control
20 {
21 
35 {
36 
45  Gripper(const mc_rbdyn::Robot & robot,
46  const std::vector<std::string> & jointNames,
47  const std::string & robot_urdf,
48  bool reverseLimits,
50 
61  Gripper(const mc_rbdyn::Robot & robot,
62  const std::vector<std::string> & jointNames,
63  const std::vector<mc_rbdyn::Mimic> & mimics,
64  bool reverseLimits,
66 
68  void resetDefaults();
69 
72  void saveConfig();
73 
79  void restoreConfig();
80 
82  void configure(const mc_rtc::Configuration & config);
83 
88  void reset(const std::vector<double> & currentQ);
89 
94  void reset(const Gripper & gripper);
95 
104  void run(double timeStep, mc_rbdyn::Robot & robot, mc_rbdyn::Robot & real);
105 
110  void setTargetQ(const std::vector<double> & targetQ);
111 
118  void setTargetQ(const std::string & jointName, double targetQ);
119 
125  double getTargetQ(const std::string & jointName) const;
126 
130  std::vector<double> getTargetQ() const;
131 
140  void setTargetOpening(double targetOpening);
141 
148  void setTargetOpening(const std::string & jointName, double targetOpening);
149 
156  double getTargetOpening(const std::string & jointName) const;
157 
161  std::vector<double> curPosition() const;
162 
166  std::vector<double> curOpening() const;
167 
174  double curOpening(const std::string & jointName) const;
175 
177  inline const std::vector<std::string> & joints() const { return names; }
178 
180  inline const std::vector<std::string> & activeJoints() const { return active_joints; }
181 
182  /* \brief Checks whether a joint is an active gripper joint */
183  inline bool hasActiveJoint(const std::string & jointName) const
184  { return std::find(active_joints.begin(), active_joints.end(), jointName) != active_joints.end(); }
185 
189  inline const std::vector<double> & q() const { return _q; }
190 
197  double opening() const;
198 
200  void percentVMAX(double percent);
202  double percentVMAX() const;
203 
211  void actualCommandDiffTrigger(double d) { config_.actualCommandDiffTrigger = d; }
213  double actualCommandDiffTrigger() const { return config_.actualCommandDiffTrigger; }
214 
217  void overCommandLimitIterN(unsigned int N) { config_.overCommandLimitIterN = std::max(N, 1u); }
220  unsigned int overCommandLimitIterN() const { return config_.overCommandLimitIterN; }
221 
227  void releaseSafetyOffset(double offset) { config_.releaseSafetyOffset = offset; }
230  double releaseSafetyOffset() const { return config_.releaseSafetyOffset; }
231 
242  bool complete() const;
243 
248  inline bool is_metric() const noexcept { return is_metric_; }
249 
251  inline bool reversed() const noexcept { return reversed_; }
252 
253 protected:
258  void setTargetOpening(size_t activeJointId, double targetOpening);
259 
265  void setTargetQ(size_t activeJointId, double targetQ);
266 
268  void setTargetQ_(size_t activeJoints, double targetQ);
270  void setTargetQ_(const std::vector<double> & targetQ);
271 
273  double curPosition(size_t jointId) const;
274 
276  double curOpening(size_t jointId) const;
277 
279  double targetOpening(size_t jointId) const;
280 
282  double getTargetQ(size_t jointId) const;
283 
285  double clampQ(size_t activeJoint, double q);
286 
287 protected:
289  std::vector<std::string> names;
291  std::vector<std::string> active_joints;
293  std::vector<size_t> active_joints_idx;
295  std::vector<int> joints_mbc_idx;
296 
299 
301  std::vector<double> closeP;
303  std::vector<double> openP;
305  std::vector<double> vmax;
306 
308  std::vector<std::pair<size_t, double>> mult;
310  std::vector<double> offset;
312  std::vector<double> _q;
313 
315  std::vector<double> targetQIn;
317  std::vector<double> * targetQ;
318 
320  std::vector<double> reached_threshold_;
321 
323  std::vector<double> actualQ;
324 
325 protected:
333 
335  std::vector<double> percentOpen;
337  std::vector<bool> overCommandLimit;
339  std::vector<unsigned int> overCommandLimitIter;
341  bool reversed_ = false;
342 };
343 
344 using GripperPtr = std::unique_ptr<Gripper>;
345 using GripperRef = std::reference_wrapper<Gripper>;
346 
347 } // namespace mc_control
#define MC_RBDYN_DLLAPI
Definition: api.h:50
Definition: CompletionCriteria.h:11
std::reference_wrapper< Gripper > GripperRef
Definition: generic_gripper.h:345
std::unique_ptr< Gripper > GripperPtr
Definition: generic_gripper.h:344
Definition: generic_gripper.h:15
double real
A robot's gripper reprensentation.
Definition: generic_gripper.h:35
double curPosition(size_t jointId) const
Current position of an active joint.
std::vector< size_t > active_joints_idx
Definition: generic_gripper.h:293
void saveConfig()
Saves the current gripper configuration parameters contained in Config.
void setTargetOpening(double targetOpening)
Set the target opening of all gripper joints simultaneously.
void setTargetQ(size_t activeJointId, double targetQ)
Set the target configuration of the specified active joint.
void setTargetQ(const std::string &jointName, double targetQ)
Set the target configuration of the specified active joint.
void setTargetQ(const std::vector< double > &targetQ)
Set the target configuration of the active joints involved in the gripper.
void setTargetOpening(size_t activeJointId, double targetOpening)
Set the target opening of a single gripper joint by index.
bool complete() const
Check if the gripper motion stopped moving.
void configure(const mc_rtc::Configuration &config)
Applies a new gripper configuration (safeties and targets)
std::vector< std::string > active_joints
Definition: generic_gripper.h:291
double percentVMAX() const
std::vector< std::string > names
Definition: generic_gripper.h:289
std::vector< int > joints_mbc_idx
Definition: generic_gripper.h:295
std::vector< double > vmax
Definition: generic_gripper.h:305
std::vector< double > curOpening() const
Get current opening percentage.
double getTargetOpening(const std::string &jointName) const
Get the target opening of a single gripper joint.
std::vector< double > offset
Definition: generic_gripper.h:310
double getTargetQ(size_t jointId) const
Target opening angle of an active joint.
void setTargetQ_(const std::vector< double > &targetQ)
Fast version of setTargetQ(std::vector<double>)
double targetOpening(size_t jointId) const
Target opening percentage of an active joint.
Gripper(const mc_rbdyn::Robot &robot, const std::vector< std::string > &jointNames, const std::vector< mc_rbdyn::Mimic > &mimics, bool reverseLimits, const mc_rbdyn::RobotModule::Gripper::Safety &safety)
Constructor.
double curOpening(size_t jointId) const
Current opening percentage of an active joint.
bool hasActiveJoint(const std::string &jointName) const
Definition: generic_gripper.h:183
void resetDefaults()
Resets the gripper parameters to their default value (percentVMax, actualCommandDiffTrigger)
std::vector< double > closeP
Definition: generic_gripper.h:301
std::vector< double > targetQIn
Definition: generic_gripper.h:315
double curOpening(const std::string &jointName) const
Get the current opening of a single gripper joint.
const std::vector< std::string > & activeJoints() const
Returns all active joints involved in the gripper.
Definition: generic_gripper.h:180
double getTargetQ(const std::string &jointName) const
Config savedConfig_
Definition: generic_gripper.h:330
unsigned int overCommandLimitIterN() const
Definition: generic_gripper.h:220
std::vector< std::pair< size_t, double > > mult
Definition: generic_gripper.h:308
double opening() const
Get the current opening percentage.
double clampQ(size_t activeJoint, double q)
Clamp an active joint value within its joint limits.
double actualCommandDiffTrigger() const
Definition: generic_gripper.h:213
bool is_metric() const noexcept
Returns true if a gripper is metric, i.e. all active joints are prismatic rather than revolute.
Definition: generic_gripper.h:248
void overCommandLimitIterN(unsigned int N)
Definition: generic_gripper.h:217
std::vector< double > percentOpen
Definition: generic_gripper.h:335
Gripper(const mc_rbdyn::Robot &robot, const std::vector< std::string > &jointNames, const std::string &robot_urdf, bool reverseLimits, const mc_rbdyn::RobotModule::Gripper::Safety &safety)
Constructor.
void actualCommandDiffTrigger(double d)
Definition: generic_gripper.h:211
const std::vector< double > & q() const
Return all gripper joints configuration.
Definition: generic_gripper.h:189
std::vector< double > * targetQ
Definition: generic_gripper.h:317
void run(double timeStep, mc_rbdyn::Robot &robot, mc_rbdyn::Robot &real)
Run one iteration of control.
bool reversed() const noexcept
When true the gripper is considered "open" when the joints' values are minimal.
Definition: generic_gripper.h:251
std::vector< double > _q
Definition: generic_gripper.h:312
std::vector< double > openP
Definition: generic_gripper.h:303
const std::vector< std::string > & joints() const
Returns all joints involved in the gripper.
Definition: generic_gripper.h:177
void percentVMAX(double percent)
Config config_
Definition: generic_gripper.h:328
void setTargetOpening(const std::string &jointName, double targetOpening)
Set the target opening of a single gripper joint.
std::vector< unsigned int > overCommandLimitIter
Definition: generic_gripper.h:339
std::vector< double > actualQ
Definition: generic_gripper.h:323
std::vector< double > curPosition() const
Get current configuration.
void setTargetQ_(size_t activeJoints, double targetQ)
Fast version of setTargetQ(size_t, double) without clamping.
void releaseSafetyOffset(double offset)
Definition: generic_gripper.h:227
std::vector< double > reached_threshold_
Definition: generic_gripper.h:320
void reset(const std::vector< double > &currentQ)
Reset the gripper state to the current actual state of the gripper.
void restoreConfig()
Restores the gripper configuration parameters from their saved value.
std::vector< double > getTargetQ() const
Config defaultConfig_
Definition: generic_gripper.h:332
bool is_metric_
Definition: generic_gripper.h:298
void reset(const Gripper &gripper)
Reset from another gripper.
double releaseSafetyOffset() const
Definition: generic_gripper.h:230
std::vector< bool > overCommandLimit
Definition: generic_gripper.h:337
Definition: RobotModule.h:112
Definition: Robot.h:63
Simplify access to values hold within a JSON file.
Definition: Configuration.h:166