Skip to content

Commit 6059ea9

Browse files
authored
Merge pull request #304 from JuliaControl/franckgaga-patch-1
Revise README features section with emojis
2 parents e0c9c5d + 685f740 commit 6059ea9

File tree

1 file changed

+28
-74
lines changed

1 file changed

+28
-74
lines changed

README.md

Lines changed: 28 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -73,77 +73,31 @@ for more detailed examples.
7373

7474
## Features
7575

76-
### Model Predictive Control Features
77-
78-
- linear and nonlinear plant models exploiting multiple dispatch
79-
- model linearization based on automatic differentiation (exact Jacobians)
80-
- supported objective function terms:
81-
- output setpoint tracking
82-
- move suppression
83-
- input setpoint tracking
84-
- terminal costs
85-
- custom economic costs (economic model predictive control)
86-
- control horizon distinct from prediction horizon and custom move blocking
87-
- adaptive linear model predictive controller
88-
- manual model modification
89-
- automatic successive linearization of a nonlinear model
90-
- objective function weights and covariance matrices modification
91-
- explicit predictive controller for problems without constraint
92-
- online-tunable soft and hard constraints on:
93-
- output predictions
94-
- manipulated inputs
95-
- manipulated inputs increments
96-
- terminal states to ensure nominal stability
97-
- custom nonlinear inequality constraints (soft or hard)
98-
- supported feedback strategy:
99-
- state estimator (see State Estimation features)
100-
- internal model structure with a custom stochastic model
101-
- automatic model augmentation with integrating states for offset-free tracking
102-
- support for unmeasured model outputs
103-
- feedforward action with measured disturbances that supports direct transmission
104-
- custom predictions for (or preview):
105-
- output setpoints
106-
- measured disturbances
107-
- input setpoints
108-
- easy integration with `Plots.jl`
109-
- optimization based on `JuMP.jl` to quickly compare multiple optimizers:
110-
- many quadratic solvers for linear control
111-
- many nonlinear solvers for nonlinear control (local or global)
112-
- derivatives based on `DifferentiationInterface.jl` to compare different approaches:
113-
- automatic differentiation (exact solution)
114-
- symbolic differentiation (exact solution)
115-
- finite difference (approximate solution)
116-
- supported transcription methods of the optimization problem:
117-
- direct single shooting
118-
- direct multiple shooting
119-
- trapezoidal collocation
120-
- additional information about the optimum to ease troubleshooting
121-
- real-time control loop features:
122-
- implementations that carefully limits the allocations
123-
- simple soft real-time utilities
124-
125-
### State Estimation Features
126-
127-
- supported state estimators/observers:
128-
- steady-state Kalman filter
129-
- Kalman filter
130-
- Luenberger observer
131-
- internal model structure
132-
- extended Kalman filter
133-
- unscented Kalman filter
134-
- moving horizon estimator
135-
- disable built-in observer to manually provide your own state estimate
136-
- easily estimate unmeasured disturbances by adding one or more integrators at the:
137-
- manipulated inputs
138-
- measured outputs
139-
- bumpless manual to automatic transfer for control with a proper initial estimate
140-
- estimators in two possible forms:
141-
- filter (or current) form to improve accuracy and robustness
142-
- predictor (or delayed) form to reduce computational load
143-
- moving horizon estimator in two formulations:
144-
- linear plant models (quadratic optimization)
145-
- nonlinear plant models (nonlinear optimization)
146-
- moving horizon estimator online-tunable soft and hard constraints on:
147-
- state estimates
148-
- process noise estimates
149-
- sensor noise estimates
76+
### 🎯 Model Predictive Control Features
77+
78+
- 🏭️ **Plant Model**: Linear or nonlinear models exploiting multiple dispatch.
79+
- ⛳️ **Objectives**: Tracking for inputs/outputs, move suppression, terminal costs, and economic costs.
80+
-**Horizons**: Distinct prediction/control horizons with custom move blocking.
81+
- 📸 **Linearization**: Auto-differentiation for exact Jacobians.
82+
- ⚙️ **Adaptive MPC**: Manual model updates or automatic successive linearization.
83+
- 🏎️ **Explicit MPC**: Specialized for unconstrained problems.
84+
- 🚧 **Constraints**: Soft/hard limits on inputs, outputs, increments, and terminal states.
85+
- 🔁 **Feedback**: Internal model or state estimators (see features below).
86+
- 📡 **Feedforward**: Integrated support for measured disturbances.
87+
- 🔮 **Preview**: Custom predictions for setpoints and measured disturbances.
88+
- 📈 **Offset-Free**: Automatic model augmentation with integrators.
89+
- 📊 **Visuals**: Easy integration with `Plots.jl`.
90+
- 🧩 **Solvers**: Optimization via `JuMP.jl` (quadratic & nonlinear) and derivatives via `DifferentiationInterface.jl`.
91+
- 📝 **Transcription**: Direct single/multiple shooting and trapezoidal collocation.
92+
- 🩺 **Troubleshooting**: Detailed diagnostic information about optimum.
93+
- ⏱️ **Real-Time**: Optimized for low memory allocations with soft real-time utilities.
94+
95+
### 🔭 State Estimation Features
96+
97+
- 🔍️ **Estimators**: Many Kalman filters, Luenberger, and Moving Horizon Estimator (MHE).
98+
- 🎛️ **Customization**: Ability to use custom/external state estimates.
99+
- 🌊 **Disturbances**: Estimate unmeasured disturbances via integrators on inputs/outputs.
100+
- 🛣️ **Bumpless Transfer**: Smooth transitions from manual to automatic control.
101+
- ⌚️ **Timing**: Estimators available in filter (current) or predictor (delayed) forms.
102+
- 🏷️ **MHE Types**: Formulations for both linear (quadratic optimization) and nonlinear plants.
103+
- 🛡️ **MHE Constraints**: Tunable soft/hard constraints on state and noise estimates.

0 commit comments

Comments
 (0)