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.
Files changed (97) hide show
  1. tinysim/frogger/tk.py +6 -0
  2. tinysim/topdown_driving/widget.py +3 -4
  3. tinysim-0.0.4.dist-info/METADATA +80 -0
  4. tinysim-0.0.4.dist-info/RECORD +119 -0
  5. {tinysim-0.0.2.dist-info → tinysim-0.0.4.dist-info}/top_level.txt +1 -0
  6. tinysim_mujoco/__init__.py +0 -0
  7. tinysim_mujoco/gl_viewer.py +88 -0
  8. tinysim_mujoco/manipulation/__init__.py +38 -0
  9. tinysim_mujoco/manipulation/xmls/assets/d405.stl +0 -0
  10. tinysim_mujoco/manipulation/xmls/assets/finger_0.obj +883 -0
  11. tinysim_mujoco/manipulation/xmls/assets/finger_1.obj +657 -0
  12. tinysim_mujoco/manipulation/xmls/assets/hand.stl +0 -0
  13. tinysim_mujoco/manipulation/xmls/assets/hand_0.obj +116 -0
  14. tinysim_mujoco/manipulation/xmls/assets/hand_1.obj +1204 -0
  15. tinysim_mujoco/manipulation/xmls/assets/hand_2.obj +5751 -0
  16. tinysim_mujoco/manipulation/xmls/assets/hand_3.obj +8898 -0
  17. tinysim_mujoco/manipulation/xmls/assets/hand_4.obj +1574 -0
  18. tinysim_mujoco/manipulation/xmls/assets/link0.stl +0 -0
  19. tinysim_mujoco/manipulation/xmls/assets/link0_0.obj +2962 -0
  20. tinysim_mujoco/manipulation/xmls/assets/link0_1.obj +1084 -0
  21. tinysim_mujoco/manipulation/xmls/assets/link0_10.obj +3320 -0
  22. tinysim_mujoco/manipulation/xmls/assets/link0_11.obj +233 -0
  23. tinysim_mujoco/manipulation/xmls/assets/link0_2.obj +5717 -0
  24. tinysim_mujoco/manipulation/xmls/assets/link0_3.obj +496 -0
  25. tinysim_mujoco/manipulation/xmls/assets/link0_4.obj +2157 -0
  26. tinysim_mujoco/manipulation/xmls/assets/link0_5.obj +184 -0
  27. tinysim_mujoco/manipulation/xmls/assets/link0_7.obj +313 -0
  28. tinysim_mujoco/manipulation/xmls/assets/link0_8.obj +31361 -0
  29. tinysim_mujoco/manipulation/xmls/assets/link0_9.obj +1054 -0
  30. tinysim_mujoco/manipulation/xmls/assets/link1.obj +31140 -0
  31. tinysim_mujoco/manipulation/xmls/assets/link1.stl +0 -0
  32. tinysim_mujoco/manipulation/xmls/assets/link2.obj +31586 -0
  33. tinysim_mujoco/manipulation/xmls/assets/link2.stl +0 -0
  34. tinysim_mujoco/manipulation/xmls/assets/link3.stl +0 -0
  35. tinysim_mujoco/manipulation/xmls/assets/link3_0.obj +29423 -0
  36. tinysim_mujoco/manipulation/xmls/assets/link3_1.obj +665 -0
  37. tinysim_mujoco/manipulation/xmls/assets/link3_2.obj +852 -0
  38. tinysim_mujoco/manipulation/xmls/assets/link3_3.obj +4591 -0
  39. tinysim_mujoco/manipulation/xmls/assets/link4.stl +0 -0
  40. tinysim_mujoco/manipulation/xmls/assets/link4_0.obj +853 -0
  41. tinysim_mujoco/manipulation/xmls/assets/link4_1.obj +30330 -0
  42. tinysim_mujoco/manipulation/xmls/assets/link4_2.obj +4555 -0
  43. tinysim_mujoco/manipulation/xmls/assets/link4_3.obj +680 -0
  44. tinysim_mujoco/manipulation/xmls/assets/link5_0.obj +8222 -0
  45. tinysim_mujoco/manipulation/xmls/assets/link5_1.obj +763 -0
  46. tinysim_mujoco/manipulation/xmls/assets/link5_2.obj +36907 -0
  47. tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj +189 -0
  48. tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj +120 -0
  49. tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj +189 -0
  50. tinysim_mujoco/manipulation/xmls/assets/link6.stl +0 -0
  51. tinysim_mujoco/manipulation/xmls/assets/link6_0.obj +1748 -0
  52. tinysim_mujoco/manipulation/xmls/assets/link6_1.obj +304 -0
  53. tinysim_mujoco/manipulation/xmls/assets/link6_10.obj +3875 -0
  54. tinysim_mujoco/manipulation/xmls/assets/link6_11.obj +378 -0
  55. tinysim_mujoco/manipulation/xmls/assets/link6_12.obj +51 -0
  56. tinysim_mujoco/manipulation/xmls/assets/link6_13.obj +51 -0
  57. tinysim_mujoco/manipulation/xmls/assets/link6_14.obj +4459 -0
  58. tinysim_mujoco/manipulation/xmls/assets/link6_15.obj +6967 -0
  59. tinysim_mujoco/manipulation/xmls/assets/link6_16.obj +35547 -0
  60. tinysim_mujoco/manipulation/xmls/assets/link6_2.obj +128 -0
  61. tinysim_mujoco/manipulation/xmls/assets/link6_3.obj +133 -0
  62. tinysim_mujoco/manipulation/xmls/assets/link6_4.obj +152 -0
  63. tinysim_mujoco/manipulation/xmls/assets/link6_5.obj +132 -0
  64. tinysim_mujoco/manipulation/xmls/assets/link6_6.obj +139 -0
  65. tinysim_mujoco/manipulation/xmls/assets/link6_7.obj +57 -0
  66. tinysim_mujoco/manipulation/xmls/assets/link6_8.obj +115 -0
  67. tinysim_mujoco/manipulation/xmls/assets/link6_9.obj +204 -0
  68. tinysim_mujoco/manipulation/xmls/assets/link7.stl +0 -0
  69. tinysim_mujoco/manipulation/xmls/assets/link7_0.obj +13541 -0
  70. tinysim_mujoco/manipulation/xmls/assets/link7_1.obj +1238 -0
  71. tinysim_mujoco/manipulation/xmls/assets/link7_2.obj +2080 -0
  72. tinysim_mujoco/manipulation/xmls/assets/link7_3.obj +1261 -0
  73. tinysim_mujoco/manipulation/xmls/assets/link7_4.obj +879 -0
  74. tinysim_mujoco/manipulation/xmls/assets/link7_5.obj +2279 -0
  75. tinysim_mujoco/manipulation/xmls/assets/link7_6.obj +1029 -0
  76. tinysim_mujoco/manipulation/xmls/assets/link7_7.obj +7767 -0
  77. tinysim_mujoco/manipulation/xmls/panda.xml +280 -0
  78. tinysim_mujoco/manipulation/xmls/scene.xml +23 -0
  79. tinysim_mujoco/manipulation/xmls/table.xml +37 -0
  80. tinysim_mujoco/notebook_viewer.py +33 -0
  81. tinysim_mujoco/unitree_a1/__init__.py +282 -0
  82. tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md +6 -0
  83. tinysim_mujoco/unitree_a1/unitree_a1/LICENSE +29 -0
  84. tinysim_mujoco/unitree_a1/unitree_a1/README.md +41 -0
  85. tinysim_mujoco/unitree_a1/unitree_a1/a1.xml +206 -0
  86. tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj +51549 -0
  87. tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj +19893 -0
  88. tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj +32857 -0
  89. tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj +34036 -0
  90. tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj +74108 -0
  91. tinysim_mujoco/unitree_a1/unitree_a1/scene.xml +22 -0
  92. tinysim_warp/cart_pole/__init__.py +2 -2
  93. tinysim_warp/quadruped/__init__.py +2 -2
  94. tinysim_warp/simple_quadruped/__init__.py +2 -2
  95. tinysim-0.0.2.dist-info/METADATA +0 -56
  96. tinysim-0.0.2.dist-info/RECORD +0 -33
  97. {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
+ [![PyPI](https://img.shields.io/pypi/v/tinysim.svg)](https://pypi.org/project/tinysim)
33
+ [![Jupyterlite](https://jupyterlite.rtfd.io/en/latest/_static/badge.svg)](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,,
@@ -1,2 +1,3 @@
1
1
  tinysim
2
+ tinysim_mujoco
2
3
  tinysim_warp
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()