Skip to content

Commit 983e6f7

Browse files
committed
Use interpolation in python examples
1 parent 1363208 commit 983e6f7

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

examples/go2_fulldynamics.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import numpy as np
22
from bullet_robot import BulletRobot
3-
from simple_mpc import RobotModelHandler, RobotDataHandler, FullDynamicsOCP, MPC, IDSolver
3+
from simple_mpc import RobotModelHandler, RobotDataHandler, FullDynamicsOCP, MPC, IDSolver, Interpolator
44
import example_robot_data as erd
55
import pinocchio as pin
66
import time
@@ -21,6 +21,11 @@
2121
model_handler.addFoot("RR_foot", base_joint_name, pin.XYZQUATToSE3(np.array([-0.24,-0.15, 0.0, 0,0,0,1])))
2222
data_handler = RobotDataHandler(model_handler)
2323

24+
nq = model_handler.getModel().nq
25+
nv = model_handler.getModel().nv
26+
nu = nv - 6
27+
nf = 12
28+
2429
force_size = 3
2530
nk = len(model_handler.getFeetNames())
2631
gravity = np.array([0, 0, -9.81])
@@ -140,6 +145,9 @@
140145

141146
qp = IDSolver(id_conf, model_handler.getModel())
142147

148+
""" Interpolation """
149+
interpolator = Interpolator(nq + nv, nv, nu, nf, dt)
150+
143151
""" Initialize simulation"""
144152
device = BulletRobot(
145153
model_handler.getModel().names,
@@ -150,8 +158,6 @@
150158
model_handler.getReferenceState()[:3],
151159
)
152160

153-
nq = mpc.getModelHandler().getModel().nq
154-
nv = mpc.getModelHandler().getModel().nv
155161
device.initializeJoints(model_handler.getReferenceState()[:nq])
156162

157163
for i in range(40):
@@ -232,6 +238,11 @@
232238
force_RL.append(RL_f)
233239
force_RR.append(RR_f)
234240

241+
forces = [total_forces, total_forces]
242+
ddqs = [a0, a1]
243+
xss = [mpc.xs[0], mpc.xs[1]]
244+
uss = [mpc.us[0], mpc.us[1]]
245+
235246
FL_measured.append(mpc.getDataHandler().getFootPose("FL_foot").translation)
236247
FR_measured.append(mpc.getDataHandler().getFootPose("FR_foot").translation)
237248
RL_measured.append(mpc.getDataHandler().getFootPose("RL_foot").translation)
@@ -246,27 +257,24 @@
246257

247258
for j in range(N_simu):
248259
# time.sleep(0.01)
249-
u_interp = (N_simu - j) / N_simu * mpc.us[0] + j / N_simu * mpc.us[1]
250-
a_interp = (N_simu - j) / N_simu * a0 + j / N_simu * a1
251-
x_interp = (N_simu - j) / N_simu * mpc.xs[0] + j / N_simu * mpc.xs[1]
252-
K_interp = (N_simu - j) / N_simu * mpc.Ks[0] + j / N_simu * mpc.Ks[1]
260+
interpolator.interpolate(j / float(N_simu), xss, uss, ddqs, forces)
253261

254262
q_meas, v_meas = device.measureState()
255263
x_measured = np.concatenate([q_meas, v_meas])
256264

257265
mpc.getDataHandler().updateInternalData(x_measured, True)
258266

259-
current_torque = u_interp - 1. * mpc.Ks[0] @ model_handler.difference(
260-
x_measured, x_interp
267+
current_torque = interpolator.u_interpolated - 1. * mpc.Ks[0] @ model_handler.difference(
268+
x_measured, interpolator.x_interpolated
261269
)
262270

263271
qp.solveQP(
264272
mpc.getDataHandler().getData(),
265273
contact_states,
266274
x_measured[nq:],
267-
a0,
275+
interpolator.a_interpolated,
268276
current_torque,
269-
total_forces,
277+
interpolator.forces_interpolated,
270278
mpc.getDataHandler().getData().M,
271279
)
272280

examples/go2_kinodynamics.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import numpy as np
22
from bullet_robot import BulletRobot
3-
from simple_mpc import RobotModelHandler, RobotDataHandler, KinodynamicsOCP, MPC, IDSolver
3+
from simple_mpc import RobotModelHandler, RobotDataHandler, KinodynamicsOCP, MPC, IDSolver, Interpolator
44
import example_robot_data as erd
55
import pinocchio as pin
66
import time
@@ -21,6 +21,10 @@
2121
model_handler.addFoot("RR_foot", base_joint_name, pin.XYZQUATToSE3(np.array([-0.24,-0.15, 0.0, 0,0,0,1])))
2222
data_handler = RobotDataHandler(model_handler)
2323

24+
nq = model_handler.getModel().nq
25+
nv = model_handler.getModel().nv
26+
nu = nv - 6
27+
nf = 12
2428
force_size = 3
2529
nk = len(model_handler.getFeetNames())
2630
gravity = np.array([0, 0, -9.81])
@@ -144,6 +148,9 @@
144148

145149
qp = IDSolver(id_conf, model_handler.getModel())
146150

151+
""" Interpolation """
152+
interpolator = Interpolator(nq + nv, nv, nu, nf, 0.01)
153+
147154
""" Initialize simulation"""
148155
device = BulletRobot(
149156
model_handler.getModel().names,
@@ -155,10 +162,7 @@
155162
)
156163

157164
device.initializeJoints(model_handler.getReferenceState()[:model_handler.getModel().nq])
158-
159165
device.changeCamera(1.0, 60, -15, [0.6, -0.2, 0.5])
160-
nq = mpc.getModelHandler().getModel().nq
161-
nv = mpc.getModelHandler().getModel().nv
162166

163167
q_meas, v_meas = device.measureState()
164168
x_measured = np.concatenate([q_meas, v_meas])
@@ -234,6 +238,11 @@
234238
forces1 = mpc.us[1][: nk * force_size]
235239
contact_states = mpc.ocp_handler.getContactState(0)
236240

241+
forces = [forces0, forces1]
242+
ddqs = [a0, a1]
243+
xss = [mpc.xs[0], mpc.xs[1]]
244+
uss = [mpc.us[0], mpc.us[1]]
245+
237246
device.moveQuadrupedFeet(
238247
mpc.getReferencePose(0, "FL_foot").translation,
239248
mpc.getReferencePose(0, "FR_foot").translation,
@@ -243,21 +252,20 @@
243252

244253
for j in range(N_simu):
245254
# time.sleep(0.01)
255+
interpolator.interpolate(j / float(N_simu), xss, uss, ddqs, forces)
256+
246257
q_meas, v_meas = device.measureState()
247258
x_measured = np.concatenate([q_meas, v_meas])
248259

249260
mpc.getDataHandler().updateInternalData(x_measured, True)
250261

251-
a_interp = (N_simu - j) / N_simu * a0 + j / N_simu * a1
252-
f_interp = (N_simu - j) / N_simu * forces0 + j / N_simu * forces1
253-
254262
qp.solveQP(
255263
mpc.getDataHandler().getData(),
256264
contact_states,
257265
x_measured[nq:],
258-
a_interp,
266+
interpolator.a_interpolated,
259267
np.zeros(12),
260-
f_interp,
268+
interpolator.forces_interpolated,
261269
mpc.getDataHandler().getData().M,
262270
)
263271

0 commit comments

Comments
 (0)