tinysim 0.0.2__py3-none-any.whl → 0.0.4__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.
- tinysim/frogger/tk.py +6 -0
- tinysim/topdown_driving/widget.py +3 -4
- tinysim-0.0.4.dist-info/METADATA +80 -0
- tinysim-0.0.4.dist-info/RECORD +119 -0
- {tinysim-0.0.2.dist-info → tinysim-0.0.4.dist-info}/top_level.txt +1 -0
- tinysim_mujoco/__init__.py +0 -0
- tinysim_mujoco/gl_viewer.py +88 -0
- tinysim_mujoco/manipulation/__init__.py +38 -0
- tinysim_mujoco/manipulation/xmls/assets/d405.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/finger_0.obj +883 -0
- tinysim_mujoco/manipulation/xmls/assets/finger_1.obj +657 -0
- tinysim_mujoco/manipulation/xmls/assets/hand.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/hand_0.obj +116 -0
- tinysim_mujoco/manipulation/xmls/assets/hand_1.obj +1204 -0
- tinysim_mujoco/manipulation/xmls/assets/hand_2.obj +5751 -0
- tinysim_mujoco/manipulation/xmls/assets/hand_3.obj +8898 -0
- tinysim_mujoco/manipulation/xmls/assets/hand_4.obj +1574 -0
- tinysim_mujoco/manipulation/xmls/assets/link0.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_0.obj +2962 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_1.obj +1084 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_10.obj +3320 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_11.obj +233 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_2.obj +5717 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_3.obj +496 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_4.obj +2157 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_5.obj +184 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_7.obj +313 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_8.obj +31361 -0
- tinysim_mujoco/manipulation/xmls/assets/link0_9.obj +1054 -0
- tinysim_mujoco/manipulation/xmls/assets/link1.obj +31140 -0
- tinysim_mujoco/manipulation/xmls/assets/link1.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link2.obj +31586 -0
- tinysim_mujoco/manipulation/xmls/assets/link2.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link3.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link3_0.obj +29423 -0
- tinysim_mujoco/manipulation/xmls/assets/link3_1.obj +665 -0
- tinysim_mujoco/manipulation/xmls/assets/link3_2.obj +852 -0
- tinysim_mujoco/manipulation/xmls/assets/link3_3.obj +4591 -0
- tinysim_mujoco/manipulation/xmls/assets/link4.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link4_0.obj +853 -0
- tinysim_mujoco/manipulation/xmls/assets/link4_1.obj +30330 -0
- tinysim_mujoco/manipulation/xmls/assets/link4_2.obj +4555 -0
- tinysim_mujoco/manipulation/xmls/assets/link4_3.obj +680 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_0.obj +8222 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_1.obj +763 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_2.obj +36907 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj +189 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj +120 -0
- tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj +189 -0
- tinysim_mujoco/manipulation/xmls/assets/link6.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_0.obj +1748 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_1.obj +304 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_10.obj +3875 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_11.obj +378 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_12.obj +51 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_13.obj +51 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_14.obj +4459 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_15.obj +6967 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_16.obj +35547 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_2.obj +128 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_3.obj +133 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_4.obj +152 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_5.obj +132 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_6.obj +139 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_7.obj +57 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_8.obj +115 -0
- tinysim_mujoco/manipulation/xmls/assets/link6_9.obj +204 -0
- tinysim_mujoco/manipulation/xmls/assets/link7.stl +0 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_0.obj +13541 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_1.obj +1238 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_2.obj +2080 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_3.obj +1261 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_4.obj +879 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_5.obj +2279 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_6.obj +1029 -0
- tinysim_mujoco/manipulation/xmls/assets/link7_7.obj +7767 -0
- tinysim_mujoco/manipulation/xmls/panda.xml +280 -0
- tinysim_mujoco/manipulation/xmls/scene.xml +23 -0
- tinysim_mujoco/manipulation/xmls/table.xml +37 -0
- tinysim_mujoco/notebook_viewer.py +33 -0
- tinysim_mujoco/unitree_a1/__init__.py +282 -0
- tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md +6 -0
- tinysim_mujoco/unitree_a1/unitree_a1/LICENSE +29 -0
- tinysim_mujoco/unitree_a1/unitree_a1/README.md +41 -0
- tinysim_mujoco/unitree_a1/unitree_a1/a1.xml +206 -0
- tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj +51549 -0
- tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj +19893 -0
- tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj +32857 -0
- tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj +34036 -0
- tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj +74108 -0
- tinysim_mujoco/unitree_a1/unitree_a1/scene.xml +22 -0
- tinysim_warp/cart_pole/__init__.py +2 -2
- tinysim_warp/quadruped/__init__.py +2 -2
- tinysim_warp/simple_quadruped/__init__.py +2 -2
- tinysim-0.0.2.dist-info/METADATA +0 -56
- tinysim-0.0.2.dist-info/RECORD +0 -33
- {tinysim-0.0.2.dist-info → tinysim-0.0.4.dist-info}/WHEEL +0 -0
tinysim/frogger/tk.py
CHANGED
|
@@ -21,6 +21,8 @@ class FroggerTkFrontend(_tk_base.TkBaseFrontend):
|
|
|
21
21
|
self.sim_env = sim_env
|
|
22
22
|
self._viewport_size = viewport_size
|
|
23
23
|
|
|
24
|
+
self.keys = set()
|
|
25
|
+
|
|
24
26
|
async def step(self, action, dt=0.01):
|
|
25
27
|
state = self.sim_env.step(action, dt=dt)
|
|
26
28
|
if self._root:
|
|
@@ -42,6 +44,10 @@ class FroggerTkFrontend(_tk_base.TkBaseFrontend):
|
|
|
42
44
|
canvas.pack(fill="both", expand=True)
|
|
43
45
|
self._root = root
|
|
44
46
|
self._canvas = canvas
|
|
47
|
+
|
|
48
|
+
root.bind("<KeyPress>", lambda e: self.keys.add(e.keysym))
|
|
49
|
+
root.bind("<KeyRelease>", lambda e: self.keys.discard(e.keysym))
|
|
50
|
+
|
|
45
51
|
self.bring_to_front(root)
|
|
46
52
|
self._draw_state(self.sim_env)
|
|
47
53
|
self._pump()
|
|
@@ -14,7 +14,7 @@ class TopDownDrivingWidget(anywidget.AnyWidget):
|
|
|
14
14
|
|
|
15
15
|
sim_state = traitlets.Dict(default_value={}).tag(sync=True)
|
|
16
16
|
wall_positions = traitlets.List(default_value=LOCAL_WALLS).tag(sync=True)
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
_viewport_size = traitlets.Tuple(
|
|
19
19
|
traitlets.Int(), traitlets.Int(), default_value=(800, 600)
|
|
20
20
|
).tag(sync=True)
|
|
@@ -38,8 +38,7 @@ class TopDownDrivingWidget(anywidget.AnyWidget):
|
|
|
38
38
|
ui_poll(100)
|
|
39
39
|
except Exception:
|
|
40
40
|
pass
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
|
|
43
42
|
def copy_py_state(self, sim_state: dict):
|
|
44
43
|
self.sim_state = {
|
|
45
44
|
"x": sim_state["x"].tolist(),
|
|
@@ -57,4 +56,4 @@ class TopDownDrivingWidget(anywidget.AnyWidget):
|
|
|
57
56
|
async def reset(self) -> dict:
|
|
58
57
|
sim_state = self.sim_env.reset()
|
|
59
58
|
self.copy_py_state(sim_state)
|
|
60
|
-
return sim_state
|
|
59
|
+
return sim_state
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tinysim
|
|
3
|
+
Version: 0.0.4
|
|
4
|
+
Summary: small modular simulation environments
|
|
5
|
+
Author-email: Matthew Taylor <matthew.taylor.andre@gmail.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com/MatthewAndreTaylor/TinySim
|
|
7
|
+
Keywords: jupyter,simulation
|
|
8
|
+
Classifier: Framework :: Jupyter
|
|
9
|
+
Classifier: Framework :: Jupyter :: JupyterLab
|
|
10
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: 4
|
|
11
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions
|
|
12
|
+
Classifier: Programming Language :: Python
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Requires-Python: >=3.9
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: anywidget
|
|
23
|
+
Requires-Dist: jupyter-ui-poll
|
|
24
|
+
Provides-Extra: warp
|
|
25
|
+
Requires-Dist: warp-lang==1.8.1; extra == "warp"
|
|
26
|
+
Provides-Extra: mujoco
|
|
27
|
+
Requires-Dist: mujoco; extra == "mujoco"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# TinySim
|
|
31
|
+
|
|
32
|
+
[](https://pypi.org/project/tinysim)
|
|
33
|
+
[](https://matthewandretaylor.github.io/TinySim/lab?path=example.ipynb)
|
|
34
|
+
|
|
35
|
+
The goal of this project is to create more minimal simulation environments for robotics and machine learning.
|
|
36
|
+
|
|
37
|
+
Existing solutions like [ROS 2](https://github.com/ros2) and [Gymnasium](https://gymnasium.farama.org/) come with many heavy dependencies.
|
|
38
|
+
|
|
39
|
+
Additionally they are usually difficult to get setup and may require domain specific knowledge to use.
|
|
40
|
+
Simulation environments should be able to run in any notebook environment and require fewer dependencies.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## Get Started 🚀
|
|
44
|
+
|
|
45
|
+
To use the baseline Python only simulation environments.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install tinysim
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
| [MountainCarEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/mountain_car) | [TopDownDrivingEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/topdown_driving) |
|
|
52
|
+
|:-------------------------:|:-------------------------:|
|
|
53
|
+
| <img width="312" alt="mountain_car" src="https://github.com/user-attachments/assets/adbde7f4-6b4e-4c06-8dd3-ea278d5576ad" /> | <img width="312" alt="topdown_driving" src="https://github.com/user-attachments/assets/79dcbf45-055e-4a4e-b6ff-38e938e99a4e" /> |
|
|
54
|
+
|
|
55
|
+
| [FroggerEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/frogger) | [FlappyEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/flappy) |
|
|
56
|
+
|:-------------------------:|:-------------------------:|
|
|
57
|
+
| <img width="312" alt="frogger" src="https://github.com/user-attachments/assets/bb9a8382-b9a0-4280-ae23-cbd02e2d78f6" /> | <img width="312" alt="flappy" src="https://github.com/user-attachments/assets/b5e2a502-d9fe-4ff1-9e4e-a47f7e50ebd9" /> |
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
To use the [warp](https://github.com/NVIDIA/warp) simulation environments.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install tinysim[warp]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| [CartPoleBaseEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_warp/cart_pole) | [SimpleRobotDogBaseEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_warp/simple_quadruped) |
|
|
67
|
+
|:-------------------------:|:-------------------------:|
|
|
68
|
+
| <img width="312" alt="warp_cart_pole" src="https://github.com/user-attachments/assets/f29f3749-d836-4afa-9f27-8578aca020dc" /> | <img width="312" alt="warp_simple_quadruped" src="https://github.com/user-attachments/assets/a966e881-358e-47ee-b0e1-b67eba903987" /> |
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
To use the [mujoco](https://github.com/google-deepmind/mujoco) simulation environments.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install tinysim[mujoco]
|
|
75
|
+
```
|
|
76
|
+
| [UnitreeA1WalkEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_mujoco/unitree_a1) |
|
|
77
|
+
|:-------------------------:|
|
|
78
|
+
| <img width="312" alt="mujoco_sim" src="https://github.com/user-attachments/assets/1109488e-0563-4694-8926-682edd0c8278" /> |
|
|
79
|
+
|
|
80
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
tinysim/__init__.py,sha256=ptkxqwWun-Tw-L2-zUTm2fqunNgdLBkdU3DHF1wAMBI,197
|
|
2
|
+
tinysim/_tk_base.py,sha256=kzF-41H56A5FWNxtMhlvEbl3iH8Wp04zTqAxTcjRPDM,1279
|
|
3
|
+
tinysim/flappy/__init__.py,sha256=lUHGteFeYRb2vQ3-x9WxnKWM7sfsDwIHoVps732JIDY,3482
|
|
4
|
+
tinysim/flappy/sim.js,sha256=g8ycKdJGopu0Z5CeBgtF8Rr2Pe64dTFcSiYh7hzYPzU,3190
|
|
5
|
+
tinysim/flappy/tk.py,sha256=DUJqy0uPn-AvNE4tuA3a4Dh6xaj0twsUOP8leqGgBX4,2458
|
|
6
|
+
tinysim/flappy/widget.py,sha256=zyaoW-rWgAkmbCY7yrSYyAZDUQaAPnuQEzldSawkOnI,1597
|
|
7
|
+
tinysim/frogger/__init__.py,sha256=gA2jvG_WDZRpZY0Zg_aJmWrdsk2siIL49wjFTRfOSxo,5227
|
|
8
|
+
tinysim/frogger/sim.js,sha256=b1HfEtFZFbbsrZNtltuWO4h-QM4Fw3XjMRydwm5l2NU,3081
|
|
9
|
+
tinysim/frogger/tk.py,sha256=gb2V8bVCVuVazRrfTbAWq46bK20d5ugHxau_rlNABXE,2992
|
|
10
|
+
tinysim/frogger/widget.py,sha256=Bvb6aUiVqJTHTdd6EzpCp0FqpRa0bl9RNcK12_weiPM,1810
|
|
11
|
+
tinysim/mountain_car/__init__.py,sha256=V3Qxj_ydWAqOJiQUqmIRegBe9GNjU82BfbG2XvV0OQg,1986
|
|
12
|
+
tinysim/mountain_car/sim.js,sha256=z7kxl7LbkRglfzXxmrBbwz2vMYdQV84QP3WhE0hoPVQ,4581
|
|
13
|
+
tinysim/mountain_car/styles.css,sha256=a8Bc64RdRNB1uWsBdpMEQA9STZO8mVAB2vvIPhhYuik,63
|
|
14
|
+
tinysim/mountain_car/tk.py,sha256=EbnLirA0Q5egJaDUzu_WkGjbofbclwYUcHIvvifNt0Y,4256
|
|
15
|
+
tinysim/mountain_car/widget.py,sha256=bUIXsofy5moBXMDBdIOVvRi59NFbLRRQ1WZcwm_mYG8,1726
|
|
16
|
+
tinysim/simple_amr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
tinysim/simple_amr/example_maps.py,sha256=38duuHbd6HvhQBIIcg9PWokNMjkasPSsKPjHnBhv9qQ,3307
|
|
18
|
+
tinysim/simple_amr/sim.js,sha256=2YW2YWEEe-QWgJGLAdpt1aZi__sLL5ML84fv1s90poY,11575
|
|
19
|
+
tinysim/simple_amr/styles.css,sha256=t85kXf0xyrq5ldL-j_pV0FEekWoorK63T_ZorWEgBOw,1087
|
|
20
|
+
tinysim/simple_amr/widget.py,sha256=dmNcftB7-Z9Kf3hQ0MBaJvo97eyjCA6R74oEkHASMas,2557
|
|
21
|
+
tinysim/topdown_driving/__init__.py,sha256=HiRpxQNeu4IIOPFraGHLTO2F0VNISAk6bUiK1rsbZTE,6228
|
|
22
|
+
tinysim/topdown_driving/sim.js,sha256=5jmyQk4zp4KFhaG-uTsW_Cq1gHoIkR9d2Cv_ezDKarM,3076
|
|
23
|
+
tinysim/topdown_driving/tk.py,sha256=8UB95ZjIJiUQeXC5w3pXkjukOJXfisLKrfIn0bVFzjU,4751
|
|
24
|
+
tinysim/topdown_driving/track_0.json,sha256=3zPfPX72s5zxs4znoO8rXBqGNciai10Jbl2rFCaACow,15338
|
|
25
|
+
tinysim/topdown_driving/widget.py,sha256=Eh7tvtmMbgmzFEvQZ10D6npfF2s1k7QD5AHLYX5Jaqw,1718
|
|
26
|
+
tinysim_mujoco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
tinysim_mujoco/gl_viewer.py,sha256=s0x4HuYwspsIOl7CBywz7cs0g37p22e7fWGtcLXuq6g,2754
|
|
28
|
+
tinysim_mujoco/notebook_viewer.py,sha256=4hbQKcJLC8jAOd5xQyz5yjia5N0_CaKe0s4LgP0VnmM,1035
|
|
29
|
+
tinysim_mujoco/manipulation/__init__.py,sha256=7JB29iraYN64MXAuWNoB6vY38Qr_KvZB66BxPmhZw9U,1129
|
|
30
|
+
tinysim_mujoco/manipulation/xmls/panda.xml,sha256=y5tZFUX6zbj8nb32jux4WuT4nMQ4u3i-ziOEnfoFtFA,14803
|
|
31
|
+
tinysim_mujoco/manipulation/xmls/scene.xml,sha256=cM_FJCnt-aK4b4L2kTVNSd7P-rL6l4aQodOcd-5zB-s,921
|
|
32
|
+
tinysim_mujoco/manipulation/xmls/table.xml,sha256=TFG7lbTr-93_V94sDpJMveuGgtNVPrip6g1YFeE8eXs,1068
|
|
33
|
+
tinysim_mujoco/manipulation/xmls/assets/d405.stl,sha256=Zhfz-yK2BKZsJ-FtI5fzBfzcqKeBJIq9urv2nJ_mo8U,50084
|
|
34
|
+
tinysim_mujoco/manipulation/xmls/assets/finger_0.obj,sha256=8UwcM_XWXKrdyKWg0-Hwg-GjPsqqe-HpHLgdTyHE4vM,23013
|
|
35
|
+
tinysim_mujoco/manipulation/xmls/assets/finger_1.obj,sha256=tLZPSqpntdM74TQDqHT-r0-ov3swyLJr15JCgpx-QIg,16772
|
|
36
|
+
tinysim_mujoco/manipulation/xmls/assets/hand.stl,sha256=lEk-lPMP6UDyyMovFVw7vme7_0BtPt9eJhZw0vD24u0,10084
|
|
37
|
+
tinysim_mujoco/manipulation/xmls/assets/hand_0.obj,sha256=XOtDy33piLgHtqKlp10LUkAuspee_zPnnCx487uOcF0,2751
|
|
38
|
+
tinysim_mujoco/manipulation/xmls/assets/hand_1.obj,sha256=durcgMV2wSeHQXwOtR8te6nZFGvOv0Jyz0NEDgc2vE0,32513
|
|
39
|
+
tinysim_mujoco/manipulation/xmls/assets/hand_2.obj,sha256=Drba7S9Gr9Qpw_xikG2I4Tytv9lIaKVVoW6BFsBjfY8,164176
|
|
40
|
+
tinysim_mujoco/manipulation/xmls/assets/hand_3.obj,sha256=knmL-FBNZESzyZSC19G4Lgc8Lbtt3sE98nZp2vrHvfo,256889
|
|
41
|
+
tinysim_mujoco/manipulation/xmls/assets/hand_4.obj,sha256=6j6-uJFc_t1SsArDCO9gLYJI-k978E29fb1Lt_-fSCc,41599
|
|
42
|
+
tinysim_mujoco/manipulation/xmls/assets/link0.stl,sha256=38bZQzDejdsAWzEb_bqfO44ap8JWtxWS7n_zLLmppao,10084
|
|
43
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_0.obj,sha256=PXJvyxT9ofArCwxzTRtzbgbgclbPLaH9TcS0bsvkWec,81253
|
|
44
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_1.obj,sha256=IPmDYIzmwvYO9Gpxy6yP7hyS-lewRoOt67L1KPhWJvI,28959
|
|
45
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_10.obj,sha256=jommBlVdd6yWo53IOc_8LehwnuajcIRYfeuQjB0c77E,92636
|
|
46
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_11.obj,sha256=MGM16Qo3tI-WqJ5Vf-dQHzuACFec6H4iLDF3H-XMEl0,5659
|
|
47
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_2.obj,sha256=N2jRIxxGJEK5fZFQ9G923PvEUWQaM25qPAgeGJGUXdM,163347
|
|
48
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_3.obj,sha256=bEgdroSYguzr8lQsfJa3AOue_tRYmeQByCvIUHyiDt0,13066
|
|
49
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_4.obj,sha256=wHZCyMAX8EkLOQBHhGw_GuScaWKITR_kZ7VLrAEcFJk,59094
|
|
50
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_5.obj,sha256=gPT30-DisfwCrV0Q8QKTr5za5EV5LTMqVU_Way8GMkY,4582
|
|
51
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_7.obj,sha256=UtuBtYczQBVjGUJt5FTi-xykfn0qBKFjr7N13alviCQ,7833
|
|
52
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_8.obj,sha256=4vywqkzG39VRa6tztBxkqEsBCUYPNXHYUs1647zn7-A,936277
|
|
53
|
+
tinysim_mujoco/manipulation/xmls/assets/link0_9.obj,sha256=Y2lUzYuMINVDVkZJPVw9K_IjlyhvGkvZ0pToVJN46-U,28593
|
|
54
|
+
tinysim_mujoco/manipulation/xmls/assets/link1.obj,sha256=6MNgUP0i4o0j5MPqXq-Q2yQ_jZdch5-u9YZFwqTw2Cw,939282
|
|
55
|
+
tinysim_mujoco/manipulation/xmls/assets/link1.stl,sha256=5Bo5qUEI_PVqrP9gP8keyAVB9MGvF7UaDeVhf1Vm5tI,15084
|
|
56
|
+
tinysim_mujoco/manipulation/xmls/assets/link2.obj,sha256=omwoQ4dBeiO7jFq_LkWASIYagQMSypffuzbK7WCqmvs,948052
|
|
57
|
+
tinysim_mujoco/manipulation/xmls/assets/link2.stl,sha256=Nw92BaD641KdsWne1Q9S8XECSqeS1NdzvIQZcwH2oDk,15084
|
|
58
|
+
tinysim_mujoco/manipulation/xmls/assets/link3.stl,sha256=Co1ji5NJxsDu_E6IhjasSDjEsnFw8YpRaZMhEYr3CcE,15084
|
|
59
|
+
tinysim_mujoco/manipulation/xmls/assets/link3_0.obj,sha256=drDLZO5TP4ytcjEa9UtQvbGfuxvYugTKXBDaKZAaOds,874229
|
|
60
|
+
tinysim_mujoco/manipulation/xmls/assets/link3_1.obj,sha256=7ZwpKQSpQxgBooNkPff53AQn_RTWrThL8h8DNhiNXkU,17527
|
|
61
|
+
tinysim_mujoco/manipulation/xmls/assets/link3_2.obj,sha256=IYWc_aCfWkolUzSqBjB4V0i4HnIoUNQb3hKTYljLleM,22666
|
|
62
|
+
tinysim_mujoco/manipulation/xmls/assets/link3_3.obj,sha256=QdFYDhqRDx5Kvq0TL7KGZ8gzQ9SB_0SdoqHswTBSWg8,127653
|
|
63
|
+
tinysim_mujoco/manipulation/xmls/assets/link4.stl,sha256=AYDrtXcuyYQMsEl1DP-ymp3ckDEXUqFuo0dXeC755I0,15084
|
|
64
|
+
tinysim_mujoco/manipulation/xmls/assets/link4_0.obj,sha256=VKTXfmZ97ofSasr5HHB4M7CBN1uMNvKC_HaINhDvUrw,22614
|
|
65
|
+
tinysim_mujoco/manipulation/xmls/assets/link4_1.obj,sha256=tkCKC42MqsUrgcGH-NlbuCMeisJtB5YglkKuIFDc2cA,907562
|
|
66
|
+
tinysim_mujoco/manipulation/xmls/assets/link4_2.obj,sha256=N2aHKYM372cSVC2HxDLlmoUaJHkvpmcuDJa8f4tuKHE,126752
|
|
67
|
+
tinysim_mujoco/manipulation/xmls/assets/link4_3.obj,sha256=EB9iQMR20hDhchKfHHKUUUGEL-zYmM9VYPspUYFOvgU,18166
|
|
68
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_0.obj,sha256=rsexRNfAKgT58RdlOWvi6T9nulq8cnuvsrwlNA5I8Jc,237090
|
|
69
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_1.obj,sha256=FyeTZNpsFwlrBPFChyGIMtIAHtW7YVZzU3fBMmgvIyY,21067
|
|
70
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_2.obj,sha256=_lShSs9IOQ_2I0lWuokpQ58_QQryAAB6tjXOtSirIus,1113757
|
|
71
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj,sha256=SttB__2rPl4IYjnwsEIO27ocETJVpVDEl-KMr7ZfmGk,3240
|
|
72
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj,sha256=51JZcRt3emzoDoXjsGUA1YELzQo-4bE7Oucg9oflIwU,2031
|
|
73
|
+
tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj,sha256=13imnqZo5TuHa4mQaBz8cEg2o8CjtcbUXYFxr7DGAbM,3171
|
|
74
|
+
tinysim_mujoco/manipulation/xmls/assets/link6.stl,sha256=ILdo6ZoOBEC1dU3MoQgBZDTleTfMNWrNnDUszTyyf3c,10084
|
|
75
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_0.obj,sha256=RkyUwFJcQ2OUIkPWn48Yjg1j8kLbZM2t_SjIDJwR5cA,47342
|
|
76
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_1.obj,sha256=IkWnl7biCeX4PXHHgwzsUVJDIZ6smlZQDIt_tL_aduY,7647
|
|
77
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_10.obj,sha256=uI9FIy4l-J52aVdzENZJdGxH4XDhoj8aURANpveREjE,106525
|
|
78
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_11.obj,sha256=8K23XfVyJJx3ZZ_eaPrP0GpbzdkkCseXE9p3hMUh0KY,9528
|
|
79
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_12.obj,sha256=x5gNDA6y2g-fhMN7RRTC-yxlbca7dGwn-KwiKStmI5o,1254
|
|
80
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_13.obj,sha256=f_DWIVGVHtkG4VVqmPjO7yh32aKILUbHJ9H5lGUAyrE,1207
|
|
81
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_14.obj,sha256=1JFnm0rqKEP_sqDrbJvVDTT93Ozm_mbNhekL1L32CQ0,124016
|
|
82
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_15.obj,sha256=DeVztit_xyjWXPgVCUHHyrBI_R5Qx-9UYrTYTqPGfvY,197715
|
|
83
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_16.obj,sha256=G0qiA23r-QXLLBRt5NBtVDYTA7Z8dsaH3HPW_kg3uKk,1064264
|
|
84
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_2.obj,sha256=PwPo3MdjUl6hYK7JLJEiklkStxirjF0tibGW1qszVNo,3173
|
|
85
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_3.obj,sha256=zqxR0cqg7ea8KOI948WHjFBZMcq5N9FB8PFwqzebAvk,3267
|
|
86
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_4.obj,sha256=qGL1fYI7v3jH6lamiXKG0BDSHjr-ExieiqnDcOhJzD4,3716
|
|
87
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_5.obj,sha256=POeM_8RS7lPCniQcaxytqIwK2VrYbsaofKgaPLEY7do,3226
|
|
88
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_6.obj,sha256=llnLoo3yzRhKaw2YVxqiQythOrX1NuVaviXFxPtL9RI,3387
|
|
89
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_7.obj,sha256=jCIo44j2v0_yi6qisVrHouQRNxMjmEzdezJtdrWE3ig,1373
|
|
90
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_8.obj,sha256=JD5Q0V7S5fqwJ_no9KDxaejnORZjsiJzmCvx__GGYU4,2848
|
|
91
|
+
tinysim_mujoco/manipulation/xmls/assets/link6_9.obj,sha256=xAQVzlYmkhE6hrlalt17qyo9uSdMaO9J_jFPcXk0gC4,5114
|
|
92
|
+
tinysim_mujoco/manipulation/xmls/assets/link7.stl,sha256=kqxq_PdXTANNMXDYpo6VrJBIq50N1bvYMRuG5VG5qxw,10084
|
|
93
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_0.obj,sha256=cOVF61oHKUQs4HBh8QB9oJs8xaWiS2qZ-wgTv-5czTU,392770
|
|
94
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_1.obj,sha256=VOsIGCMY51kGIyECp8QhUZpd0wggREXNCU4Y26uYjqc,32990
|
|
95
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_2.obj,sha256=Swjy73cA1F1p_k9tyV9oNUe9yjZBoi4lFPbK71YdL0E,57207
|
|
96
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_3.obj,sha256=GbtSwK6zx_KDNUNNEh1Cc51r0mciS7tGtfTKNSP0rvA,34261
|
|
97
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_4.obj,sha256=SZSny1BhpxKpgq5AYX1HybmUpZuio6RGMY7TR_w-u90,23568
|
|
98
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_5.obj,sha256=MsT-PFfY9bpGdtVULacqRtZKBSKmZ15Lf6J_tChFlkE,61442
|
|
99
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_6.obj,sha256=1avsmFwLFqymiEQN7-usXrwQcYDJAhoiZBgs1RXnqNw,27403
|
|
100
|
+
tinysim_mujoco/manipulation/xmls/assets/link7_7.obj,sha256=s56R21mHTno3skIqRb9lnEoS5Qw8G6N74E6lulVmdgo,221627
|
|
101
|
+
tinysim_mujoco/unitree_a1/__init__.py,sha256=VH71dmkOeBWBdNVWyYJ5MMfBx-wpPfZ-GuFJY9kbYfA,10632
|
|
102
|
+
tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md,sha256=FIdhX4_Q21xamWMS3-2677HhlETlCnfaAzGemqs4Lpo,143
|
|
103
|
+
tinysim_mujoco/unitree_a1/unitree_a1/LICENSE,sha256=K3lKzx4lD1VFrlpH2B5WhepUiM4HfRCH7Yvl-B6bpcA,1559
|
|
104
|
+
tinysim_mujoco/unitree_a1/unitree_a1/README.md,sha256=tHCjy_A1jcGD7bkFy9Qw9z249Kb6HTDQQBlCk8buqlM,1606
|
|
105
|
+
tinysim_mujoco/unitree_a1/unitree_a1/a1.xml,sha256=gJidzvTdw5WwD0X_qrJWjsLwCYmHNqK19fExTtkws4s,9674
|
|
106
|
+
tinysim_mujoco/unitree_a1/unitree_a1/scene.xml,sha256=nENCyJTVCA_DF4H0itfxQtM69m7wt7z2fvhtw87hBD0,886
|
|
107
|
+
tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj,sha256=DRwYdI1-rRZzNBYJpJ5HKlmdVfjFoCdpzLRQYQWtx9I,1591314
|
|
108
|
+
tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj,sha256=fVW_Gc8Csumvrb-z-4Ztd-8txDEATHDPt9VGEVlUSjk,586138
|
|
109
|
+
tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj,sha256=CdXaRgx4N_02RSH8R6h5k3jyvbd8df04YM8qlP-En1c,979501
|
|
110
|
+
tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj,sha256=2LL2hKx8de-Ivj7lM5jkqCEOHTm_AMj78bVyqh99orw,1010010
|
|
111
|
+
tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj,sha256=8DX8cdkBSlOq4ay-KVhXghmTTjqJwR0qqj9O_5DAt3c,2014440
|
|
112
|
+
tinysim_warp/cart_pole/__init__.py,sha256=ltL0cgySOSbeqBvks-UqV1OpT-K-kxo3GylNdvfCB1w,8344
|
|
113
|
+
tinysim_warp/quadruped/__init__.py,sha256=aIOlF9vO9GIYn1y4dth4q-fpUdvB9KZq2rf25YcOcqc,6393
|
|
114
|
+
tinysim_warp/simple_quadruped/__init__.py,sha256=sXL7EOtlB4qm_l4NsYTOFKvpt438voq7OaPgzciPOU0,5329
|
|
115
|
+
tinysim_warp/simple_quadruped/simple_quadruped.urdf,sha256=UfyGROUD5Qlf_t5ISipE2L7uQPBl-hwFnmRsjNL9yH4,8311
|
|
116
|
+
tinysim-0.0.4.dist-info/METADATA,sha256=iCf6ezMgRK8qjZt1Q_Sk0dqEWYyMlgao-XtDni0MqYw,3941
|
|
117
|
+
tinysim-0.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
118
|
+
tinysim-0.0.4.dist-info/top_level.txt,sha256=v-9NmTLfZukVjPwJwEdtCU7yY4TdLsBf1H8s25tR3V4,36
|
|
119
|
+
tinysim-0.0.4.dist-info/RECORD,,
|
|
File without changes
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import mujoco
|
|
3
|
+
import glfw
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GLViewer:
|
|
7
|
+
def __init__(self, model, data, width=1200, height=900):
|
|
8
|
+
self.width = width
|
|
9
|
+
self.height = height
|
|
10
|
+
self.model = model
|
|
11
|
+
self.data = data
|
|
12
|
+
self.window = None
|
|
13
|
+
self.scene = None
|
|
14
|
+
self.context = None
|
|
15
|
+
if not glfw.init():
|
|
16
|
+
raise RuntimeError("Failed to initialize GLFW")
|
|
17
|
+
|
|
18
|
+
self._create_window()
|
|
19
|
+
|
|
20
|
+
def _create_window(self):
|
|
21
|
+
glfw.window_hint(glfw.VISIBLE, glfw.TRUE)
|
|
22
|
+
self.window = glfw.create_window(self.width, self.height, "Viewer", None, None)
|
|
23
|
+
if not self.window:
|
|
24
|
+
raise RuntimeError("Failed to create GLFW window")
|
|
25
|
+
|
|
26
|
+
glfw.make_context_current(self.window)
|
|
27
|
+
glfw.swap_interval(1)
|
|
28
|
+
glfw.set_window_close_callback(self.window, self._on_close)
|
|
29
|
+
|
|
30
|
+
self.cam = mujoco.MjvCamera()
|
|
31
|
+
self.opt = mujoco.MjvOption()
|
|
32
|
+
self.scene = mujoco.MjvScene(self.model, maxgeom=500)
|
|
33
|
+
self.context = mujoco.MjrContext(
|
|
34
|
+
self.model, mujoco.mjtFontScale.mjFONTSCALE_150
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
self.cam.azimuth = 90.0
|
|
38
|
+
self.cam.elevation = -25.0
|
|
39
|
+
self.cam.distance = 4.0
|
|
40
|
+
self.cam.lookat[:] = np.array([0.0, 0.0, 0.0])
|
|
41
|
+
self.cam.type = mujoco.mjtCamera.mjCAMERA_FREE
|
|
42
|
+
|
|
43
|
+
def render(self):
|
|
44
|
+
if self.window is None:
|
|
45
|
+
return
|
|
46
|
+
|
|
47
|
+
glfw.make_context_current(self.window)
|
|
48
|
+
width, height = glfw.get_framebuffer_size(self.window)
|
|
49
|
+
viewport = mujoco.MjrRect(0, 0, width, height)
|
|
50
|
+
mujoco.mjv_updateScene(
|
|
51
|
+
self.model,
|
|
52
|
+
self.data,
|
|
53
|
+
self.opt,
|
|
54
|
+
None,
|
|
55
|
+
self.cam,
|
|
56
|
+
mujoco.mjtCatBit.mjCAT_ALL,
|
|
57
|
+
self.scene,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
mujoco.mjr_render(viewport, self.scene, self.context)
|
|
61
|
+
glfw.swap_buffers(self.window)
|
|
62
|
+
glfw.poll_events()
|
|
63
|
+
|
|
64
|
+
def _on_close(self, window):
|
|
65
|
+
self.close()
|
|
66
|
+
|
|
67
|
+
def close(self):
|
|
68
|
+
if self.window is not None:
|
|
69
|
+
glfw.destroy_window(self.window)
|
|
70
|
+
self.window = None
|
|
71
|
+
self.scene = None
|
|
72
|
+
self.context.free()
|
|
73
|
+
|
|
74
|
+
def capture_frame(self):
|
|
75
|
+
"""Capture the current framebuffer and return as an image array (H, W, 3)."""
|
|
76
|
+
if self.window is None:
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
glfw.make_context_current(self.window)
|
|
80
|
+
width, height = glfw.get_framebuffer_size(self.window)
|
|
81
|
+
viewport = mujoco.MjrRect(0, 0, width, height)
|
|
82
|
+
|
|
83
|
+
rgb_buffer = np.zeros((height, width, 3), dtype=np.uint8)
|
|
84
|
+
mujoco.mjr_readPixels(rgb_buffer, None, viewport, self.context)
|
|
85
|
+
|
|
86
|
+
# OpenGL framebuffer origin is bottom-left, flip vertically
|
|
87
|
+
rgb_buffer = np.flip(rgb_buffer, axis=0)
|
|
88
|
+
return rgb_buffer
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import pathlib
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
import mujoco
|
|
7
|
+
from ..gl_viewer import GLViewer
|
|
8
|
+
from ..notebook_viewer import NotebookViewer
|
|
9
|
+
except ImportError:
|
|
10
|
+
raise ImportError(
|
|
11
|
+
"Mujoco is not properly installed. Install using `pip install tinysim[mujoco]`"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ManipulationBaseEnv:
|
|
16
|
+
|
|
17
|
+
def __init__(self, headless=False, **kwargs):
|
|
18
|
+
model_path = str(pathlib.Path(__file__).parent / "xmls/scene.xml")
|
|
19
|
+
self.model = mujoco.MjModel.from_xml_path(model_path)
|
|
20
|
+
self.data = mujoco.MjData(self.model)
|
|
21
|
+
mujoco.mj_forward(self.model, self.data)
|
|
22
|
+
|
|
23
|
+
if not headless:
|
|
24
|
+
if kwargs.get("notebook", False):
|
|
25
|
+
self.viewer = NotebookViewer(self.model, self.data)
|
|
26
|
+
else:
|
|
27
|
+
self.viewer = GLViewer(self.model, self.data)
|
|
28
|
+
else:
|
|
29
|
+
self.viewer = None
|
|
30
|
+
|
|
31
|
+
def step(self, action=None, n_frames=20):
|
|
32
|
+
self.render()
|
|
33
|
+
mujoco.mj_step(self.model, self.data, nstep=n_frames)
|
|
34
|
+
mujoco.mj_rnePostConstraint(self.model, self.data)
|
|
35
|
+
|
|
36
|
+
def render(self):
|
|
37
|
+
if self.viewer:
|
|
38
|
+
self.viewer.render()
|
|
Binary file
|