|
4 | 4 |
|
5 | 5 | **A flexible multibody dynamics systems simulation code with Python and C++**
|
6 | 6 |
|
7 |
| -+ Exudyn version = 1.5.65.dev1 (Fitzgerald) |
8 |
| -+ build date and time=2023-01-12 22:42 |
| 7 | ++ Exudyn version = 1.5.75.dev1 (Fitzgerald) |
| 8 | ++ build date and time=2023-01-19 08:08 |
9 | 9 | + **University of Innsbruck**, Austria, Department of Mechatronics
|
10 | 10 |
|
11 | 11 | Exudyn 1.5 is out! It includes now Python 3.7/8 - 3.10 wheels for MacOS (since 1.5.11.dev1 also showing tkinter dialogs!), improved compatibility for AVX2, simple reeving system, improved Lie group integration, improved RollingDisc, DistanceSensor, and many fixes; further features are multi-threading support; minimum coordinate formulation (KinematicTree); machine learning and artificial intelligence interface (openAI gym); improved explicit and implicit solvers; sparse matrix support; basic hydraulic actuator; creation of beams along curves; extended robotics modules; contact module; **PlotSensor** for simple post processing, and some improved 3D visualization, ... See theDoc.pdf chapter **Issues and Bugs** for changes!
|
@@ -116,15 +116,17 @@ The cooperation and funding within the EU H2020-MSCA-ITN project 'Joint Training
|
116 | 116 | The following people have contributed to Python and C++ library implementations (as well as to testing, examples, theory, ...):
|
117 | 117 |
|
118 | 118 | + Joachim Schöberl, TU Vienna (Providing specialized NGsolve core library with \ ``taskmanager``\ for \ **multi-threaded parallelization**\ ; NGsolve mesh and FE-matrices import; highly efficient eigenvector computations)
|
119 |
| -+ Stefan Holzinger, University of Innsbruck (Lie group solvers in Python, Lie group node) |
| 119 | ++ Stefan Holzinger, University of Innsbruck (Lie group module and solvers in Python, Lie group node, testing) |
120 | 120 | + Andreas Zwölfer, Technical University Munich (FFRF and CMS formulation)
|
121 |
| -+ Peter Manzl, University of Innsbruck (ConvexRoll Python and C++ implementation / pip install on linux / wsl with graphics) |
| 121 | ++ Peter Manzl, University of Innsbruck (ConvexRoll Python and C++ implementation, pip install on linux, wsl with graphics) |
122 | 122 | + Martin Sereinig, University of Innsbruck (special robotics functionality)
|
| 123 | ++ Michael Pieber, University of Innsbruck (helped in several Python libraries) |
123 | 124 | + Grzegorz Orzechowski, Lappeenranta University of Technology (coupling with openAI gym and running machine learning algorithms)
|
| 125 | ++ Aaron Bacher, University of Innsbruck (helped to integrated OpenVR, connection with Franka Emika Panda) |
124 | 126 |
|
125 | 127 | The following people have contributed to examples, testing and theory:
|
126 | 128 |
|
127 |
| -+ Michael Pieber, Konstantina Ntarladima, Manuel Schieferle, Martin Knapp, Lukas March, Dominik Sponring, David Wibmer, Simon Scheiber |
| 129 | ++ Konstantina Ntarladima, Manuel Schieferle, Martin Knapp, Lukas March, Dominik Sponring, David Wibmer, Simon Scheiber |
128 | 130 |
|
129 | 131 | -- thanks a lot! --
|
130 | 132 |
|
@@ -1198,8 +1200,58 @@ The visualization settings structure can be accessed in the system container \ `
|
1198 | 1200 |
|
1199 | 1201 |
|
1200 | 1202 |
|
| 1203 | +Renderer and 3D graphics |
| 1204 | +======================== |
| 1205 | +
|
| 1206 | +A 3D renderer is attached to the simulation. Visualization is started with \ ``exu.StartRenderer()``\ , see the examples and tutorials. |
| 1207 | +The renderer uses an OpenGL window of a library called GLFW, which is platform-independent. |
| 1208 | +The renderer is set up in a minimalistic way, just to ensure that you can check that the modeling is correct. There is no way to contruct models with the renderer. Try to avoid huge number of triangles in STL files or by creating large number of complex objects, such as spheres or cylinders. |
| 1209 | +
|
| 1210 | +There are some main features in the renderer, using keyboard and mouse: |
| 1211 | +
|
| 1212 | ++ press key H to show help in renderer |
| 1213 | ++ move model by pressing left mouse button and drag |
| 1214 | ++ rotate model by pressing right mouse button and drag |
| 1215 | ++ change visibility (wire frame, solid, transparent, ...) by pressing T |
| 1216 | ++ zoom all: key A |
| 1217 | ++ open visualization dialog: key V |
| 1218 | ++ show item number: click on graphics element with left mouse button |
| 1219 | ++ show item dictionary: click on graphics element with right mouse button |
| 1220 | ++ ... (see theDoc.pdfff.) |
| 1221 | +
|
| 1222 | +Depending on your model (size, place, ...), you may need to adjust the following \ ``openGL``\ parameters in \ ``visualizationSettings``\ : |
| 1223 | +
|
| 1224 | ++ light and light position |
| 1225 | ++ shadow (turned off by using 0; turned on by using, e.g., a value of 0.3) and shadow polygon offset; shadow slows down graphics performance by a factor of 2-3, depending on your graphics card |
| 1226 | ++ visibility of nodes, markers, etc. in according bodies, nodes, markers, ..., \ ``visualizationSettings``\ |
| 1227 | ++ move camera with a selected marker: adjust \ ``trackMarker``\ in \ ``visualizationSettings.interactive``\ |
| 1228 | ++ ... (see theDoc.pdfff.) |
| 1229 | +
|
| 1230 | +
|
| 1231 | +
|
| 1232 | +Graphics pipeline |
| 1233 | +================= |
| 1234 | +
|
| 1235 | +There are basically two loops during simulation, which feed the graphics pipeline. |
| 1236 | +The solver runs a loop: |
| 1237 | +
|
| 1238 | ++ compute step (or set up initial values) |
| 1239 | ++ finish computation step; results are in current state |
| 1240 | ++ copy current state to visualization state (thread safe) |
| 1241 | ++ signal graphics pipeline that new visualization data is available |
| 1242 | ++ the renderer may update the visualization depending on \ ``graphicsUpdateInterval``\ in \ \ ``visualizationSettings.general``\ |
| 1243 | +
|
| 1244 | +The openGL graphics thread (=separate thread) runs the following loop: |
| 1245 | +
|
| 1246 | ++ render openGL scene with a given graphicsData structure (containing lines, faces, text, ...) |
| 1247 | ++ go idle for some milliseconds |
| 1248 | ++ check if openGL rendering needs an update (e.g. due to user interaction) |
| 1249 | + => if update is needed, the visualization of all items is updated -- stored in a graphicsData structure) |
| 1250 | ++ check if new visualization data is available and the time since last update is larger than a presribed value, the graphicsData structure is updated with the new visualization state |
| 1251 | +
|
| 1252 | +
|
1201 | 1253 | Storing the model view
|
1202 |
| ----------------------- |
| 1254 | +====================== |
1203 | 1255 |
|
1204 | 1256 |
|
1205 | 1257 | There is a simple way to store the current view (zoom, centerpoint, orientation, etc.) by using \ ``SC.GetRenderState()``\ and \ ``SC.SetRenderState()``\ ,
|
@@ -1263,58 +1315,8 @@ Note that in the current version of Exudyn there is more data stored in render s
|
1263 | 1315 | see also theDoc.pdf.
|
1264 | 1316 |
|
1265 | 1317 |
|
1266 |
| -Renderer and 3D graphics |
1267 |
| -======================== |
1268 |
| -
|
1269 |
| -A 3D renderer is attached to the simulation. Visualization is started with \ ``exu.StartRenderer()``\ , see the examples and tutorials. |
1270 |
| -The renderer uses an OpenGL window of a library called GLFW, which is platform-independent. |
1271 |
| -The renderer is set up in a minimalistic way, just to ensure that you can check that the modeling is correct. There is no way to contruct models with the renderer. Try to avoid huge number of triangles in STL files or by creating large number of complex objects, such as spheres or cylinders. |
1272 |
| -
|
1273 |
| -There are some main features in the renderer, using keyboard and mouse: |
1274 |
| -
|
1275 |
| -+ press key H to show help in renderer |
1276 |
| -+ move model by pressing left mouse button and drag |
1277 |
| -+ rotate model by pressing right mouse button and drag |
1278 |
| -+ change visibility (wire frame, solid, transparent, ...) by pressing T |
1279 |
| -+ zoom all: key A |
1280 |
| -+ open visualization dialog: key V |
1281 |
| -+ show item number: click on graphics element with left mouse button |
1282 |
| -+ show item dictionary: click on graphics element with right mouse button |
1283 |
| -+ ... (see theDoc.pdfff.) |
1284 |
| -
|
1285 |
| -Depending on your model (size, place, ...), you may need to adjust the following \ ``openGL``\ parameters in \ ``visualizationSettings``\ : |
1286 |
| -
|
1287 |
| -+ light and light position |
1288 |
| -+ shadow (turned off by using 0; turned on by using, e.g., a value of 0.3) and shadow polygon offset; shadow slows down graphics performance by a factor of 2-3, depending on your graphics card |
1289 |
| -+ visibility of nodes, markers, etc. in according bodies, nodes, markers, ..., \ ``visualizationSettings``\ |
1290 |
| -+ move camera with a selected marker: adjust \ ``trackMarker``\ in \ ``visualizationSettings.interactive``\ |
1291 |
| -+ ... (see theDoc.pdfff.) |
1292 |
| -
|
1293 |
| -
|
1294 |
| -
|
1295 |
| -Graphics pipeline |
1296 |
| -================= |
1297 |
| -
|
1298 |
| -There are basically two loops during simulation, which feed the graphics pipeline. |
1299 |
| -The solver runs a loop: |
1300 |
| -
|
1301 |
| -+ compute step (or set up initial values) |
1302 |
| -+ finish computation step; results are in current state |
1303 |
| -+ copy current state to visualization state (thread safe) |
1304 |
| -+ signal graphics pipeline that new visualization data is available |
1305 |
| -+ the renderer may update the visualization depending on \ ``graphicsUpdateInterval``\ in \ \ ``visualizationSettings.general``\ |
1306 |
| -
|
1307 |
| -The openGL graphics thread (=separate thread) runs the following loop: |
1308 |
| -
|
1309 |
| -+ render openGL scene with a given graphicsData structure (containing lines, faces, text, ...) |
1310 |
| -+ go idle for some milliseconds |
1311 |
| -+ check if openGL rendering needs an update (e.g. due to user interaction) |
1312 |
| - => if update is needed, the visualization of all items is updated -- stored in a graphicsData structure) |
1313 |
| -+ check if new visualization data is available and the time since last update is larger than a presribed value, the graphicsData structure is updated with the new visualization state |
1314 |
| -
|
1315 |
| -
|
1316 |
| -Graphics user Python functions |
1317 |
| -============================== |
| 1318 | +Graphics user functions via Python |
| 1319 | +================================== |
1318 | 1320 |
|
1319 | 1321 | There are some user functions in order to customize drawing:
|
1320 | 1322 |
|
@@ -1581,9 +1583,53 @@ However, there are many \ **ways to speed up Exudyn in general**\ :
|
1581 | 1583 |
|
1582 | 1584 |
|
1583 | 1585 |
|
| 1586 | +--------------- |
| 1587 | +Advanced topics |
| 1588 | +--------------- |
| 1589 | + |
| 1590 | +This section covers some advanced topics, which may be only relevant for a smaller group of people. |
| 1591 | +Functionality may be extended but also removed in future |
| 1592 | +
|
| 1593 | +------ |
| 1594 | +OpenVR |
| 1595 | +------ |
| 1596 | + |
| 1597 | +The general open source libraries from Valve, see |
| 1598 | +
|
| 1599 | + https://github.com/ValveSoftware/openvr |
| 1600 | +
|
| 1601 | +have been linked to Exudyn . In order to get OpenVR fully integrated, you need to run \ ``setup.py``\ Exudyn with the \ ``--openvr``\ flag. For general installation instructions, see theDoc.pdf. |
| 1602 | +
|
| 1603 | +Running OpenVR either requires an according head mounted display (HMD) or a virtualization using, e.g., Riftcat 2 to use a mobile phone with an according adapter. Visualization settings are available in \ ``interactive.openVR``\ , but need to be considered with care. |
| 1604 | +An example is provided in \ ``engineOpenVR.py``\ , showing some optimal flags like locking the model rotation, zoom or translation. |
1584 | 1605 |
|
| 1606 | +Everything is experimental, but contributions are welcome! |
1585 | 1607 |
|
1586 | 1608 |
|
| 1609 | +---------------------------- |
| 1610 | +Interaction with other codes |
| 1611 | +---------------------------- |
| 1612 | + |
| 1613 | +Interaction with other codes and computers (E.g., MATLAB or other C++ codes, or other Python versions) |
| 1614 | +is possible. |
| 1615 | +To connect to any other code, it is convenient to use a TCP/IP connection. This is enabled via |
| 1616 | +the \ ``exudyn.utilities``\ functions |
| 1617 | +
|
| 1618 | ++ \ ``CreateTCPIPconnection``\ |
| 1619 | ++ \ `` TCPIPsendReceive ``\ |
| 1620 | ++ \ ``CloseTCPIPconnection ``\ |
| 1621 | +
|
| 1622 | +Basically, data can be transmitted in both directions, e.g., within a preStepUserFunction. In Examples, you can find |
| 1623 | + TCPIPexudynMatlab.py which shows a basic example for such a connectivity. |
| 1624 | +
|
| 1625 | +
|
| 1626 | +--- |
| 1627 | +ROS |
| 1628 | +--- |
| 1629 | + |
| 1630 | +Basic interaction with ROS has been tested. However, make sure to use Python 3, as there is (and will never be) a Python 2 |
| 1631 | +support for Exudyn . |
| 1632 | +
|
1587 | 1633 |
|
1588 | 1634 |
|
1589 | 1635 |
|
|
0 commit comments