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.
- tinysim-0.0.4/PKG-INFO +80 -0
- tinysim-0.0.4/README.md +52 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/pyproject.toml +9 -3
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/tk.py +6 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/widget.py +3 -4
- tinysim-0.0.4/tinysim.egg-info/PKG-INFO +80 -0
- tinysim-0.0.4/tinysim.egg-info/SOURCES.txt +122 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/requires.txt +3 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/top_level.txt +1 -0
- tinysim-0.0.4/tinysim_mujoco/__init__.py +0 -0
- tinysim-0.0.4/tinysim_mujoco/gl_viewer.py +88 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/__init__.py +38 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/d405.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/finger_0.obj +883 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/finger_1.obj +657 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_0.obj +116 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_1.obj +1204 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_2.obj +5751 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_3.obj +8898 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/hand_4.obj +1574 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_0.obj +2962 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_1.obj +1084 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_10.obj +3320 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_11.obj +233 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_2.obj +5717 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_3.obj +496 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_4.obj +2157 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_5.obj +184 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_7.obj +313 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_8.obj +31361 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link0_9.obj +1054 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link1.obj +31140 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link1.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link2.obj +31586 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link2.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_0.obj +29423 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_1.obj +665 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_2.obj +852 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link3_3.obj +4591 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_0.obj +853 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_1.obj +30330 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_2.obj +4555 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link4_3.obj +680 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_0.obj +8222 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_1.obj +763 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_2.obj +36907 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_0.obj +189 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_1.obj +120 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link5_collision_2.obj +189 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_0.obj +1748 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_1.obj +304 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_10.obj +3875 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_11.obj +378 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_12.obj +51 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_13.obj +51 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_14.obj +4459 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_15.obj +6967 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_16.obj +35547 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_2.obj +128 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_3.obj +133 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_4.obj +152 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_5.obj +132 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_6.obj +139 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_7.obj +57 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_8.obj +115 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link6_9.obj +204 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7.stl +0 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_0.obj +13541 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_1.obj +1238 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_2.obj +2080 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_3.obj +1261 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_4.obj +879 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_5.obj +2279 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_6.obj +1029 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/assets/link7_7.obj +7767 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/panda.xml +280 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/scene.xml +23 -0
- tinysim-0.0.4/tinysim_mujoco/manipulation/xmls/table.xml +37 -0
- tinysim-0.0.4/tinysim_mujoco/notebook_viewer.py +33 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/__init__.py +282 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/CHANGELOG.md +6 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/LICENSE +29 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/README.md +41 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/a1.xml +206 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/calf.obj +51549 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/hip.obj +19893 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh.obj +32857 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/thigh_mirror.obj +34036 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/assets/trunk.obj +74108 -0
- tinysim-0.0.4/tinysim_mujoco/unitree_a1/unitree_a1/scene.xml +22 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/cart_pole/__init__.py +2 -2
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/quadruped/__init__.py +2 -2
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim_warp/simple_quadruped/__init__.py +2 -2
- tinysim-0.0.2/PKG-INFO +0 -56
- tinysim-0.0.2/README.md +0 -30
- tinysim-0.0.2/tinysim.egg-info/PKG-INFO +0 -56
- tinysim-0.0.2/tinysim.egg-info/SOURCES.txt +0 -36
- {tinysim-0.0.2 → tinysim-0.0.4}/setup.cfg +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/_tk_base.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/sim.js +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/tk.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/flappy/widget.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/sim.js +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/frogger/widget.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/sim.js +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/styles.css +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/tk.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/mountain_car/widget.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/example_maps.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/sim.js +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/styles.css +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/simple_amr/widget.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/__init__.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/sim.js +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/tk.py +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim/topdown_driving/track_0.json +0 -0
- {tinysim-0.0.2 → tinysim-0.0.4}/tinysim.egg-info/dependency_links.txt +0 -0
- {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
|
+
[](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
|
+
|
tinysim-0.0.4/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
# TinySim
|
|
3
|
+
|
|
4
|
+
[](https://pypi.org/project/tinysim)
|
|
5
|
+
[](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.
|
|
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
|
+
[](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,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
|
|
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
|