4 import pinocchio
as pin
6 from numpy.linalg
import norm
14 filename = str(os.path.dirname(os.path.abspath(__file__)))
15 path = filename +
"/../../models/romeo" 16 urdf = path +
"/urdf/romeo.urdf" 17 vector = pin.StdVec_StdString()
18 vector.extend(item
for item
in path)
19 robot = tsid.RobotWrapper(urdf, vector, pin.JointModelFreeFlyer(),
False)
23 srdf = path +
"/srdf/romeo_collision.srdf" 24 pin.loadReferenceConfigurations(model, srdf,
False)
25 q = model.referenceConfigurations[
"half_sitting"]
28 print(
"q:", q.transpose())
30 pin.centerOfMass(model, data, q)
32 taskCOM = tsid.TaskComEquality(
"task-com", robot)
35 Kd = 20.0 * np.ones(3)
39 assert np.linalg.norm(Kp - taskCOM.Kp, 2) < tol
40 assert np.linalg.norm(Kd - taskCOM.Kd, 2) < tol
42 com_ref = data.com[0] + np.ones(3) * 0.02
43 traj = tsid.TrajectoryEuclidianConstant(
"traj_se3", com_ref)
44 sample = tsid.TrajectorySample(0)
49 Jpinv = np.zeros((robot.nv, 3))
51 v = np.zeros(robot.nv)
53 for i
in range(0, max_it):
54 robot.computeAllTerms(data, q, v)
55 sample = traj.computeNext()
56 taskCOM.setReference(sample)
57 const = taskCOM.compute(t, q, v, data)
59 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
60 dv = Jpinv.dot(const.vector)
62 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
64 q = pin.integrate(model, q, dt * v)
67 error = np.linalg.norm(taskCOM.position_error, 2)
68 assert error - error_past < 1e-4
71 print(
"Success Convergence")
80 np.linalg.norm(taskCOM.velocity_error, 2),
84 print(
"Test Task Joint Posture")
87 q = model.referenceConfigurations[
"half_sitting"]
90 task_joint = tsid.TaskJointPosture(
"task-posture", robot)
93 Kp = 100 * np.ones(na)
94 Kd = 20.0 * np.ones(na)
98 assert np.linalg.norm(Kp - task_joint.Kp, 2) < tol
99 assert np.linalg.norm(Kd - task_joint.Kd, 2) < tol
101 q_ref = np.random.randn(na)
102 traj = tsid.TrajectoryEuclidianConstant(
"traj_joint", q_ref)
103 sample = tsid.TrajectorySample(0)
109 for i
in range(0, max_it):
110 robot.computeAllTerms(data, q, v)
111 sample = traj.computeNext()
112 task_joint.setReference(sample)
113 const = task_joint.compute(t, q, v, data)
115 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
116 dv = Jpinv.dot(const.vector)
118 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
120 q = pin.integrate(model, q, dt * v)
123 error = np.linalg.norm(task_joint.position_error, 2)
124 assert error - error_past < 1e-4
127 print(
"Success Convergence")
136 np.linalg.norm(task_joint.velocity_error, 2),
140 print(
"Test Task SE3")
143 q = model.referenceConfigurations[
"half_sitting"]
146 task_se3 = tsid.TaskSE3Equality(
"task-se3", robot,
"RWristPitch")
149 Kp = 100 * np.ones(na)
150 Kd = 20.0 * np.ones(na)
154 assert np.linalg.norm(Kp - task_se3.Kp, 2) < tol
155 assert np.linalg.norm(Kd - task_se3.Kd, 2) < tol
157 M_ref = pin.SE3.Random()
159 traj = tsid.TrajectorySE3Constant(
"traj_se3", M_ref)
160 sample = tsid.TrajectorySample(0)
166 for i
in range(0, max_it):
167 robot.computeAllTerms(data, q, v)
168 sample = traj.computeNext()
169 task_se3.setReference(sample)
171 const = task_se3.compute(t, q, v, data)
173 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
174 dv = Jpinv.dot(const.vector)
176 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
179 q = pin.integrate(model, q, dt * v)
182 error = np.linalg.norm(task_se3.position_error, 2)
183 assert error - error_past < 1e-4
186 print(
"Success Convergence")
195 np.linalg.norm(task_se3.velocity_error, 2),
199 print(
"Test Task Angular Momentum")
203 filename = str(os.path.dirname(os.path.abspath(__file__)))
204 path = filename +
"/../../models/romeo" 205 urdf = path +
"/urdf/romeo.urdf" 206 vector = pin.StdVec_StdString()
207 vector.extend(item
for item
in path)
208 robot = tsid.RobotWrapper(urdf, vector, pin.JointModelFreeFlyer(),
False)
209 model = robot.model()
212 srdf = path +
"/srdf/romeo_collision.srdf" 213 pin.loadReferenceConfigurations(model, srdf,
False)
214 q = model.referenceConfigurations[
"half_sitting"]
217 print(
"q:", q.transpose())
219 taskAM = tsid.TaskAMEquality(
"task-AM", robot)
221 Kp = 100 * np.ones(3)
222 Kd = 20.0 * np.ones(3)
226 assert np.linalg.norm(Kp - taskAM.Kp, 2) < tol
227 assert np.linalg.norm(Kd - taskAM.Kd, 2) < tol
230 traj = tsid.TrajectoryEuclidianConstant(
"traj_se3", am_ref)
231 sample = tsid.TrajectorySample(0)
236 Jpinv = np.zeros((robot.nv, 3))
238 v = np.random.randn(robot.nv)
240 for i
in range(0, max_it):
241 robot.computeAllTerms(data, q, v)
242 sample = traj.computeNext()
243 taskAM.setReference(sample)
244 const = taskAM.compute(t, q, v, data)
250 q_next = pin.integrate(model, q, dt * v)
251 data_next = robot.data().copy()
252 robot.computeAllTerms(data_next, q_next, v)
254 J_am_next = data_next.Ag
255 drift = (J_am_next[-3:, :] - J_am[-3:, :]).dot(v) / dt
256 drift_pin = pin.computeCentroidalMomentumTimeVariation(model, data).angular
257 diff_drift = norm(drift_pin - drift)
258 print(
"Difference between drift computations: ", diff_drift)
260 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
261 dv = Jpinv.dot(const.vector)
263 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
265 q = pin.integrate(model, q, dt * v)
268 error = np.linalg.norm(taskAM.momentum_error, 2)
269 assert error - error_past < 1e-4
272 print(
"Success Convergence")
275 print(
"Time :", t,
"Momentum error :", error)
278 print(
"Test Task Joint Posture (Uncommon joints)")
282 from generator
import create_7dof_arm
291 robot = tsid.RobotWrapper(model, tsid.FIXED_BASE_SYSTEM,
False)
294 q = pin.neutral(model)
295 v = np.zeros(robot.nv)
297 task_joint = tsid.TaskJointPosture(
"task-posture-uncommon", robot)
299 Kp = 100 * np.ones(robot.nv)
300 Kd = 20.0 * np.ones(robot.na)
304 assert np.linalg.norm(Kp - task_joint.Kp, 2) < tol
305 assert np.linalg.norm(Kd - task_joint.Kd, 2) < tol
307 q_ref = pin.randomConfiguration(model)
309 sample = tsid.TrajectorySample(robot.nq, robot.nv)
311 sample.derivative(np.zeros(robot.nv))
312 sample.second_derivative(np.zeros(robot.nv))
318 for i
in range(0, max_it):
319 robot.computeAllTerms(data, q, v)
320 task_joint.setReference(sample)
321 const = task_joint.compute(t, q, v, data)
323 Jpinv = np.linalg.pinv(const.matrix, 1e-5)
324 dv = Jpinv.dot(const.vector)
326 assert np.linalg.norm(Jpinv.dot(const.matrix), 2) - 1.0 < tol
328 q = pin.integrate(model, q, dt * v)
331 error = np.linalg.norm(task_joint.position_error, 2)
332 assert error - error_past < 1e-4
335 print(
"Success Convergence")
344 np.linalg.norm(task_joint.velocity_error, 2),
347 print(
"All test is done")
def create_7dof_arm(revoluteOnly=False)