1 from pathlib
import Path
7 pinocchio_model_dir = Path(__file__).parent.parent /
"models"
8 model_path = pinocchio_model_dir /
"baxter_simple.urdf"
9 model_full = pinocchio.buildModelFromUrdf(model_path)
13 model_mimic_from_urdf = pinocchio.buildModelFromUrdf(model_path, mimic=
True)
15 print(f
"{model_full.nq=}")
16 print(f
"{model_mimic_from_urdf.nq=}")
22 print(f
"{(model_mimic_from_urdf == model_mimic)=}")
27 G = np.zeros([model_mimic.nv, model_full.nv])
28 for i
in range(model_full.njoints):
29 mimic_scaling = getattr(model_mimic.joints[i].
extract(),
"scaling",
None)
31 G[model_mimic.joints[i].idx_v, model_full.joints[i].idx_v] = mimic_scaling
34 G[model_mimic.joints[i].idx_v, model_full.joints[i].idx_v] = 1
36 print(np.array_str(G, precision=0, suppress_small=
True, max_line_width=80))
40 v_mimic = np.random.random(model_mimic.nv)
41 a_mimic = np.random.random(model_mimic.nv)
46 q_full = G.transpose() @ q_mimic
48 v_full = G.transpose() @ v_mimic
49 a_full = G.transpose() @ a_mimic
52 data_mimic = model_mimic.createData()
53 data_full = model_full.createData()
55 tau_mimic =
pinocchio.rnea(model_mimic, data_mimic, q_mimic, v_mimic, a_mimic)
57 print(f
"{np.allclose(tau_mimic, G @ tau_full)=}")
61 print(f
"{np.allclose(M_mimic, G @ M_full @ G.transpose())=}")
63 C_mimic = pinocchio.nle(model_mimic, data_mimic, q_mimic, v_mimic)
67 a_computed = np.linalg.solve(M_mimic, tau_mimic - C_mimic)
68 print(f
"{np.allclose(a_mimic,a_computed)=}")