跳至主要内容

Kinetic Model

本文涵蓋了動力學模型以及不同車輛活動模型、Pure Pursuit Control 的原理,以及 bicycle model 的應用。動力學模型用來描述車子的狀態變化,而 Pure Pursuit Control 則是根據速度和角速度來畫圓弧,將車子移動到前方某個點的位置。bicycle model 則是一個根據方向盤轉角來描述車子原點運動的模型。

Basic Kinetic Model​

若我們想讓車子移動到路徑上到達終點,可以用前後和左右兩種 control 方式。

Car PID Control
Car PID Control

若只使用 PID control 來完成,需要調整太多的參數,所以我們必須要引入一些車輛的特性,來減輕 control system 的負擔:

  • 在低速時
    • 可以用簡單的幾何模型來描述 car state
  • 在高速時
    • 因會產生側向滑動,所以需要套入更難的動力學模型

我們用 x, y 代表車子的二維座標,θ\theta 代表車子的轉向,合起來為車子的狀態

state: ξ1=[xyθ]\begin{aligned} \text{state: } \xi_1 = \begin{bmatrix}x\\y\\\theta\end{bmatrix} \end{aligned}

因為座標有分車子當前的座標,還有世界座標,我們有一個 rotation matrix 可以轉換兩個座標系統

