**Updates:**

Hi all, I have updated this blog in our website SHUFFLE. I modified some pictures to better illustrating the kinematic bicycle model. Also welcome to our website for more blogs about Self-driving cars, NLP, Computer Vision. All about AI. Me and my partner will post more blogs about AI in the future!

# 1. Introduction

2D bicycle model can be expressed as a simplified car model. This is a classic model that does very well at capturing vehicle motion in normal driving conditions.

The bicycle model we’ll develop is called the front wheel steering model, as the front wheel orientation can be controlled relative to the heading of the vehicle. Our target is to compute state **[x, y, 𝜃, 𝛿]**, 𝜃 is heading angle, 𝛿 is steering angle. Our inputs are **[𝑣, 𝜑]**, 𝑣 is velocity, 𝜑 is steering rate.

To analyze the kinematics of the bicycle model, we must select a reference point X, Y on the vehicle which can be placed at the center of the rear axle, the center of the front axle, or at the center of gravity or cg.

# 2. Model Analysis

2.1 If the desired point is at the center of the **rear** axle.

First, apply the Instantaneous Center of Rotation ( ICR ).

Next, compute state change rate: [x_dot, y_dot, 𝜃_dot, 𝛿_dot].

**x_dot = v * cos(𝜃)**

**y_dot = v * sin(𝜃)**

𝜃_dot is equal to rotation rate 𝜔,

𝜔 = 𝑣 / R, R is radius.

We must know how to compute the R. As the figure3 shows, L is the bicycle length, 𝛿 is steering angle, so R can be computed as:

R = L / tan(𝛿)

Now we can compute 𝜃_dot,

**𝜃_dot = 𝑣 / (L / tan(𝛿)) = 𝑣 * tan(𝛿) / L**

𝛿_dot is equal to the input 𝜑 (rate of change of steering angle).

**𝛿_dot = 𝜑**

2.2. If the desired point is at the center of the **front** axle.

As figure 5 shows, the desired point is in the center of front wheel. R can be computed as L / sin(𝛿). We can get the result of changing rate of x, y position.

**x_dot = v * cos(𝛿 + 𝜃)**

**y_dot = v * sin(𝛿 + 𝜃)**

**𝜃_dot = v / R = v / (L/sin(𝛿)) = v * sin(𝛿)/L**

**𝛿_dot = 𝜑**

2.3. If the desired point is at the center of gravity or cg.

**x_dot = v * cos(𝛽 + 𝜃)**

**y_dot = v* sin(𝛽 + 𝜃)**

This model is a little complicated because we must compute R first in order to get 𝜃_dot. As shown in figure 6, we can first compute S.

S = L / tan(𝛿)

Then we can use S and 𝛽 angle to compute R.

R = S / cos(𝛽) = L / (tan(𝛿) *cos(𝛽))

As we know R now, we can get 𝜃_dot as following:

**𝜃_dot = v / R = v *tan(𝛿) *cos(𝛽) / L**

Furthermore, if we know the distance between the rear wheel and cg denoted as l_r, we can also compute the slip angle 𝛽.

tan(𝛽) = l_r / S = l_r /(L / tan(𝛿)) = l_r * tan(𝛿) / L

So slip angle **𝛽 = arctan(l_r * tan(𝛿) / L)**

**𝛿_dot = 𝜑**

# 3. Summary

To recap, our model is the bicycle kinematic model as has been analyzed. States(outputs) are**[x, y, 𝜃, 𝛿]. **Inputs are **[𝑣, 𝜑]**, 𝑣 is velocity, 𝜑 is steering rate. We can compute the changing rate of [x, y, 𝜃, 𝛿]**, **which is **x_dot, y_dot, 𝜃_dot, 𝛿_dot**. To get the final state **[x, y, 𝜃, 𝛿], **we can use discrete time model.

**x_(t+1) = x_t + x_dot * ∆𝑡**

**y_(t+1) = y_t + y_dot * ∆𝑡**

**𝜃_(t+1) = 𝜃_t + 𝜃_dot * ∆𝑡**

**𝛿_(t+1) = 𝛿_t + 𝛿_dot * ∆𝑡**