|
1 | 1 | import numpy as np |
2 | 2 | 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 |
4 | 4 | import example_robot_data as erd |
5 | 5 | import pinocchio as pin |
6 | 6 | import time |
|
21 | 21 | model_handler.addFoot("RR_foot", base_joint_name, pin.XYZQUATToSE3(np.array([-0.24,-0.15, 0.0, 0,0,0,1]))) |
22 | 22 | data_handler = RobotDataHandler(model_handler) |
23 | 23 |
|
| 24 | +nq = model_handler.getModel().nq |
| 25 | +nv = model_handler.getModel().nv |
| 26 | +nu = nv - 6 |
| 27 | +nf = 12 |
24 | 28 | force_size = 3 |
25 | 29 | nk = len(model_handler.getFeetNames()) |
26 | 30 | gravity = np.array([0, 0, -9.81]) |
|
144 | 148 |
|
145 | 149 | qp = IDSolver(id_conf, model_handler.getModel()) |
146 | 150 |
|
| 151 | +""" Interpolation """ |
| 152 | +interpolator = Interpolator(nq + nv, nv, nu, nf, 0.01) |
| 153 | + |
147 | 154 | """ Initialize simulation""" |
148 | 155 | device = BulletRobot( |
149 | 156 | model_handler.getModel().names, |
|
155 | 162 | ) |
156 | 163 |
|
157 | 164 | device.initializeJoints(model_handler.getReferenceState()[:model_handler.getModel().nq]) |
158 | | - |
159 | 165 | device.changeCamera(1.0, 60, -15, [0.6, -0.2, 0.5]) |
160 | | -nq = mpc.getModelHandler().getModel().nq |
161 | | -nv = mpc.getModelHandler().getModel().nv |
162 | 166 |
|
163 | 167 | q_meas, v_meas = device.measureState() |
164 | 168 | x_measured = np.concatenate([q_meas, v_meas]) |
|
234 | 238 | forces1 = mpc.us[1][: nk * force_size] |
235 | 239 | contact_states = mpc.ocp_handler.getContactState(0) |
236 | 240 |
|
| 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 | + |
237 | 246 | device.moveQuadrupedFeet( |
238 | 247 | mpc.getReferencePose(0, "FL_foot").translation, |
239 | 248 | mpc.getReferencePose(0, "FR_foot").translation, |
|
243 | 252 |
|
244 | 253 | for j in range(N_simu): |
245 | 254 | # time.sleep(0.01) |
| 255 | + interpolator.interpolate(j / float(N_simu), xss, uss, ddqs, forces) |
| 256 | + |
246 | 257 | q_meas, v_meas = device.measureState() |
247 | 258 | x_measured = np.concatenate([q_meas, v_meas]) |
248 | 259 |
|
249 | 260 | mpc.getDataHandler().updateInternalData(x_measured, True) |
250 | 261 |
|
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 | | - |
254 | 262 | qp.solveQP( |
255 | 263 | mpc.getDataHandler().getData(), |
256 | 264 | contact_states, |
257 | 265 | x_measured[nq:], |
258 | | - a_interp, |
| 266 | + interpolator.a_interpolated, |
259 | 267 | np.zeros(12), |
260 | | - f_interp, |
| 268 | + interpolator.forces_interpolated, |
261 | 269 | mpc.getDataHandler().getData().M, |
262 | 270 | ) |
263 | 271 |
|
|
0 commit comments