A framework for hierarchical modelling and simulation of dynamic systems
Project description
MoDyPy (rhymes with “modify”) is a Python framework for Modelling dynamic systems in Python. The framework provides methods for describing continuous-time linear and non-linear systems in state-space representation. It was originally inspired by simupy developed by Ben Margolis, but has a completely different philosophy and architecture than simupy.
The basic components of a dynamic system in MoDyPy are states and signals. States represent the internal state of the system, and signals represent the values calculated based on the state. Ports can be connected to signals, so that reusable blocks with input and output ports can be easily built. For more details refer to the documentation.
Main Features
Simple architecture based on states, signals and connectible ports
Enables hierarchical modelling
Allows the establishment of reusable building blocks
Simulator for linear and non-linear continuous- and discrete-time systems
Clock system to model periodic events and discrete-time components
Steady state determination and linearization
Library of standard blocks, including 6-degree-of-freedom rigid body motion
Tested for 100% statement and branch coverage
Installation
MoDyPy is available via the pip installer:
$ pip install modypy
To install the development version,
$ git clone https://github.com/ralfgerlich/modypy.git
$ pip install -e modypy
Examples
Check out the examples in the examples directory and the Programmer’s Guide. These include:
- dcmotor.py
A simple example using a DC-motor driving a propeller and sampling the thrust using a zero-order hold.
- rigidbody.py
Some rigid-body simulation using moments and forces showing an object moving in a circle with constant velocity and turn-rate.
- bouncing_ball.py
An example modelling a bouncing ball, demonstrating the use of events and event-handler functions.
- quadcopter_trim.py
A larger example showcasing the steady-state-determination and linearisation of complex systems, in this case for a quadrocopter frame with four DC-motors with propellers.
They can be run from the sources using, e.g.,
$ pip install matplotlib
$ python examples/bouncing_ball.py
Note that some of the examples require matplotlib to run and display the results.
Contributing
Contributions are welcome! Check out the GitHub Project Page for issues and ideas on how to add to the project.
Contributions must adhere to the following conditions:
New features must be accompanied by appropriate pytest tests.
New features should at least carry Python Docstrings for API documentation following the general style of the existing API documentation.
Coding style should adhere to PEP8 as per the settings of the pylintrc file in the project directory.
Contributors must accept publishing their contribution under the licensing conditions laid out in the LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.