imt-ring 1.2.1__py3-none-any.whl → 1.3.0__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.2.1
3
+ Version: 1.3.0
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
@@ -6,20 +6,20 @@ ring/spatial.py,sha256=nmZ-UhRanhyM34bez8uCS4wMwaKqLkuEbgKGP5XNH60,2351
6
6
  ring/algorithms/__init__.py,sha256=t3YXcgqMJxadUjFiILVD0HlQRPLdrQyc8aKiB36w0vE,1701
7
7
  ring/algorithms/_random.py,sha256=6EG0GHYe6tCq0qUt4Jes8W1EaqqaLa0sSZhnwBbEjCE,13340
8
8
  ring/algorithms/dynamics.py,sha256=nqq5I0RYSbHNlGiLMlohz08IfL9Njsrid4upDnwkGbI,10629
9
- ring/algorithms/jcalc.py,sha256=6bO-_zFbHGDG5oq0t-HZvOSiYSWmZz_k6Z6VlNmSThA,25270
9
+ ring/algorithms/jcalc.py,sha256=oqSiwz3Be1VfIpmJXEFTNM_9_o3tyuTtyZt2aqttyN4,28213
10
10
  ring/algorithms/kinematics.py,sha256=DOboHI517Vx0pRJUFZtZPmK_qFaiKiQe-37B-M0aC-c,7422
11
11
  ring/algorithms/sensors.py,sha256=Y3Wo9qj3BWKoIHB0V04QwyD-Z5m4BrAjfBX8Pn6y9Lg,18005
12
12
  ring/algorithms/custom_joints/__init__.py,sha256=33WBnaBJMtq3vVcpMm7zmyeMrLY9PyV_8-wk5oSF65g,227
13
13
  ring/algorithms/custom_joints/rr_imp_joint.py,sha256=a3JT0w7pB94kZ95eBR8ZO853eSeyjFoiXmhYlaXoHDE,2392
14
14
  ring/algorithms/custom_joints/rr_joint.py,sha256=jnRtjtOCALMaq2_0bcu2d7qgfQ6etXpoh43MioRaDmY,1000
15
- ring/algorithms/custom_joints/suntay.py,sha256=dhkuXGhQ-NLVrd5rRXotrJhNfUYd-C8T02GkIB7w5hA,13139
15
+ ring/algorithms/custom_joints/suntay.py,sha256=d0Z54tIXiepMixE40W5H8JKxrT5U6VskPm2L2kKnQPw,13680
16
16
  ring/algorithms/generator/__init__.py,sha256=p4ucl0zQtp5NwNoXIRjmTzGGRu2WOAWFfNmYRPwQles,912
17
17
  ring/algorithms/generator/base.py,sha256=QDmzMAgtaK5M9WDl39qjXYfBa99d83vCPWEkYYmsplk,14952
18
18
  ring/algorithms/generator/batch.py,sha256=MZurZmQDH1vncoNbCspVNGNlfP0R87J6_HC7MMIqQ6A,8478
19
- ring/algorithms/generator/motion_artifacts.py,sha256=-VUcTMd1UW2oTKM8pnPvPjr988T6SXMyMU3JdKfnHpk,7995
19
+ ring/algorithms/generator/motion_artifacts.py,sha256=aKdkZU5OF4_aKyL4Yo-ftZRwrDCve1LuuREGAUlTqtI,8551
20
20
  ring/algorithms/generator/pd_control.py,sha256=3pOaYig26vmp8gippDfy2KNJRZO3kr0rGd_PBIuEROM,5759
21
21
  ring/algorithms/generator/randomize.py,sha256=G_vBIo0OwQkXL2u0djwbaoaeb02C4LQCTNNloOYIU2M,3699
22
- ring/algorithms/generator/transforms.py,sha256=3oQtqRFcnJBtuf1_ihsYej3uwNKBlRucaJDxcdEisTs,12748
22
+ ring/algorithms/generator/transforms.py,sha256=nvNDvM20tEw9Zd0ra0TxA25uf01L40Y2UKvtQmOrlGo,12782
23
23
  ring/algorithms/generator/types.py,sha256=CAhvDK5qiHnrGtkCVccB07doiz_D6lHJ35B7sW0pyZA,1110
