bindings_contact_inverse_dynamics.py
Go to the documentation of this file.
1 import os
2 import unittest
3 import numpy as np
4 
5 import pinocchio as pin
6 from test_case import PinocchioTestCase as TestCase
7 
8 
9 @unittest.skipUnless(pin.WITH_URDFDOM, "Needs URDFDOM")
11  def setUp(self):
12  self.current_file = os.path.dirname(str(os.path.abspath(__file__)))
13  self.model_dir = os.path.abspath(
14  os.path.join(self.current_file, "../../models/")
15  )
16  self.model_path = os.path.abspath(
17  os.path.join(
18  self.model_dir,
19  "example-robot-data/robots/talos_data",
20  )
21  )
22  self.urdf_filename = "talos_reduced.urdf"
23  self.srdf_filename = "talos.srdf"
24  self.urdf_model_path = os.path.join(
25  self.model_path,
26  "robots",
27  self.urdf_filename,
28  )
29  self.srdf_full_path = os.path.join(
30  self.model_path,
31  "srdf",
32  self.srdf_filename,
33  )
34 
35  def load_model(self):
36  self.model = pin.buildModelFromUrdf(
37  self.urdf_model_path, pin.JointModelFreeFlyer()
38  )
39  pin.loadReferenceConfigurations(self.model, self.srdf_full_path)
40  self.q0 = self.model.referenceConfigurations["half_sitting"]
41 
43  self.load_model()
44  model = self.model
45  feet_name = ["left_sole_link", "right_sole_link"]
46  frame_ids = [model.getFrameId(frame_name) for frame_name in feet_name]
47 
48  q = self.q0
49  v = np.zeros((model.nv))
50  a = np.zeros((model.nv))
51  data = model.createData()
52 
53  contact_models_list = []
54  contact_datas_list = []
55  cones_list = []
56 
57  contact_models_vec = pin.StdVec_RigidConstraintModel()
58  contact_datas_vec = pin.StdVec_RigidConstraintData()
59  cones_vec = pin.StdVec_CoulombFrictionCone()
60 
61  for frame_id in frame_ids:
62  frame = model.frames[frame_id]
63  contact_model = pin.RigidConstraintModel(
64  pin.ContactType.CONTACT_3D, model, frame.parentJoint, frame.placement
65  )
66 
67  contact_models_list.append(contact_model)
68  contact_datas_list.append(contact_model.createData())
69  cones_list.append(pin.CoulombFrictionCone(0.4))
70 
71  contact_models_vec.append(contact_model)
72  contact_datas_vec.append(contact_model.createData())
73  cones_vec.append(pin.CoulombFrictionCone(0.4))
74 
75  constraint_dim = 0
76  for m in contact_models_list:
77  constraint_dim += m.size()
78 
79  dt = 1e-3
80  R = np.zeros(constraint_dim)
81  constraint_correction = np.zeros(constraint_dim)
82  lambda_guess = np.zeros(constraint_dim)
83  prox_settings = pin.ProximalSettings(1e-12, 1e-6, 1)
84  # pin.initConstraintDynamics(model, data, contact_models_list) # not needed
85 
86  # test 1 with vector of contact models, contact datas and cones
87  tau1 = pin.contactInverseDynamics(
88  model,
89  data,
90  q,
91  v,
92  a,
93  dt,
94  contact_models_vec,
95  contact_datas_vec,
96  cones_vec,
97  R,
98  constraint_correction,
99  prox_settings,
100  lambda_guess,
101  )
102 
103  # test 2 with list of contact models, cones
104  tau2 = pin.contactInverseDynamics(
105  model,
106  data,
107  q,
108  v,
109  a,
110  dt,
111  contact_models_list,
112  contact_datas_vec,
113  cones_list,
114  R,
115  constraint_correction,
116  prox_settings,
117  lambda_guess,
118  )
119 
120  # test 3 with list of contact models, contact datas and cones
121  tau3 = pin.contactInverseDynamics(
122  model,
123  data,
124  q,
125  v,
126  a,
127  dt,
128  contact_models_list,
129  contact_datas_list,
130  cones_list,
131  R,
132  constraint_correction,
133  prox_settings,
134  lambda_guess,
135  )
136  self.assertApprox(tau1, tau2)
137  self.assertApprox(tau1, tau3)
138 
139 
140 if __name__ == "__main__":
141  unittest.main()
bindings_contact_inverse_dynamics.TestContactInverseDynamics.load_model
def load_model(self)
Definition: bindings_contact_inverse_dynamics.py:35
bindings_contact_inverse_dynamics.TestContactInverseDynamics.srdf_full_path
srdf_full_path
Definition: bindings_contact_inverse_dynamics.py:29
bindings_contact_inverse_dynamics.TestContactInverseDynamics.test_call_to_contact_inverse_dynamics
def test_call_to_contact_inverse_dynamics(self)
Definition: bindings_contact_inverse_dynamics.py:42
bindings_contact_inverse_dynamics.TestContactInverseDynamics.model_dir
model_dir
Definition: bindings_contact_inverse_dynamics.py:13
bindings_contact_inverse_dynamics.TestContactInverseDynamics.srdf_filename
srdf_filename
Definition: bindings_contact_inverse_dynamics.py:23
bindings_contact_inverse_dynamics.TestContactInverseDynamics.model
model
Definition: bindings_contact_inverse_dynamics.py:36
bindings_contact_inverse_dynamics.TestContactInverseDynamics.urdf_model_path
urdf_model_path
Definition: bindings_contact_inverse_dynamics.py:24
bindings_contact_inverse_dynamics.TestContactInverseDynamics
Definition: bindings_contact_inverse_dynamics.py:10
bindings_contact_inverse_dynamics.TestContactInverseDynamics.current_file
current_file
Definition: bindings_contact_inverse_dynamics.py:12
bindings_contact_inverse_dynamics.TestContactInverseDynamics.setUp
def setUp(self)
Definition: bindings_contact_inverse_dynamics.py:11
bindings_contact_inverse_dynamics.TestContactInverseDynamics.q0
q0
Definition: bindings_contact_inverse_dynamics.py:40
bindings_contact_inverse_dynamics.TestContactInverseDynamics.urdf_filename
urdf_filename
Definition: bindings_contact_inverse_dynamics.py:22
bindings_contact_inverse_dynamics.TestContactInverseDynamics.model_path
model_path
Definition: bindings_contact_inverse_dynamics.py:16


pinocchio
Author(s):
autogenerated on Wed Jun 19 2024 02:41:09