Package: rockit-meco
rockitDescriptionRockit (Rapid Optimal Control kit) is a software framework to quickly prototype optimal control problems (aka dynamic optimization) that may arise in engineering: e.g.
iterative learning (ILC), model predictive control (NMPC), system identification, and motion planning.Notably, the software allows free end-time problems and multi-stage optimal problems.
The software is currently focused on direct methods and relies heavily onCasADi.
The software is developed by theKU Leuven MECO research team.InstallationInstall using pip:pip install rockit-mecoHello world(Taken from theexample gallery)You may try it live in your browser:.Import the project:fromrockitimport*Start an optimal control environment with a time horizon of 10 seconds
starting from t0=0s.(free-time problems can be configured with `FreeTime(initial_guess))ocp=Ocp(t0=0,T=10)Define two scalar states (vectors and matrices also supported)x1=ocp.state()x2=ocp.state()Define one piecewise constant control input(useorder=1for piecewise linear)u = ocp.control()Compose time-dependent expressions a.k.a. signals(explicit time-dependence is supported withocp.t)e=1-x2**2Specify differential equations for states(DAEs also supported withocp.algebraicandadd_alg)ocp.set_der(x1,e*x1-x2+u)ocp.set_der(x2,x1)Lagrange objective term: signals in an integrandocp.add_objective(ocp.integral(x1**2+x2**2+u**2))Mayer objective term: signals evaluated at t_f = t0_+Tocp.add_objective(ocp.at_tf(x1**2))Path constraints(must be valid on the whole time domain running fromt0totf,
grid options available such asgrid='integrator'orgrid='inf')ocp.subject_to(x1>=-0.25)ocp.subject_to(-1<=(u<=1))Boundary constraintsocp.subject_to(ocp.at_t0(x1)==0)ocp.subject_to(ocp.at_t0(x2)==1)Pick an NLP solver backend(CasADinlpsolplugin)ocp.solver('ipopt')Pick a solution method
such asSingleShooting,MultipleShooting,DirectCollocationwith arguments:N -- number of control intervalsM -- number of integration steps per control intervalgrid -- could specify e.g. UniformGrid() or GeometricGrid(4)method=MultipleShooting(N=10,intg='rk')ocp.method(method)Set initial guesses for states, controls and variables.
Default: zeroocp.set_initial(x2,0)# Constantocp.set_initial(x1,ocp.t/10)# Function of timeocp.set_initial(u,linspace(0,1,10))# ArraySolve:sol=ocp.solve()In case the solver fails, you can still look at the solution:(you may need to wrap the solve line in try/except to avoid the script aborting)sol=ocp.non_converged_solutionShow structure:ocp.spy()Post-processing:tsa,x1a=sol.sample(x1,grid='control')tsb,x1b=sol.sample(x1,grid='integrator')tsc,x1c=sol.sample(x1,grid='integrator',refine=100)plot(tsa,x1a,'-')plot(tsb,x1b,'o')plot(tsc,x1c,'.')Matlab interfaceRockit comes with a (almost) feature-complete interface to Matlab.
Installation steps:Checkwhich Python versions your Matlab installation supports, e.g.Python 3.6Open up a compatible Python environment in a terminal (if you don't have one, considerminicondaand create an environment by performing commandsconda create --name myspace python=3.6andconda activate myspaceinside the Anaconda Prompt).Performpip install "rockit-meco>=0.1.12" "casadi>=3.5.5"in that teminalLaunch Matlab from that same terminal (Type the full path+name of the Matlab executable. In Windows you may find the Matlab executable by right-clicking the icon from the start menu; use quotes (") to encapsulate the full name if it contains spaces. e.g."C:\Program Files\Matlab\bin\matlab.exe")Install CasADi for Matlab fromhttps://github.com/casadi/casadi/releases/tag/3.5.5: pick the latest applicable matlab archive, unzip it, and add it to the Matlab path (without subdirectories)Make sure you remove any other CasADi version from the Matlab path.Only for Matlab >=2019b: make sure you do have in-process ExecutionMode for speedpyenv('ExecutionMode','InProcess')Add rockit to the matlab path:addpath(char(py.rockit.matlab_path))Run thehello_worldexample from theexample directoryDebugging:Check if the correct CasADi Python is found: py.imp.find_module('casadi')Check if the correct CasADi Matlab is found:edit casadi.SerializerBase, should have a method called 'connect'Matlab error "Conversion to double from py.numpy.ndarray is not possible." -> Consult your Matlab release notes to verify that your Python version is supportedMatlab error "Python Error: RuntimeError: .../casadi/core/serializing_stream.hpp:171: Assertion "false" failed:" -> May occur on Linux for some configurations. Consult rockit authorsExternal interfacesIn the long run, we aim to add a bunch of interfaces tothird-party dynamic optimization solvers.
At the moment, the following solvers are interfaced:acados--examplesgrampc--examplesInstallation when using rockit from gitgit submodule update --init --recursiveWindows only: install Visual Studio (supported: 2017,2019,2022) with the following components:C++ Desktop Developmentworkload, and verify that the following components are also installed:MSBuild,MSVC C++ x64/x86 build tools,C++ Cmake tools,C++/CLI supportPresentationsBenelux 2020:Effortless modeling of optimal control problems with rockitDemo @ FM symposium:Rockit: optimal motion planning made easyCitingGillis, Joris ; Vandewal, Bastiaan ; Pipeleers, Goele ; Swevers, Jan
"Effortless modeling of optimal control problems with rockit", 39th Benelux Meeting on Systems and Control 2020, Elspeet, The Netherlands