StabilizerConfiguration.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_rbdyn/Gains.h>
8 #include <mc_rbdyn/api.h>
10 
11 #include <mc_filter/utils/clamp.h>
12 
13 #include <mc_rtc/Configuration.h>
14 #include <mc_rtc/logging.h>
15 
16 namespace mc_rbdyn
17 {
18 namespace lipm_stabilizer
19 {
20 
23 {
24  FDQPWeights() : ankleTorqueSqrt(std::sqrt(100)), netWrenchSqrt(std::sqrt(10000)), pressureSqrt(std::sqrt(1)) {}
25  /* All weights must be strictly positive */
26  FDQPWeights(double netWrench, double ankleTorque, double pressure)
27  : ankleTorqueSqrt(std::sqrt(ankleTorque)), netWrenchSqrt(std::sqrt(netWrench)), pressureSqrt(std::sqrt(pressure))
28  {
29  }
31  double netWrenchSqrt;
32  double pressureSqrt;
33 
34  void load(const mc_rtc::Configuration & config)
35  {
36  if(config.has("ankle_torque")) { ankleTorqueSqrt = std::sqrt(static_cast<double>(config("ankle_torque"))); }
37  if(config.has("net_wrench")) { netWrenchSqrt = std::sqrt(static_cast<double>(config("net_wrench"))); }
38  if(config.has("pressure")) { pressureSqrt = std::sqrt(static_cast<double>(config("pressure"))); }
39  }
40 
42  {
43  mc_rtc::Configuration config;
44  config.add("ankle_torque", std::pow(ankleTorqueSqrt, 2));
45  config.add("net_wrench", std::pow(netWrenchSqrt, 2));
46  config.add("pressure", std::pow(pressureSqrt, 2));
47  return config;
48  }
49 };
50 
53 {
54 
56  {
57  cop_ = 100;
58  copRegulation_ = 1e-8;
59  copDiff_ = 1e-8;
60  }
61 
62  FDMPCWeights(double cop, double copReg, double copDiff)
63  {
64  cop_ = cop;
65  copRegulation_ = copReg;
66  copDiff_ = copDiff;
67  }
68  double cop_;
70  double copDiff_;
71 
72  void load(const mc_rtc::Configuration & config)
73  {
74  if(config.has("cop")) { cop_ = static_cast<double>(config("cop")); }
75  if(config.has("cop_regulation")) { copRegulation_ = static_cast<double>(config("cop_regulation")); }
76  if(config.has("cop_diff")) { copDiff_ = static_cast<double>(config("cop_diff")); }
77  }
78 
80  {
81  mc_rtc::Configuration config;
82  config.add("cop", cop_);
83  config.add("cop_regulation", copRegulation_);
84  config.add("cop_diff", copDiff_);
85  return config;
86  }
87 };
88 
99 {
100  double MAX_AVERAGE_DCM_ERROR = 0.05;
101  double MAX_COP_ADMITTANCE = 0.1;
102  double MAX_DCM_D_GAIN = 2.;
103  double MAX_DCM_I_GAIN = 100.;
104  double MAX_DCM_P_GAIN = 20.;
105  double MAX_COMD_GAIN = 10.;
106  double MAX_ZMPD_GAIN = 10.;
107  double MAX_DF_ADMITTANCE = 5e-4;
108  double MAX_DF_DAMPING = 10.;
109  double MAX_FDC_RX_VEL = 0.2;
110  double MAX_FDC_RY_VEL = 0.2;
111  double MAX_FDC_RZ_VEL = 0.2;
112  double MIN_DS_PRESSURE = 15.;
116 
117  void load(const mc_rtc::Configuration & config)
118  {
119  config("MAX_AVERAGE_DCM_ERROR", MAX_AVERAGE_DCM_ERROR);
120  config("MAX_COP_ADMITTANCE", MAX_COP_ADMITTANCE);
121  config("MAX_DCM_D_GAIN", MAX_DCM_D_GAIN);
122  config("MAX_DCM_I_GAIN", MAX_DCM_I_GAIN);
123  config("MAX_DCM_P_GAIN", MAX_DCM_P_GAIN);
124  config("MAX_COMD_GAIN", MAX_COMD_GAIN);
125  config("MAX_ZMPD_GAIN", MAX_ZMPD_GAIN);
126  config("MAX_DF_ADMITTANCE", MAX_DF_ADMITTANCE);
127  if(config.has("MAX_DFZ_ADMITTANCE"))
128  {
129  mc_rtc::log::deprecated("StabilizerConfiguration::SafetyThresholds", "MAX_DFZ_ADMITTANCE", "MAX_DF_ADMITTANCE");
130  config("MAX_DFZ_ADMITTANCE", MAX_DF_ADMITTANCE);
131  }
132  config("MAX_DF_DAMPING", MAX_DF_ADMITTANCE);
133  if(config.has("MAX_DFZ_DAMPING"))
134  {
135  mc_rtc::log::deprecated("StabilizerConfiguration::SafetyThresholds", "MAX_DFZ_DAMPING", "MAX_DF_ADMITTANCE");
136  config("MAX_DFZ_DAMPING", MAX_DF_ADMITTANCE);
137  }
138  config("MAX_FDC_RX_VEL", MAX_FDC_RX_VEL);
139  config("MAX_FDC_RY_VEL", MAX_FDC_RY_VEL);
140  config("MAX_FDC_RZ_VEL", MAX_FDC_RZ_VEL);
141  config("MIN_DS_PRESSURE", MIN_DS_PRESSURE);
142  config("MIN_NET_TOTAL_FORCE_ZMP", MIN_NET_TOTAL_FORCE_ZMP);
143  }
144 
146  {
147  mc_rtc::Configuration config;
148  config.add("MAX_AVERAGE_DCM_ERROR", MAX_AVERAGE_DCM_ERROR);
149  config.add("MAX_COP_ADMITTANCE", MAX_COP_ADMITTANCE);
150  config.add("MAX_DCM_D_GAIN", MAX_DCM_D_GAIN);
151  config.add("MAX_DCM_I_GAIN", MAX_DCM_I_GAIN);
152  config.add("MAX_DCM_P_GAIN", MAX_DCM_P_GAIN);
153  config.add("MAX_COMD_GAIN", MAX_COMD_GAIN);
154  config.add("MAX_ZMPD_GAIN", MAX_ZMPD_GAIN);
155  config.add("MAX_DF_ADMITTANCE", MAX_DF_ADMITTANCE);
156  config.add("MAX_DF_DAMPING", MAX_DF_DAMPING);
157  config.add("MAX_FDC_RX_VEL", MAX_FDC_RX_VEL);
158  config.add("MAX_FDC_RY_VEL", MAX_FDC_RY_VEL);
159  config.add("MAX_FDC_RZ_VEL", MAX_FDC_RZ_VEL);
160  config.add("MIN_DS_PRESSURE", MIN_DS_PRESSURE);
161  config.add("MIN_NET_TOTAL_FORCE_ZMP", MIN_NET_TOTAL_FORCE_ZMP);
162  return config;
163  }
164 };
165 
168 {
169  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
171  double dcmMeasureErrorStd = 0.01;
173  double zmpMeasureErrorStd = 0.05;
175  double biasDriftPerSecondStd = 0.02;
177  Eigen::Vector2d biasLimit = {0.02, 0.02};
179  Eigen::Vector2d comBiasLimit = biasLimit;
181  bool withDCMBias = false;
183  bool withDCMFilter = false;
187  bool correctCoMPos = false;
189  bool correctDCM = true;
190 
191  void load(const mc_rtc::Configuration & config)
192  {
193  config("dcmMeasureErrorStd", dcmMeasureErrorStd);
194  config("zmpMeasureErrorStd", zmpMeasureErrorStd);
195  config("biasDriftPerSecondStd", biasDriftPerSecondStd);
196  config("biasLimit", biasLimit);
197  config("comBiasLimit", comBiasLimit);
198  config("withDCMBias", withDCMBias);
199  config("correctCoMPos", correctCoMPos);
200  config("withDCMFilter", withDCMFilter);
201  config("correctDCM", correctDCM);
202  }
203 
205  {
206  mc_rtc::Configuration config;
207  config.add("dcmMeasureErrorStd", dcmMeasureErrorStd);
208  config.add("zmpMeasureErrorStd", zmpMeasureErrorStd);
209  config.add("biasDriftPerSecondStd", biasDriftPerSecondStd);
210  config.add("biasLimit", biasLimit);
211  config.add("comBiasLimit", comBiasLimit);
212  config.add("withDCMBias", withDCMBias);
213  config.add("correctCoMPos", correctCoMPos);
214  config.add("correctDCM", correctDCM);
215  config.add("withDCMFilter", withDCMFilter);
216  return config;
217  }
218 };
219 
261 {
265  bool addExpectedCoMOffset = false;
267  bool subtractMeasuredValue = false;
269  bool modifyCoMErr = false;
271  bool modifyZMPErr = false;
273  bool modifyZMPErrD = false;
276  bool excludeFromDCMBiasEst = false;
278  double comOffsetErrCoMLimit = 0.1;
280  double comOffsetErrZMPLimit = 0.1;
289 
290  void load(const mc_rtc::Configuration & config)
291  {
292  config("add_expected_com_offset", addExpectedCoMOffset);
293  config("subtract_measured_value", subtractMeasuredValue);
294  config("modify_com_error", modifyCoMErr);
295  config("modify_zmp_error", modifyZMPErr);
296  config("modify_zmp_error_d", modifyZMPErrD);
297  config("exclude_from_dcm_bias_est", excludeFromDCMBiasEst);
298  config("com_offset_err_com_limit", comOffsetErrCoMLimit);
299  config("com_offset_err_zmp_limit", comOffsetErrZMPLimit);
300  config("ext_wrench_sum_cutoff", extWrenchSumLowPassCutoffPeriod);
301  config("com_offset_cutoff", comOffsetLowPassCutoffPeriod);
302  config("com_offset_com_cutoff", comOffsetLowPassCoMCutoffPeriod);
303  config("derivator_time_constant", comOffsetDerivatorTimeConstant);
304  }
305 
307  {
308  mc_rtc::Configuration config;
309  config.add("add_expected_com_offset", addExpectedCoMOffset);
310  config.add("subtract_measured_value", subtractMeasuredValue);
311  config.add("modify_com_error", modifyCoMErr);
312  config.add("modify_zmp_error", modifyZMPErr);
313  config.add("modify_zmp_error_d", modifyZMPErrD);
314  config.add("exclude_from_dcm_bias_est", excludeFromDCMBiasEst);
315  config.add("com_offset_err_com_limit", comOffsetErrCoMLimit);
316  config.add("com_offset_err_zmp_limit", comOffsetErrZMPLimit);
317  config.add("ext_wrench_sum_cutoff", extWrenchSumLowPassCutoffPeriod);
318  config.add("com_offset_cutoff", comOffsetLowPassCutoffPeriod);
319  config.add("com_offset_com_cutoff", comOffsetLowPassCoMCutoffPeriod);
320  config.add("derivator_time_constant", comOffsetDerivatorTimeConstant);
321  return config;
322  }
323 };
324 
325 } // namespace lipm_stabilizer
326 } // namespace mc_rbdyn
327 
328 namespace mc_rtc
329 {
333 template<>
335 {
337  {
339  weights.load(config);
340  return weights;
341  }
342 
343  static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::FDQPWeights & weights) { return weights.save(); }
344 };
345 
349 template<>
350 struct ConfigurationLoader<mc_rbdyn::lipm_stabilizer::FDMPCWeights>
351 {
353  {
355  weights.load(config);
356  return weights;
357  }
358 
359  static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::FDMPCWeights & weights) { return weights.save(); }
360 };
361 
365 template<>
367 {
369  {
371  safety.load(config);
372  return safety;
373  }
374 
376  {
377  return safety.save();
378  }
379 };
380 
384 template<>
386 {
388  {
390  bias.load(config);
391  return bias;
392  }
393 
395  {
396  return bias.save();
397  }
398 };
399 
403 template<>
405 {
407  {
409  extWrench.load(config);
410  return extWrench;
411  }
412 
414  {
415  return extWrench.save();
416  }
417 };
418 } // namespace mc_rtc
419 
420 namespace mc_rbdyn
421 {
422 namespace lipm_stabilizer
423 {
424 
435 {
436  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
437 
438  bool verbose = true;
443 
444  double friction = 0.7;
445  std::string leftFootSurface;
446  std::string rightFootSurface;
448  bool constrainCoP = true;
451  bool useTargetPressure = true;
454  Eigen::Vector2d copAdmittance = Eigen::Vector2d::Zero();
455  sva::MotionVecd copMaxVel{{0.3, 0.3, 0.3}, {0.1, 0.1, 0.1}};
456  double copVelFilterGain = 0.8;
459  mc_rbdyn::Gains3d dfAdmittance = {0, 0, 1e-4};
460  mc_rbdyn::Gains3d dfDamping = 0.;
462  mc_rbdyn::Gains2d dcmPropGain = 1.;
463  mc_rbdyn::Gains2d dcmIntegralGain = 5.;
464  mc_rbdyn::Gains2d dcmDerivGain = 0.;
465  double comdErrorGain = 1.;
466  double zmpdGain = 0.;
467  double dcmIntegratorTimeConstant =
468  15.;
469  double dcmDerivatorTimeConstant = 1.;
471  double fSumFilterTimeConstant = 20.;
473  std::vector<std::string> comActiveJoints;
474  Eigen::Vector3d comStiffness = {1000., 1000., 100.};
475  double comWeight = 1000.;
476  Eigen::Vector3d comDimWeight = Eigen::Vector3d::Ones();
477  double comHeight = 0.84;
480  Eigen::Vector3d copFzLambda = 100.0 * Eigen::Vector3d::Ones();
481  double delayCoP = 0;
482 
483  std::string torsoBodyName;
484  double torsoPitch = 0;
485  double torsoStiffness = 10;
486  double torsoWeight = 100;
487  Eigen::Vector3d torsoDimWeight = Eigen::Vector3d::Ones();
488  double pelvisStiffness = 10;
489  double pelvisWeight = 100;
490  Eigen::Vector3d pelvisDimWeight = Eigen::Vector3d::Ones();
492  sva::MotionVecd contactDamping{{300, 300, 300},
493  {300, 300, 300}};
494  sva::MotionVecd contactStiffness = {{1, 1, 1}, {1, 1, 1}};
495  double contactWeight = 100000.;
497  double vdcFrequency = 1.;
498  double vdcStiffness = 1000.;
505 
506  StabilizerConfiguration(const mc_rtc::Configuration & conf) { load(conf); }
507 
512  void clampGains()
513  {
515  const auto & s = safetyThresholds;
516  clampInPlaceAndWarn(copAdmittance.x(), 0., s.MAX_COP_ADMITTANCE, "CoP x-admittance");
517  clampInPlaceAndWarn(copAdmittance.y(), 0., s.MAX_COP_ADMITTANCE, "CoP y-admittance");
518  clampInPlaceAndWarn(dcmDerivGain, 0., s.MAX_DCM_D_GAIN, "DCM deriv gain");
519  clampInPlaceAndWarn(dcmIntegralGain, 0., s.MAX_DCM_I_GAIN, "DCM integral gain");
520  clampInPlaceAndWarn(dcmPropGain, 0., s.MAX_DCM_P_GAIN, "DCM prop gain");
521  clampInPlaceAndWarn(comdErrorGain, 0., s.MAX_COMD_GAIN, "CoMd gain");
522  clampInPlaceAndWarn(zmpdGain, 0., s.MAX_ZMPD_GAIN, "ZMPd gain");
523  clampInPlaceAndWarn(dfAdmittance, 0., s.MAX_DF_ADMITTANCE, "DF admittance");
524  clampInPlaceAndWarn(dfDamping, 0., s.MAX_DF_DAMPING, "DF admittance");
525  }
526 
527  void load(const mc_rtc::Configuration & config)
528  {
529  config("verbose", verbose);
530 
531  if(config.has("safety_tresholds")) { safetyThresholds.load(config("safety_tresholds")); }
532 
533  if(config.has("fdqp_weights")) { fdqpWeights.load(config("fdqp_weights")); }
534 
535  if(config.has("fdmpc_weights")) { fdmpcWeights.load(config("fdmpc_weights")); }
536 
537  config("friction", friction);
538  config("leftFootSurface", leftFootSurface);
539  config("rightFootSurface", rightFootSurface);
540  config("torsoBodyName", torsoBodyName);
541 
542  if(config.has("admittance"))
543  {
544  auto admittance = config("admittance");
545  admittance("cop", copAdmittance);
546  admittance("useTargetPressure", useTargetPressure);
547  admittance("copFzLambda", copFzLambda);
548  admittance("copFzDelay", delayCoP);
549  admittance("maxVel", copMaxVel);
550  admittance("velFilterGain", mc_filter::utils::clamp(copVelFilterGain, 0, 1));
551  if(admittance.has("dfz"))
552  {
553  mc_rtc::log::warning("[MC_RTC_DEPRECATED][StabilizerConfiguration] dfz is now dimensional, to "
554  "keep the same behavior use df: [0, 0, dfz]");
555  dfAdmittance.setZero();
556  dfAdmittance.z() = admittance("dfz");
557  }
558  else { admittance("df", dfAdmittance); }
559  if(admittance.has("dfz_damping"))
560  {
561  mc_rtc::log::warning("[MC_RTC_DEPRECATED][StabilizerConfiguration] dfz_damping is now dimensional, to "
562  "keep the same behavior use df_damping: [0, 0, dfz_damping]");
563  dfDamping.setZero();
564  dfDamping.z() = admittance("dfz_damping");
565  }
566  else { admittance("df_damping", dfDamping); }
567  }
568  if(config.has("dcm_tracking"))
569  {
570  auto dcmTracking = config("dcm_tracking");
571  if(dcmTracking.has("gains"))
572  {
573  dcmTracking("gains")("prop", dcmPropGain);
574  dcmTracking("gains")("integral", dcmIntegralGain);
575  dcmTracking("gains")("deriv", dcmDerivGain);
576  dcmTracking("gains")("comdError", comdErrorGain);
577  dcmTracking("gains")("zmpd", zmpdGain);
578  }
579  if(dcmTracking.has("derivator_time_constant"))
580  {
581  mc_rtc::log::warning("derivator_time_constant is deprecated, use derivator_cutoff_period instead");
582  dcmTracking("derivator_time_constant", dcmDerivatorTimeConstant);
583  }
584  dcmTracking("derivator_cutoff_period", dcmDerivatorTimeConstant);
585  dcmTracking("integrator_time_constant", dcmIntegratorTimeConstant);
586  }
587  if(config.has("dcm_bias")) { dcmBias.load(config("dcm_bias")); }
588  if(config.has("external_wrench")) { extWrench.load(config("external_wrench")); }
589  if(config.has("tasks"))
590  {
591  auto tasks = config("tasks");
592  if(tasks.has("com"))
593  {
594  tasks("com")("active_joints", comActiveJoints);
595  tasks("com")("stiffness", comStiffness);
596  tasks("com")("weight", comWeight);
597  tasks("com")("dimWeight", comDimWeight);
598  tasks("com")("height", comHeight);
599  }
600 
601  if(tasks.has("torso"))
602  {
603 
604  tasks("torso")("pitch", torsoPitch);
605  tasks("torso")("stiffness", torsoStiffness);
606  tasks("torso")("weight", torsoWeight);
607  tasks("torso")("dimWeight", torsoDimWeight);
608  }
609 
610  if(tasks.has("pelvis"))
611  {
612  tasks("pelvis")("stiffness", pelvisStiffness);
613  tasks("pelvis")("weight", pelvisWeight);
614  tasks("pelvis")("dimWeight", pelvisDimWeight);
615  }
616 
617  if(tasks.has("contact"))
618  {
619  tasks("contact")("constrainCoP", constrainCoP);
620  if(tasks("contact").has("damping"))
621  {
622  try
623  {
624  double d = tasks("contact")("damping");
625  contactDamping = sva::MotionVecd({d, d, d}, {d, d, d});
626  }
628  {
629  e.silence();
630  contactDamping = tasks("contact")("damping");
631  }
632  }
633  if(tasks("contact").has("stiffness"))
634  {
635  try
636  {
637  double k = tasks("contact")("stiffness");
638  contactStiffness = sva::MotionVecd({k, k, k}, {k, k, k});
639  }
641  {
642  e.silence();
643  contactStiffness = tasks("contact")("stiffness");
644  }
645  }
646  tasks("contact")("stiffness", contactStiffness);
647  tasks("contact")("weight", contactWeight);
648  }
649  }
650  if(config.has("vdc"))
651  {
652  auto vdc = config("vdc");
653  vdc("frequency", vdcFrequency);
654  vdc("stiffness", vdcStiffness);
655  }
656 
657  if(config.has("zmpcc")) { zmpcc.load(config("zmpcc")); }
658  config("zmpcc", zmpcc);
659  }
660 
662  {
664  conf.add("verbose", verbose);
665 
666  conf.add("safety_tresholds", safetyThresholds);
667  conf.add("fdqp_weights", fdqpWeights);
668  conf.add("fdmpc_weights", fdmpcWeights);
669 
670  conf.add("friction", friction);
671  conf.add("leftFootSurface", leftFootSurface);
672  conf.add("rightFootSurface", rightFootSurface);
673  conf.add("torsoBodyName", torsoBodyName);
674 
675  conf.add("admittance");
676  conf("admittance").add("cop", copAdmittance);
677  conf("admittance").add("useTargetPressure", useTargetPressure);
678  conf("admittance").add("df", dfAdmittance);
679  conf("admittance").add("df_damping", dfDamping);
680  conf("admittance").add("maxVel", copMaxVel);
681  conf("admittance").add("velFilterGain", copVelFilterGain);
682 
683  conf.add("zmpcc", zmpcc);
684 
685  conf.add("dcm_tracking");
686  conf("dcm_tracking").add("gains");
687  conf("dcm_tracking")("gains").add("prop", dcmPropGain);
688  conf("dcm_tracking")("gains").add("integral", dcmIntegralGain);
689  conf("dcm_tracking")("gains").add("deriv", dcmDerivGain);
690  conf("dcm_tracking")("gains").add("comdError", comdErrorGain);
691  conf("dcm_tracking")("gains").add("zmpd", zmpdGain);
692  conf("dcm_tracking").add("derivator_cutoff_period", dcmDerivatorTimeConstant);
693  conf("dcm_tracking").add("integrator_time_constant", dcmIntegratorTimeConstant);
694 
695  conf.add("dcm_bias", dcmBias);
696  conf.add("external_wrench", extWrench);
697 
698  conf.add("tasks");
699  conf("tasks").add("com");
700  conf("tasks")("com").add("active_joints", comActiveJoints);
701  conf("tasks")("com").add("stiffness", comStiffness);
702  conf("tasks")("com").add("weight", comWeight);
703  conf("tasks")("com").add("dimWeight", comDimWeight);
704  conf("tasks")("com").add("height", comHeight);
705 
706  conf("tasks").add("torso");
707  conf("tasks")("torso").add("pitch", torsoPitch);
708  conf("tasks")("torso").add("stiffness", torsoStiffness);
709  conf("tasks")("torso").add("weight", torsoWeight);
710  conf("tasks")("torso").add("dimWeight", torsoDimWeight);
711 
712  conf("tasks").add("pelvis");
713  conf("tasks")("pelvis").add("stiffness", pelvisStiffness);
714  conf("tasks")("pelvis").add("weight", pelvisWeight);
715  conf("tasks")("pelvis").add("dimWeight", pelvisDimWeight);
716 
717  conf("tasks").add("contact");
718  conf("tasks")("contact").add("damping", contactDamping);
719  conf("tasks")("contact").add("stiffness", contactStiffness);
720  conf("tasks")("contact").add("weight", contactWeight);
721 
722  conf.add("vdc");
723  conf("vdc").add("frequency", vdcFrequency);
724  conf("vdc").add("stiffness", vdcStiffness);
725  return conf;
726  }
727 };
728 } // namespace lipm_stabilizer
729 } // namespace mc_rbdyn
730 
731 namespace mc_rtc
732 {
733 template<>
735 {
737  {
739  stabi.load(config);
740  return stabi;
741  }
742 
744  {
745  return stabiConf.save();
746  }
747 };
748 } // namespace mc_rtc
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_DF_ADMITTANCE
double MAX_DF_ADMITTANCE
Definition: StabilizerConfiguration.h:107
mc_rtc::Configuration
Simplify access to values hold within a JSON file.
Definition: Configuration.h:165
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::torsoBodyName
std::string torsoBodyName
Definition: StabilizerConfiguration.h:483
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::FDMPCWeights >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::FDMPCWeights &weights)
Definition: StabilizerConfiguration.h:359
mc_tasks::lipm_stabilizer::ExternalWrenchConfiguration
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration ExternalWrenchConfiguration
Definition: StabilizerTask.h:41
mc_rbdyn::lipm_stabilizer::FDMPCWeights::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:72
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_DCM_D_GAIN
double MAX_DCM_D_GAIN
Definition: StabilizerConfiguration.h:102
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MIN_DS_PRESSURE
double MIN_DS_PRESSURE
Definition: StabilizerConfiguration.h:112
mc_rtc::Configuration::Exception::silence
void silence() const noexcept
mc_filter::utils::clampInPlaceAndWarn
void clampInPlaceAndWarn(double &value, double lower, double upper, const std::string &label)
Definition: clamp.h:69
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::excludeFromDCMBiasEst
bool excludeFromDCMBiasEst
Definition: StabilizerConfiguration.h:276
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::addExpectedCoMOffset
bool addExpectedCoMOffset
Definition: StabilizerConfiguration.h:265
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::FDQPWeights >::load
static mc_rbdyn::lipm_stabilizer::FDQPWeights load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:336
mc_rbdyn::lipm_stabilizer::FDMPCWeights::FDMPCWeights
FDMPCWeights(double cop, double copReg, double copDiff)
Definition: StabilizerConfiguration.h:62
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_FDC_RZ_VEL
double MAX_FDC_RZ_VEL
Definition: StabilizerConfiguration.h:111
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::zmpMeasureErrorStd
double zmpMeasureErrorStd
the standard deviaiton of the zmp estimation error [m]
Definition: StabilizerConfiguration.h:173
mc_rbdyn::lipm_stabilizer::FDQPWeights::ankleTorqueSqrt
double ankleTorqueSqrt
Definition: StabilizerConfiguration.h:30
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::withDCMFilter
bool withDCMFilter
Whether the DCM filter is enabled.
Definition: StabilizerConfiguration.h:183
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::correctCoMPos
bool correctCoMPos
Definition: StabilizerConfiguration.h:187
mc_rbdyn::lipm_stabilizer::FDMPCWeights::copDiff_
double copDiff_
Definition: StabilizerConfiguration.h:70
mc_rbdyn::lipm_stabilizer::SafetyThresholds::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:117
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:527
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_DCM_I_GAIN
double MAX_DCM_I_GAIN
Definition: StabilizerConfiguration.h:103
mc_rbdyn::lipm_stabilizer::SafetyThresholds::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:145
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::comActiveJoints
std::vector< std::string > comActiveJoints
Definition: StabilizerConfiguration.h:473
mc_tasks::lipm_stabilizer::FDQPWeights
mc_rbdyn::lipm_stabilizer::FDQPWeights FDQPWeights
Definition: StabilizerTask.h:38
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::leftFootSurface
std::string leftFootSurface
Definition: StabilizerConfiguration.h:445
mc_rbdyn::lipm_stabilizer::FDMPCWeights::FDMPCWeights
FDMPCWeights()
Definition: StabilizerConfiguration.h:55
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:661
mc_rbdyn::lipm_stabilizer::ZMPCCConfiguration
Definition: ZMPCCConfiguration.h:14
mc_rbdyn::lipm_stabilizer::FDQPWeights::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:41
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::StabilizerConfiguration
StabilizerConfiguration()
Definition: StabilizerConfiguration.h:504
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::StabilizerConfiguration
StabilizerConfiguration(const mc_rtc::Configuration &conf)
Definition: StabilizerConfiguration.h:506
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::correctDCM
bool correctDCM
Whether the estimated bias should be used on the dcm.
Definition: StabilizerConfiguration.h:189
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_COP_ADMITTANCE
double MAX_COP_ADMITTANCE
Definition: StabilizerConfiguration.h:101
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration &bias)
Definition: StabilizerConfiguration.h:394
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration
Definition: StabilizerConfiguration.h:167
mc_rtc::Configuration::has
bool has(const std::string &key) const
Check if the key is part of the conf.
Gains.h
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::clampGains
void clampGains()
Checks that the chosen parameters are within the parameters defined by the SafetyThresholds.
Definition: StabilizerConfiguration.h:512
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::StabilizerConfiguration >::load
static mc_rbdyn::lipm_stabilizer::StabilizerConfiguration load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:736
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::modifyCoMErr
bool modifyCoMErr
Modify CoM depending on the error of the external wrenches in target and measurement.
Definition: StabilizerConfiguration.h:269
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::StabilizerConfiguration >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::StabilizerConfiguration &stabiConf)
Definition: StabilizerConfiguration.h:743
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::modifyZMPErr
bool modifyZMPErr
Modify ZMP depending on the error of the external wrenches in target and measurement.
Definition: StabilizerConfiguration.h:271
mc_rbdyn::lipm_stabilizer::FDMPCWeights::copRegulation_
double copRegulation_
Definition: StabilizerConfiguration.h:69
mc_tasks::lipm_stabilizer::SafetyThresholds
mc_rbdyn::lipm_stabilizer::SafetyThresholds SafetyThresholds
Definition: StabilizerTask.h:39
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::dcmBias
DCMBiasEstimatorConfiguration dcmBias
Definition: StabilizerConfiguration.h:500
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::SafetyThresholds >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::SafetyThresholds &safety)
Definition: StabilizerConfiguration.h:375
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::zmpcc
ZMPCCConfiguration zmpcc
Definition: StabilizerConfiguration.h:457
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::FDQPWeights >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::FDQPWeights &weights)
Definition: StabilizerConfiguration.h:343
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::comOffsetLowPassCutoffPeriod
double comOffsetLowPassCutoffPeriod
Cutoff period for the low-pass filter of CoM offset.
Definition: StabilizerConfiguration.h:284
api.h
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::SafetyThresholds >::load
static mc_rbdyn::lipm_stabilizer::SafetyThresholds load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:368
mc_rbdyn::lipm_stabilizer::FDQPWeights::FDQPWeights
FDQPWeights()
Definition: StabilizerConfiguration.h:24
mc_rbdyn::lipm_stabilizer::FDQPWeights::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:34
mc_rbdyn::lipm_stabilizer::ZMPCCConfiguration::load
void load(const mc_rtc::Configuration &config)
Definition: ZMPCCConfiguration.h:22
mc_rtc::Configuration::add
void add(const std::string &key, bool value)
Add a bool element to the Configuration.
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:306
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::extWrench
ExternalWrenchConfiguration extWrench
Definition: StabilizerConfiguration.h:502
mc_rbdyn::lipm_stabilizer::FDQPWeights::pressureSqrt
double pressureSqrt
Definition: StabilizerConfiguration.h:32
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:204
mc_rbdyn::lipm_stabilizer::FDMPCWeights
Definition: StabilizerConfiguration.h:52
mc_rbdyn::lipm_stabilizer::FDMPCWeights::cop_
double cop_
Definition: StabilizerConfiguration.h:68
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MIN_NET_TOTAL_FORCE_ZMP
double MIN_NET_TOTAL_FORCE_ZMP
Definition: StabilizerConfiguration.h:115
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:191
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_DCM_P_GAIN
double MAX_DCM_P_GAIN
Definition: StabilizerConfiguration.h:104
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::comOffsetDerivatorTimeConstant
double comOffsetDerivatorTimeConstant
Time window for the stationary offset filter of the CoM offset derivator.
Definition: StabilizerConfiguration.h:288
ZMPCCConfiguration.h
mc_rtc::Configuration::Exception
Exception thrown by this class when something bad occurs.
Definition: Configuration.h:223
MC_RBDYN_DLLAPI
#define MC_RBDYN_DLLAPI
Definition: api.h:50
mc_rtc::log::warning
void warning(Args &&... args)
Definition: logging.h:69
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::comBiasLimit
Eigen::Vector2d comBiasLimit
Maximum bias in the sagital and lateral directions used to correct the CoM, should be smaller than bi...
Definition: StabilizerConfiguration.h:179
mc_rbdyn::lipm_stabilizer::SafetyThresholds
Stabilizer safety thresholds.
Definition: StabilizerConfiguration.h:98
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::extWrenchSumLowPassCutoffPeriod
double extWrenchSumLowPassCutoffPeriod
Cutoff period for the low-pass filter of the sum of the measured external wrenches.
Definition: StabilizerConfiguration.h:282
mc_filter::utils::clamp
double clamp(double value, double lower, double upper)
Definition: clamp.h:29
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_FDC_RX_VEL
double MAX_FDC_RX_VEL
Definition: StabilizerConfiguration.h:109
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::subtractMeasuredValue
bool subtractMeasuredValue
Subtract the measured external wrenches instead of target ones.
Definition: StabilizerConfiguration.h:267
Configuration.h
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::withDCMBias
bool withDCMBias
Whether the DCM bias estimator is enabled (default: false for backwards compatibility)
Definition: StabilizerConfiguration.h:181
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration
Parameters for the external wrenches.
Definition: StabilizerConfiguration.h:260
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::rightFootSurface
std::string rightFootSurface
Definition: StabilizerConfiguration.h:446
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::dcmMeasureErrorStd
EIGEN_MAKE_ALIGNED_OPERATOR_NEW double dcmMeasureErrorStd
the standard deviation of the dcm estimation error, NOT including the bias [m]
Definition: StabilizerConfiguration.h:171
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::FDMPCWeights >::load
static mc_rbdyn::lipm_stabilizer::FDMPCWeights load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:352
mc_rbdyn::lipm_stabilizer::FDQPWeights
Definition: StabilizerConfiguration.h:22
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration >::save
static mc_rtc::Configuration save(const mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration &extWrench)
Definition: StabilizerConfiguration.h:413
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::fdqpWeights
FDQPWeights fdqpWeights
Definition: StabilizerConfiguration.h:441
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_AVERAGE_DCM_ERROR
double MAX_AVERAGE_DCM_ERROR
Definition: StabilizerConfiguration.h:100
std
Definition: Contact.h:66
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::comOffsetErrCoMLimit
double comOffsetErrCoMLimit
Limit of CoM offset error handled by CoM modification.
Definition: StabilizerConfiguration.h:278
logging.h
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::safetyThresholds
SafetyThresholds safetyThresholds
Definition: StabilizerConfiguration.h:440
clamp.h
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_FDC_RY_VEL
double MAX_FDC_RY_VEL
Definition: StabilizerConfiguration.h:110
mc_rbdyn::Gains< 3 >
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::comOffsetLowPassCoMCutoffPeriod
double comOffsetLowPassCoMCutoffPeriod
Cutoff period for the low-pass filter of CoM offset to extract CoM modification.
Definition: StabilizerConfiguration.h:286
mc_rbdyn::lipm_stabilizer::FDQPWeights::FDQPWeights
FDQPWeights(double netWrench, double ankleTorque, double pressure)
Definition: StabilizerConfiguration.h:26
mc_rtc::log::deprecated
MC_RTC_UTILS_DLLAPI void deprecated(const std::string &source, const std::string &old, const std::string &replace)
mc_rbdyn::lipm_stabilizer::FDMPCWeights::save
mc_rtc::Configuration save() const
Definition: StabilizerConfiguration.h:79
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration
Configuration of the LIPMStabilizer. This configuration is meant to be overriden from the RobotModule...
Definition: StabilizerConfiguration.h:434
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration::fdmpcWeights
FDMPCWeights fdmpcWeights
Definition: StabilizerConfiguration.h:442
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_DF_DAMPING
double MAX_DF_DAMPING
Definition: StabilizerConfiguration.h:108
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::modifyZMPErrD
bool modifyZMPErrD
Modify ZMP velocity depending on the error velocity of the external wrenches in target and measuremen...
Definition: StabilizerConfiguration.h:273
mc_rbdyn
Definition: generic_gripper.h:14
mc_rbdyn::lipm_stabilizer::FDQPWeights::netWrenchSqrt
double netWrenchSqrt
Definition: StabilizerConfiguration.h:31
mc_tasks::lipm_stabilizer::DCMBiasEstimatorConfiguration
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration DCMBiasEstimatorConfiguration
Definition: StabilizerTask.h:40
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::comOffsetErrZMPLimit
double comOffsetErrZMPLimit
Limit of CoM offset error handled by ZMP modification [m].
Definition: StabilizerConfiguration.h:280
mc_rtc::ConfigurationLoader
Definition: Configuration.h:55
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::biasLimit
Eigen::Vector2d biasLimit
Maximum bias in the sagital and lateral directions [m].
Definition: StabilizerConfiguration.h:177
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration >::load
static mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:406
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_ZMPD_GAIN
double MAX_ZMPD_GAIN
Definition: StabilizerConfiguration.h:106
mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration::biasDriftPerSecondStd
double biasDriftPerSecondStd
the standard deviation of the drift [m/s]
Definition: StabilizerConfiguration.h:175
mc_rbdyn::lipm_stabilizer::SafetyThresholds::MAX_COMD_GAIN
double MAX_COMD_GAIN
Definition: StabilizerConfiguration.h:105
mc_tasks::lipm_stabilizer::StabilizerConfiguration
mc_rbdyn::lipm_stabilizer::StabilizerConfiguration StabilizerConfiguration
Definition: StabilizerTask.h:37
mc_rbdyn::lipm_stabilizer::ExternalWrenchConfiguration::load
void load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:290
mc_rtc
Definition: Contact.h:87
mc_rtc::ConfigurationLoader< mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration >::load
static mc_rbdyn::lipm_stabilizer::DCMBiasEstimatorConfiguration load(const mc_rtc::Configuration &config)
Definition: StabilizerConfiguration.h:387