24
24
  ring/io/__init__.py,sha256=1gEJdyDCbldbbm8QeZbLmhzSKmaQ-UqTmQgu4DBH2Z4,328
25
25
  ring/io/examples.py,sha256=KLf2iCagvRfjs9MCnQsLUlfGBjrQKrD-Qv8U0TtX6Ek,1114
@@ -40,8 +40,8 @@ ring/io/examples/test_randomize_position.xml,sha256=h6Yo5tT8QJBOJEwhE0cpppF-rvbO
40
40
  ring/io/examples/test_sensors.xml,sha256=urI_19gzwpDyWjtnse1Iy7CWCB0ezbsDP7FMLFlNw_4,494
41
41
  ring/io/examples/test_three_seg_seg2.xml,sha256=g85tx4V6PahkSbYXKWqk5vqurLos15WB6tBm1dQ_V_o,1022
42
42
  ring/io/examples/exclude/knee_trans_dof.xml,sha256=4Cuv6c7Yqa4T-RirRbrJKTT_41vRTuDlLPRLE_NopjU,1379
43
- ring/io/examples/exclude/standard_sys.xml,sha256=zTn_TVOBVmp0rq-g3aOOpjxHt6lTvPOKlHdvvqEGm-Y,8967
44
- ring/io/examples/exclude/standard_sys_rr_imp.xml,sha256=6aR_eA8RGfAMi36xojn5KyXdSSwAnc9sEotB0ukaPQM,9015
43
+ ring/io/examples/exclude/standard_sys.xml,sha256=1QxyN01TaFPKdzyacomQeA_8elcB2XRQp5D4NTUYNJw,8967
44
+ ring/io/examples/exclude/standard_sys_rr_imp.xml,sha256=1K8aLe4n97qFMQaytXdHVHDfshDhoZf78QzEe-gLjiU,9015
45
45
  ring/io/examples/test_morph_system/four_seg_seg1.xml,sha256=XJvGtEnvedejs_OmCVfQULWJNK8MLDQQ3raqPNRCJbA,1283
46
46
  ring/io/examples/test_morph_system/four_seg_seg3.xml,sha256=HktN7_a_Ly3YflWit5W-WncxApWGMORAGnRXyMEqnoA,1265
47
47
  ring/io/xml/__init__.py,sha256=-3k6ffvFyc4zm0oTyVz3ez-o3Lb9bPp2sjwSub_K1AA,242
@@ -50,9 +50,9 @@ ring/io/xml/from_xml.py,sha256=8b44sPVWgoY8JGJZLpJ8M_eLfcfu3IsMtBzSytPTPmw,9234
50
50
  ring/io/xml/test_from_xml.py,sha256=bckVrVVmEhCwujd_OF9FGYnX3zU3BgztpqGxxmd0htM,1562
51
51
  ring/io/xml/test_to_xml.py,sha256=NGn4VSiFdwhYN5YTBduWMiY9B5dwtxZhCQAR_PXeqKU,946
52
52
  ring/io/xml/to_xml.py,sha256=fohb-jWMf2cxVdT5dmknsGyrNMseICSbKEz_urbaWbQ,3407
53
- ring/ml/__init__.py,sha256=669ueX_IMTmhAE-4xCjjp90mTlj28u8voq5_5KE0ZY0,944
54
- ring/ml/base.py,sha256=5TpJtdfmlAv2j_f8yDW1U_wY4jZ2lA74pNR524JQTts,8905
55
- ring/ml/callbacks.py,sha256=qdMp572UTfwf4pUEfziur1kZ5yWBEAblaxDOjpEMfnE,13108
53
+ ring/ml/__init__.py,sha256=hHQUeYAdqRoEFtpKW4zXyNkAdeH2cPh17vc29hXcWWw,1746
54
+ ring/ml/base.py,sha256=PQ72VasEqlecBZgWP5HE5rWYyLiLq7nCVLymXo9f0dw,8959
55
+ ring/ml/callbacks.py,sha256=DkSy5c7IRqAAks2dx8acEBExYxUv-xiUFwZn4odPYq4,13253
56
56
  ring/ml/ml_utils.py,sha256=hQEmeZoahdJyFrz0NZXYi1Yijl7GvPBdqwzZBzlUIUM,7638
