簡體   English   中英

Python:超調目標,需要矢量或 PID 調整嗎?

[英]Python: Overshoot target, need vectors or PID tuning?

所以,我正在使用無人機,我想將其放置在兩個物體之間的中心,但是,無人機將過沖移動操作,然后繼續以相反方向返回中心,再次過沖並執行這無休止。 有沒有辦法補償,或使用某種 PID 使其不會超過中心?

實時查看效果: UAV cant center

我現在使用的代碼:

if (sensor.left > sensor.right):
    velocity_x = 0.2
    print('Moving left')
if (sensor.left < sensor.right):
    velocity_x = -0.2
    print('Moving right')
if (sensor.left == sensor.right):
    velocity_x = 0

uav.move(velocity_x,velocity_y)

任何建議如何讓它保持更穩定? 我相信向量更適合保持穩定,但沒有關於使用什么的參考點。 我在網上看到了一些使用向量的教程,但它們遇到了相同的“過沖”問題。

下面是傳感器和調試信息的輸出: n 中心,停止! 在中心,反轉速度!

front=1.924
back=0.66
left=0.516
right=0.447
Moving left
Front = 1.924 
Back = 0.66 
Left = 0.516 
Right = 0.447 
Vel X = 0.0 
Vel Y = 0.1 
--------------------------------
front=1.926
back=0.669
left=0.525
right=0.445
Moving left
Front = 1.926 
Back = 0.669 
Left = 0.525 
Right = 0.445 
Vel X = 0.0 
Vel Y = 0.1 
--------------------------------
front=1.921
back=0.668
left=0.535
right=0.445
Moving left
Front = 1.921 
Back = 0.668 
Left = 0.535 
Right = 0.445 
Vel X = 0.0 
Vel Y = 0.1 
--------------------------------
front=1.912
back=0.676
left=0.54
right=0.443
Moving left
Front = 1.912 
Back = 0.676 
Left = 0.54 
Right = 0.443 
Vel X = 0.0 
Vel Y = 0.1 

我相信這樣的事情會根據硬件限制來接受值范圍,代碼是這樣的:

if (sensor.left > sensor.right):
    velocity_x = 0.2/i    #<====
    print('Moving left to center')
if (sensor.left < sensor.right):
    velocity_x = -0.2/i   #<====
    print('Moving right to center')
if (sensor.left == sensor.right):
    velocity_x = 0
i+=0.1 # i initial value is equal to 1 <====
uav.move(velocity_x,velocity_y)

或者可能想要更改您的最后一個 if 語句,因為期望現實世界中的這些傳感器完全相同是不公平的。

from __experimental__ import approx
if (sensor.left ~= sensor.right):
    velocity_x = 0

使用此近似相等運算符取決於您的 Python 版本,但您可以在一個小函數中使用它並在您的條件語句中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM