imt-ring 1.2.1__tar.gz → 1.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. {imt-ring-1.2.1 → imt_ring-1.2.2}/PKG-INFO +1 -1
  2. {imt-ring-1.2.1 → imt_ring-1.2.2}/pyproject.toml +1 -1
  3. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/imt_ring.egg-info/PKG-INFO +1 -1
  4. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/custom_joints/suntay.py +17 -1
  5. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/motion_artifacts.py +27 -7
  6. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/transforms.py +1 -0
  7. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/callbacks.py +1 -1
  8. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_kinematics.py +6 -4
  9. {imt-ring-1.2.1 → imt_ring-1.2.2}/readme.md +0 -0
  10. {imt-ring-1.2.1 → imt_ring-1.2.2}/setup.cfg +0 -0
  11. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/imt_ring.egg-info/SOURCES.txt +0 -0
  12. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/imt_ring.egg-info/dependency_links.txt +0 -0
  13. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/imt_ring.egg-info/requires.txt +0 -0
  14. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/imt_ring.egg-info/top_level.txt +0 -0
  15. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/__init__.py +0 -0
  16. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algebra.py +0 -0
  17. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/__init__.py +0 -0
  18. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/_random.py +0 -0
  19. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/custom_joints/__init__.py +0 -0
  20. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/custom_joints/rr_imp_joint.py +0 -0
  21. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/custom_joints/rr_joint.py +0 -0
  22. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/dynamics.py +0 -0
  23. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/__init__.py +0 -0
  24. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/base.py +0 -0
  25. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/batch.py +0 -0
  26. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/pd_control.py +0 -0
  27. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/randomize.py +0 -0
  28. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/generator/types.py +0 -0
  29. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/jcalc.py +0 -0
  30. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/kinematics.py +0 -0
  31. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/algorithms/sensors.py +0 -0
  32. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/base.py +0 -0
  33. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/__init__.py +0 -0
  34. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/branched.xml +0 -0
  35. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/exclude/knee_trans_dof.xml +0 -0
  36. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/exclude/standard_sys.xml +0 -0
  37. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/exclude/standard_sys_rr_imp.xml +0 -0
  38. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/inv_pendulum.xml +0 -0
  39. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/knee_flexible_imus.xml +0 -0
  40. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/spherical_stiff.xml +0 -0
  41. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/symmetric.xml +0 -0
  42. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_all_1.xml +0 -0
  43. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_all_2.xml +0 -0
  44. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_ang0_pos0.xml +0 -0
  45. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_control.xml +0 -0
  46. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_double_pendulum.xml +0 -0
  47. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_free.xml +0 -0
  48. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_kinematics.xml +0 -0
  49. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_morph_system/four_seg_seg1.xml +0 -0
  50. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_morph_system/four_seg_seg3.xml +0 -0
  51. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_randomize_position.xml +0 -0
  52. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_sensors.xml +0 -0
  53. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples/test_three_seg_seg2.xml +0 -0
  54. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/examples.py +0 -0
  55. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/test_examples.py +0 -0
  56. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/__init__.py +0 -0
  57. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/abstract.py +0 -0
  58. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/from_xml.py +0 -0
  59. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/test_from_xml.py +0 -0
  60. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/test_to_xml.py +0 -0
  61. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/io/xml/to_xml.py +0 -0
  62. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/maths.py +0 -0
  63. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/__init__.py +0 -0
  64. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/base.py +0 -0
  65. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/ml_utils.py +0 -0
  66. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/optimizer.py +0 -0
  67. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/params/0x13e3518065c21cd8.pickle +0 -0
  68. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/ringnet.py +0 -0
  69. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/train.py +0 -0
  70. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/ml/training_loop.py +0 -0
  71. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/rendering/__init__.py +0 -0
  72. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/rendering/base_render.py +0 -0
  73. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/rendering/mujoco_render.py +0 -0
  74. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/rendering/vispy_render.py +0 -0
  75. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/rendering/vispy_visuals.py +0 -0
  76. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sim2real/__init__.py +0 -0
  77. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sim2real/sim2real.py +0 -0
  78. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/spatial.py +0 -0
  79. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sys_composer/__init__.py +0 -0
  80. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sys_composer/delete_sys.py +0 -0
  81. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sys_composer/inject_sys.py +0 -0
  82. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/sys_composer/morph_sys.py +0 -0
  83. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/__init__.py +0 -0
  84. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/batchsize.py +0 -0
  85. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/colab.py +0 -0
  86. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/hdf5.py +0 -0
  87. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/normalizer.py +0 -0
  88. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/path.py +0 -0
  89. {imt-ring-1.2.1 → imt_ring-1.2.2}/src/ring/utils/utils.py +0 -0
  90. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_algebra.py +0 -0
  91. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_base.py +0 -0
  92. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_custom_joints.py +0 -0
  93. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_dynamics.py +0 -0
  94. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_generator.py +0 -0
  95. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_jcalc.py +0 -0
  96. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_jit.py +0 -0
  97. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_maths.py +0 -0
  98. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_ml_utils.py +0 -0
  99. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_motion_artifacts.py +0 -0
  100. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_pd_control.py +0 -0
  101. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_random.py +0 -0
  102. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_randomize.py +0 -0
  103. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_rcmg.py +0 -0
  104. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_render.py +0 -0
  105. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_sensors.py +0 -0
  106. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_sim2real.py +0 -0
  107. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_sys_composer.py +0 -0
  108. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_train.py +0 -0
  109. {imt-ring-1.2.1 → imt_ring-1.2.2}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: RING: Recurrent Inertial Graph-based Estimator
