System Definitions
Background
The starting point for most the utilities in this package is the ControlAffineSystem type. This type represents a nonlinear control affine system described by:
\[\dot{x} = f(x) + g(x)u,\]
where $x\in\mathbb{R}^n$ is the system state, $u\in\mathbb{R}^n$ is the control input, $f\,:\,\mathbb{R}^n\rightarrow\mathbb{R}^n$ is a vector field characterizing the drift dynamics, and $g\,:\,\mathbb{R}^n\rightarrow\mathbb{R}^{n\times m}$ is a matrix whose columns capture the control directions. A control affine system can be constructed with:
Σ = ControlAffineSystem(name, n, m, f, g)where name::String is a string describing the system, n::Int is an integer denoting the state dimension, m::Int is an integer denoting the control dimension, and f::Function and g::Function are functions of the form f(x) and g(x) which take as input an n-dimensional vector x or a scalar if n=1. Alternatively, if you do not want to assign a name to system you can use:
Σ = ControlAffineSystem(n, m, f, g)to construct a system without a name.
Implementation
ControlBarrierFunctions.ControlAffineSystem — TypeControlAffineSystemControl affine system described by the dynamics $ẋ = f(x) + g(x)u$ where $x ∈ ℝⁿ$ is the system state, $u ∈ ℝᵐ$ is the control input and $f : ℝⁿ → ℝⁿ$ and $g : ℝⁿ → ℝⁿˣᵐ$ represent the dynamics.
Fields
name::String: name of system, e.g., "double integrator", "unicycle", "quadrotor", etc.n::Int: state dimensionm::Int: control dimensionf::Function: drift dynamicsg::Function: control directions
ControlBarrierFunctions.ControlAffineSystem — MethodControlAffineSystem(n::Int, m::Int, f::Function, g::Function)Construct a control affine system. Name defaults to missing if not provided.