57
57
  ring/ml/optimizer.py,sha256=OP70P70YcX-2Z-cuoMluFk-L5Vhh_MmqiHdM9OZqyhI,4703
58
58
  ring/ml/ringnet.py,sha256=OWRDu2COmptzbpJWlRLbPIn_ioKZCAd_iu-eiY_aPjk,8521
@@ -60,7 +60,7 @@ ring/ml/train.py,sha256=ftt2MOSSNGCdL7ZoAXcbIgeHW1Wkpgp6XYyLIBUIClI,10872
60
60
  ring/ml/training_loop.py,sha256=CEokvPQuuk_WCd-J60ZDodJYcPVvyxLfgXDr_DnbzRI,3359
61
61
  ring/ml/params/0x13e3518065c21cd8.pickle,sha256=Zh2k1zK-TNxJl5F7nyTeQ9001qqRE_dfvaq1HWV287A,9355838
62
62
  ring/rendering/__init__.py,sha256=Zf7qOdzK3t2hljIrs5P4zFhzHljLSMRyDDZO2YlZk4k,75
63
- ring/rendering/base_render.py,sha256=c3NTRE0VjnWmcHqCalvfQhCwiPyoMRr_2eiU04Y-mzU,8764
63
+ ring/rendering/base_render.py,sha256=L2x83oWC2KkneuA5Lubg2qoDInDFBfH5wYlATymP9-0,8764
64
64
  ring/rendering/mujoco_render.py,sha256=aluzQJp3jrDdPfAyNmQuXIHRfgfBTCCZQqxKOx_0D2s,7770
65
65
  ring/rendering/vispy_render.py,sha256=QmRyA7Hqk3uS1SKjcncwc4_vd1m4yWryW2X0i4jRvCw,10260
66
66
  ring/rendering/vispy_visuals.py,sha256=ooBZqppnebeL0ANe6V6zUgnNTtDcdkOsa4vZuM4sx-I,7873
@@ -77,7 +77,7 @@ ring/utils/hdf5.py,sha256=BzXwVypZmEZeHVgeGZ78YYdi10NEQtnPhdrb8dQAXo0,5856
77
77
  ring/utils/normalizer.py,sha256=67L2BU1MRsMT4pD41ta3JJMppLN0ozFmnwrmXDtnqrQ,1698
78
78
  ring/utils/path.py,sha256=hAfSlqRi-ew536RnjDDM7IKapdMJc-EvhrR0Y-BCFWc,1265
79
79
  ring/utils/utils.py,sha256=AzOzR95oOyfdtJhjt5iIb35u611NlTb1Ds4QDKrGMOM,4967
80
- imt_ring-1.2.1.dist-info/METADATA,sha256=ql3agJfHytG7YejDfuifrhleUAwEUQnSuWTz3FJf13U,3104
81
- imt_ring-1.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
82
- imt_ring-1.2.1.dist-info/top_level.txt,sha256=EiT790-lAyi8iwTzJArH3f2k77rwhDn00q-4PlmvDQo,5
83
- imt_ring-1.2.1.dist-info/RECORD,,
80
+ imt_ring-1.3.0.dist-info/METADATA,sha256=fYndGMXxYVbuBmGAqpzGezBcD6-ruTt3VOAMdLxTwDE,3104
81
+ imt_ring-1.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
82
+ imt_ring-1.3.0.dist-info/top_level.txt,sha256=EiT790-lAyi8iwTzJArH3f2k77rwhDn00q-4PlmvDQo,5
83
+ imt_ring-1.3.0.dist-info/RECORD,,
@@ -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
 
ring/algorithms/jcalc.py CHANGED
@@ -88,6 +88,118 @@ class MotionConfig:
88
88
  assert nomotion_config.is_feasible()
