1 from pathlib
import Path
4 import pinocchio
as pin
6 from numpy.linalg
import norm
9 from generator
import create_7dof_arm
12 print(
"Test Task COM")
17 filename = str(Path(__file__).resolve().parent)
18 path = filename +
"/../../models/romeo"
19 urdf = path +
"/urdf/romeo.urdf"
20 vector = pin.StdVec_StdString()
21 vector.extend(item
for item
in path)
22 robot = tsid.RobotWrapper(urdf, vector, pin.JointModelFreeFlyer(),
False)
26 srdf = path +
"/srdf/romeo_collision.srdf"
27 pin.loadReferenceConfigurations(model, srdf,
False)
28 q = model.referenceConfigurations[
"half_sitting"]
31 print(
"q:", q.transpose())
33 pin.centerOfMass(model, data, q)
35 taskCOM = tsid.TaskComEquality(
"task-com", robot)
38 Kd = 20.0 * np.ones(3)
42 assert np.linalg.norm(Kp - taskCOM.Kp, 2) < tol
43 assert np.linalg.norm(Kd - taskCOM.Kd, 2) < tol
45 com_ref = data.com[0] + np.ones(3) * 0.02
46 traj = tsid.TrajectoryEuclidianConstant(
"traj_se3", com_ref)
47 sample = tsid.TrajectorySample(0)
52 Jpinv = np.zeros((robot.nv, 3))
54 v = np.zeros(robot.nv)
56 for i
in range(0, max_it):
57 robot.computeAllTerms(data, q, v)
58 sample = traj.computeNext()
59 taskCOM.setReference(sample)
60 const = taskCOM.compute(t, q, v, data)
62 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
63 dv = Jpinv.dot(const.vector)
65 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
67 q = pin.integrate(model, q, dt * v)
70 error = np.linalg.norm(taskCOM.position_error, 2)
71 assert error - error_past < 1e-4
74 print(
"Success Convergence")
83 np.linalg.norm(taskCOM.velocity_error, 2),
87 print(
"Test Task Joint Posture")
90 q = model.referenceConfigurations[
"half_sitting"]
93 task_joint = tsid.TaskJointPosture(
"task-posture", robot)
96 Kp = 100 * np.ones(na)
97 Kd = 20.0 * np.ones(na)
101 assert np.linalg.norm(Kp - task_joint.Kp, 2) < tol
102 assert np.linalg.norm(Kd - task_joint.Kd, 2) < tol
104 rng = np.random.default_rng()
105 q_ref = rng.standard_normal(na)
106 traj = tsid.TrajectoryEuclidianConstant(
"traj_joint", q_ref)
107 sample = tsid.TrajectorySample(0)
113 for i
in range(0, max_it):
114 robot.computeAllTerms(data, q, v)
115 sample = traj.computeNext()
116 task_joint.setReference(sample)
117 const = task_joint.compute(t, q, v, data)
119 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
120 dv = Jpinv.dot(const.vector)
122 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
124 q = pin.integrate(model, q, dt * v)
127 error = np.linalg.norm(task_joint.position_error, 2)
128 assert error - error_past < 1e-4
131 print(
"Success Convergence")
140 np.linalg.norm(task_joint.velocity_error, 2),
144 print(
"Test Task SE3")
147 q = model.referenceConfigurations[
"half_sitting"]
150 task_se3 = tsid.TaskSE3Equality(
"task-se3", robot,
"RWristPitch")
153 Kp = 100 * np.ones(na)
154 Kd = 20.0 * np.ones(na)
158 assert np.linalg.norm(Kp - task_se3.Kp, 2) < tol
159 assert np.linalg.norm(Kd - task_se3.Kd, 2) < tol
161 M_ref = pin.SE3.Random()
163 traj = tsid.TrajectorySE3Constant(
"traj_se3", M_ref)
164 sample = tsid.TrajectorySample(0)
170 for i
in range(0, max_it):
171 robot.computeAllTerms(data, q, v)
172 sample = traj.computeNext()
173 task_se3.setReference(sample)
175 const = task_se3.compute(t, q, v, data)
177 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
178 dv = Jpinv.dot(const.vector)
180 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
183 q = pin.integrate(model, q, dt * v)
186 error = np.linalg.norm(task_se3.position_error, 2)
187 assert error - error_past < 1e-4
190 print(
"Success Convergence")
199 np.linalg.norm(task_se3.velocity_error, 2),
203 print(
"Test Task Angular Momentum")
207 filename = str(Path(__file__).resolve().parent)
208 path = filename +
"/../../models/romeo"
209 urdf = path +
"/urdf/romeo.urdf"
210 vector = pin.StdVec_StdString()
211 vector.extend(item
for item
in path)
212 robot = tsid.RobotWrapper(urdf, vector, pin.JointModelFreeFlyer(),
False)
213 model = robot.model()
216 srdf = path +
"/srdf/romeo_collision.srdf"
217 pin.loadReferenceConfigurations(model, srdf,
False)
218 q = model.referenceConfigurations[
"half_sitting"]
221 print(
"q:", q.transpose())
223 taskAM = tsid.TaskAMEquality(
"task-AM", robot)
225 Kp = 100 * np.ones(3)
226 Kd = 20.0 * np.ones(3)
230 assert np.linalg.norm(Kp - taskAM.Kp, 2) < tol
231 assert np.linalg.norm(Kd - taskAM.Kd, 2) < tol
234 traj = tsid.TrajectoryEuclidianConstant(
"traj_se3", am_ref)
235 sample = tsid.TrajectorySample(0)
240 Jpinv = np.zeros((robot.nv, 3))
242 v = rng.standard_normal(robot.nv)
244 for i
in range(0, max_it):
245 robot.computeAllTerms(data, q, v)
246 sample = traj.computeNext()
247 taskAM.setReference(sample)
248 const = taskAM.compute(t, q, v, data)
254 q_next = pin.integrate(model, q, dt * v)
255 data_next = robot.data().copy()
256 robot.computeAllTerms(data_next, q_next, v)
258 J_am_next = data_next.Ag
259 drift = (J_am_next[-3:, :] - J_am[-3:, :]).dot(v) / dt
260 drift_pin = pin.computeCentroidalMomentumTimeVariation(model, data).angular
261 diff_drift = norm(drift_pin - drift)
262 print(
"Difference between drift computations: ", diff_drift)
264 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
265 dv = Jpinv.dot(const.vector)
267 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
269 q = pin.integrate(model, q, dt * v)
272 error = np.linalg.norm(taskAM.momentum_error, 2)
273 assert error - error_past < 1e-4
276 print(
"Success Convergence")
279 print(
"Time :", t,
"Momentum error :", error)
282 print(
"Test Task Joint Posture (Uncommon joints)")
293 robot = tsid.RobotWrapper(model, tsid.FIXED_BASE_SYSTEM,
False)
296 q = pin.neutral(model)
297 v = np.zeros(robot.nv)
299 task_joint = tsid.TaskJointPosture(
"task-posture-uncommon", robot)
301 Kp = 100 * np.ones(robot.nv)
302 Kd = 20.0 * np.ones(robot.na)
306 assert np.linalg.norm(Kp - task_joint.Kp, 2) < tol
307 assert np.linalg.norm(Kd - task_joint.Kd, 2) < tol
309 q_ref = pin.randomConfiguration(model)
311 sample = tsid.TrajectorySample(robot.nq, robot.nv)
313 sample.derivative(np.zeros(robot.nv))
314 sample.second_derivative(np.zeros(robot.nv))
320 for i
in range(0, max_it):
321 robot.computeAllTerms(data, q, v)
322 task_joint.setReference(sample)
323 const = task_joint.compute(t, q, v, data)
325 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
326 dv = Jpinv.dot(const.vector)
328 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
330 q = pin.integrate(model, q, dt * v)
333 error = np.linalg.norm(task_joint.position_error, 2)
334 assert error - error_past < 1e-4
337 print(
"Success Convergence")
346 np.linalg.norm(task_joint.velocity_error, 2),
349 print(
"All test is done")