|
1 | 1 | import numpy as np |
2 | 2 | from bullet_robot import BulletRobot |
3 | | -from simple_mpc import RobotModelHandler, RobotDataHandler, KinodynamicsOCP, MPC, Interpolator |
| 3 | +from simple_mpc import RobotModelHandler, RobotDataHandler, KinodynamicsOCP, MPC, Interpolator, KinodynamicsID, KinodynamicsIDSettings |
4 | 4 | import example_robot_data as erd |
5 | 5 | import pinocchio as pin |
6 | 6 | import time |
7 | 7 | import copy |
8 | | -from utils import save_trajectory |
9 | 8 |
|
10 | 9 | # ####### CONFIGURATION ############ |
11 | 10 | # Load robot |
|
137 | 136 | """ Interpolation """ |
138 | 137 | interpolator = Interpolator(model_handler.getModel()) |
139 | 138 |
|
| 139 | +""" Inverse Dynamics """ |
| 140 | +kino_ID_settings = KinodynamicsIDSettings() |
| 141 | +kino_ID_settings.kp_base = 7. |
| 142 | +kino_ID_settings.kp_posture = 10. |
| 143 | +kino_ID_settings.kp_contact = 10. |
| 144 | +kino_ID_settings.w_base = 100. |
| 145 | +kino_ID_settings.w_posture = 1. |
| 146 | +kino_ID_settings.w_contact_force = 1. |
| 147 | +kino_ID_settings.w_contact_motion = 1. |
| 148 | + |
| 149 | +kino_ID = KinodynamicsID(model_handler, dt, kino_ID_settings) |
| 150 | + |
| 151 | + |
140 | 152 | """ Initialize simulation""" |
141 | 153 | device = BulletRobot( |
142 | 154 | model_handler.getModel().names, |
|
183 | 195 | v = np.zeros(6) |
184 | 196 | v[0] = 0.2 |
185 | 197 | mpc.velocity_base = v |
186 | | -for t in range(300): |
187 | | - # print("Time " + str(t)) |
| 198 | +for step in range(300): |
| 199 | + # print("Time " + str(step)) |
188 | 200 | land_LF = mpc.getFootLandCycle("FL_foot") |
189 | 201 | land_RF = mpc.getFootLandCycle("RL_foot") |
190 | 202 | takeoff_LF = mpc.getFootTakeoffCycle("FL_foot") |
|
236 | 248 | mpc.getReferencePose(0, "RR_foot").translation, |
237 | 249 | ) |
238 | 250 |
|
239 | | - for j in range(N_simu): |
240 | | - # time.sleep(0.01) |
241 | | - delay = j / float(N_simu) * dt |
| 251 | + for sub_step in range(N_simu): |
| 252 | + t = (step * N_simu + sub_step) * dt |
242 | 253 |
|
| 254 | + delay = sub_step / float(N_simu) * dt |
| 255 | + xs_interp = interpolator.interpolateLinear(delay, dt, xss) |
243 | 256 | acc_interp = interpolator.interpolateLinear(delay, dt, ddqs) |
244 | | - force_interp = interpolator.interpolateLinear(delay, dt, forces) |
| 257 | + force_interp = interpolator.interpolateLinear(delay, dt, forces).reshape((4,3)) |
| 258 | + |
| 259 | + q_interp = xs_interp[:mpc.getModelHandler().getModel().nq] |
| 260 | + v_interp = xs_interp[mpc.getModelHandler().getModel().nq:] |
245 | 261 |
|
246 | 262 | q_meas, v_meas = device.measureState() |
247 | 263 | x_measured = np.concatenate([q_meas, v_meas]) |
248 | 264 |
|
249 | 265 | mpc.getDataHandler().updateInternalData(x_measured, True) |
250 | 266 |
|
251 | | - # TODO: use TSID to compute inverse dynamics and get tau_cmd |
| 267 | + kino_ID.setTarget(q_interp, v_interp, acc_interp, contact_states, force_interp) |
| 268 | + tau_cmd = kino_ID.solve(t, q_meas, v_meas) |
252 | 269 |
|
253 | | - #device.execute(tau_cmd) |
254 | | - #u_multibody.append(copy.deepcopy(tau_cmd)) |
255 | | - #x_multibody.append(x_measured) |
| 270 | + device.execute(tau_cmd) |
| 271 | + u_multibody.append(copy.deepcopy(tau_cmd)) |
| 272 | + x_multibody.append(x_measured) |
256 | 273 |
|
257 | 274 |
|
258 | 275 | force_FL = np.array(force_FL) |
|
0 commit comments