自抗擾控制(ADRC) 一階系統

2021-10-03 08:59:05 字數 3524 閱讀 2481

使用 adrc 控制任意一階系統:

x ˙=

f(x,

t)+u

\dot = f(x,t)+u

x˙=f(x

,t)+

u其中f

ff表示系統所受的總擾動,包含未知的外擾和未建模的內部動態。

這裡的**實驗中測試的總擾動為:

f (x

,t)=

x2+0.5

sign

(sin⁡(

2t))

+cos⁡(

xt)f(x,t) = x^2 + 0.5 \, \text(\sin(2t)) + \cos(xt)

f(x,t)

=x2+

0.5sign

(sin(2

t))+

cos(xt

)而且控制器不應該知道該具體形式。

控制目標為使得x

xx輸出如下形狀的訊號:

總擾動和目標訊號

def

f(x,t)

:return x**2+

0.5*np.sign(np.sin(

2*t)

)+ np.cos(x*t)

deftarget

(t):

if t <10:

return np.sign(np.sin(

0.8*t)

)elif t <20:

return2*

(0.5

*t-int

(0.5

*t)-

0.5)

else

:return np.sin(

0.8*t)

定義乙個類儲存時間序列,方便畫圖

class

logger

:def

__init__

(self)

: self.data =

defadd

(self, key, value)

:if key not

in self.data:

self.data[key]=[

] self.data[key]

defplot

(self, keys=

none):

plt.figure(figsize=(20

,10))

if keys is

none

:for k in self.data:

plt.plot(self.data[k]

, label=k)

else

:for k in keys:

plt.plot(self.data[k]

, label=k)

plt.legend(

) plt.show(

)

乙個常用的非線性誤差函式,具有小誤差大增益,大誤差小增益的特性。

使用尤拉積分做數值積分

logger = logger(

)h =

0.01

t =30

n =int

(t/h)

r0 =

5# r0調控過渡的快慢

# 一些初值的設定

v1 =

0z1,z2 =0,

0x =

0y = x

u =0

for i in

range

(n):

t = i*h

# 目標訊號

v = target(t)

# 過渡過程 v1 -> v, v1的過渡比v更加平緩

v1 += h*r0*fal(v-v1,

0.5, h)

# eso: z1 -> y, z2 = \dot

e = y - z1

fe = fal(e,

0.5, h)

z1 += h*

(z2 +

100*e + u)

z2 += h*

(300

*fe)

# 誤差反饋

# e1 = v1 - y

e1 = v1 - z1

u =10*fal(e1,

0.5,

0.1)

- z2

# 系統狀態更新

w = f(x,t)

x += h*

(w + u)

# 輸出

y = x

logger.add(

'v1'

,v1)

logger.add(

'y',y)

logger.add(

'v',v)

logger.add(

'u',u)

logger.add(

'z2'

, z2)

logger.add(

'w', w)

logger.plot(

['v'])

logger.plot(

['v'

,'v1'

,'y'])

logger.plot(

['w'

,'z2'

,'u'

])

結果展示如下,v代表真實目標訊號,v

1v_1

v1​是v的平滑過渡,y是實際輸出

w 代表真實總擾動,z

2z_2

z2​是對總擾動的跟蹤,u是控制輸入

下面我來增大 r0:

5→10r_0:5\rightarrow 10

r0​:5→

10,意味著過渡訊號v

1v_1

v1​更加逼近真實訊號vvv

過渡過程越短,意味著要在更短的時間做出同樣的變化,自然就要求控制量u

uu的絕對值要增大,從上圖可以看出這一點。

ADRC 自抗擾控制器(二) 四旋翼無人機

自抗擾四旋翼控制中的幾個問題 自抗擾控制器包含三大部分 td微分 微風 主要可以安排過渡,過程同時還具有一定的濾波功能,四旋翼由遙控器和地面站傳送期望控制訊號,可以通過微分 安排過渡過程,加快響應速度,同時還可以用於對資料進行濾波。eso擴張狀態觀測器 擴張觀測器主要是進行擾動的觀測,但是在用於姿態...

一階倒立擺系統

一階倒立擺系統的控制問題就是通過計算給定直流電機電流大小,即小車運動所需力的大小 控制作用 使擺桿偏角和小車位置 系統輸出 能夠盡快達到乙個平衡點 注意這裡有多個控制目標 並使之沒有大的振盪和超調。進一步,當系統達到穩定後能克服各種隨機擾動 例如人為撥動擺桿使之突然偏離平衡點 而仍能保持穩定執行。倒...

小白控制演算法之自抗擾調參經驗總結

最近做的專案用到了自抗擾,嘗試聯絡一些相關領域的老師,無奈似乎有所保留,只得自己從頭研究起。講道理,無論是複雜的系統,還是超過9個引數的調節,整個調程式和調參的過程都不是特別順利。不過結果還好,粗調後整個系統雖然在冷啟動時期的表現跟pi控制相差不多,但是對抗突變干擾時的穩定時間卻碾壓了pi控制。在這...