Vehicle Dynamics
Vehicle dynamics tells us how our Vehicle States change over time as we apply different inputs.
A good introduction is this lecture: F1TENTH L06 - Vehicle States, Vehicle Dynamics and Map Representations, accompanying slides can be found here.
Fundamental papers
- CommonRoad: Vehicle Models
- Gives you an overview of the models and the equations that are derived
- Impacts of Model Fidelity on Trajectory Optimization for Autonomous Vehicles in Extreme Maneuvers
- Modeling and Control for Dynamic Drifting Trajectories
Vehicle Dynamics Models
Listed by increasing accuracy (but also increasing number of parameters)
- Single Track Model
- Linear Single Track Model
- Kinematic Single Track Model
- Nonlinear Single Track Model
- Double Track Model
- Multi-Body Simulation
- Finite Elements Simulation
Single track model follows Ackermann Steering, this is probably what I am going to work on.
Use from CommonRoad Vehicle Dynamics package (Python), this is what F1TENTH gym uses as they say here: https://f1tenth-gym.readthedocs.io/en/latest/customized_usage.html
Single Track Model
Can look at this. https://kktse.github.io/jekyll/update/2018/09/18/single-track-bicycle.html
State variables
- : Longitudinal position
- : Lateral position
- : Yaw angle
- : Velocity
- : Yaw rate
Control Variables
- : Acceleration
- : Steering angle
Derivation of Lateral Error and its Rate of Change
-
Lateral Error:
-
Rate of Change of Lateral Error:
Derivation
The lateral error is defined as the signed perpendicular distance from the vehicle to the reference trajectory.
Given:
- : Current position of the vehicle.
- : Closest point on the reference trajectory.
- : Heading angle of the reference trajectory at
The trajectory’s tangent vector is: The normal vector (perpendicular to the trajectory) is:
Let the vector from the reference point to the vehicle’s position be:
The lateral error is the Projection of onto :
Expanding the dot product:
Simplify:
- Rate of Change of Lateral Error
Take the derivative with respect to time:
Expanding each term:
The time derivatives of the position differences are:
Substituting the velocity components:
Substitute these into the derivative:
Simplify:
Using the trigonometric identity (\sin(a - b) = \sin a \cos b - \cos a \sin b): Since , we have
From Treys Paper
Notes from Modeling and Control for Dynamic Drifting Trajectories
Parameters
- Mass
- Yaw Moment of Inertia
- Distance from CG to Front Axle
- Distance from CG to Rear Axle
- Total Wheelbase
- Height of CG
- affine parameters
- etc.
Rear axle force:
- When we talk about forces acting on a turning axle, we’re referring to the interaction between the tires (which are in contact with the ground) and the road surface, NOT forces directly acting on the axle shaft itself
Variables (these capture Vehicle State)
- to write
For the optimization, the state vector is and input vector is .
The state vector and control vectors are slight modified to the following
-
Notice that this basically says that velocity is ignored
-
, , these are hand-tuned gains
Practical tips
- Relatively large costs are put on tracking the desired path (ke) and desired sideslip angle (kβ). A small cost on rear wheelspeed (kωR ) encourages the controller to operate close to the equilibrium wheelspeed and use steering for any small corrections, while kΔφ improves damping in the lateral path tracking state.
- very small cost on yaw rate (kr) aids in convergence time of the nonlinear optimization, while not overly restricting the controller’s ability to use yaw rate to generate sideslip angle.
- Costs on actuator Slew Rate (k_\dot{δ} and k_\dot{τ}) help ensure a smooth closed-loop response.
- They using the control input as part of the cost that is minimized, to force control inputs to not be super jerky
- If this was not part of the cost, I think it would be fine, but might be jerky
Then the minimization is the following
is a scalar that adjusts the weight of the terminal state cost in the objective function