C++ control simulators featuring a Python interface and an easily extendable framework for the implementation of new systems
- Boost python, random
sudo apt install python-dev libboost-dev libboost-python-dev libboost-random-dev libboost-system-dev
Quick Build Instructions
Go to the directory where you want to clone this repositorty and run:
git clone https://github.com/webrot9/control_simulators cd control_simulators mkdir build cd build cmake .. make -j8
If your machine is RAM limited, you should make with a lower
-j value as there is template compilation due to Boost iin creating the Python bindings.
One can use this library with the C++ API or the Python API.
Here's an example usage of the Python API. We first go to the
import python_simulable as ps import numpy as np x0 = np.array((np.pi, 0)) # initial state system = ps.Pendulum(x0) dt = 0.05 # simulate at 20 Hz T = 100 # simulate for 100 timesteps for t in xrange(T): u_t = np.random.rand(1) # Pendulum takes a 1-d control input x_t = system.step(dt, u_t) X = system.all_states() U = system.all_controls()
We can have additive Gaussian noise with each call to
.step by setting the mean or covariance:
system.set_noise_cov(1e-3*np.identity(2)) # We can set the mean with set_noise_mean()
You can get and set parameters of the system by using
 to access them
system.params() # gives us a list of the parameter names (e.g. ['damping', 'length'] ) damping_coeff = system['damping'] system['damping'] = 0.1
To use this elsewhere, you likely will have to set the
PYTHONPATH variable in your shell environment.
On a bash shell, this will be similar to:
If you are already in the
build/lib directory, this can be accomplished by:
This has been tested to be working on Ubuntu 14.04. It should theoretically be possible to make it work on OS X, but we have been unable to get it to work yet.
File any issues on Github (https://github.com/webrot9/control_simulators/issues). You are welcome to also submit pull requests with additional simulator models or other upgrades. Note that your models must support licensing that will inherit whatever licensing we (Roberto Capobianco and Arun Venkatraman) choose (and may modify in the future) for this repository.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.