python實現(xiàn)車輛跟隨滑??刂频膶嵗?/h1>
更新時間:2022年05月05日 08:54:08 作者:靜候佳茵
這篇文章主要介紹了python實現(xiàn)車輛跟隨滑??刂?采用指數(shù)趨近律、等速趨近律、準滑模控制的方法完成車輛跟隨問題的仿真,運行結(jié)果以圖片形式保存在同目錄下,需要的朋友可以參考下
上一篇文章介紹了Python使用OPENCV的目標跟蹤算法實現(xiàn)自動視頻標注效果,感興趣的朋友點擊查看,使用滑模變結(jié)構(gòu)控制策略來解決汽車跟蹤問題,今天通過本文介紹下python實現(xiàn)車輛跟隨滑模控制的實例,內(nèi)容如下所示:

下面分別采用指數(shù)趨近律、等速趨近律、準滑??刂频姆椒ㄍ瓿绍囕v跟隨問題的仿真
import matplotlib.pyplot as plt
'''
指數(shù)趨近律、等速趨近律、準滑??刂频能囕v跟隨問題仿真, 運行結(jié)果以圖片形式保存在同目錄下。
'''
# q1, q2分別是切換函數(shù)ei1, ei2前面的系數(shù)
q1, q2 = 2, 1
# lan是指數(shù)趨近律前面的系數(shù)
lan = 0.5
# 設(shè)定期望車間距均為12
l1, l2, l3, l4 = 12, 12, 12, 12
# 設(shè)定汽車質(zhì)量均為1000
m1, m2, m3, m4 = 1000, 1000, 1000, 1000
# 設(shè)定動力學模型分子的速度平方項前的系數(shù)ci均為0.5(按照模型符號是負的)
c1, c2, c3, c4 = 0.5, 0.5, 0.5, 0.5
# 設(shè)定動力學模型分子的常數(shù)項系數(shù)Fi均為200(按照模型符號是負的)
f1, f2, f3, f4 = 200, 200, 200, 200
# 設(shè)定五輛車汽車的位移、速度、加速度
x0, x1, x2, x3, x4 = [100.], [90.], [79.5], [68.5], [57.]
v0, v1, v2, v3, v4 = [20.], [19.], [18.], [17.], [16.]
a1, a2, a3, a4 = [0.], [0.], [0.], [0.]
# 設(shè)定趨近律
def reaching_law(m:int , s:float, q2:int, mode='exponential'):
'''
mode: 指數(shù)趨近律exponential| 等速趨近律uniform| 準滑??刂苢uasi_sliding
'''
if mode == 'exponential':
return -m * lan * s / q2
if mode == 'uniform':
epslion = 0.3
if s > 0:
return -m * epslion / q2
if s == 0:
return 0
if s < 0:
return m * epslion / q2
if mode == 'quasi_sliding':
delta, epslion = 0.8, 2.
if s < -delta:
return m * epslion / q2
if s > delta:
return -m * epslion / q2
else:
return -m * epslion * s / (delta * q2)
# 設(shè)定第一輛車的加速度(分段函數(shù)), 要注意t的長度和a0的長度相等
def get_a0(t:list):
a0 = []
for i in t:
if i < 4:
a0.append(0)
continue
if i >= 4 and i < 7:
a0.append(-0.25*(i-4))
continue
if i >= 7 and i < 10:
a0.append(-0.75)
continue
if i >= 10 and i < 16:
a0.append(0.25*(i-10)-0.75)
continue
if i >= 16 and i < 19:
a0.append(0.75)
continue
if i >= 19 and i < 22:
a0.append(0.25*(19-i)+0.75)
continue
if i >= 22 and i <= 30: # 注意i=30, 所以是取兩端, 故為301份
a0.append(0)
return a0
if __name__ == "__main__":
t = [float(i/10) for i in range(301)] # 將30秒劃分成301份, [0, 0.1, 0.2, ..., 29.9, 30]
a0 = get_a0(t)
# 四輛車的車間距誤差ei1列表
e11 = [x1[0] - x0[0] + l1]
e21 = [x2[0] - x1[0] + l2]
e31 = [x3[0] - x2[0] + l3]
e41 = [x4[0] - x3[0] + l4]
# 四輛車的車間距誤差導數(shù)ei2的列表
e12 = [v1[0] - v0[0]]
e22 = [v2[0] - v1[0]]
e32 = [v3[0] - v2[0]]
e42 = [v4[0] - v3[0]]
# 四輛車切換函數(shù)的列表
s1 = [q1 * e11[0] + q2 * e12[0]]
s2 = [q1 * e21[0] + q2 * e22[0]]
s3 = [q1 * e31[0] + q2 * e32[0]]
s4 = [q1 * e41[0] + q2 * e42[0]]
# 四輛車控制律的列表
u1, u2, u3, u4 = [0], [0], [0], [0]
for i in range(1, 301):
# 最前車0的速度、加速度更新,可以看出更新時用了直線等效, 0.1指的是時間標度(列表t劃分的, 也是之后繪圖打印的x軸)
v0.append(v0[i-1] + 0.1 * (a0[i] + a0[i - 1]) * 0.5)
x0.append(x0[i-1] + 0.1 * (v0[i] + v0[i - 1]) * 0.5)
# 車1的車間距誤差及導數(shù)更新
e11.append(x1[i-1] - x0[i-1]+l1)
e12.append(v1[i-1] - v0[i-1])
# 車1的切換函數(shù)更新
s1.append(q1 * e11[i] + q2 * e12[i])
# 等效控制
u1equ = c1 * (e12[i] + v0[i]) * (e12[i] + v0[i]) - m1 * q1 * e12[i] / q2 + m1 * a0[i] + f1
# 反饋控制(指數(shù)趨近律)
u1n = reaching_law(m1, s1[i], q2) # 默認采用指數(shù)趨近律, 下同
# u1n = reaching_law(m1, s1[i], q2, mode='uniform') # 采用等速趨近律
# u1n = reaching_law(m1, s1[i], q2, mode='quasi_sliding') # 采用準滑模控制
# 更新控制律
u1.append(u1equ + u1n)
# 利用控制律更新車1的加速度、速度、位移, 加速度是利用動力學模型得到的
a1.append((-c1 * v1[i-1] * v1[i-1] + u1[i] - f1) / m1)
v1.append(v1[i-1] + 0.1 * (a1[i] + a1[i - 1]) * 0.5)
x1.append(x1[i-1] + 0.1 * (v1[i] + v1[i - 1]) * 0.5)
# 車2、3、4過程同車1
e21.append(x2[i-1] - x1[i-1]+l2)
e22.append(v2[i-1] - v1[i-1])
s2.append(q1 * e21[i] + q2 * e22[i])
u2equ = c2 * (e22[i] + v1[i]) * (e22[i] + v1[i]) - m2 * q1 * e22[i] / q2 + m2 * a1[i] + f2
u2n = reaching_law(m2, s2[i], q2) # 默認采用指數(shù)趨近律
# u2n = reaching_law(m2, s2[i], q2, mode='uniform') # 采用等速趨近律
# u2n = reaching_law(m2, s2[i], q2, mode='quasi_sliding') # 采用準滑模控制
u2.append(u2equ + u2n)
a2.append((-c2 * v2[i-1] * v2[i-1] + u2[i] -f2) / m2)
v2.append(v2[i-1] + 0.1 * (a2[i] + a2[i - 1]) * 0.5)
x2.append(x2[i-1] + 0.1 * (v2[i] + v2[i - 1]) * 0.5)
e31.append(x3[i-1] - x2[i-1]+l3)
e32.append(v3[i-1] - v2[i-1])
s3.append(q1 * e31[i] + q2 * e32[i])
u3equ = c3 * (e32[i] + v2[i]) * (e32[i] + v2[i]) - m3 * q1 * e32[i] / q2 + m3 * a2[i] + f3
u3n = reaching_law(m3, s3[i], q2)
# u3n = reaching_law(m3, s3[i], q2, mode='uniform')
# u3n = reaching_law(m3, s3[i], q2, mode='quasi_sliding')
u3.append(u3equ + u3n)
a3.append((-c3 * v3[i-1] * v3[i-1] + u3[i] -f3) / m3)
v3.append(v3[i-1] + 0.1 * (a3[i] + a3[i - 1]) * 0.5)
x3.append(x3[i-1] + 0.1 * (v3[i] + v3[i - 1]) * 0.5)
e41.append(x4[i-1] - x3[i-1]+l4)
e42.append(v4[i-1] - v3[i-1])
s4.append(q1 * e41[i] + q2 * e42[i])
u4equ = c4 * (e42[i] + v3[i]) * (e42[i] + v3[i]) - m4 * q1 * e42[i] / q2 + m4 * a3[i] + f4
u4n = reaching_law(m4, s4[i], q2)
# u4n = reaching_law(m4, s4[i], q2, mode='uniform')
# u4n = reaching_law(m4, s4[i], q2, mode='quasi_sliding')
u4.append(u4equ + u4n)
a4.append((-c4 * v4[i-1] * v4[i-1] + u4[i] -f4) / m4)
v4.append(v4[i-1] + 0.1 * (a4[i] + a4[i - 1]) * 0.5)
x4.append(x4[i-1] + 0.1 * (v4[i] + v4[i - 1]) * 0.5)
# 開始繪圖
# 繪制加速度曲線
plt.figure() # 設(shè)置畫布
plt.plot(t, a0, label='car 0') # :是指繪制點劃線
plt.plot(t, a1, label='car 1')
plt.plot(t, a2, label='car 2')
plt.plot(t, a3, label='car 3')
plt.plot(t, a4, label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("Acceleration(m/s^2)",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./acceleration.png') # 保存圖像
# 繪制速度曲線
plt.clf() # 清空畫布,不然會前后圖像會重疊
plt.plot(t, v0, ':', label='car 0')
plt.plot(t, v1, ':', label='car 1')
plt.plot(t, v2, ':', label='car 2')
plt.plot(t, v3, ':', label='car 3')
plt.plot(t, v4, ':', label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("velocity(m/s)",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./velocity.png') # 保存圖像
# 繪制位置曲線
plt.clf()
plt.plot(t, x0, ':', label='car 0')
plt.plot(t, x1, ':', label='car 1')
plt.plot(t, x2, ':', label='car 2')
plt.plot(t, x3, ':', label='car 3')
plt.plot(t, x4, ':', label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("position(m)",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./position.png')
# 繪制車間距誤差ei1曲線
plt.clf()
plt.plot(t, e11, label='car 1')
plt.plot(t, e21, label='car 2')
plt.plot(t, e31, label='car 3')
plt.plot(t, e41, label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("space error(m)",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./space_error.png')
# 繪制車間距誤差導數(shù)ei2曲線
plt.clf()
plt.plot(t, e12, ':', label='car 1')
plt.plot(t, e22, ':', label='car 2')
plt.plot(t, e32, ':', label='car 3')
plt.plot(t, e42, ':', label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("space_error_derivative(m)",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./space_error_derivative.png')
# 繪制切換函數(shù)曲線
plt.clf()
plt.plot(t, s1, label='car 1')
plt.plot(t, s2, label='car 2')
plt.plot(t, s3, label='car 3')
plt.plot(t, s4, label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("Switching Function",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./Switching_Function.png')
# 繪制控制輸入U曲線
plt.clf()
plt.plot(t, u1, label='car 1')
plt.plot(t, u2, label='car 2')
plt.plot(t, u3, label='car 3')
plt.plot(t, u4, label='car 4')
plt.xlabel("Time(s)",fontsize=13)
plt.ylabel("Control Input",fontsize=13)
plt.xlim(0, 30)
plt.legend()
plt.savefig('./Control_Input.png')
到此這篇關(guān)于python實現(xiàn)車輛跟隨滑??刂频奈恼戮徒榻B到這了,更多相關(guān)python滑??刂苾?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
-
Python argparse中的action=store_true用法小結(jié)
這篇文章主要介紹了Python argparse中的action=store_true用法小結(jié),本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下 2023-02-02
-
將不規(guī)則的Python多維數(shù)組拉平到一維的方法實現(xiàn)
這篇文章主要介紹了將不規(guī)則的Python多維數(shù)組拉平到一維的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧 2021-01-01
-
Python中將圖像轉(zhuǎn)換為PDF的方法實現(xiàn)
本文主要介紹了Python中將圖像轉(zhuǎn)換為PDF的方法實現(xiàn),主要使用img2pdf和PyPDF2軟件包,具有一定的參考價值,感興趣的可以了解一下 2023-08-08
-
手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧 2019-09-09
最新評論
上一篇文章介紹了Python使用OPENCV的目標跟蹤算法實現(xiàn)自動視頻標注效果,感興趣的朋友點擊查看,使用滑模變結(jié)構(gòu)控制策略來解決汽車跟蹤問題,今天通過本文介紹下python實現(xiàn)車輛跟隨滑模控制的實例,內(nèi)容如下所示:
下面分別采用指數(shù)趨近律、等速趨近律、準滑??刂频姆椒ㄍ瓿绍囕v跟隨問題的仿真
import matplotlib.pyplot as plt ''' 指數(shù)趨近律、等速趨近律、準滑??刂频能囕v跟隨問題仿真, 運行結(jié)果以圖片形式保存在同目錄下。 ''' # q1, q2分別是切換函數(shù)ei1, ei2前面的系數(shù) q1, q2 = 2, 1 # lan是指數(shù)趨近律前面的系數(shù) lan = 0.5 # 設(shè)定期望車間距均為12 l1, l2, l3, l4 = 12, 12, 12, 12 # 設(shè)定汽車質(zhì)量均為1000 m1, m2, m3, m4 = 1000, 1000, 1000, 1000 # 設(shè)定動力學模型分子的速度平方項前的系數(shù)ci均為0.5(按照模型符號是負的) c1, c2, c3, c4 = 0.5, 0.5, 0.5, 0.5 # 設(shè)定動力學模型分子的常數(shù)項系數(shù)Fi均為200(按照模型符號是負的) f1, f2, f3, f4 = 200, 200, 200, 200 # 設(shè)定五輛車汽車的位移、速度、加速度 x0, x1, x2, x3, x4 = [100.], [90.], [79.5], [68.5], [57.] v0, v1, v2, v3, v4 = [20.], [19.], [18.], [17.], [16.] a1, a2, a3, a4 = [0.], [0.], [0.], [0.] # 設(shè)定趨近律 def reaching_law(m:int , s:float, q2:int, mode='exponential'): ''' mode: 指數(shù)趨近律exponential| 等速趨近律uniform| 準滑??刂苢uasi_sliding ''' if mode == 'exponential': return -m * lan * s / q2 if mode == 'uniform': epslion = 0.3 if s > 0: return -m * epslion / q2 if s == 0: return 0 if s < 0: return m * epslion / q2 if mode == 'quasi_sliding': delta, epslion = 0.8, 2. if s < -delta: return m * epslion / q2 if s > delta: return -m * epslion / q2 else: return -m * epslion * s / (delta * q2) # 設(shè)定第一輛車的加速度(分段函數(shù)), 要注意t的長度和a0的長度相等 def get_a0(t:list): a0 = [] for i in t: if i < 4: a0.append(0) continue if i >= 4 and i < 7: a0.append(-0.25*(i-4)) continue if i >= 7 and i < 10: a0.append(-0.75) continue if i >= 10 and i < 16: a0.append(0.25*(i-10)-0.75) continue if i >= 16 and i < 19: a0.append(0.75) continue if i >= 19 and i < 22: a0.append(0.25*(19-i)+0.75) continue if i >= 22 and i <= 30: # 注意i=30, 所以是取兩端, 故為301份 a0.append(0) return a0 if __name__ == "__main__": t = [float(i/10) for i in range(301)] # 將30秒劃分成301份, [0, 0.1, 0.2, ..., 29.9, 30] a0 = get_a0(t) # 四輛車的車間距誤差ei1列表 e11 = [x1[0] - x0[0] + l1] e21 = [x2[0] - x1[0] + l2] e31 = [x3[0] - x2[0] + l3] e41 = [x4[0] - x3[0] + l4] # 四輛車的車間距誤差導數(shù)ei2的列表 e12 = [v1[0] - v0[0]] e22 = [v2[0] - v1[0]] e32 = [v3[0] - v2[0]] e42 = [v4[0] - v3[0]] # 四輛車切換函數(shù)的列表 s1 = [q1 * e11[0] + q2 * e12[0]] s2 = [q1 * e21[0] + q2 * e22[0]] s3 = [q1 * e31[0] + q2 * e32[0]] s4 = [q1 * e41[0] + q2 * e42[0]] # 四輛車控制律的列表 u1, u2, u3, u4 = [0], [0], [0], [0] for i in range(1, 301): # 最前車0的速度、加速度更新,可以看出更新時用了直線等效, 0.1指的是時間標度(列表t劃分的, 也是之后繪圖打印的x軸) v0.append(v0[i-1] + 0.1 * (a0[i] + a0[i - 1]) * 0.5) x0.append(x0[i-1] + 0.1 * (v0[i] + v0[i - 1]) * 0.5) # 車1的車間距誤差及導數(shù)更新 e11.append(x1[i-1] - x0[i-1]+l1) e12.append(v1[i-1] - v0[i-1]) # 車1的切換函數(shù)更新 s1.append(q1 * e11[i] + q2 * e12[i]) # 等效控制 u1equ = c1 * (e12[i] + v0[i]) * (e12[i] + v0[i]) - m1 * q1 * e12[i] / q2 + m1 * a0[i] + f1 # 反饋控制(指數(shù)趨近律) u1n = reaching_law(m1, s1[i], q2) # 默認采用指數(shù)趨近律, 下同 # u1n = reaching_law(m1, s1[i], q2, mode='uniform') # 采用等速趨近律 # u1n = reaching_law(m1, s1[i], q2, mode='quasi_sliding') # 采用準滑模控制 # 更新控制律 u1.append(u1equ + u1n) # 利用控制律更新車1的加速度、速度、位移, 加速度是利用動力學模型得到的 a1.append((-c1 * v1[i-1] * v1[i-1] + u1[i] - f1) / m1) v1.append(v1[i-1] + 0.1 * (a1[i] + a1[i - 1]) * 0.5) x1.append(x1[i-1] + 0.1 * (v1[i] + v1[i - 1]) * 0.5) # 車2、3、4過程同車1 e21.append(x2[i-1] - x1[i-1]+l2) e22.append(v2[i-1] - v1[i-1]) s2.append(q1 * e21[i] + q2 * e22[i]) u2equ = c2 * (e22[i] + v1[i]) * (e22[i] + v1[i]) - m2 * q1 * e22[i] / q2 + m2 * a1[i] + f2 u2n = reaching_law(m2, s2[i], q2) # 默認采用指數(shù)趨近律 # u2n = reaching_law(m2, s2[i], q2, mode='uniform') # 采用等速趨近律 # u2n = reaching_law(m2, s2[i], q2, mode='quasi_sliding') # 采用準滑模控制 u2.append(u2equ + u2n) a2.append((-c2 * v2[i-1] * v2[i-1] + u2[i] -f2) / m2) v2.append(v2[i-1] + 0.1 * (a2[i] + a2[i - 1]) * 0.5) x2.append(x2[i-1] + 0.1 * (v2[i] + v2[i - 1]) * 0.5) e31.append(x3[i-1] - x2[i-1]+l3) e32.append(v3[i-1] - v2[i-1]) s3.append(q1 * e31[i] + q2 * e32[i]) u3equ = c3 * (e32[i] + v2[i]) * (e32[i] + v2[i]) - m3 * q1 * e32[i] / q2 + m3 * a2[i] + f3 u3n = reaching_law(m3, s3[i], q2) # u3n = reaching_law(m3, s3[i], q2, mode='uniform') # u3n = reaching_law(m3, s3[i], q2, mode='quasi_sliding') u3.append(u3equ + u3n) a3.append((-c3 * v3[i-1] * v3[i-1] + u3[i] -f3) / m3) v3.append(v3[i-1] + 0.1 * (a3[i] + a3[i - 1]) * 0.5) x3.append(x3[i-1] + 0.1 * (v3[i] + v3[i - 1]) * 0.5) e41.append(x4[i-1] - x3[i-1]+l4) e42.append(v4[i-1] - v3[i-1]) s4.append(q1 * e41[i] + q2 * e42[i]) u4equ = c4 * (e42[i] + v3[i]) * (e42[i] + v3[i]) - m4 * q1 * e42[i] / q2 + m4 * a3[i] + f4 u4n = reaching_law(m4, s4[i], q2) # u4n = reaching_law(m4, s4[i], q2, mode='uniform') # u4n = reaching_law(m4, s4[i], q2, mode='quasi_sliding') u4.append(u4equ + u4n) a4.append((-c4 * v4[i-1] * v4[i-1] + u4[i] -f4) / m4) v4.append(v4[i-1] + 0.1 * (a4[i] + a4[i - 1]) * 0.5) x4.append(x4[i-1] + 0.1 * (v4[i] + v4[i - 1]) * 0.5) # 開始繪圖 # 繪制加速度曲線 plt.figure() # 設(shè)置畫布 plt.plot(t, a0, label='car 0') # :是指繪制點劃線 plt.plot(t, a1, label='car 1') plt.plot(t, a2, label='car 2') plt.plot(t, a3, label='car 3') plt.plot(t, a4, label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("Acceleration(m/s^2)",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./acceleration.png') # 保存圖像 # 繪制速度曲線 plt.clf() # 清空畫布,不然會前后圖像會重疊 plt.plot(t, v0, ':', label='car 0') plt.plot(t, v1, ':', label='car 1') plt.plot(t, v2, ':', label='car 2') plt.plot(t, v3, ':', label='car 3') plt.plot(t, v4, ':', label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("velocity(m/s)",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./velocity.png') # 保存圖像 # 繪制位置曲線 plt.clf() plt.plot(t, x0, ':', label='car 0') plt.plot(t, x1, ':', label='car 1') plt.plot(t, x2, ':', label='car 2') plt.plot(t, x3, ':', label='car 3') plt.plot(t, x4, ':', label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("position(m)",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./position.png') # 繪制車間距誤差ei1曲線 plt.clf() plt.plot(t, e11, label='car 1') plt.plot(t, e21, label='car 2') plt.plot(t, e31, label='car 3') plt.plot(t, e41, label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("space error(m)",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./space_error.png') # 繪制車間距誤差導數(shù)ei2曲線 plt.clf() plt.plot(t, e12, ':', label='car 1') plt.plot(t, e22, ':', label='car 2') plt.plot(t, e32, ':', label='car 3') plt.plot(t, e42, ':', label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("space_error_derivative(m)",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./space_error_derivative.png') # 繪制切換函數(shù)曲線 plt.clf() plt.plot(t, s1, label='car 1') plt.plot(t, s2, label='car 2') plt.plot(t, s3, label='car 3') plt.plot(t, s4, label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("Switching Function",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./Switching_Function.png') # 繪制控制輸入U曲線 plt.clf() plt.plot(t, u1, label='car 1') plt.plot(t, u2, label='car 2') plt.plot(t, u3, label='car 3') plt.plot(t, u4, label='car 4') plt.xlabel("Time(s)",fontsize=13) plt.ylabel("Control Input",fontsize=13) plt.xlim(0, 30) plt.legend() plt.savefig('./Control_Input.png')
到此這篇關(guān)于python實現(xiàn)車輛跟隨滑??刂频奈恼戮徒榻B到這了,更多相關(guān)python滑??刂苾?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python argparse中的action=store_true用法小結(jié)
這篇文章主要介紹了Python argparse中的action=store_true用法小結(jié),本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02將不規(guī)則的Python多維數(shù)組拉平到一維的方法實現(xiàn)
這篇文章主要介紹了將不規(guī)則的Python多維數(shù)組拉平到一維的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01Python中將圖像轉(zhuǎn)換為PDF的方法實現(xiàn)
本文主要介紹了Python中將圖像轉(zhuǎn)換為PDF的方法實現(xiàn),主要使用img2pdf和PyPDF2軟件包,具有一定的參考價值,感興趣的可以了解一下2023-08-08手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09