|
| 1 | +Catmull-Rom Spline Planning |
| 2 | +----------------- |
| 3 | + |
| 4 | +.. image:: catmull_rom_path_planning.png |
| 5 | + |
| 6 | +This is a Catmull-Rom spline path planning routine. |
| 7 | + |
| 8 | +If you provide waypoints, the Catmull-Rom spline generates a smooth path that always passes through the control points, |
| 9 | +exhibits local control, and maintains 𝐶1 continuity. |
| 10 | + |
| 11 | + |
| 12 | +Catmull-Rom Spline Fundamentals |
| 13 | +~~~~~~~~~~~~~~ |
| 14 | + |
| 15 | +Catmull-Rom splines are a type of cubic spline that passes through a given set of points, known as control points. |
| 16 | + |
| 17 | +They are defined by the following equation for calculating a point on the spline: |
| 18 | + |
| 19 | +:math:`P(t) = 0.5 \times \left( 2P_1 + (-P_0 + P_2)t + (2P_0 - 5P_1 + 4P_2 - P_3)t^2 + (-P_0 + 3P_1 - 3P_2 + P_3)t^3 \right)` |
| 20 | + |
| 21 | +Where: |
| 22 | + |
| 23 | +* :math:`P(t)` is the point on the spline at parameter :math:`t`. |
| 24 | +* :math:`P_0, P_1, P_2, P_3` are the control points surrounding the parameter :math:`t`. |
| 25 | + |
| 26 | +Types of Catmull-Rom Splines |
| 27 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 28 | + |
| 29 | +There are different types of Catmull-Rom splines based on the choice of the **tau** parameter, which influences how the curve |
| 30 | +behaves in relation to the control points: |
| 31 | + |
| 32 | +1. **Uniform Catmull-Rom Spline**: |
| 33 | + The standard implementation where the parameterization is uniform. Each segment of the spline is treated equally, |
| 34 | + regardless of the distances between control points. |
| 35 | + |
| 36 | + |
| 37 | +2. **Chordal Catmull-Rom Spline**: |
| 38 | + This spline type takes into account the distance between control points. The parameterization is based on the actual distance |
| 39 | + along the spline, ensuring smoother transitions. The equation can be modified to include the chord length :math:`L_i` between |
| 40 | + points :math:`P_i` and :math:`P_{i+1}`: |
| 41 | + |
| 42 | + .. math:: |
| 43 | + \tau_i = \sqrt{(x_{i+1} - x_i)^2 + (y_{i+1} - y_i)^2} |
| 44 | +
|
| 45 | +3. **Centripetal Catmull-Rom Spline**: |
| 46 | + This variation improves upon the chordal spline by using the square root of the distance to determine the parameterization, |
| 47 | + which avoids oscillations and creates a more natural curve. The parameter :math:`t_i` is adjusted using the following relation: |
| 48 | + |
| 49 | + .. math:: |
| 50 | + t_i = \sqrt{(x_{i+1} - x_i)^2 + (y_{i+1} - y_i)^2} |
| 51 | +
|
| 52 | +
|
| 53 | +Blending Functions |
| 54 | +~~~~~~~~~~~~~~~~~~ |
| 55 | + |
| 56 | +In Catmull-Rom spline interpolation, blending functions are used to calculate the influence of each control point on the spline at a |
| 57 | +given parameter :math:`t`. The blending functions ensure that the spline is smooth and passes through the control points while |
| 58 | +maintaining continuity. The four blending functions used in Catmull-Rom splines are defined as follows: |
| 59 | + |
| 60 | +1. **Blending Function 1**: |
| 61 | + |
| 62 | + .. math:: |
| 63 | + b_1(t) = -t + 2t^2 - t^3 |
| 64 | +
|
| 65 | +2. **Blending Function 2**: |
| 66 | + |
| 67 | + .. math:: |
| 68 | + b_2(t) = 2 - 5t^2 + 3t^3 |
| 69 | +
|
| 70 | +3. **Blending Function 3**: |
| 71 | + |
| 72 | + .. math:: |
| 73 | + b_3(t) = t + 4t^2 - 3t^3 |
| 74 | +
|
| 75 | +4. **Blending Function 4**: |
| 76 | + |
| 77 | + .. math:: |
| 78 | + b_4(t) = -t^2 + t^3 |
| 79 | +
|
| 80 | +The blending functions are combined in the spline equation to create a smooth curve that reflects the influence of each control point. |
| 81 | + |
| 82 | +The following figure illustrates the blending functions over the interval :math:`[0, 1]`: |
| 83 | + |
| 84 | +.. image:: blending_functions.png |
| 85 | + |
| 86 | +Catmull-Rom Spline API |
| 87 | +~~~~~~~~~~~~~~~~~~~~~~~ |
| 88 | + |
| 89 | +This section provides an overview of the functions used for Catmull-Rom spline path planning. |
| 90 | + |
| 91 | +API |
| 92 | +++++ |
| 93 | + |
| 94 | +.. autofunction:: PathPlanning.Catmull_RomSplinePath.catmull_rom_spline_path.catmull_rom_point |
| 95 | + |
| 96 | +.. autofunction:: PathPlanning.Catmull_RomSplinePath.catmull_rom_spline_path.catmull_rom_spline |
| 97 | + |
| 98 | + |
| 99 | +References |
| 100 | +~~~~~~~~~~ |
| 101 | + |
| 102 | +- `Catmull-Rom Spline - Wikipedia <https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline>`__ |
| 103 | +- `Catmull-Rom Splines <http://graphics.cs.cmu.edu/nsp/course/15-462/Fall04/assts/catmullRom.pdf>`__ |
0 commit comments