5
5
  Author-email: Simon Bachhuber <simon.bachhuber@fau.de>
6
6
  Project-URL: Homepage, https://github.com/SimiPixel/ring
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "imt-ring"
7
- version = "1.2.1"
7
+ version = "1.2.2"
8
8
  authors = [
9
9
  { name="Simon Bachhuber", email="simon.bachhuber@fau.de" },
10
10
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: RING: Recurrent Inertial Graph-based Estimator
5
5
  Author-email: Simon Bachhuber <simon.bachhuber@fau.de>
6
6
  Project-URL: Homepage, https://github.com/SimiPixel/ring
@@ -8,6 +8,7 @@ from tree_utils import PyTree
8
8
 
9
9
  import ring
10
10
  from ring import maths
11
+ from ring.algorithms import jcalc
11
12
  from ring.algorithms._random import random_angle_over_time
12
13
 
13
14
  Params = PyTree
@@ -258,6 +259,9 @@ def register_suntay(sconfig: SuntayConfig, name: str = "suntay"):
258
259
  mconfig.cdf_bins_max,
259
260
  mconfig.interpolation_method,
260
261
  )
262
+ return _apply_rom(qs_flexion)
263
+
264
+ def _apply_rom(qs_flexion):
261
265
  return restrict(
262
266
  qs_flexion,
263
267
  sconfig.flexion_rot_min,
@@ -267,16 +271,26 @@ def register_suntay(sconfig: SuntayConfig, name: str = "suntay"):
267
271
  method=sconfig.flexion_rot_restrict_method,
268
272
  )
269
273
 
274
+ def coordinate_vector_to_q_suntay(q_flexion):
275
+ q_flexion = ring.maths.wrap_to_pi(q_flexion)
276
+ return _apply_rom(q_flexion)
277
+
270
278
  joint_model = ring.JointModel(
271
279
  transform=_transform_suntay,
280
+ motion=[jcalc.mrx],
272
281
  rcmg_draw_fn=_draw_flexion_angle,
282
+ p_control_term=jcalc._p_control_term_rxyz,
283
+ qd_from_q=jcalc._qd_from_q_cartesian,
284
+ coordinate_vector_to_q=coordinate_vector_to_q_suntay,
285
+ inv_kin=None,
273
286
  init_joint_params=_init_joint_params_suntay,
274
287
  utilities=dict(
275
288
  Q_S_H_alpha_beta_gamma=_utils_Q_S_H_alpha_beta_gamma,
276
289
  find_suntay_joint=_utils_find_suntay_joint,
290
+ sconfig=sconfig,
277
291
  ),
278
292
  )
279
- ring.register_new_joint_type(name, joint_model, 1, qd_width=0, overwrite=True)
293
+ ring.register_new_joint_type(name, joint_model, 1, overwrite=True)
280
294
 
281
295
 