89
89
  return nomotion_config
90
90
 
91
+ @staticmethod
92
+ def from_register(name: str) -> "MotionConfig":
93
+ return _registered_motion_configs[name]
94
+
95
+
96
+ _registered_motion_configs = {
97
+ "hinUndHer": MotionConfig(
98
+ t_min=0.3,
99
+ t_max=1.5,
100
+ dang_max=3.0,
101
+ delta_ang_min=0.5,
102
+ pos_min=-1.5,
103
+ pos_max=1.5,
104
+ randomized_interpolation_angle=True,
105
+ cor=True,
106
+ ),
107
+ "langsam": MotionConfig(
108
+ t_min=0.2,
109
+ t_max=1.25,
110
+ dang_max=2.0,
111
+ randomized_interpolation_angle=True,
112
+ dang_max_free_spherical=2.0,
113
+ cdf_bins_min=1,
114
+ cdf_bins_max=3,
115
+ pos_min=-1.5,
116
+ pos_max=1.5,
117
+ cor=True,
118
+ ),
119
+ "standard": MotionConfig(
120
+ randomized_interpolation_angle=True,
121
+ cdf_bins_min=1,
122
+ cdf_bins_max=5,
123
+ cor=True,
124
+ ),
125
+ "expFast": MotionConfig(
126
+ t_min=0.4,
127
+ t_max=1.1,
128
+ dang_max=jnp.deg2rad(180),
129
+ delta_ang_min=jnp.deg2rad(60),
130
+ delta_ang_max=jnp.deg2rad(110),
131
+ pos_min=-1.5,
132
+ pos_max=1.5,
133
+ range_of_motion_hinge_method="sigmoid",
134
+ randomized_interpolation_angle=True,
135
+ cdf_bins_min=1,
136
+ cdf_bins_max=3,
137
+ cor=True,
138
+ ),
139
+ "expSlow": MotionConfig(
140
+ t_min=0.75,
141
+ t_max=3.0,
142
+ dang_min=0.1,
143
+ dang_max=1.0,
144
+ dang_min_free_spherical=0.1,
145
+ delta_ang_min=0.4,
146
+ dang_max_free_spherical=1.0,
147
+ delta_ang_max_free_spherical=1.0,
148
+ dpos_max=0.3,
149
+ cor_dpos_max=0.3,
150
+ range_of_motion_hinge_method="sigmoid",
151
+ randomized_interpolation_angle=True,
152
+ cdf_bins_min=1,
153
+ cdf_bins_max=5,
154
+ cor=True,
155
+ ),
156
+ "expFastNoSig": MotionConfig(
157
+ t_min=0.4,
158
+ t_max=1.1,
159
+ dang_max=jnp.deg2rad(180),
160
+ delta_ang_min=jnp.deg2rad(60),
161
+ delta_ang_max=jnp.deg2rad(110),
162
+ pos_min=-1.5,
163
+ pos_max=1.5,
164
+ randomized_interpolation_angle=True,
165
+ cdf_bins_min=1,
166
+ cdf_bins_max=3,
167
+ cor=True,
168
+ ),
169
+ "expSlowNoSig": MotionConfig(
170
+ t_min=0.75,
171
+ t_max=3.0,
172
+ dang_min=0.1,
173
+ dang_max=1.0,
174
+ dang_min_free_spherical=0.1,
175
+ delta_ang_min=0.4,
176
+ dang_max_free_spherical=1.0,
177
+ delta_ang_max_free_spherical=1.0,
178
+ dpos_max=0.3,
179
+ cor_dpos_max=0.3,
180
+ randomized_interpolation_angle=True,
181
+ cdf_bins_min=1,
182
+ cdf_bins_max=3,
183
+ cor=True,
184
+ ),
185
+ "verySlow": MotionConfig(
186
+ t_min=1.5,
187
+ t_max=5.0,
188
+ dang_min=jnp.deg2rad(1),
189
+ dang_max=jnp.deg2rad(30),
190
+ delta_ang_min=jnp.deg2rad(20),
191
+ dang_min_free_spherical=jnp.deg2rad(1),
192
+ dang_max_free_spherical=jnp.deg2rad(10),
193
+ delta_ang_min_free_spherical=jnp.deg2rad(5),
194
+ dpos_max=0.3,
195
+ cor_dpos_max=0.3,
196
+ randomized_interpolation_angle=True,
197
+ cdf_bins_min=1,
198
+ cdf_bins_max=3,
199
+ cor=True,
200
+ ),
201
+ }
202
+
91
203
 
