bindings_com_velocity_derivatives.py
Go to the documentation of this file.
1 import unittest
2 import pinocchio as pin
3 from pinocchio.utils import *
4 from numpy.linalg import norm
5 
6 
7 def df_dq(model, func, q, h=1e-9):
8  """Perform df/dq by num_diff. q is in the lie manifold.
9  :params func: function to differentiate f : np.array -> np.array
10  :params q: configuration value at which f is differentiated. type np.array
11  :params h: eps
12 
13  :returns df/dq
14  """
15  dq = zero(model.nv)
16  f0 = func(q)
17  res = zero([len(f0), model.nv])
18  for iq in range(model.nv):
19  dq[iq] = h
20  res[:, iq] = (func(pin.integrate(model, q, dq)) - f0) / h
21  dq[iq] = 0
22  return res
23 
24 
25 class TestVComDerivativesBindings(unittest.TestCase):
26  def setUp(self):
27  self.rmodel = rmodel = pin.buildSampleModelHumanoid()
28  self.rdata = rmodel.createData()
29  self.rdata_fd = rmodel.createData()
30 
31  self.rmodel.lowerPositionLimit[:3] = -1.0
32  self.rmodel.upperPositionLimit[:3] = -1.0
33  self.q = pin.randomConfiguration(rmodel)
34  self.vq = rand(rmodel.nv) * 2 - 1
35 
36  self.precision = 1e-8
37 
38  def test_numdiff(self):
39  rmodel, rdata = self.rmodel, self.rdata
40  rdata_fd = self.rdata_fd
41  q, vq = self.q, self.vq
42 
43 
44  pin.computeAllTerms(rmodel, rdata, q, vq)
45  dvc_dq = pin.getCenterOfMassVelocityDerivatives(rmodel, rdata)
46 
47 
48  def calc_vc(q, vq):
49  """Compute COM velocity"""
50  pin.centerOfMass(rmodel, rdata_fd, q, vq)
51  return rdata_fd.vcom[0].copy()
52 
53  dvc_dqn = df_dq(rmodel, lambda _q: calc_vc(_q, vq), q)
54 
55  self.assertTrue(np.allclose(dvc_dq, dvc_dqn, atol=np.sqrt(self.precision)))
56 
57 
58 if __name__ == "__main__":
59  unittest.main()
bindings_com_velocity_derivatives.TestVComDerivativesBindings.rmodel
rmodel
Definition: bindings_com_velocity_derivatives.py:27
bindings_com_velocity_derivatives.TestVComDerivativesBindings.precision
precision
Definition: bindings_com_velocity_derivatives.py:36
bindings_com_velocity_derivatives.TestVComDerivativesBindings
Definition: bindings_com_velocity_derivatives.py:25
bindings_com_velocity_derivatives.TestVComDerivativesBindings.rdata
rdata
Definition: bindings_com_velocity_derivatives.py:28
bindings_com_velocity_derivatives.TestVComDerivativesBindings.test_numdiff
def test_numdiff(self)
Definition: bindings_com_velocity_derivatives.py:38
bindings_com_velocity_derivatives.TestVComDerivativesBindings.vq
vq
Definition: bindings_com_velocity_derivatives.py:34
bindings_com_velocity_derivatives.df_dq
def df_dq(model, func, q, h=1e-9)
Definition: bindings_com_velocity_derivatives.py:7
bindings_com_velocity_derivatives.TestVComDerivativesBindings.rdata_fd
rdata_fd
Definition: bindings_com_velocity_derivatives.py:29
bindings_com_velocity_derivatives.TestVComDerivativesBindings.q
q
Definition: bindings_com_velocity_derivatives.py:33
pinocchio.utils
Definition: bindings/python/pinocchio/utils.py:1
bindings_com_velocity_derivatives.TestVComDerivativesBindings.setUp
def setUp(self)
Definition: bindings_com_velocity_derivatives.py:26
pinocchio::copy
void copy(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &origin, DataTpl< Scalar, Options, JointCollectionTpl > &dest, KinematicLevel kinematic_level)
Copy part of the data from origin to dest. Template parameter can be used to select at which differen...
Definition: copy.hpp:42
pinocchio.utils.rand
def rand(n)
Definition: bindings/python/pinocchio/utils.py:42
pinocchio.utils.zero
def zero(n)
Definition: bindings/python/pinocchio/utils.py:38


pinocchio
Author(s):
autogenerated on Sun Jun 16 2024 02:43:06