|
|
@ -1,6 +1,6 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
#!/usr/bin/env python3 |
|
|
|
""" |
|
|
|
""" |
|
|
|
Dynamic bycicle model from "The Science of Vehicle Dynamics (2014), M. Guiggiani" |
|
|
|
Dynamic bicycle model from "The Science of Vehicle Dynamics (2014), M. Guiggiani" |
|
|
|
|
|
|
|
|
|
|
|
The state is x = [v, r]^T |
|
|
|
The state is x = [v, r]^T |
|
|
|
with v lateral speed [m/s], and r rotational speed [rad/s] |
|
|
|
with v lateral speed [m/s], and r rotational speed [rad/s] |
|
|
@ -46,7 +46,7 @@ class VehicleModel: |
|
|
|
def steady_state_sol(self, sa: float, u: float) -> np.ndarray: |
|
|
|
def steady_state_sol(self, sa: float, u: float) -> np.ndarray: |
|
|
|
"""Returns the steady state solution. |
|
|
|
"""Returns the steady state solution. |
|
|
|
|
|
|
|
|
|
|
|
If the speed is too small we can't use the dynamic model (tire slip is undefined), |
|
|
|
If the speed is too low we can't use the dynamic model (tire slip is undefined), |
|
|
|
we then have to use the kinematic model |
|
|
|
we then have to use the kinematic model |
|
|
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
@ -155,8 +155,8 @@ def create_dyn_state_matrices(u: float, VM: VehicleModel) -> Tuple[np.ndarray, n |
|
|
|
A tuple with the 2x2 A matrix, and 2x1 B matrix |
|
|
|
A tuple with the 2x2 A matrix, and 2x1 B matrix |
|
|
|
|
|
|
|
|
|
|
|
Parameters in the vehicle model: |
|
|
|
Parameters in the vehicle model: |
|
|
|
cF: Tire stiffnes Front [N/rad] |
|
|
|
cF: Tire stiffness Front [N/rad] |
|
|
|
cR: Tire stiffnes Front [N/rad] |
|
|
|
cR: Tire stiffness Front [N/rad] |
|
|
|
aF: Distance from CG to front wheels [m] |
|
|
|
aF: Distance from CG to front wheels [m] |
|
|
|
aR: Distance from CG to rear wheels [m] |
|
|
|
aR: Distance from CG to rear wheels [m] |
|
|
|
m: Mass [kg] |
|
|
|
m: Mass [kg] |
|
|
@ -177,7 +177,7 @@ def create_dyn_state_matrices(u: float, VM: VehicleModel) -> Tuple[np.ndarray, n |
|
|
|
|
|
|
|
|
|
|
|
def dyn_ss_sol(sa: float, u: float, VM: VehicleModel) -> np.ndarray: |
|
|
|
def dyn_ss_sol(sa: float, u: float, VM: VehicleModel) -> np.ndarray: |
|
|
|
"""Calculate the steady state solution when x_dot = 0, |
|
|
|
"""Calculate the steady state solution when x_dot = 0, |
|
|
|
Ax + Bu = 0 => x = A^{-1} B u |
|
|
|
Ax + Bu = 0 => x = -A^{-1} B u |
|
|
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
|
sa: Steering angle [rad] |
|
|
|
sa: Steering angle [rad] |
|
|
|