Clothoid path planning



This is a clothoid path planning sample code.
This can interpolate two 2D pose (x, y, yaw) with a clothoid path, which its curvature is linearly continuous. In other words, this is G1 Hermite interpolation with a single clothoid segment.
This path planning algorithm as follows:
Step1: Solve g function
Solve the g(A) function with a nonlinear optimization solver.
Where
\(\delta\): the orientation difference between start and goal pose.
\(\phi_{s}\): the orientation of the start pose.
\(Y\): \(Y(a, b, c)=\int_{0}^{1} \sin \left(\frac{a}{2} \tau^{2}+b \tau+c\right) d \tau\)
Step2: Calculate path parameters
We can calculate these path parameters using \(A\),
\(L\): path length
where
\(R\): the distance between start and goal pose
\(X\): \(X(a, b, c)=\int_{0}^{1} \cos \left(\frac{a}{2} \tau^{2}+b \tau+c\right) d \tau\)
\(\kappa\): curvature
\(\kappa'\): curvature rate
Step3: Construct a path with Fresnel integral
The final clothoid path can be calculated with the path parameters and Fresnel integrals.