92
204
  def _is_feasible_config1(c: MotionConfig) -> bool:
93
205
  t_min, t_max = c.t_min, _to_float(c.t_max, 0.0)
@@ -2,101 +2,101 @@
2
2
  <x_xy model="arm_1Seg">
3
3
  <options dt="0.01" gravity="0.0 0.0 9.81"/>
4
4
  <worldbody>
5
- <body joint="free" name="seg2_1Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
5
+ <body joint="free" name="seg3_1Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
6
6
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
7
7
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
8
8
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
9
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
10
- <body joint="frozen" name="imu2_1Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
9
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
10
+ <body joint="frozen" name="imu3_1Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
11
11
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
12
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
12
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
13
13
  </body>
14
14
  </body>
15
- <body joint="free" name="seg2_2Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
15
+ <body joint="free" name="seg3_2Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
16
16
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
17
17
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
18
18
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
19
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
20
- <body joint="frozen" name="imu2_2Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
19
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
20
+ <body joint="frozen" name="imu3_2Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
21
21
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
22
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
22
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
23
23
  </body>
24
- <body joint="ry" name="seg3_2Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
24
+ <body joint="ry" name="seg4_2Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
25
25
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
26
26
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
27
27
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
28
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
29
- <body joint="frozen" name="imu3_2Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
28
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
29
+ <body joint="frozen" name="imu4_2Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
30
30
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
31
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
31
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
32
32
  </body>
33
33
  </body>
34
34
  </body>
35
- <body joint="free" name="seg2_3Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
35
+ <body joint="free" name="seg3_3Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
36
36
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
37
37
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
38
38
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
39
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
40
- <body joint="frozen" name="imu2_3Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
39
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
40
+ <body joint="frozen" name="imu3_3Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
41
41
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
42
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
42
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
43
43
  </body>
44
- <body joint="ry" name="seg3_3Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
44
+ <body joint="ry" name="seg4_3Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
45
45
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
46
46
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
47
47
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
48
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
49
- <body joint="frozen" name="imu3_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
48
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
49
+ <body joint="frozen" name="imu4_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
50
50
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
51
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
51
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
52
52
  </body>
53
- <body joint="rz" name="seg4_3Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
53
+ <body joint="rz" name="seg5_3Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
54
54
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
55
55
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
56
56
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
57
- <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="4"/>
58
- <body joint="frozen" name="imu4_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
57
+ <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="4"/>
58
+ <body joint="frozen" name="imu5_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
59
59
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
60
- <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="4"/>
60
+ <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="4"/>
61
61
  </body>
62
62
  </body>
63
63
  </body>
64
64
  </body>
65
- <body joint="free" name="seg5_4Seg" pos="0.2 0.0 0.0" pos_min="0.15 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
65
+ <body joint="free" name="seg2_4Seg" pos="0.2 0.0 0.0" pos_min="0.15 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
66
66
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
67
67
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="dustin_exp_white" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
68
68
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="dustin_exp_white" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
69
- <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="2"/>
70
- <body joint="frozen" name="imu5_4Seg" pos="0.10000001 0.0 0.035" pos_min="0.049999997 -0.05 -0.05" pos_max="0.15000002 0.05 0.05">
69
+ <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="2"/>
70
+ <body joint="frozen" name="imu2_4Seg" pos="0.10000001 0.0 0.035" pos_min="0.049999997 -0.05 -0.05" pos_max="0.15000002 0.05 0.05">
71
71
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
72
- <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="2"/>
72
+ <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="2"/>
73
73
  </body>