R(θ)=[cos⁡θsin⁡θ0−sin⁡θcos⁡θ0001]\begin{aligned} R(\theta) = \begin{bmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0& 0& 1 \end{bmatrix} \end{aligned}

基本的模型 (basic kinematic model) 指的就是狀態 (state) 的變化 (derivative)

提示

我們會在符號上加上一點代表微分後的變化

Basic Kinematic Model
Basic Kinematic Model

State 變化可以從車子的當前狀態,乘上 rotation matrix 的反矩陣得到

  • xR˙\dot{x_R} 是 xRx_R 的變化,也就是前進速度 (vv)
  • 而側向是沒有速度的,所以 yR˙=0\dot{y_R} = 0
  • θ˙\dot{\theta} 是 θ\theta 的變化,也就是角速度 (ω\omega)
Kinematic Model:[x˙y˙θ˙]=R(θ)−1[xR˙yR˙θ˙]=[cos⁡θ−sin⁡θ0sin⁡θcos⁡θ0001][v0ω]=[vcos⁡(θ)vsin⁡(θ)ω]\begin{aligned} \text{Kinematic Model:} \\ \begin{bmatrix}\dot{x} \\ \dot{y} \\ \dot{\theta}\end{bmatrix} &= R(\theta)^{-1}\begin{bmatrix}\dot{x_R}\\\dot{y_R}\\\dot{\theta}\end{bmatrix} \\ &= \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0& 0& 1\end{bmatrix} \begin{bmatrix}v\\0\\\omega\end{bmatrix} \\ &= \begin{bmatrix}v\cos(\theta) \\ v\sin(\theta) \\\omega\end{bmatrix} \end{aligned}

Differential Drive Vehicle​

Differential Drive Vehicle
Differential Drive Vehicle

現在來考慮兩輪的自走車活動模型

  • P: 原點
  • l: 原點分別到兩輪的距離
  • r: 輪子的半徑
  • 座標依然是 xR,yRx_R, y_R
Differential Drive Vehicle
Differential Drive Vehicle

兩輪的轉速分別是 ϕ1\phi_1 和 ϕ2\phi_2

  • 右輪 (左輪) 速度 = 半徑 * 角速度
    • right: r×ϕ1˙\text{right: } r \times \dot{\phi_1}
    • left: r×ϕ2˙\text{left: } r \times \dot{\phi_2}
  • 原點的速度就是右輪 (左輪) 速度的一半
    • xR1˙=rϕ1˙2\dot{x_{R1}} = \frac{r\dot{\phi_1}}{2}
    • xR2˙=rϕ2˙2\dot{x_{R2}} = \frac{r\dot{\phi_2}}{2}
  • 原點的角速度 = 速度 / 到輪子的距離
    • ω1=rϕ1˙2l\omega_1 = \frac{r\dot{\phi_1}}{2l}
    • ω2=−rϕ2˙2l\omega_2 = \frac{-r\dot{\phi_2}}{2l}
    • 要注意左輪旋轉半徑是 −l-l

而原點的運動就是左右兩輪相加

Kinematic Model:[x˙y˙θ˙]=R(θ)−1[xR˙yR˙θ˙]=[cos⁡θ−sin⁡θ0sin⁡θcos⁡θ0001][rϕ1˙2+rϕ2˙20rϕ1˙2l−rϕ2˙2l]\begin{aligned} \text{Kinematic Model:} \\ \begin{bmatrix}\dot{x} \\ \dot{y} \\ \dot{\theta}\end{bmatrix} &= R(\theta)^{-1}\begin{bmatrix}\dot{x_R}\\\dot{y_R}\\\dot{\theta}\end{bmatrix} \\ &= \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0& 0& 1\end{bmatrix} \begin{bmatrix} \frac{r\dot{\phi_1}}{2}+\frac{r\dot{\phi_2}}{2}\\ 0\\ \frac{r\dot{\phi_1}}{2l}-\frac{r\dot{\phi_2}}{2l} \end{bmatrix} \\ \end{aligned}

左右輪的馬達轉速通常不會設成參數,而是用 v,ωv, \omega 來推導

RPM Inference
RPM Inference
  • 直線前進,相同轉速,相同方向 (vr\frac{v}{r})
  • 原地旋轉,相同轉速,相反方向 (正負 ω\omega)

Pure Pursuit Control​

Pure pursuit control 將根據速度與角速度來畫圓弧移動到前方某個點的位置

Pure Pursuit Control
Pure Pursuit Control
  • LdL_d 是車子與目標點的距離
  • RR 是畫圓產生的半徑
  • α\alpha 是車子直線方向和 LdL_d 的夾角
    • α=arctan⁡(y−ygx−xg)−θ\alpha = \arctan\left(\frac{y-y_g}{x-x_g}\right) - \theta
    • 因為圓心角 = 兩倍的弦切角
    • 所以圓心角就是 2alpha2 alpha
  • 因為是等腰三角形
    • 所以其他兩個角是 π2−α\frac{\pi}{2} - \alpha

根據正弦定理可以得到

Ldsin⁡(2α)=Rsin⁡(π2−α)R=Ldsin⁡(π2−α)sin⁡(2α)=Ldcos⁡(α)2sin⁡(α)cos⁡(α)=Ld2sin⁡(α)ω=vR=2vsin⁡(α)Ld\begin{aligned} \frac{L_d}{\sin(2\alpha)} &= \frac{R}{\sin(\frac{\pi}{2}-\alpha)} \\\\ R &= \frac{L_d\sin(\frac{\pi}{2}-\alpha)}{\sin(2\alpha)} &= \frac{L_d\cos(\alpha)}{2\sin(\alpha)\cos(\alpha)} &= \frac{L_d}{2\sin(\alpha)} \\\\ \omega &= \frac{v}{R} = \frac{2v\sin(\alpha)}{L_d} \end{aligned}

也就是說,若速度 v 透過 PID 為已知的值,那就可以推出對應的角速度 (ω\omega)

備註

Ld 通常用速度來決定,速度越快就越遠,例如 Ld=kv+LfcL_d = kv + L_{fc},其中的 k,Lfck, L_{fc} 是可調參數

Kinematic Bicycle Model​

上面講的模型可以自由移動旋轉,但真正的車子是有一定的幾何限制 (nonholonomic constraints)。而生活中最常見的移動機構設計是 bicycle model (汽車可以把前後的兩個輪子各別簡化為一個)

  • 前輪控制方向 (方向盤)
  • 後輪控制速度 (引擎)
Kinematic Bicycle Model
Kinematic Bicycle Model
  • 後輪為車輛原點 (x, y)
  • 車輛轉向 (車軸方向) θ\theta
  • 方向盤轉角 δ\delta
  • 車軸長度 LL
Kinematic Bicycle Model
Kinematic Bicycle Model

將前輪放大可以得到一些細節:

  • 車子以 v 的速度向前
  • 有兩個世界座標的軸分量 (weight) 為 xf˙\dot{x_f} 和 yf˙\dot{y_f}

計算兩個 weight 對車子垂直方向的 weight

  • xf˙sin⁡(θ+δ)\dot{x_f}\sin(\theta+\delta)
  • yf˙cos⁡(θ+δ)\dot{y_f}\cos(\theta+\delta)

考慮在低速下,兩個 weight 相加會抵消,就可以得到前後輪的 equation (Nonholonomic constraint equations)

(1)xf˙sin⁡(θ+δ)−yf˙cos⁡(θ+δ)=0(front wheel)(2)x˙sin⁡(θ)−y˙cos⁡(θ)=0(rear wheel)\begin{aligned} (1) && \dot{x_f}\sin(\theta+\delta) - \dot{y_f}\cos(\theta+\delta) = 0 && \text{(front wheel)}\\ (2) && \dot{x}\sin(\theta) - \dot{y}\cos(\theta) = 0 && \text{(rear wheel)} \end{aligned}

我們的目標是算出車輛原點的運動,可以從後輪座標推得前輪座標 (Front wheel position)

xf=x+Lcos⁡(θ)yf=y+Lsin⁡(θ)\begin{aligned} x_f = x + L\cos(\theta) \\ y_f = y + L\sin(\theta) \end{aligned}

將前輪座標帶回 (1) 就可以得到基於車輛原點的限制方程式

(3)x˙sin⁡(θ+δ)−y˙cos⁡(θ+δ)−θ˙Lcos⁡(δ)=0\begin{aligned} (3) && \dot{x}\sin(\theta+\delta) - \dot{y}\cos(\theta+\delta) - \dot{\theta}L\cos(\delta) = 0 \end{aligned}

由 (2) 和 (3) 可以得到一組解,代表原點的變化

(4)x˙=vcos⁡(θ)(5)y˙=vsin⁡(θ)\begin{aligned} (4) && \dot{x} = v\cos(\theta)\\ (5) && \dot{y} = v\sin(\theta) \end{aligned}

將 (4) 和 (5) 再帶回 (3) 就可以得到角速度 (θ˙\dot{\theta})

θ˙=vtan⁡(δ)L\dot{\theta} = \frac{v\tan(\delta)}{L}

於是我們就可以得到完整的 kinematic bicycle model (基於方向盤轉角 δ\delta)

[x˙y˙θ˙]=[cos⁡(θ)sin⁡(θ)tan⁡(δ)L]v\begin{aligned} \begin{bmatrix} \dot{x}\\\dot{y}\\\dot{\theta} \end{bmatrix} = \begin{bmatrix} \cos(\theta) \\ \sin(\theta) \\ \frac{\tan(\delta)}{L} \end{bmatrix} v \end{aligned}

以及一些相關的 properties

∙Rθ˙=v∙vtan⁡(δ)L=vR∙tan⁡(δ)=LR\begin{aligned} &\bullet R\dot{\theta} = v \\ &\bullet \frac{v\tan(\delta)}{L} = \frac{v}{R} \\ &\bullet \tan(\delta) = \frac{L}{R} \end{aligned}

Pure Pursuit Control for Bicycle Model​

Bicycle Model Pure Pursuit Control
Bicycle Model Pure Pursuit Control

我們可以將 bicycle model 應用於 pure pursuit control

  • α\alpha 和 RR 和原本的 pure pursuit control 一樣
  • 我們可以用上面的 bicycle model properties 來求得方向盤轉角 (δ\delta)
tan⁡(δ)=LRδ=arctan⁡(LR)=arctan⁡(2Lsin⁡(α)Ld)\begin{aligned} &\tan(\delta) = \frac{L}{R} \\ &\delta = \arctan\left(\frac{L}{R}\right) = \arctan\left(\frac{2L\sin(\alpha)}{L_d}\right) \end{aligned}