tinysim 0.0.2__tar.gz → 0.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. tinysim-0.0.4/PKG-INFO +80 -0
  2. tinysim-0.0.4/README.md +52 -0
  3. {tinysim-0.0.2 → tinysim-0.0.4}/pyproject.toml +9 -3
  4. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/tk.py +6 -0
  5. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/widget.py +3 -4
  6. tinysim-0.0.4/tinysim.egg-info/PKG-INFO +80 -0
  7. tinysim-0.0.4/tinysim.egg-info/SOURCES.txt +122 -0
  8. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/requires.txt +3 -0
  9. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/top_level.txt +1 -0
  10. tinysim-0.0.4/tinysim_mujoco/__init__.py +0 -0
  11. tinysim-0.0.4/tinysim_mujoco/gl_viewer.py +88 -0
  12. tinysim-0.0.4/tinysim_mujoco/manipulation/__init__.py +38 -0
  13. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/d405.stl +0 -0
  14. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/finger_0.obj +883 -0
  15. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/finger_1.obj +657 -0
  16. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand.stl +0 -0
  17. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_0.obj +116 -0
  18. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_1.obj +1204 -0
  19. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_2.obj +5751 -0
  20. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_3.obj +8898 -0
  21. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_4.obj +1574 -0
  22. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0.stl +0 -0
  23. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_0.obj +2962 -0
  24. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_1.obj +1084 -0
  25. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_10.obj +3320 -0
  26. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_11.obj +233 -0
  27. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_2.obj +5717 -0
  28. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_3.obj +496 -0
  29. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_4.obj +2157 -0
  30. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_5.obj +184 -0
  31. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_7.obj +313 -0
  32. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_8.obj +31361 -0
  33. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_9.obj +1054 -0
  34. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link1.obj +31140 -0
  35. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link1.stl +0 -0
  36. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link2.obj +31586 -0
  37. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link2.stl +0 -0
  38. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3.stl +0 -0
  39. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_0.obj +29423 -0
  40. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_1.obj +665 -0
  41. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_2.obj +852 -0
  42. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_3.obj +4591 -0
  43. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4.stl +0 -0
  44. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_0.obj +853 -0
  45. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_1.obj +30330 -0
  46. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_2.obj +4555 -0
  47. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_3.obj +680 -0
  48. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_0.obj +8222 -0
  49. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_1.obj +763 -0
  50. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_2.obj +36907 -0
  51. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj +189 -0
  52. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj +120 -0
  53. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj +189 -0
  54. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6.stl +0 -0
  55. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_0.obj +1748 -0
  56. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_1.obj +304 -0
  57. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_10.obj +3875 -0
  58. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_11.obj +378 -0
  59. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_12.obj +51 -0
  60. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_13.obj +51 -0
  61. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_14.obj +4459 -0
  62. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_15.obj +6967 -0
  63. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_16.obj +35547 -0
  64. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_2.obj +128 -0
  65. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_3.obj +133 -0
  66. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_4.obj +152 -0
  67. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_5.obj +132 -0
  68. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_6.obj +139 -0
  69. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_7.obj +57 -0
  70. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_8.obj +115 -0
  71. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_9.obj +204 -0
  72. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7.stl +0 -0
  73. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_0.obj +13541 -0
  74. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_1.obj +1238 -0
  75. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_2.obj +2080 -0
  76. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_3.obj +1261 -0
  77. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_4.obj +879 -0
  78. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_5.obj +2279 -0
  79. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_6.obj +1029 -0
  80. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_7.obj +7767 -0
  81. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/panda.xml +280 -0
  82. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/scene.xml +23 -0
  83. tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/table.xml +37 -0
  84. tinysim-0.0.4/tinysim_mujoco/notebook_viewer.py +33 -0
  85. tinysim-0.0.4/tinysim_mujoco/unitree_a1/__init__.py +282 -0
  86. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md +6 -0
  87. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/LICENSE +29 -0
  88. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/README.md +41 -0
  89. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/a1.xml +206 -0
  90. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj +51549 -0
  91. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj +19893 -0
  92. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj +32857 -0
  93. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj +34036 -0
  94. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj +74108 -0
  95. tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/scene.xml +22 -0
  96. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/cart_pole/__init__.py +2 -2
  97. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/quadruped/__init__.py +2 -2
  98. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/simple_quadruped/__init__.py +2 -2
  99. tinysim-0.0.2/PKG-INFO +0 -56
  100. tinysim-0.0.2/README.md +0 -30
  101. tinysim-0.0.2/tinysim.egg-info/PKG-INFO +0 -56
  102. tinysim-0.0.2/tinysim.egg-info/SOURCES.txt +0 -36
  103. {tinysim-0.0.2 → tinysim-0.0.4}/setup.cfg +0 -0
  104. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/__init__.py +0 -0
  105. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/_tk_base.py +0 -0
  106. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/__init__.py +0 -0
  107. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/sim.js +0 -0
  108. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/tk.py +0 -0
  109. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/widget.py +0 -0
  110. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/__init__.py +0 -0
  111. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/sim.js +0 -0
  112. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/widget.py +0 -0
  113. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/__init__.py +0 -0
  114. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/sim.js +0 -0
  115. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/styles.css +0 -0
  116. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/tk.py +0 -0
  117. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/widget.py +0 -0
  118. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/__init__.py +0 -0
  119. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/example_maps.py +0 -0
  120. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/sim.js +0 -0
  121. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/styles.css +0 -0
  122. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/widget.py +0 -0
  123. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/__init__.py +0 -0
  124. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/sim.js +0 -0
  125. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/tk.py +0 -0
  126. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/track_0.json +0 -0
  127. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/dependency_links.txt +0 -0
  128. {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/simple_quadruped/simple_quadruped.urdf +0 -0
tinysim-0.0.4/PKG-INFO ADDED
@@ -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,52 @@
1
+
2
+ # TinySim
3
+
4
+ [![PyPI](https://img.shields.io/pypi/v/tinysim.svg)](https://pypi.org/project/tinysim)
5
+ [![Jupyterlite](https://jupyterlite.rtfd.io/en/latest/_static/badge.svg)](https://matthewandretaylor.github.io/TinySim/lab?path=example.ipynb)
6
+
7
+ The goal of this project is to create more minimal simulation environments for robotics and machine learning.
8
+
9
+ Existing solutions like [ROS 2](https://github.com/ros2) and [Gymnasium](https://gymnasium.farama.org/) come with many heavy dependencies.
10
+
11
+ Additionally they are usually difficult to get setup and may require domain specific knowledge to use.
12
+ Simulation environments should be able to run in any notebook environment and require fewer dependencies.
13
+
14
+
15
+ ## Get Started 🚀
16
+
17
+ To use the baseline Python only simulation environments.
18
+
19
+ ```bash
20
+ pip install tinysim
21
+ ```
22
+
23
+ | [MountainCarEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/mountain_car) | [TopDownDrivingEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/topdown_driving) |
24
+ |:-------------------------:|:-------------------------:|
25
+ | <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" /> |
26
+
27
+ | [FroggerEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/frogger) | [FlappyEnv](https://github.com/MatthewAndreTaylor/TinySim/blob/main/tinysim/flappy) |
28
+ |:-------------------------:|:-------------------------:|
29
+ | <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" /> |
30
+
31
+
32
+ To use the [warp](https://github.com/NVIDIA/warp) simulation environments.
33
+
34
+ ```bash
35
+ pip install tinysim[warp]
36
+ ```
37
+
38
+ | [CartPoleBaseEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_warp/cart_pole) | [SimpleRobotDogBaseEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_warp/simple_quadruped) |
39
+ |:-------------------------:|:-------------------------:|
40
+ | <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" /> |
41
+
42
+
43
+ To use the [mujoco](https://github.com/google-deepmind/mujoco) simulation environments.
44
+
45
+ ```bash
46
+ pip install tinysim[mujoco]
47
+ ```
48
+ | [UnitreeA1WalkEnv](https://github.com/MatthewAndreTaylor/TinySim/tree/main/tinysim_mujoco/unitree_a1) |
49
+ |:-------------------------:|
50
+ | <img width="312" alt="mujoco_sim" src="https://github.com/user-attachments/assets/1109488e-0563-4694-8926-682edd0c8278" /> |
51
+
52
+
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tinysim"
3
- version = "0.0.2"
3
+ version = "0.0.4"
4
4
  description = "small modular simulation environments"
5
5
  authors = [
6
6
  {name = "Matthew Taylor", email = "matthew.taylor.andre@gmail.com"},
@@ -30,6 +30,7 @@ dependencies = [
30
30
 
31
31
  [project.optional-dependencies]
32
32
  warp = ["warp-lang==1.8.1"]
33
+ mujoco = ["mujoco"]
33
34
 
34
35
  [project.readme]
35
36
  file = "README.md"
@@ -40,11 +41,16 @@ requires = ["setuptools>=61.0", "wheel"]
40
41
  build-backend = "setuptools.build_meta"
41
42
 
42
43
  [tool.setuptools]
43
- packages = ["tinysim", "tinysim_warp"]
44
+ packages = ["tinysim", "tinysim_warp", "tinysim_mujoco"]
44
45
  include-package-data = true
45
46
 
47
+ # TODO: move assets to separate package - example: tinysim-{ext}-assets
46
48
  [tool.setuptools.package-data]
47
49
  tinysim = ["**/*"]
48
50
  tinysim_warp = ["**/*"]
51
+ tinysim_mujoco = ["**/*"]
49
52
 
50
-
53
+ [tool.setuptools.exclude-package-data]
54
+ tinysim = ["**/*.png"]
55
+ tinysim_warp = ["**/*.png"]
56
+ tinysim_mujoco = ["**/*.png"]
@@ -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,122 @@
1
+ README.md
2
+ pyproject.toml
3
+ tinysim/__init__.py
4
+ tinysim/_tk_base.py
5
+ tinysim.egg-info/PKG-INFO
6
+ tinysim.egg-info/SOURCES.txt
7
+ tinysim.egg-info/dependency_links.txt
8
+ tinysim.egg-info/requires.txt
9
+ tinysim.egg-info/top_level.txt
10
+ tinysim/flappy/__init__.py
11
+ tinysim/flappy/sim.js
12
+ tinysim/flappy/tk.py
13
+ tinysim/flappy/widget.py
14
+ tinysim/frogger/__init__.py
15
+ tinysim/frogger/sim.js
16
+ tinysim/frogger/tk.py
17
+ tinysim/frogger/widget.py
18
+ tinysim/mountain_car/__init__.py
19
+ tinysim/mountain_car/sim.js
20
+ tinysim/mountain_car/styles.css
21
+ tinysim/mountain_car/tk.py
22
+ tinysim/mountain_car/widget.py
23
+ tinysim/simple_amr/__init__.py
24
+ tinysim/simple_amr/example_maps.py
25
+ tinysim/simple_amr/sim.js
26
+ tinysim/simple_amr/styles.css
27
+ tinysim/simple_amr/widget.py
28
+ tinysim/topdown_driving/__init__.py
29
+ tinysim/topdown_driving/sim.js
30
+ tinysim/topdown_driving/tk.py
31
+ tinysim/topdown_driving/track_0.json
32
+ tinysim/topdown_driving/widget.py
33
+ tinysim_mujoco/__init__.py
34
+ tinysim_mujoco/gl_viewer.py
35
+ tinysim_mujoco/notebook_viewer.py
36
+ tinysim_mujoco/manipulation/__init__.py
37
+ tinysim_mujoco/manipulation/xmls/panda.xml
38
+ tinysim_mujoco/manipulation/xmls/scene.xml
39
+ tinysim_mujoco/manipulation/xmls/table.xml
40
+ tinysim_mujoco/manipulation/xmls/assets/d405.stl
41
+ tinysim_mujoco/manipulation/xmls/assets/finger_0.obj
42
+ tinysim_mujoco/manipulation/xmls/assets/finger_1.obj
43
+ tinysim_mujoco/manipulation/xmls/assets/hand.stl
44
+ tinysim_mujoco/manipulation/xmls/assets/hand_0.obj
45
+ tinysim_mujoco/manipulation/xmls/assets/hand_1.obj
46
+ tinysim_mujoco/manipulation/xmls/assets/hand_2.obj
47
+ tinysim_mujoco/manipulation/xmls/assets/hand_3.obj
48
+ tinysim_mujoco/manipulation/xmls/assets/hand_4.obj
49
+ tinysim_mujoco/manipulation/xmls/assets/link0.stl
50
+ tinysim_mujoco/manipulation/xmls/assets/link0_0.obj
51
+ tinysim_mujoco/manipulation/xmls/assets/link0_1.obj
52
+ tinysim_mujoco/manipulation/xmls/assets/link0_10.obj
53
+ tinysim_mujoco/manipulation/xmls/assets/link0_11.obj
54
+ tinysim_mujoco/manipulation/xmls/assets/link0_2.obj
55
+ tinysim_mujoco/manipulation/xmls/assets/link0_3.obj
56
+ tinysim_mujoco/manipulation/xmls/assets/link0_4.obj
57
+ tinysim_mujoco/manipulation/xmls/assets/link0_5.obj
58
+ tinysim_mujoco/manipulation/xmls/assets/link0_7.obj
59
+ tinysim_mujoco/manipulation/xmls/assets/link0_8.obj
60
+ tinysim_mujoco/manipulation/xmls/assets/link0_9.obj
61
+ tinysim_mujoco/manipulation/xmls/assets/link1.obj
62
+ tinysim_mujoco/manipulation/xmls/assets/link1.stl
63
+ tinysim_mujoco/manipulation/xmls/assets/link2.obj
64
+ tinysim_mujoco/manipulation/xmls/assets/link2.stl
65
+ tinysim_mujoco/manipulation/xmls/assets/link3.stl
66
+ tinysim_mujoco/manipulation/xmls/assets/link3_0.obj
67
+ tinysim_mujoco/manipulation/xmls/assets/link3_1.obj
68
+ tinysim_mujoco/manipulation/xmls/assets/link3_2.obj
69
+ tinysim_mujoco/manipulation/xmls/assets/link3_3.obj
70
+ tinysim_mujoco/manipulation/xmls/assets/link4.stl
71
+ tinysim_mujoco/manipulation/xmls/assets/link4_0.obj
72
+ tinysim_mujoco/manipulation/xmls/assets/link4_1.obj
73
+ tinysim_mujoco/manipulation/xmls/assets/link4_2.obj
74
+ tinysim_mujoco/manipulation/xmls/assets/link4_3.obj
75
+ tinysim_mujoco/manipulation/xmls/assets/link5_0.obj
76
+ tinysim_mujoco/manipulation/xmls/assets/link5_1.obj
77
+ tinysim_mujoco/manipulation/xmls/assets/link5_2.obj
78
+ tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj
79
+ tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj
80
+ tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj
81
+ tinysim_mujoco/manipulation/xmls/assets/link6.stl
82
+ tinysim_mujoco/manipulation/xmls/assets/link6_0.obj
83
+ tinysim_mujoco/manipulation/xmls/assets/link6_1.obj
84
+ tinysim_mujoco/manipulation/xmls/assets/link6_10.obj
85
+ tinysim_mujoco/manipulation/xmls/assets/link6_11.obj
86
+ tinysim_mujoco/manipulation/xmls/assets/link6_12.obj
87
+ tinysim_mujoco/manipulation/xmls/assets/link6_13.obj
88
+ tinysim_mujoco/manipulation/xmls/assets/link6_14.obj
89
+ tinysim_mujoco/manipulation/xmls/assets/link6_15.obj
90
+ tinysim_mujoco/manipulation/xmls/assets/link6_16.obj
91
+ tinysim_mujoco/manipulation/xmls/assets/link6_2.obj
92
+ tinysim_mujoco/manipulation/xmls/assets/link6_3.obj
93
+ tinysim_mujoco/manipulation/xmls/assets/link6_4.obj
94
+ tinysim_mujoco/manipulation/xmls/assets/link6_5.obj
95
+ tinysim_mujoco/manipulation/xmls/assets/link6_6.obj
96
+ tinysim_mujoco/manipulation/xmls/assets/link6_7.obj
97
+ tinysim_mujoco/manipulation/xmls/assets/link6_8.obj
98
+ tinysim_mujoco/manipulation/xmls/assets/link6_9.obj
99
+ tinysim_mujoco/manipulation/xmls/assets/link7.stl
100
+ tinysim_mujoco/manipulation/xmls/assets/link7_0.obj
101
+ tinysim_mujoco/manipulation/xmls/assets/link7_1.obj
102
+ tinysim_mujoco/manipulation/xmls/assets/link7_2.obj
103
+ tinysim_mujoco/manipulation/xmls/assets/link7_3.obj
104
+ tinysim_mujoco/manipulation/xmls/assets/link7_4.obj
105
+ tinysim_mujoco/manipulation/xmls/assets/link7_5.obj
106
+ tinysim_mujoco/manipulation/xmls/assets/link7_6.obj
107
+ tinysim_mujoco/manipulation/xmls/assets/link7_7.obj
108
+ tinysim_mujoco/unitree_a1/__init__.py
109
+ tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md
110
+ tinysim_mujoco/unitree_a1/unitree_a1/LICENSE
111
+ tinysim_mujoco/unitree_a1/unitree_a1/README.md
112
+ tinysim_mujoco/unitree_a1/unitree_a1/a1.xml
113
+ tinysim_mujoco/unitree_a1/unitree_a1/scene.xml
114
+ tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj
115
+ tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj
116
+ tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj
117
+ tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj
118
+ tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj
119
+ tinysim_warp/cart_pole/__init__.py
120
+ tinysim_warp/quadruped/__init__.py
121
+ tinysim_warp/simple_quadruped/__init__.py
122
+ tinysim_warp/simple_quadruped/simple_quadruped.urdf
@@ -2,5 +2,8 @@ numpy
2
2
  anywidget
3
3
  jupyter-ui-poll
4
4
 
5
+ [mujoco]
6
+ mujoco
7
+
5
8
  [warp]
6
9
  warp-lang==1.8.1
@@ -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()