74
- <body joint="rx" name="seg2_4Seg" pos="0.2 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
74
+ <body joint="rx" name="seg3_4Seg" pos="0.2 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
75
75
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
76
76
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
77
77
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
78
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
79
- <body joint="frozen" name="imu2_4Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
78
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
79
+ <body joint="frozen" name="imu3_4Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
80
80
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
81
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
81
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
82
82
  </body>
83
- <body joint="ry" name="seg3_4Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
83
+ <body joint="ry" name="seg4_4Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0">
84
84
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
85
85
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
86
86
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
87
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
88
- <body joint="frozen" name="imu3_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
87
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
88
+ <body joint="frozen" name="imu4_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
89
89
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
90
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
90
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
91
91
  </body>
92
- <body joint="rz" name="seg4_4Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
92
+ <body joint="rz" name="seg5_4Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0">
93
93
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
94
94
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
95
95
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
96
- <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="4"/>
97
- <body joint="frozen" name="imu4_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
96
+ <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="4"/>
97
+ <body joint="frozen" name="imu5_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
98
98
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
99
- <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="4"/>
99
+ <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="4"/>
100
100
  </body>
101
101
  </body>
102
102
  </body>
@@ -2,101 +2,101 @@
2
2
  <x_xy model="arm_1Seg">
3
3
  <options dt="0.01" gravity="0.0 0.0 9.81"/>
4
4
  <worldbody>
5
- <body joint="free" name="seg2_1Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
5
+ <body joint="free" name="seg3_1Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
6
6
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
7
7
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
8
8
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
9
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
10
- <body joint="frozen" name="imu2_1Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
9
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
10
+ <body joint="frozen" name="imu3_1Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
11
11
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
12
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
12
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
13
13
  </body>
14
14
  </body>
15
- <body joint="free" name="seg2_2Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
15
+ <body joint="free" name="seg3_2Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
16
16
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
17
17
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
18
18
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
19
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
20
- <body joint="frozen" name="imu2_2Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
19
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
20
+ <body joint="frozen" name="imu3_2Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
21
21
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
22
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
22
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
23
23
  </body>
24
- <body joint="rr_imp" name="seg3_2Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
24
+ <body joint="rr_imp" name="seg4_2Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
25
25
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
26
26
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
27
27
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
28
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
29
- <body joint="frozen" name="imu3_2Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
28
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
29
+ <body joint="frozen" name="imu4_2Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
30
30
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
31
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
31
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
32
32
  </body>
33
33
  </body>
34
34
  </body>
35
- <body joint="free" name="seg2_3Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
35
+ <body joint="free" name="seg3_3Seg" pos="0.4 0.0 0.0" pos_min="0.2 -0.05 -0.05" pos_max="0.55 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
36
36
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
37
37
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
38
38
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
39
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
40
- <body joint="frozen" name="imu2_3Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
39
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
40
+ <body joint="frozen" name="imu3_3Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
41
41
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
42
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
42
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
43
43
  </body>
44
- <body joint="rr_imp" name="seg3_3Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
44
+ <body joint="rr_imp" name="seg4_3Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
45
45
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
46
46
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
47
47
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
48
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
49
- <body joint="frozen" name="imu3_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
48
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
49
+ <body joint="frozen" name="imu4_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
50
50
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
51
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
51
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
52
52
  </body>
53
- <body joint="rr_imp" name="seg4_3Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
53
+ <body joint="rr_imp" name="seg5_3Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
54
54
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
55
55
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
56
56
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
57
- <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="4"/>
58
- <body joint="frozen" name="imu4_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
57
+ <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="4"/>
58
+ <body joint="frozen" name="imu5_3Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
59
59
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
60
- <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="4"/>
60
+ <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="4"/>
61
61
  </body>
62
62
  </body>
63
63
  </body>
64
64
  </body>
