Bézier Curve
- 又稱: Bezier curve
- 類別: Planning & manipulation › Trajectory optimisation
- 標籤: trajectory-optimization, splines, path-planning, geometry, motion-planning
一種由控制點定義的多項式曲線:從第一個控制點開始、在最後一個控制點結束,並被中間的控制點拉向它們;廣泛用於機器人的路徑、軌跡與筆畫形狀。
定義
n 次 貝茲曲線(Bézier curve)是一種多項式曲線,由 n + 1 個控制點 P₀ … Pₙ 與一個從 0 變化到 1 的參數 t 定義:B(t) = Σ C(n, i) (1 − t)ⁿ⁻ⁱ tⁱ Pᵢ,其中的權重是 Bernstein 基底多項式。曲線起於 P₀、止於 Pₙ,兩端的切線分別沿著控制多邊形的第一段與最後一段;內部的控制點會塑造曲線的形狀,但一般不在曲線上。具有四個控制點的三次曲線最常見。這種形式於 1960 年代在法國汽車工業中發展出來,由雷諾的 Pierre Bézier 與雪鐵龍的 Paul de Casteljau 各自獨立提出。
有幾個性質讓 貝茲曲線在機器人領域很方便。整條曲線位於其控制點的凸包之內,因此只要把控制點留在一個沒有障礙物的凸區域內,就能保證曲線也留在該區域內;這把避碰轉化為線性限制條件,在凸集合圖上的軌跡最佳化就是這樣做的。貝茲曲線的導數是另一條低一次的 貝茲曲線,其控制點為 n(Pᵢ₊₁ − Pᵢ),因此速度與加速度的界限也能施加在控制點上,只是較為保守。de Casteljau 演算法透過反覆的線性內插,以數值穩定的方式計算並分割曲線。
也有一些必須記住的限制。參數 t 既不是時間也不是弧長,因此用作軌跡的曲線仍需要時間參數化,而且 t 的等步長並不代表曲線上的等距離。移動一個控制點會改變整條曲線,所以長路徑通常由幾段低次曲線接成,並在位置、切線與曲率上加上連續性條件,或以能提供局部控制的 B 樣條表示。為了擬合複雜形狀而提高次數,會讓曲線更難調整形狀,數值上的表現也更差。
為何重要
貝茲曲線為路徑與軌跡提供精簡、平滑且容易加上限制條件的表示方式,用途從汽車與無人機軌跡一直到工具與畫筆的筆畫。它的凸包性質與導數性質,把安全限制與動態限制轉化為少數幾個點上的簡單限制條件,這也是它出現在許多以最佳化為基礎的規劃器中的原因。
主要應用
- 為無人機與移動機器人產生平滑軌跡
- 圖搜尋或以取樣為基礎的規劃之後的路徑平滑化
- 自駕車的變換車道與停車路徑
- 繪畫、繪圖與點膠機器人的工具、畫筆與筆的筆畫
- 使用凸集合圖的運動規劃
- 足式機器人的擺動腳軌跡
實際應用
一個無人機規劃器把穿越倉庫的路線切成一串沒有障礙物的凸區域,並為每個區域指派一段 貝茲曲線。它要求每段曲線的控制點位於所屬區域內,把一段的最後幾個控制點與下一段的最前幾個控制點連結起來,讓位置、速度與加速度在接點處吻合,並限制導數曲線的控制點,以遵守速度與加速度限制。由於這些限制條件對控制點全都是線性的,整個問題是一個能快速求解的凸規劃。最後一步依選定的時長,把每段的參數 t 映射為時間;縮短時長會等比例提高無人機必須達到的每一個速度與加速度。
常見誤解
- 貝茲曲線會通過它所有的控制點 — 只有第一個與最後一個控制點在曲線上;內部的控制點會拉動曲線,但曲線不會碰到它們
- 參數 t 就是時間 — t 是介於 0 與 1 之間的形狀參數;速度與加速度由另外的時間縮放來設定
- 對複雜路徑而言,次數越高越好 — 高次曲線會失去局部控制;由低次曲線段組成的鏈或 B 樣條通常較為理想
- 限制控制點就能得到精確的速度限制 — 對導數控制點的界限是充分但保守的,因此實際峰值通常低於該界限
誰需要了解
- 運動規劃與軌跡規劃工程師
- 自駕車與無人機開發人員
- 噴塗、焊接與點膠機器人的程式設計人員
- 設計擺動軌跡的足式行走運動工程師
相關技術
- B 樣條(B-Splines)
- de Casteljau 演算法(de Casteljau Algorithm)
- Bernstein 多項式(Bernstein Polynomials)
- NURBS
- 時間最佳路徑參數化(Time-Optimal Path Parameterization)
- 凸最佳化(Convex Optimization)
相關術語
相關專案
- Nav2: ROS 2 navigation stack with path planning and obstacle avoidance for mobile robots
- ROS Motion Planning: One repo implementing 40+ classic and learning-based robot path planners as ROS plugins
- OMPL: Sampling-based motion planning library powering MoveIt and countless robotics applications
- MoveIt 2: Motion planning framework for ROS 2 robot arms, with kinematics and collision checking
- PyRoki: Modular Python toolkit for kinematic optimization across CPU, GPU, and TPU via JAX
- mink: Python inverse kinematics library built on MuJoCo supporting 20+ robot platforms
影片
- The Beauty of Bézier Curves: Freya Holmér