|
| 1 | +import copy |
| 2 | +import os |
| 3 | + |
| 4 | +import numpy as np |
1 | 5 | import pinocchio as se3 |
2 | | -from pinocchio import libpinocchio_pywrap as pin |
| 6 | +from numpy.linalg import norm |
| 7 | + |
3 | 8 | import tsid |
4 | 9 |
|
5 | | -import numpy as np |
6 | | -import copy |
| 10 | +se3.switchToNumpyMatrix() |
7 | 11 |
|
8 | 12 | print("") |
9 | 13 | print("Test InvDyn") |
10 | 14 | print("") |
11 | 15 |
|
12 | | -import os |
13 | 16 | filename = str(os.path.dirname(os.path.abspath(__file__))) |
14 | | -path = filename + '/../models/romeo' |
| 17 | +path = filename + '/../../models/romeo' |
15 | 18 | urdf = path + '/urdf/romeo.urdf' |
16 | 19 | vector = se3.StdVec_StdString() |
17 | 20 | vector.extend(item for item in path) |
|
20 | 23 | srdf = path + '/srdf/romeo_collision.srdf' |
21 | 24 |
|
22 | 25 | model = robot.model() |
23 | | -pin.loadReferenceConfigurations(model, srdf, False) |
| 26 | +se3.loadReferenceConfigurations(model, srdf, False) |
24 | 27 | q = model.referenceConfigurations["half_sitting"] |
25 | 28 |
|
26 | | - |
27 | 29 | q[2] += 0.84 |
28 | 30 | v = np.matrix(np.zeros(robot.nv)).transpose() |
29 | 31 |
|
|
52 | 54 | invdyn = tsid.InverseDynamicsFormulationAccForce("tsid", robot, False) |
53 | 55 | invdyn.computeProblemData(t, q, v) |
54 | 56 | data = invdyn.data() |
55 | | -contact_Point = np.matrix(np.ones((3,4)) * lz) |
| 57 | +contact_Point = np.matrix(np.ones((3, 4)) * lz) |
56 | 58 | contact_Point[0, :] = [-lxn, -lxn, lxp, lxp] |
57 | 59 | contact_Point[1, :] = [-lyn, lyp, -lyn, lyp] |
58 | 60 |
|
59 | | -contactRF =tsid.Contact6d("contact_rfoot", robot, rf_frame_name, contact_Point, contactNormal, mu, fMin, fMax, w_forceRef) |
| 61 | +contactRF = tsid.Contact6d("contact_rfoot", robot, rf_frame_name, contact_Point, contactNormal, mu, fMin, fMax, |
| 62 | + w_forceRef) |
60 | 63 | contactRF.setKp(kp_contact * np.matrix(np.ones(6)).transpose()) |
61 | 64 | contactRF.setKd(2.0 * np.sqrt(kp_contact) * np.matrix(np.ones(6)).transpose()) |
62 | 65 | H_rf_ref = robot.position(data, robot.model().getJointId(rf_frame_name)) |
63 | 66 | contactRF.setReference(H_rf_ref) |
64 | 67 | invdyn.addRigidContact(contactRF) |
65 | 68 |
|
66 | | -contactLF =tsid.Contact6d("contact_lfoot", robot, lf_frame_name, contact_Point, contactNormal, mu, fMin, fMax, w_forceRef) |
| 69 | +contactLF = tsid.Contact6d("contact_lfoot", robot, lf_frame_name, contact_Point, contactNormal, mu, fMin, fMax, |
| 70 | + w_forceRef) |
67 | 71 | contactLF.setKp(kp_contact * np.matrix(np.ones(6)).transpose()) |
68 | 72 | contactLF.setKd(2.0 * np.sqrt(kp_contact) * np.matrix(np.ones(6)).transpose()) |
69 | 73 | H_lf_ref = robot.position(data, robot.model().getJointId(lf_frame_name)) |
|
76 | 80 | invdyn.addMotionTask(comTask, w_com, 1, 0.0) |
77 | 81 |
|
78 | 82 | postureTask = tsid.TaskJointPosture("task-posture", robot) |
79 | | -postureTask.setKp(kp_posture * np.matrix(np.ones(robot.nv-6)).transpose()) |
80 | | -postureTask.setKd(2.0 * np.sqrt(kp_posture) * np.matrix(np.ones(robot.nv-6)).transpose()) |
| 83 | +postureTask.setKp(kp_posture * np.matrix(np.ones(robot.nv - 6)).transpose()) |
| 84 | +postureTask.setKd(2.0 * np.sqrt(kp_posture) * np.matrix(np.ones(robot.nv - 6)).transpose()) |
81 | 85 | invdyn.addMotionTask(postureTask, w_posture, 1, 0.0) |
82 | 86 |
|
83 | 87 | ########### Test 1 ##################3 |
|
97 | 101 | s = tsid.TrajectorySample(12, 6) |
98 | 102 | H_rf_ref_vec = np.matrix(np.zeros(12)).transpose() |
99 | 103 | H_rf_ref_vec[0:3] = H_rf_ref.translation |
100 | | -for i in range(0,3): |
101 | | - H_rf_ref_vec[3*i+3: 3*i+6] = H_rf_ref.rotation[:, i] |
| 104 | +for i in range(0, 3): |
| 105 | + H_rf_ref_vec[3 * i + 3:3 * i + 6] = H_rf_ref.rotation[:, i] |
102 | 106 | s.pos(H_rf_ref_vec) |
103 | 107 | rightFootTask.setReference(s) |
104 | 108 |
|
|
109 | 113 |
|
110 | 114 | q_ref = q[7:] |
111 | 115 | trajPosture = tsid.TrajectoryEuclidianConstant("traj_joint", q_ref) |
112 | | -samplePosture = tsid.TrajectorySample(robot.nv-6) |
| 116 | +samplePosture = tsid.TrajectorySample(robot.nv - 6) |
113 | 117 |
|
114 | 118 | solver = tsid.SolverHQuadProg("qp solver") |
115 | 119 | solver.resize(invdyn.nVar, invdyn.nEq, invdyn.nIn) |
116 | 120 |
|
117 | | -tau_old = np.matrix(np.zeros(robot.nv-6)).transpose() |
| 121 | +tau_old = np.matrix(np.zeros(robot.nv - 6)).transpose() |
118 | 122 |
|
119 | 123 | for i in range(0, max_it): |
120 | 124 | if i == REMOVE_CONTACT_N: |
|
130 | 134 | if i == 0: |
131 | 135 | HQPData.print_all() |
132 | 136 |
|
133 | | - from numpy.linalg import norm as norm |
134 | | - |
135 | 137 | sol = solver.solve(HQPData) |
136 | 138 | tau = invdyn.getActuatorForces(sol) |
137 | 139 | dv = invdyn.getAccelerations(sol) |
138 | 140 |
|
139 | 141 | if i > 0: |
140 | | - #assert norm(tau-tau_old) < 2e1 |
| 142 | + # assert norm(tau-tau_old) < 2e1 |
141 | 143 | tau_old = tau |
142 | | - if i%PRINT_N == 0: |
| 144 | + if i % PRINT_N == 0: |
143 | 145 | print("Time ", i) |
144 | 146 | if invdyn.checkContact(contactRF.name, sol): |
145 | 147 | f = invdyn.getContactForce(contactRF.name, sol) |
|
152 | 154 | print(" ", comTask.name, " err:", norm(comTask.position_error, 2)) |
153 | 155 | print(" ", "v: ", norm(v, 2), "dv: ", norm(dv)) |
154 | 156 |
|
155 | | - v += dt*dv |
| 157 | + v += dt * dv |
156 | 158 | q = se3.integrate(robot.model(), q, dt * v) |
157 | 159 | t += dt |
158 | 160 |
|
|
0 commit comments