65
- <body joint="free" name="seg5_4Seg" pos="0.2 0.0 0.0" pos_min="0.15 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
65
+ <body joint="free" name="seg2_4Seg" pos="0.2 0.0 0.0" pos_min="0.15 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="5.0 5.0 5.0 25.0 25.0 25.0">
66
66
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
67
67
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="dustin_exp_white" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
68
68
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="dustin_exp_white" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
69
- <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="2"/>
70
- <body joint="frozen" name="imu5_4Seg" pos="0.10000001 0.0 0.035" pos_min="0.049999997 -0.05 -0.05" pos_max="0.15000002 0.05 0.05">
69
+ <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="2"/>
70
+ <body joint="frozen" name="imu2_4Seg" pos="0.10000001 0.0 0.035" pos_min="0.049999997 -0.05 -0.05" pos_max="0.15000002 0.05 0.05">
71
71
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
72
- <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="2"/>
72
+ <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="2"/>
73
73
  </body>
74
- <body joint="rr_imp" name="seg2_4Seg" pos="0.2 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
74
+ <body joint="rr_imp" name="seg3_4Seg" pos="0.2 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
75
75
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_blue" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
76
76
  <geom pos="0.05 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
77
77
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
78
- <omc pos="0.0 0.0 -0.02" name="seg2" pos_marker="1"/>
79
- <body joint="frozen" name="imu2_4Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
78
+ <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="1"/>
79
+ <body joint="frozen" name="imu3_4Seg" pos="0.099999994 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15 0.05 0.05">
80
80
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
81
- <omc pos="0.1 0.0 0.015" name="seg2" pos_marker="1"/>
81
+ <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="1"/>
82
82
  </body>
83
- <body joint="rr_imp" name="seg3_4Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
83
+ <body joint="rr_imp" name="seg4_4Seg" pos="0.20000002 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35 0.05 0.05" damping="3.0 3.0">
84
84
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
85
85
  <geom pos="0.1 0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
86
86
  <geom pos="0.15 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
87
- <omc pos="0.0 0.0 -0.02" name="seg3" pos_marker="2"/>
88
- <body joint="frozen" name="imu3_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
87
+ <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="2"/>
88
+ <body joint="frozen" name="imu4_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.14999998 0.05 0.05">
89
89
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
90
- <omc pos="0.1 0.0 0.015" name="seg3" pos_marker="2"/>
90
+ <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="2"/>
91
91
  </body>
92
- <body joint="rr_imp" name="seg4_4Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
92
+ <body joint="rr_imp" name="seg5_4Seg" pos="0.19999999 0.0 0.0" pos_min="0.0 -0.05 -0.05" pos_max="0.35000002 0.05 0.05" damping="3.0 3.0">
93
93
  <geom pos="0.1 0.0 0.0" mass="1.0" color="dustin_exp_white" edge_color="black" type="box" dim="0.2 0.05 0.05"/>
94
94
  <geom pos="0.03 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
95
95
  <geom pos="0.17 -0.05 0.0" mass="0.1" color="black" edge_color="black" type="box" dim="0.01 0.1 0.01"/>
96
- <omc pos="0.0 0.0 -0.02" name="seg4" pos_marker="4"/>
97
- <body joint="frozen" name="imu4_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
96
+ <omc pos="0.0 0.0 -0.02" name="seg5" pos_marker="4"/>
97
+ <body joint="frozen" name="imu5_4Seg" pos="0.100000024 0.0 0.035" pos_min="0.050000012 -0.05 -0.05" pos_max="0.15000004 0.05 0.05">
98
98
  <geom mass="0.1" color="dustin_exp_orange" edge_color="black" type="box" dim="0.05 0.03 0.02"/>
99
- <omc pos="0.1 0.0 0.015" name="seg4" pos_marker="4"/>
99
+ <omc pos="0.1 0.0 0.015" name="seg5" pos_marker="4"/>
100
100
  </body>
101
101
  </body>
102
102
  </body>
ring/ml/__init__.py CHANGED
@@ -13,7 +13,7 @@ from .ringnet import RING
13
13
  from .train import train_fn
14
14
 
15
15
 
