Control Theory
Open Loop Control
例如汽車油門要根據汽車的速度變化 (e.g. 上下坡) 而改變
Close Loop Control
只有 input-output 很難去做修正,所以需要透過前一次 output 來修正
Sensor
量測上一次的 output 結果,用來和 reference 比對
Reference
用來比對和 output 的結果,計算出 error
例如根據汽車當前的速度,來調整要加速或減速
Linear Time Invariant System
我們可以將 time domain 轉置成 frequency domain 重整一下 loop control
所有的運算和參數都以頻率來表達
我們可以得到 e=r−yH (誤差等於 reference 減去 sensor 所算的結果)
頻率中 D 到 G 的運算可以視為相乘,我們可以得到 y 等於 e 經過 D 和 G 兩個運算
y=e⋅D⋅G 接著經過一連串的運算
er−yH(DG)(r−yH)DGr−DGyHDGry=DGy=DGy=y=y=y+DGyh=y(1+DGH)=1+DGHDGr 於是我們可以將 output (y) 看成是 reference (r) 經過 1+DGHDG 運算而來
變成一個 open loop control
Control Methods
PID Control
Proportional gain
Controller 設定一個值來與前一個 error 相乘,得到下一次修改的 input,這個值就叫做 proportional gain
在下圖,老皮根據終點距離來得到 error 並和 0.1 (proportional gain) 相乘
當距離 100 時,走 10 m/s (100*0.1)
當距離 90 時,走 9 m/s (90*0.1)
Problem
老皮若想往天空飛,那只用 proportional gain 勢必是無法完美達成的,因為最終會停止掉下來,又往上升上去
假設老皮的螺旋槳轉速 200 rpm 可以對抗重力維持在空中
Error×Gain100×240×520×102×100=Propeller speed=200rpm=200rpm=200rpm=200rpm 不管設計多少的 gain (2, 5, 10, 100, ...) 都無法讓老皮到達並停留在天空上的終點
這個情況稱為 steady state error (y 會隨時間接近 r,但永遠存在 error)
Integral gain
我們可以加入一個 integrator 來解決 steady state error 造成的問題
新增的 integrator 會累積 error 的資訊來補充 proportional gain 不足的量
例如 error 變成 0 時,integrator 就提供 200 rpm 來讓老皮維持在高空
Problem
Integrator 若沒有良好設計,會超過 200 rpm 讓老皮繼續往上飛
而超過 reference 又產生了 negative error,讓 proportional gain 變負,老皮往下降
Differential gain
若能預測 error 變化量,就能預防 integral gain 忽高忽低的問題
我們在 controller 加上第三個 derivative 元件
因為 error 是往下變小的,變化量就是 error 的斜率 (紅線)
因為斜率是負的,所以 derivative 也產生一個負值,來和 integrator 抗衡
Summary
PID control 可以寫成 discrete form
Kpe(t)+Ki0∑tet+Kd(e(t)−e(t−1)) 其中的 Kp,Ki,Kd 分別就代表了 proportional, integral, differential gain 的參數
通常就是調整這三個參數,來完成一個好的 controller
Basic Kinematic Model
若我們想讓車子移動到路徑上到達終點,可以用前後和左右兩種 control 方式
若只使用 PID control 來完成,需要調整太多的參數
所以我們必須要引入一些車輛的特性,來減輕 control system 的負擔
我們用 x, y 代表車子的二維座標,θ 代表車子的轉向,合起來為車子的狀態
state: ξ1=xyθ 因為座標有分車子當前的座標,還有世界座標,我們有一個 rotation matrix 可以轉換兩個座標系統
R(θ)=cosθ−sinθ0sinθcosθ0001 基本的模型 (basic kinematic model) 指的就是狀態 (state) 的變化 (derivative)
我們會在符號上加上一點代表微分後的變化
State 變化可以從車子的當前狀態,乘上 rotation matrix 的反矩陣得到
xR˙ 是 xR 的變化,也就是前進速度 (v)
而側向是沒有速度的,所以 yR˙=0
θ˙ 是 θ 的變化,也就是角速度 (ω)
Kinematic Model:x˙y˙θ˙=R(θ)−1xR˙yR˙θ˙=cosθsinθ0−sinθcosθ0001v0ω=vcos(θ)vsin(θ)ω Differential Drive Vehicle
現在來考慮兩輪的自走車活動模型
座標依然是 xR,yR
兩輪的轉速分別是 ϕ1 和 ϕ2
右輪 (左輪) 速度 = 半徑 * 角速度
right: r×ϕ1˙
left: r×ϕ2˙
原點的速度就是右輪 (左輪) 速度的一半
xR1˙=2rϕ1˙
xR2˙=2rϕ2˙
原點的角速度 = 速度 / 到輪子的距離
ω1=2lrϕ1˙
ω2=2l−rϕ2˙
而原點的運動就是左右兩輪相加
Kinematic Model:x˙y˙θ˙=R(θ)−1xR˙yR˙θ˙=cosθsinθ0−sinθcosθ00012rϕ1˙+2rϕ2˙02lrϕ1˙−2lrϕ2˙ 左右輪的馬達轉速通常不會設成參數,而是用 v,ω 來推導
直線前進,相同轉速,相同方向 (rv)
原地旋轉,相同轉速,相反方向 (正負 ω)
Pure Pursuit Control
Pure pursuit control 將根據速度與角速度來畫圓弧移動到前方某個點的位置
α 是車子直線方向和 Ld 的夾角
α=arctan(x−xgy−yg)−θ
所以圓心角就是 2alpha
因為是等腰三角形
所以其他兩個角是 2π−α
根據正弦定理可以得到
sin(2α)LdRω=sin(2π−α)R=sin(2α)Ldsin(2π−α)=Rv=Ld2vsin(α)=2sin(α)cos(α)Ldcos(α)=2sin(α)Ld 也就是說,若速度 v 透過 PID 為已知的值,那就可以推出對應的角速度 (ω)
Ld 通常用速度來決定,速度越快就越遠
e.g., Ld=kv+Lfc
其中的 k,Lfc 是可調參數
Kinematic Bicycle Model
上面講的模型可以自由移動旋轉,但真正的車子是有一定的幾何限制 (nonholonomic constraints)
而生活中最常見的移動機構設計是 bicycle model (汽車可以把前後的兩個輪子各別簡化為一個)
將前輪放大可以得到一些細節
有兩個世界座標的軸分量 (weight) 為 xf˙ 和 yf˙
計算兩個 weight 對車子垂直方向的 weight
xf˙sin(θ+δ)
yf˙cos(θ+δ)
考慮在低速下,兩個 weight 相加會抵消,就可以得到前後輪的 equation (Nonholonomic constraint equations)
(1)(2)xf˙sin(θ+δ)−yf˙cos(θ+δ)=0x˙sin(θ)−y˙cos(θ)=0(front wheel)(rear wheel) 我們的目標是算出車輛原點的運動,可以從後輪座標推得前輪座標 (Front wheel position)
xf=x+Lcos(θ)yf=y+Lsin(θ) 將前輪座標帶回 (1) 就可以得到基於車輛原點的限制方程式
(3)x˙sin(θ+δ)−y˙cos(θ+δ)−θ˙Lcos(δ)=0 由 (2) 和 (3) 可以得到一組解,代表原點的變化
(4)(5)x˙=vcos(θ)y˙=vsin(θ) 將 (4) 和 (5) 再帶回 (3) 就可以得到角速度 (θ˙)
θ˙=Lvtan(δ) 於是我們就可以得到完整的 kinematic bicycle model (基於方向盤轉角 δ)
x˙y˙θ˙=cos(θ)sin(θ)Ltan(δ)v 以及一些相關的 properties
∙Rθ˙=v∙Lvtan(δ)=Rv∙tan(δ)=RL Pure Pursuit Control for Bicycle Model
我們可以將 bicycle model 應用於 pure pursuit control
α 和 R 和原本的 pure pursuit control 一樣
我們可以用上面的 bicycle model properties 來求得方向盤轉角 (δ)
tan(δ)=RLδ=arctan(RL)=arctan(Ld2Lsin(α)) Stanley Control
Pure pursuit control 雖然好用但不夠穩定,而 Stanley control 提供了漸進穩定的效果
在 stanley control 會根據當前最近目標點,找到切線、法線做為新的座標系
δ−θe: 速度方向與路徑方向夾角
而法線狀態 (微分) 就是以下式子,可以當作追蹤的誤差
e˙=vsin(δ−θe) 加入誤差對時間變化的假設,希望誤差隨時間變化漸進到 0
e˙−keδ=−ke, where k>0=vsin(δ−θe)=arcsin(−vke)+θe 最終可以得到方向盤控制量 δ (其中 k 是調整漸進程度的參數)
因為當 ∣−ke/vf∣>1 時為 undefined,所以可以改成近似的 local exponential stability (LES)
δ=arctan(−vke)+θe 改成 arctan 可避免 undefined 但在角度很大時,可能會造成誤差變大
LQR Control
因為太難的運動模型無法直接分析 error function,所以 LQR control 運用 cost function 概念
Cost function 是 quadratic form
cost function c=state errorxTQx+minimum controluTRu 其中 Q, R 矩陣分別代表 state, control 在不同維度的重要性
而最終就是要將以下的 total objective function 最小化
minimize J=∫0T[x(t)TQx(t)+u(t)TRu(t)]dt+xT(T)Sx(T) 若以下狀態從現在到終點 (terminal state) [ut∗,ut+1∗,ut+2∗,⋯,uT∗] 是最佳解
那麼 [ut+1∗,ut+2∗,⋯,uT∗] 也會是最佳解
所以我們可以應用 dynamic programming 從最佳解的最終狀態,遞迴解回現在狀態
Value function
通常我們並不知道 terminal state,或者是 terminal state 需要無限時間
這時候我們就會用 value function V(x)
V(xt)=umin(xtTQxt+utRut+V(xt+1)) V(x) 代表最佳情況下,未來所有代價的總和
我們可以假設 V(X) 是 quadratic form (寫成以下,其中 P 是對稱矩陣)
V(xt)=xtTPtxt 再將 linear motion model (Axt+But) 帶入當中得到
V(xt)=umin{xtTQxt+utRut+xt+1TPt+1xt+1}=umin{xtTQxt+utRut+(Axt+But)TPt+1(Axt+But)}=umin{xtT(Q+ATPt+1A)xt+2xTATPBu+utT(R+BTPt+1B)ut} 因為我們假設的 value function 是 quadratic 形式,所以可以用微分來求最佳控制 (u∗)
V(xt)=xtTPtxt=umin{xtT(Q+ATPt+1A)xt+2xTATPBu+utT(R+BTPt+1B)ut}∂u∂[xtT(Q+ATPt+1A)xt+2xTATPBut∗+ut∗T(R+BTPt+1B)ut∗]=02(xTATPt+1B)T+2(R+BTPt+1B)ut∗=0ut∗=−(R+BTPt+1B)−1BTPt+1Axt 得到的 u∗ 就可以帶回 V(x)=xtTPtxt
xtTPtxt=xtT(Q+ATPt+1A−ATPt+1B(R+BTPt+1B)−1BTPt+1A)xt
把兩側的 x 都拿掉就可以得到 P,這個 P 矩陣是 discrete algebraic Riccati equations (DARE)
Pt=Q+ATPt+1A−ATPt+1B(R+BTPt+1B)−1BTPt+1A P 代表了前後時刻的轉換方程
順帶一提,在連續的情況下是 continuous algebraic Riccati equations (CARE)
P˙=−PA−ATP+PBR−1P−Q
因為 P 不會隨時間變化,所以式子中等式左右的 P 可以改成相同的形式
P=Q+ATPA−ATPt+1B(R+BTPB)−1BTPA 在實作時還可以更簡化,使用 iterative 的方式來求 P 直到收斂
LQR Control for Kinematic Model
Define: State x=[e,e˙,θ,θ˙]Matrix Q,R e: 橫向的最近距離 (誤差)
e˙: 橫向距離 (誤差) 的改變量
θ: 方向誤差
θ˙: 方向誤差的改變量
兩個改變量存在是為了限制 state 誤差改變量不要太大
接著需要 linear kinematic motion model:
dtdee˙θθ˙=1000dt0000v1000dt0ee˙θθ˙+000Lvtan(δ)
橫向距離 = 上個時間點距離 (1) + 橫向速度 (dt)
角度 = 上個時間點角度 (1) + 角速度 (dt)
最後加的方向盤控制量 (δ) 並不是線性的
所以可以用 δ 來近似取代 tan(δ)
≈1000dt0000v1000dt0ee˙θθ˙+000Lvδ=Ax+Bu
於是就可以得到 LQR 可解的線性模型 (Ax+Bu)
然後用 DARE 求出 P matrix
P=Q+ATPA−ATPB(R+BTPB)−1BTPA
再求出最佳的控制量
ut∗=−(R+BTPt+1B)−1BTPt+1Axt
Summary
x˙y˙θ˙=R(θ)−1xR˙yR˙θ˙=cosθsinθ0−sinθcosθ0001v0ω=vcos(θ)vsin(θ)ω Differential Drive Vehicle
Kinematic Model:x˙y˙θ˙=R(θ)−1xR˙yR˙θ˙=cosθsinθ0−sinθcosθ00012rϕ1˙+2rϕ2˙02lrϕ1˙−2lrϕ2˙ x˙y˙θ˙=cos(θ)sin(θ)Ltan(δ)v∙Rθ˙=v∙Lvtan(δ)=Rv∙tan(δ)=RL