diff --git a/Make-linux b/Make-linux new file mode 100755 index 0000000000000000000000000000000000000000..cbfe05b1934cc128beae214456cbef886ea731fc --- /dev/null +++ b/Make-linux @@ -0,0 +1,29 @@ +# set directory of external packages +INCDIR = /usr/include +LIBDIR = /usr/lib +MATDIR = /usr/local/MATLAB/R2016b + + +# set all compiler and linker flags +OPT = -O3 +#EXTRA_OPT = -fwhole-program + +# for armadillo +ARMA = -DARMA_NO_DEBUG -DARMA_DONT_USE_WRAPPER + +CXX = g++ + +INCS = -I$(INCDIR)/boost \ + -I$(INCDIR)/armadillo_bits \ + -I$(MATDIR)/extern/include \ + +LIBS = -lblas -llapack -lmat -leng -lmx +LIBTEST = -lboost_unit_test_framework + +CXXFLAGS = -g \ + $(ARMA) $(OPT) \ + -std=c++11 + +LDFLAGS =-L$(MATDIR)/bin/glnxa64 + + diff --git a/README.md b/README.md index b75b5563a91e8f70b26bc577098972a9bdac5200..a5594b66f54c87200a58732ea1b0c2458e14f1f2 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,92 @@ -# RObustly Complete control Synthesis (ROCS) +# RObustly Complete control Synthesis (ROCS) # **ROCS** is a robust symbolic control synthesis tool for nonlinear systems. It provides two control synthesis methods from linear temporal logic (LTL) formulas: - Abstraction-based control synthesis (to be added): state and control space are uniformly discretized. - Specification-guided control synthesis: state space are partitioned adaptively with respect to given specifications and local dynamics of the systems. -## Installation -### Prerequisite packages and softwares +**ROCS** is currently a package of c++ APIs, which only need to be included and no recompiliation required. + + + +## Installation ## +### Prerequisite packages and softwares ### - boost c++ libraries (http://www.boost.org): libraries for graph searching, ode solvers; - armadillo (http://arma.sourceforge.net): a c++ linear algebra library; - matlab: control simulation and graphics. -### Configuration - - Update the environment variable DYLD_LIBRARY_PATH in terminal: + +### Configuration of Matlab ### + - Matlab 2017a and earlier versions are supported. + - Follow the instruction Matlab documentation on **Set run-time library path on Mac and Linux systems**, e.g., + - On Mac OSX: update the environment variable DYLD_LIBRARY_PATH by placing the following commands in a startup script (~/.profile): +``` +export DYLD_LIBRARY_PATH=“matlabroot/bin/maci64:matlabroot/sys/os/maci64:$DYLD_LIBRARY_PATH†``` -export DYLD_LIBRARY_PATH=“/Applications/MATLAB_R2016a.app/bin/maci64:/Applications/MATLAB_R2016a.app/sys/os/maci64:$DYLD_LIBRARY_PATH†+ - On Linux: ``` +export LD_LIBRARY_PATH=“matlabroot/bin/glnxa64:matlabroot/sys/os/glnxa64:$LD_LIBRARY_PATH†+``` + +### Installation of **Armadillo** ### +The installation differs on Mac OSX and Linux. + - For Mac users, recommend to use *Homebrew* with simple command in terminal: + ``` + $brew install armadillo + ``` + - For Linux users, packages such as *cmake*, *openBLAS*, *LAPACK* and *ARPACK*. Follow the instruction on http://arma.sourceforge.net/download.html. + -## Usage -- Clone this repositary. Source code will be downloaded and ready for use. +## Usage ## +- Clone this repositary. - Make sure the prerequisites are installed. -- Go to the folder *examples*, modify the *Makefile* according to your actual installed paths of prerequisites, e.g. -``` -BOOSTROOT = /usr/local/Cellar/boost/1.62.0 -MATLABROOT = /Applications/MATLAB_R2016a.app -LINALGROOT = /usr/local/Cellar/armadillo/7.500.2 -``` -- Type `make` in command window to compile examples. For example, for dcdc example, type `make dcdc` in command window. -- Execute compiled examples by typing the name of the executable, e.g. `./dcdc`. +- Prepare the configuration file for build: + + The default configuration file *configMake* in the root path is for Mac OSX, the user only need to modify the paths for the external packages, e.g., + ``` + BSTDIR := /usr/local/opt/boost + MATDIR := /Applications/MATLAB_R2016a.app + LADIR := /usr/local/opt/armadillo + ``` + + for Linux users, rename the file *Make-linux* to *configMake*. If all the prerequisites are installed in the default paths, only modify the matlab path, e.g., + ``` + MATDIR = /usr/local/MATLAB/R2016b + ``` +- To run examples, go to the folder *examples*: + + To build all the examples: type `$ make examples` in terminal. + + To build one of the examples: go to the corresponding subfolder and type `$ make` in terminal. +- Execute compiled examples by typing the name of the generated executable, e.g. `./dcdc`. **Data will be generated in each subfolder corresponding to the specific example**. - Run *simulation.m* in the same example folder using matlab. -## Examples + + +## Examples ## Simulations of the examples can be found under the folder *examples*: - *examples/dcdc*: DCDC converter invariance control. - *examples/car*: Robot car reach avoid control: reach a target region while avoiding obstacles. - *examples/ipdl*: Inverted pendulum reach stay control: reach and stay in the upright position. -- *examples/poly*: Polynomial systems region of attraction computation. -- *examples/temperature*: Room temperature control (4-mode system): reach and stay in desired room and heater temperatures. +- *examples/temp*: Room temperature control (4-mode system): reach and stay in desired room and heater temperatures. + -## Create your own examples + +## Create your own examples ## To create your own examples, you have to provide a *main file* specifying all necessary problem settings and an additional file of system dynamics. For the DCDC converter example, - main file: *DemoDcdc.cpp* - vectorfield file: *dcdc.hpp* -## Features included + + +## Features included ## - Basic invariance and reachability control for discrete-time systems. - Buchi, coBuchi and reach-stay (a simpler version of coBuchi) control synthesis algorithms. -## Features under developement + + +## Features under developement ## - Control synthesis from more complex LTL formulas. - Integrate continuous-time validated ode solver. -## Note -- Only tested on Mac OSX 10.11/12. \ No newline at end of file + +## Note ## +Tested on +- Mac OSX 10.11/12. +- Ubuntu 16.04.3 LTS. \ No newline at end of file