16
- def RING_ICML24(params=None, **kwargs):
16
+ def RING_ICML24(params=None, eval: bool = True, **kwargs):
17
17
  """Create the RING network used in the icml24 paper.
18
18
 
19
19
  X[..., :3] = acc
@@ -28,6 +28,34 @@ def RING_ICML24(params=None, **kwargs):
28
28
 
29
29
  ringnet = RING(params=params, **kwargs) # noqa: F811
30
30
  ringnet = base.ScaleX_FilterWrapper(ringnet)
31
- ringnet = base.LPF_FilterWrapper(ringnet, 10.0, samp_freq=None)
31
+ if eval:
32
+ ringnet = base.LPF_FilterWrapper(ringnet, 10.0, samp_freq=None)
32
33
  ringnet = base.GroundTruthHeading_FilterWrapper(ringnet)
33
34
  return ringnet
35
+
36
+
37
+ def RNNO(
38
+ output_dim: int,
39
+ return_quats: bool = False,
40
+ params=None,
41
+ eval: bool = True,
42
+ **kwargs,
43
+ ):
44
+ assert "message_dim" not in kwargs
45
+ assert "link_output_normalize" not in kwargs
46
+ assert "link_output_dim" not in kwargs
47
+
48
+ ringnet = RING( # noqa: F811
49
+ params=params,
50
+ message_dim=0,
51
+ link_output_normalize=False,
52
+ link_output_dim=output_dim,
53
+ **kwargs,
54
+ )
55
+ ringnet = base.NoGraph_FilterWrapper(ringnet, quat_normalize=return_quats)
56
+ ringnet = base.ScaleX_FilterWrapper(ringnet)
57
+ if eval and return_quats:
58
+ ringnet = base.LPF_FilterWrapper(ringnet, 10.0, samp_freq=None)
59
+ if return_quats:
60
+ ringnet = base.GroundTruthHeading_FilterWrapper(ringnet)
61
+ return ringnet
ring/ml/base.py CHANGED
@@ -34,9 +34,9 @@ class AbstractFilter(ABC):
34
34
  def _apply_batched(self, X, params, state, y, lam):
35
35
  pass
36
36
 
37
- @abstractmethod
38
37
  def init(self, bs, X, lam, seed: int):
39
- pass
38
+ params = state = None
39
+ return params, state
40
40
 
41
41
  def apply(self, X, params=None, state=None, y=None, lam=None):
42
42
  "X.shape = (B, T, N, F) or (T, N, F)"
@@ -286,7 +286,7 @@ class NoGraph_FilterWrapper(AbstractFilterWrapper):
286
286
  yhat = yhat.reshape((T, N, -1))
287
287
 
288
288
  if self._quat_normalize:
289
- assert yhat.shape[-1] == 4
289
+ assert yhat.shape[-1] == 4, f"yhat.shape={yhat.shape}"
290
290
  yhat = ring.maths.safe_normalize(yhat)
291
291
 
292
292
  return yhat, state
ring/ml/callbacks.py CHANGED
@@ -108,6 +108,10 @@ class EvalXyTrainingLoopCallback(training_loop.TrainingLoopCallback):
108
108
  if (i_episode % self.eval_every) == 0:
109
109
  point_estimates = self.eval_fn(params)
110
110
  self.last_metrices = {self.metric_identifier: point_estimates}
111
+
112
+ assert (
113
+ self.metric_identifier not in metrices
114
+ ), f"`{self.metric_identifier}` is already in `{metrices.keys()}`"
111
115
  metrices.update(self.last_metrices)
112
116
 
113
117
 
@@ -245,7 +249,7 @@ class SaveParamsTrainingLoopCallback(training_loop.TrainingLoopCallback):
245
249
  extension="pickle",
246
250
  )
247
251
 
248
- pickle_save(ele.params, filename, overwrite=True)
252
+ pickle_save(ele.params, filename, overwrite=False)
249
253
  if self.upload:
250
254
  success = False
251
255
  for logger in self._loggers:
@@ -229,7 +229,7 @@ def _color_to_rgba(geom: base.Geometry) -> base.Geometry:
229
229
  def _xyz_to_three_capsules(xyz: base.XYZ) -> list[base.Geometry]:
230
230
  capsules = []
231
231
  length = xyz.size
232
- radius = length / 6
232
+ radius = length / 7
233
233
  colors = ["red", "green", "blue"]
234
234
  rot_axis = [1, 0, 2]
235
235