imt-ring 1.6.26__py3-none-any.whl → 1.6.28__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- {imt_ring-1.6.26.dist-info → imt_ring-1.6.28.dist-info}/METADATA +5 -1
- {imt_ring-1.6.26.dist-info → imt_ring-1.6.28.dist-info}/RECORD +8 -8
- ring/__init__.py +4 -1
- ring/algorithms/generator/base.py +10 -1
- ring/io/xml/from_xml.py +5 -1
- ring/rendering/mujoco_render.py +11 -2
- {imt_ring-1.6.26.dist-info → imt_ring-1.6.28.dist-info}/WHEEL +0 -0
- {imt_ring-1.6.26.dist-info → imt_ring-1.6.28.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: imt-ring
|
3
|
-
Version: 1.6.
|
3
|
+
Version: 1.6.28
|
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
|
@@ -38,6 +38,10 @@ Requires-Dist: nbmake; extra == "dev"
|
|
38
38
|
# Recurrent Inertial Graph-based Estimator (RING)
|
39
39
|
<img src="https://raw.githubusercontent.com/simon-bachhuber/ring/main/docs/img/coverage_badge.svg" height="20" />
|
40
40
|
|
41
|
+
> **ℹ️ Tip:**
|
42
|
+
>
|
43
|
+
> Check out my new plug-and-play interface for inertial motion tracking (RING included) [here](https://github.com/simon-bachhuber/imt.git).
|
44
|
+
|
41
45
|
## Installation
|
42
46
|
|
43
47
|
Supports `Python=3.10/3.11/3.12` (tested).
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ring/__init__.py,sha256=
|
1
|
+
ring/__init__.py,sha256=H1Rd2uXVkux4Z792XyHIkQ8OpDSZBiPqFwyAFDWDU3E,5260
|
2
2
|
ring/algebra.py,sha256=F0GwbP8LQP5qGVkoMUYJmkp9Hn2nKAVIkCVYDEjNjGU,3128
|
3
3
|
ring/base.py,sha256=yPdbPywwDllCRsJEbnLW4s9Z-bBD8qdxpEDYV3pCLP8,35296
|
4
4
|
ring/maths.py,sha256=qPHH6TpHCK3TgExI98gNEySoSRKOwteN9McUlyUFipI,12207
|
@@ -15,7 +15,7 @@ ring/algorithms/custom_joints/rr_joint.py,sha256=jnRtjtOCALMaq2_0bcu2d7qgfQ6etXp
|
|
15
15
|
ring/algorithms/custom_joints/rsaddle_joint.py,sha256=QoMo6NXdYgA9JygSzBvr0eCdd3qKhUgCrGPNO2Qdxko,1200
|
16
16
|
ring/algorithms/custom_joints/suntay.py,sha256=tOEGM304XciHO4pmvxr4faA4xXVO4N2HlPdFmXKbcrw,16726
|
17
17
|
ring/algorithms/generator/__init__.py,sha256=bF-CW3x2x-o6KWESKy-DuxzZPh3UNSjJb_MaAcSHGsQ,277
|
18
|
-
ring/algorithms/generator/base.py,sha256=
|
18
|
+
ring/algorithms/generator/base.py,sha256=rrhHg6lFPDJs72kXvzF15v1vzkaUTKtCnpcmWZONYA8,16847
|
19
19
|
ring/algorithms/generator/batch.py,sha256=9yFxVv11hij-fJXGPxA3zEh1bE2_jrZk0R7kyGaiM5c,2551
|
20
20
|
ring/algorithms/generator/finalize_fns.py,sha256=nY2RKiLbHriTkdec94lc4UGSZKd0v547MDNn4dr8I3E,10398
|
21
21
|
ring/algorithms/generator/motion_artifacts.py,sha256=2VJbldVDbI3PSyboshIbtYvSAKzBBwGV7cQfYjqvluM,9167
|
@@ -47,7 +47,7 @@ ring/io/examples/test_morph_system/four_seg_seg1.xml,sha256=XJvGtEnvedejs_OmCVfQ
|
|
47
47
|
ring/io/examples/test_morph_system/four_seg_seg3.xml,sha256=HktN7_a_Ly3YflWit5W-WncxApWGMORAGnRXyMEqnoA,1265
|
48
48
|
ring/io/xml/__init__.py,sha256=-3k6ffvFyc4zm0oTyVz3ez-o3Lb9bPp2sjwSub_K1AA,242
|
49
49
|
ring/io/xml/abstract.py,sha256=8Q2ebnUYLmuS9HJAQwDVrDTrRfD5z4G5RAB7MW8Oa60,9742
|
50
|
-
ring/io/xml/from_xml.py,sha256=
|
50
|
+
ring/io/xml/from_xml.py,sha256=E7JQl_scL5U4LK6mqLMr5qaiZCc6J1fInxD7uwgNCJY,9356
|
51
51
|
ring/io/xml/test_from_xml.py,sha256=bckVrVVmEhCwujd_OF9FGYnX3zU3BgztpqGxxmd0htM,1562
|
52
52
|
ring/io/xml/test_to_xml.py,sha256=NGn4VSiFdwhYN5YTBduWMiY9B5dwtxZhCQAR_PXeqKU,946
|
53
53
|
ring/io/xml/to_xml.py,sha256=fohb-jWMf2cxVdT5dmknsGyrNMseICSbKEz_urbaWbQ,3407
|
@@ -64,7 +64,7 @@ ring/ml/params/0x13e3518065c21cd8.pickle,sha256=Zh2k1zK-TNxJl5F7nyTeQ9001qqRE_df
|
|
64
64
|
ring/ml/params/0x1d76628065a71e0f.pickle,sha256=YTNVuvfw-nCRD9BH1PZYcR9uCFpNWDhw8Lc50eDn_EE,9351038
|
65
65
|
ring/rendering/__init__.py,sha256=Zf7qOdzK3t2hljIrs5P4zFhzHljLSMRyDDZO2YlZk4k,75
|
66
66
|
ring/rendering/base_render.py,sha256=Mv9SRLEmuoPVhi46UIjb6xCkKmbWCwIyENGx7nu9REM,9617
|
67
|
-
ring/rendering/mujoco_render.py,sha256=
|
67
|
+
ring/rendering/mujoco_render.py,sha256=bSj1_7YL8wZV6cp9oD2CvbkZRSuxVhmPBA2JECxrnUE,8426
|
68
68
|
ring/rendering/vispy_render.py,sha256=QmRyA7Hqk3uS1SKjcncwc4_vd1m4yWryW2X0i4jRvCw,10260
|
69
69
|
ring/rendering/vispy_visuals.py,sha256=ooBZqppnebeL0ANe6V6zUgnNTtDcdkOsa4vZuM4sx-I,7873
|
70
70
|
ring/sim2real/__init__.py,sha256=gCLYg8IoMdzUagzhCFcfjZ5GavtIU772L7HR0G5hUtM,251
|
@@ -86,7 +86,7 @@ ring/utils/randomize_sys.py,sha256=G_vBIo0OwQkXL2u0djwbaoaeb02C4LQCTNNloOYIU2M,3
|
|
86
86
|
ring/utils/utils.py,sha256=tJaWXLGOTwkxJQj2l23dX97wO3aZYhM2qd7eNuMRs84,6907
|
87
87
|
ring/utils/register_gym_envs/__init__.py,sha256=PtPIRBQJ16339xZ9G9VpvqrvcGbQ_Pk_SUz4tQPa9nQ,94
|
88
88
|
ring/utils/register_gym_envs/saddle.py,sha256=tA5CyW_akSXyDm0xJ83CtOrUMVElH0f9vZtEDDJQalI,4422
|
89
|
-
imt_ring-1.6.
|
90
|
-
imt_ring-1.6.
|
91
|
-
imt_ring-1.6.
|
92
|
-
imt_ring-1.6.
|
89
|
+
imt_ring-1.6.28.dist-info/METADATA,sha256=-3nISq1i9hdIpM_DCCoJ4Q5Xre76R8kLqp2gwDSUa94,4251
|
90
|
+
imt_ring-1.6.28.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
91
|
+
imt_ring-1.6.28.dist-info/top_level.txt,sha256=EiT790-lAyi8iwTzJArH3f2k77rwhDn00q-4PlmvDQo,5
|
92
|
+
imt_ring-1.6.28.dist-info/RECORD,,
|
ring/__init__.py
CHANGED
@@ -98,7 +98,10 @@ def RING(lam: list[int] | None, Ts: float | None, **kwargs) -> ml.AbstractFilter
|
|
98
98
|
add_Ts = True
|
99
99
|
|
100
100
|
ringnet = ml.RING(
|
101
|
-
params=params,
|
101
|
+
params=params,
|
102
|
+
lam=None if lam is None else tuple(lam),
|
103
|
+
jit=config.pop("jit", False),
|
104
|
+
name="RING",
|
102
105
|
)
|
103
106
|
ringnet = ml.base.ScaleX_FilterWrapper(ringnet)
|
104
107
|
if config["use_lpf"]:
|
@@ -55,6 +55,11 @@ class RCMG:
|
|
55
55
|
) -> None:
|
56
56
|
"Random Chain Motion Generator"
|
57
57
|
|
58
|
+
# add some default values
|
59
|
+
randomize_hz_kwargs_defaults = dict(add_dt=True)
|
60
|
+
randomize_hz_kwargs_defaults.update(randomize_hz_kwargs)
|
61
|
+
randomize_hz_kwargs = randomize_hz_kwargs_defaults
|
62
|
+
|
58
63
|
sys, config = utils.to_list(sys), utils.to_list(config)
|
59
64
|
sys_ml = sys[0] if sys_ml is None else sys_ml
|
60
65
|
|
@@ -409,7 +414,11 @@ def _build_mconfig_batched_generator(
|
|
409
414
|
@jax.vmap
|
410
415
|
def _vmapped_context(key, q, sys):
|
411
416
|
x, _ = jax.vmap(kinematics.forward_kinematics_transforms, (None, 0))(sys, q)
|
412
|
-
X =
|
417
|
+
X = (
|
418
|
+
{"dt": jnp.array(sys.dt)}
|
419
|
+
if (randomize_hz and randomize_hz_kwargs["add_dt"])
|
420
|
+
else {}
|
421
|
+
)
|
413
422
|
Xy, extras = (X, {}), (key, q, x, sys)
|
414
423
|
return _finalize_fn(Xy, extras)
|
415
424
|
|
ring/io/xml/from_xml.py
CHANGED
@@ -2,6 +2,7 @@ from xml.etree import ElementTree
|
|
2
2
|
|
3
3
|
import jax
|
4
4
|
import numpy as np
|
5
|
+
|
5
6
|
from ring import base
|
6
7
|
from ring.algorithms import jcalc
|
7
8
|
from ring.utils import parse_path
|
@@ -181,7 +182,10 @@ def load_sys_from_str(xml_str: str, seed: int = 1) -> base.System:
|
|
181
182
|
|
182
183
|
link_parents[current_link_idx] = parent
|
183
184
|
link_types[current_link_idx] = current_link_typ
|
184
|
-
|
185
|
+
current_name = body.attrib["name"]
|
186
|
+
link_names[current_link_idx] = (
|
187
|
+
current_name if isinstance(current_name, str) else str(int(current_name))
|
188
|
+
)
|
185
189
|
|
186
190
|
transform = abstract.AbsTrans.from_xml(body.attrib)
|
187
191
|
pos_min, pos_max = abstract.AbsPosMinMax.from_xml(body.attrib, transform.pos)
|
ring/rendering/mujoco_render.py
CHANGED
@@ -8,7 +8,10 @@ from ring import maths
|
|
8
8
|
|
9
9
|
_skybox = """<texture name="skybox" type="skybox" builtin="gradient" rgb1=".4 .6 .8" rgb2="0 0 0" width="800" height="800" mark="random" markrgb="1 1 1"/>""" # noqa: E501
|
10
10
|
_skybox_white = """<texture name="skybox" type="skybox" builtin="gradient" rgb1="1 1 1" rgb2="1 1 1" width="800" height="800" mark="random" markrgb="1 1 1"/>""" # noqa: E501
|
11
|
-
|
11
|
+
|
12
|
+
|
13
|
+
def _floor(floor_z: float) -> str:
|
14
|
+
return f"""<geom name="floor" pos="0 0 {floor_z}" size="0 0 1" type="plane" material="matplane" mass="0"/>""" # noqa: E501
|
12
15
|
|
13
16
|
|
14
17
|
def _build_model_of_geoms(
|
@@ -16,6 +19,7 @@ def _build_model_of_geoms(
|
|
16
19
|
cameras: dict[int, Sequence[str]],
|
17
20
|
lights: dict[int, Sequence[str]],
|
18
21
|
floor: bool,
|
22
|
+
floor_z: float,
|
19
23
|
stars: bool,
|
20
24
|
debug: bool,
|
21
25
|
) -> mujoco.MjModel:
|
@@ -75,6 +79,8 @@ def _build_model_of_geoms(
|
|
75
79
|
<asset>
|
76
80
|
<texture name="texplane" type="2d" builtin="checker" rgb1=".25 .25 .25" rgb2=".3 .3 .3" width="512" height="512" mark="cross" markrgb=".8 .8 .8"/>
|
77
81
|
<material name="matplane" reflectance="0.3" texture="texplane" texrepeat="1 1" texuniform="true"/>
|
82
|
+
<texture type="2d" name="groundplane" builtin="checker" mark="edge" rgb1="0.2 0.3 0.4" rgb2="0.1 0.2 0.3" markrgb="0.8 0.8 0.8" width="300" height="300"/>
|
83
|
+
<material name="groundplane" texture="groundplane" texuniform="true" texrepeat="2 2" reflectance="0.2"/>
|
78
84
|
{_skybox if stars else ''}
|
79
85
|
<texture name="grid" type="2d" builtin="checker" rgb1=".1 .2 .3" rgb2=".2 .3 .4" width="300" height="300" mark="edge" markrgb=".2 .3 .4"/>
|
80
86
|
<material name="grid" texture="grid" texrepeat="1 1" texuniform="true" reflectance=".2"/>
|
@@ -92,7 +98,7 @@ def _build_model_of_geoms(
|
|
92
98
|
<camera pos="0 -1 1" name="target" mode="targetbodycom" target="{targetbody}"/>
|
93
99
|
<camera pos="0 -3 3" name="targetfar" mode="targetbodycom" target="{targetbody}"/>
|
94
100
|
<camera pos="0 -5 5" name="targetFar" mode="targetbodycom" target="{targetbody}"/>
|
95
|
-
{_floor if floor else ''}
|
101
|
+
{_floor(floor_z) if floor else ''}
|
96
102
|
{inside_worldbody_cameras}
|
97
103
|
{inside_worldbody_lights}
|
98
104
|
{inside_worldbody}
|
@@ -169,6 +175,7 @@ class MujocoScene:
|
|
169
175
|
add_lights: dict[int, str | Sequence[str]] = _default_lights,
|
170
176
|
show_stars: bool = True,
|
171
177
|
show_floor: bool = True,
|
178
|
+
floor_z: float = -0.84,
|
172
179
|
debug: bool = False,
|
173
180
|
) -> None:
|
174
181
|
self.debug = debug
|
@@ -183,6 +190,7 @@ class MujocoScene:
|
|
183
190
|
self.add_cameras, self.add_lights = to_list(add_cameras), to_list(add_lights)
|
184
191
|
self.show_stars = show_stars
|
185
192
|
self.show_floor = show_floor
|
193
|
+
self.floor_z = floor_z
|
186
194
|
|
187
195
|
def init(self, geoms: list[base.Geometry]):
|
188
196
|
self._parent_ids = list(set([geom.link_idx for geom in geoms]))
|
@@ -191,6 +199,7 @@ class MujocoScene:
|
|
191
199
|
self.add_cameras,
|
192
200
|
self.add_lights,
|
193
201
|
floor=self.show_floor,
|
202
|
+
floor_z=self.floor_z,
|
194
203
|
stars=self.show_stars,
|
195
204
|
debug=self.debug,
|
196
205
|
)
|
File without changes
|
File without changes
|