Skip to content

Commit f5d9bdd

Browse files
author
earlaud
committed
Remove default values for ID gain and weights
1 parent 397d10d commit f5d9bdd

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

include/simple-mpc/inverse-dynamics.hpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010
#include <tsid/tasks/task-se3-equality.hpp>
1111
#include <tsid/trajectories/trajectory-euclidian.hpp>
1212

13+
// Allow to define a field, it's default value and its convenient chainable setter in one keyword.
14+
#define DEFINE_FIELD(type, name, value) \
15+
type name = value; \
16+
Settings & set_##name(type v) \
17+
{ \
18+
name = v; \
19+
return *this; \
20+
}
21+
1322
namespace simple_mpc
1423
{
1524

@@ -18,13 +27,6 @@ namespace simple_mpc
1827
public:
1928
struct Settings
2029
{
21-
#define DEFINE_FIELD(type, name, value) \
22-
type name = value; \
23-
Settings & set_##name(type v) \
24-
{ \
25-
name = v; \
26-
return *this; \
27-
}
2830

2931
// Physical quantities
3032
DEFINE_FIELD(double, friction_coefficient, 0.3)
@@ -38,23 +40,18 @@ namespace simple_mpc
3840
0.01) // Min force for one foot contact (express as a multiple of the robot weight)
3941

4042
// Tasks gains
41-
DEFINE_FIELD(double, kp_base, 10)
42-
DEFINE_FIELD(double, kp_posture, 10)
43-
DEFINE_FIELD(double, kp_contact, 10)
43+
DEFINE_FIELD(double, kp_base, 0.)
44+
DEFINE_FIELD(double, kp_posture, 0.)
45+
DEFINE_FIELD(double, kp_contact, 0.)
4446

4547
// Tasks weights
46-
DEFINE_FIELD(double, w_base, 10.)
47-
DEFINE_FIELD(double, w_posture, 1.0)
48-
DEFINE_FIELD(double, w_contact_motion, 1.0)
49-
DEFINE_FIELD(double, w_contact_force, 1.0)
50-
51-
static Settings Default()
52-
{
53-
return {};
54-
} // Work-around c++ bug to have a default constructor of nested class
48+
DEFINE_FIELD(double, w_base, -1.) // Disabled by default
49+
DEFINE_FIELD(double, w_posture, -1.) // Disabled by default
50+
DEFINE_FIELD(double, w_contact_motion, -1.) // Disabled by default
51+
DEFINE_FIELD(double, w_contact_force, -1.) // Disabled by default
5552
};
5653

57-
KinodynamicsID(const simple_mpc::RobotModelHandler & model_handler, const Settings settings = Settings::Default())
54+
KinodynamicsID(const simple_mpc::RobotModelHandler & model_handler, const Settings settings)
5855
: settings_(settings)
5956
, model_handler_(model_handler)
6057
, data_handler_(model_handler_)

tests/inverse_dynamics.cpp

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
3131
RobotDataHandler data_handler(model_handler);
3232

3333
KinodynamicsID solver(
34-
model_handler, KinodynamicsID::Settings::Default().set_w_base(0.).set_w_contact_force(0.).set_w_contact_motion(0.));
34+
model_handler, KinodynamicsID::Settings().set_kp_posture(10.).set_w_posture(1.)); // only a posture task
3535

3636
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
3737

@@ -75,7 +75,15 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_contact)
7575
RobotModelHandler model_handler = getSoloHandler();
7676
RobotDataHandler data_handler(model_handler);
7777

78-
KinodynamicsID solver(model_handler);
78+
KinodynamicsID solver(
79+
model_handler, KinodynamicsID::Settings()
80+
.set_kp_base(10.)
81+
.set_kp_posture(10.0)
82+
.set_kp_contact(10.0)
83+
.set_w_base(10.)
84+
.set_w_posture(1.0)
85+
.set_w_contact_motion(1.0)
86+
.set_w_contact_force(1.0));
7987

8088
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
8189
Eigen::VectorXd f_target = Eigen::VectorXd::Zero(4 * 3);
@@ -132,7 +140,15 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_allTasks)
132140
RobotModelHandler model_handler = getSoloHandler();
133141
RobotDataHandler data_handler(model_handler);
134142

135-
KinodynamicsID solver(model_handler);
143+
KinodynamicsID solver(
144+
model_handler, KinodynamicsID::Settings()
145+
.set_kp_base(7.)
146+
.set_kp_posture(10.)
147+
.set_kp_contact(10.0)
148+
.set_w_base(100.0)
149+
.set_w_posture(1.0)
150+
.set_w_contact_force(1.0)
151+
.set_w_contact_motion(1.0));
136152

137153
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
138154
Eigen::VectorXd f_target = Eigen::VectorXd::Zero(4 * 3);
@@ -154,7 +170,8 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_allTasks)
154170

155171
Eigen::VectorXd error = 1e12 * Eigen::VectorXd::Ones(model_handler.getModel().nv);
156172

157-
for (int i = 0; i < 10000; i++)
173+
const int N_STEP = 10000;
174+
for (int i = 0; i < N_STEP; i++)
158175
{
159176
// Solve and get solution
160177
solver.solve(t, q, v, tau);

0 commit comments

Comments
 (0)