282
296
  def MLP_DrawnFnPair(
@@ -291,6 +305,8 @@ def MLP_DrawnFnPair(
291
305
 
292
306
  if flexion_center is None:
293
307
  flexion_center = (flexion_mn + flexion_mx) / 2
308
+ else:
309
+ flexion_center = jnp.array(flexion_center)
294
310
 
295
311
  @hk.without_apply_rng
296
312
  @hk.transform
@@ -2,9 +2,10 @@ import warnings
2
2
 
3
3
  import jax
4
4
  import jax.numpy as jnp
5
+ import tree_utils
6
+
5
7
  from ring import base
6
8
  from ring import io
7
- import tree_utils
8
9
 
9
10
 
10
11
  def imu_reference_link_name(imu_link_name: str) -> str:
@@ -15,11 +16,21 @@ def unactuated_subsystem(sys) -> list[str]:
15
16
  return [imu_reference_link_name(name) for name in sys.findall_imus()]
16
17
 
17
18
 
18
- def _subsystem_factory(imu_name: str, pos_min_max: float) -> base.System:
19
+ def _subsystem_factory(
20
+ imu_name: str,
21
+ pos_min_max: float,
22
+ translational_stif: float,
23
+ translational_damp: float,
24
+ ) -> base.System:
19
25
  assert pos_min_max >= 0
20
26
  pos = f'pos_min="-{pos_min_max} -{pos_min_max} -{pos_min_max}" pos_max="{pos_min_max} {pos_min_max} {pos_min_max}"' # noqa: E501
21
- stiff = 'spring_stiff="50 50 50"'
22
- damping = 'damping="5 5 5"'
27
+ stiff = (
28
+ f'spring_stiff="{translational_stif} {translational_stif} {translational_stif}"'
29
+ )
30
+ translational_damp = translational_stif * translational_damp
31
+ damping = (
32
+ f'damping="{translational_damp} {translational_damp} {translational_damp}"'
33
+ )
23
34
  return io.load_sys_from_str(
24
35
  f"""
25
36
  <x_xy>
@@ -34,12 +45,16 @@ def _subsystem_factory(imu_name: str, pos_min_max: float) -> base.System:
34
45
  def inject_subsystems(
35
46
  sys: base.System,
36
47
  pos_min_max: float = 0.0,
48
+ rotational_stif: float = 0.3,
49
+ rotational_damp: float = 0.1,
50
+ translational_stif: float = 50.0,
51
+ translational_damp: float = 0.1,
37
52
  **kwargs,
38
53
  ) -> base.System:
39
54
  imu_idx_to_name_map = {sys.name_to_idx(imu): imu for imu in sys.findall_imus()}
40
55
 
41
- default_spher_stif = jnp.ones((3,)) * 0.3
42
- default_spher_damp = default_spher_stif * 0.1
56
+ default_spher_stif = jnp.ones((3,)) * rotational_stif
57
+ default_spher_damp = default_spher_stif * rotational_damp
43
58
  for imu in sys.findall_imus():
44
59
  sys = sys.unfreeze(imu, "spherical")
45
60
  # set default stiffness and damping of spherical joint
@@ -51,7 +66,12 @@ def inject_subsystems(
51
66
 
52
67
  _imu = imu_reference_link_name(imu)
53
68
  sys = sys.change_link_name(imu, _imu)
54
- sys = sys.inject_system(_subsystem_factory(imu, pos_min_max), _imu)
69
+ sys = sys.inject_system(
70
+ _subsystem_factory(
71
+ imu, pos_min_max, translational_stif, translational_damp
72
+ ),
73
+ _imu,
74
+ )
55
75
 
56
76
  # attach geoms to newly injected link
57
77
  new_geoms = []
@@ -277,6 +277,7 @@ _P_gains = {
277
277
  "p3d": jnp.array(3 * [P_pos]),
278
278
  "saddle": jnp.array([P_rot, P_rot]),
279
279
  "frozen": jnp.array([]),
280
+ "suntay": jnp.array([P_rot]),
280
281
  }
281
282
 
282
283
 
@@ -245,7 +245,7 @@ class SaveParamsTrainingLoopCallback(training_loop.TrainingLoopCallback):
245
245
  extension="pickle",
246
246
  )
247
247
 
248
- pickle_save(ele.params, filename, overwrite=True)
248
+ pickle_save(ele.params, filename, overwrite=False)
249
249
  if self.upload:
250
250
  success = False
251
251
  for logger in self._loggers:
@@ -1,13 +1,15 @@
1
1
  import jax
2
2
  import jax.numpy as jnp
3
+ import jaxopt
3
4
  import numpy as np
5
+ import tree_utils as tu
6
+
4
7
  import ring
5
8
  from ring import base
6
9
  from ring import maths
7
10
  from ring.algorithms import jcalc
8
11
  from ring.algorithms import kinematics
9
12
  from ring.sim2real.sim2real import _checks_time_series_of_xs
10
- import tree_utils as tu
11
13
 
12
14
 
13
15
  def test_forward_kinematics_transforms():
@@ -80,9 +82,9 @@ def test_inv_kinematics_endeffector():
80
82
  "endeffector",
81
83
  endeffector_x,
82
84
  q0=q0,
83
- # jaxopt_solver=jaxopt.GradientDescent,
84
- # maxiter=5000,
85
- # maxls=5,
85
+ jaxopt_solver=jaxopt.GradientDescent,
86
+ maxiter=5000,
87
+ maxls=3,
86
88
  )
87
89
  return value
88
90
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes