Skip to content

Commit a863bc9

Browse files
committed
Fix python example and some minor bugs
1 parent dee1fb3 commit a863bc9

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

examples/go2_fulldynamics.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@
6565
kinematics_limits=True,
6666
force_cone=False,
6767
)
68-
T = 100
68+
T = 50
6969

7070
dynproblem = FullDynamicsOCP(problem_conf, model_handler)
7171
dynproblem.createProblem(model_handler.getReferenceState(), T, force_size, gravity[2], False)
7272

73-
T_ds = 50
74-
T_ss = 10
73+
T_ds = 10
74+
T_ss = 30
7575
N_simu = int(0.01 / 0.001)
7676
mpc_conf = dict(
7777
ddpIteration=1,
@@ -113,11 +113,10 @@
113113
"RL_foot": False,
114114
"RR_foot": False,
115115
}
116-
contact_phases = [contact_phase_quadru] * int(T_ds / 2)
117-
contact_phases += [contact_phase_lift] * T_ss
116+
contact_phases = [contact_phase_quadru] * T_ds
117+
contact_phases += [contact_phase_lift_FL] * T_ss
118118
contact_phases += [contact_phase_quadru] * T_ds
119-
contact_phases += [contact_phase_lift] * T_ss
120-
contact_phases += [contact_phase_quadru] * int(T_ds / 2)
119+
contact_phases += [contact_phase_lift_FR] * T_ss
121120

122121
""" contact_phases = [contact_phase_quadru] * int(T_ds / 2)
123122
contact_phases += [contact_phase_lift] * T_ss
@@ -144,7 +143,7 @@
144143
qp = IDSolver(id_conf, model_handler.getModel())
145144

146145
""" Friction """
147-
fcompensation = FrictionCompensation(model_handler.getModel(), nu)
146+
fcompensation = FrictionCompensation(model_handler.getModel(), True)
148147

149148
""" Initialize simulation"""
150149
device = BulletRobot(
@@ -277,10 +276,10 @@
277276
)
278277

279278
qp_torque = qp.solved_torque.copy()
280-
corrected_torque = fcompensation.computeFriction(x_interp[nq + 6:], qp_torque)
281-
device.execute(corrected_torque)
279+
fcompensation.computeFriction(x_interp[nq + 6:], qp_torque)
280+
device.execute(qp_torque)
282281

283-
u_multibody.append(copy.deepcopy(corrected_torque))
282+
u_multibody.append(copy.deepcopy(qp_torque))
284283
x_multibody.append(x_measured)
285284

286285
force_FL = np.array(force_FL)

src/friction-compensation.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ namespace simple_mpc
1212
}
1313
else
1414
{
15-
// Ignore root joint
15+
// Ignore universe joint
1616
nu_ = model.njoints - 1;
1717
}
18-
dry_friction_ = model.friction.head(nu_);
19-
viscuous_friction_ = model.damping.head(nu_);
18+
dry_friction_ = model.friction.tail(nu_);
19+
viscuous_friction_ = model.damping.tail(nu_);
2020
}
2121

2222
void FrictionCompensation::computeFriction(Eigen::Ref<const VectorXd> velocity, Eigen::Ref<VectorXd> torque)
@@ -29,12 +29,7 @@ namespace simple_mpc
2929

3030
double FrictionCompensation::signFunction(double x)
3131
{
32-
if (x > 0)
33-
return 1.0;
34-
else if (x == 0)
35-
return 0.0;
36-
else
37-
return -1.0;
32+
return (x > 0) - (x < 0);
3833
}
3934

4035
} // namespace simple_mpc

tests/friction.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ BOOST_AUTO_TEST_CASE(dry_viscuous_friction)
1515
const std::string urdf_path = EXAMPLE_ROBOT_DATA_MODEL_DIR "/solo_description/robots/solo12.urdf";
1616

1717
pinocchio::urdf::buildModel(urdf_path, JointModelFreeFlyer(), model);
18-
long nu = 12;
19-
model.friction = Eigen::VectorXd::Constant(nu, .5);
20-
model.damping = Eigen::VectorXd::Constant(nu, .05);
18+
long nu = model.nv - 6;
19+
model.friction.tail(nu) = Eigen::VectorXd::Constant(nu, .5);
20+
model.damping.tail(nu) = Eigen::VectorXd::Constant(nu, .05);
2121

2222
FrictionCompensation friction = FrictionCompensation(model);
2323

24-
BOOST_CHECK_EQUAL(model.friction, friction.dry_friction_);
25-
BOOST_CHECK_EQUAL(model.damping, friction.viscuous_friction_);
24+
BOOST_CHECK_EQUAL(model.friction.tail(nu), friction.dry_friction_);
25+
BOOST_CHECK_EQUAL(model.damping.tail(nu), friction.viscuous_friction_);
2626

2727
Eigen::VectorXd velocity = Eigen::VectorXd::Random(nu);
2828
Eigen::VectorXd torque = Eigen::VectorXd::Random(nu);
@@ -31,7 +31,7 @@ BOOST_AUTO_TEST_CASE(dry_viscuous_friction)
3131
for (long i = 0; i < nu; i++)
3232
{
3333
double sgn = (velocity[i] > 0) - (velocity[i] < 0);
34-
ctorque[i] = torque[i] + model.friction[i] * sgn + model.damping[i] * velocity[i];
34+
ctorque[i] = torque[i] + model.friction[i + 6] * sgn + model.damping[i + 6] * velocity[i];
3535
}
3636

3737
friction.computeFriction(velocity, torque);

0 commit comments

Comments
 (0)