From 0b5f299d3382b7e285278c3dd9a3ef5ac945074b Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson <cont-frb@ulund.org> Date: Fri, 19 Jan 2018 09:53:04 +0100 Subject: [PATCH] Update index.md --- docs/src/index.md | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index aae5d24..b0c99c4 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -22,19 +22,23 @@ to get the latest release. 2. Install LabProcesses.jl using command `Pkg.clone("https://gitlab.control.lth.se/processes/LabProcesses.jl.git")` Lots of packages will now be installed, this will take some time. If this is your first time using Julia, you might have to run `julia> Pkg.init()` before you install any packages. # How to implement a new process -1. Locate the file [interface.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface.jl). When the package is installed, you find its directory under `~/.julia/v0.6/LabProcesses/`, if not, run `julia> Pkg.dir("LabProcesses")` to locate the directory. +### 1. +Locate the file [interface.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface.jl). When the package is installed, you find its directory under `~/.julia/v0.6/LabProcesses/`, if not, run `julia> Pkg.dir("LabProcesses")` to locate the directory. (Alternatively, you can copy all definitions from [/interface_implementations/ballandbeam.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface_implementations/ballandbeam.jl) instead. Maybe it's easier to work from an existing implementaiton.) -2. Copy all function definitions. -3. Create a new file under `/interface_implementations` where you paste all the +### 2. +Copy all function definitions. +### 3. +Create a new file under `/interface_implementations` where you paste all the copied definitions and implement them. See [/interface_implementations/ballandbeam.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface_implementations/ballandbeam.jl) for an example. -4. Above all function implementations you must define the process type, e.g, - ```julia - struct BallAndBeam <: PhysicalProcess - h::Float64 - bias::Float64 - end - BallAndBeam() = BallAndBeam(0.01, 0.0) # Constructor with default value of sample time - ``` +### 4. +Above all function implementations you must define the process type, e.g, +```julia +struct BallAndBeam <: PhysicalProcess + h::Float64 + bias::Float64 +end +BallAndBeam() = BallAndBeam(0.01, 0.0) # Constructor with default value of sample time +``` Make sure you inherit from `PhysicalProcess` or `SimulatedProcess` as appropriate. This type must contains fields that hold information about everything that is relevant to a particular instance of the process. Different ballandbeam-process @@ -42,7 +46,8 @@ have different biases, hence this must be stored. A simulated process would have to keep track of its state etc. in order to implement the measure and control methods. See [Types in julia documentation](https://docs.julialang.org/en/stable/manual/types/#Composite-Types-1) for additional info regarding user defined types and (constructors)[https://docs.julialang.org/en/stable/manual/constructors/]. -5. Documentation of all interface functions is available in the file [interface_documentation.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface_documentation.jl) +### 5. +Documentation of all interface functions is available in the file [interface_documentation.jl](https://gitlab.control.lth.se/processes/LabProcesses.jl/blob/master/src/interface_documentation.jl) # How to control a process The interface `AbstractProcess` defines the functions `control(P, u)` and `measure(P)`. @@ -150,12 +155,8 @@ the user is unsure about a reasonable value. ## Non-linear process Your first option is to linearize the process and proceed like above. Other options include -1. Make `control` perform forward Euler, i.e., `x' = f(x,u)*h` for a general -system model ``x' = f(x,u); y = g(x,u)`` and sample time ``h``. -2. Integrate the system model using some fancy method like Runge-Kutta. See -[DifferentialEquations.jl](http://docs.juliadiffeq.org/stable/types/discrete_types.html) -for discrete-time solving of ODEs (don't be discouraged, this is almost as simple as -forward Euler above). +1. Make `control` perform forward Euler, i.e., `x[t+1] = x[t] + f(x[t],u[t])*h` for a general system model ``x' = f(x,u); y = g(x,u)`` and sample time ``h``. +2. Integrate the system model using some fancy method like Runge-Kutta. See [DifferentialEquations.jl](http://docs.juliadiffeq.org/stable/types/discrete_types.html) for discrete-time solving of ODEs (don't be discouraged, this is almost as simple as forward Euler above). # Exported functions and types ```@autodocs -- GitLab