介紹:
這篇教程是交給大家怎麼在ros裡寫乙個pid控制器,pid控制器有三部分:比例部分(p)、積分部分(i)、微分部分(d),pid的輸出是這三部分的加和。
pid可以控制機械人的位置和航向角,期望機械人向前走x公尺,x即為參考值(pid控制器的輸入期望),旋轉期望角度
φ 。
pid輸入是里程計訊息。首先你要計算當前值和目標值之間的差值。另乙個要計算的是psd控制器的干涉值(intervention)(譯者注:估計是pid輸出吧)。由於用的是離散版本pid,因此積分變為加和形式。這些都在nodepid 類中進行實現。回掉函式負責資料的收集。
輸入輸出處理
程式的輸入訊息是里程計訊息:
std_msgs/header header你實際需要的是位置和時間資訊。位置資訊(x,y)儲存在pose.pose.position中,time資訊儲存在header.stamp中.唯一的問題是如何得到機械人的旋轉資訊。geometry_msgs/quaternion 包含三位空間旋轉的 float64 (x,y,z,w) 四元數,我麼的機械人是在2d狀態下運動的。 φ=uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/posewithcovariance pose
geometry_msgs/pose pose
geometry_msgs/point position
float64 x
float64 y
float64 z
geometry_msgs/quaternion orientation
float64 x
float64 y
float64 z
float64 w
float64 covariance
geometry_msgs/twistwithcovariance twist
geometry_msgs/twist twist
geometry_msgs/vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/vector3 angular
float64 x
float64 y
float64 z
float64 covariance
2⋅arcsin(q
z)角度和距離
兩點之間的距離: d=
(y2−
y1)2
+(x2
−x1)
2−−−
−−−−
−−−−
−−−−
−−−√
(distance)
兩點之間的角度: θ=
atan
2(y2
−y1,
x2−x
1)(angle)
誤差
距離誤差 :參照公式distance
角度誤差,首先要計算真實的角度(與起始點相差的角度): φa
=φo−
φs
φapid(psd)控制器va: 實際角度 φ
o : 里程計測算角度 φ
s : 起點角度
(t)=
kpe(
t)+k
dde(
t)dt
+ki∫
0te(
t)dt
(pid)
vava(t) pid輸出 e(
t)誤差 kp
是比例常數 kd
微分常量 ki
積分常量
(tn)
=kpe
(tn)
+kde
(tn)
−e(t
n−1)
tn−t
n−1+
ks∑i
=0ne
(ti)
⋅(tn
−tn−
1)(psd)
tn: n次迭代 ks
對應ki
常量
PID控制器簡介
pid調節 基於誤差來消除誤差 可以認為是 誤差的過去 i 現在 p 未來 變化趨勢 d的加權和 pid控制器就是根據系統的誤差,利用比例 積分 微分計算出控制量進行控制的。pid控制的不足 1.在實際工業生產過程往往具有非線性 時變不確定,難以建立精確的數學模型,常規的pid控制器不能達到理想的控...
PID控制器開發筆記之五 變積分PID控制器的實現
在普通的pid控制演算法中,由於積分係數ki是常數,所以在整個控制過程中,積分增量是不變的。然而,系統對於積分項的要求是,系統偏差大時,積分作用應該減弱甚至是全無,而在偏差小時,則應該加強。積分係數取大了會產生超調,甚至積分飽和,取小了又不能短時間內消除靜差。因此,如何根據系統的偏差大小改變積分速度...
PID控制器的應用 控制網路爬蟲抓取速度
冬天鄉下人喜歡烤火取暖,常見的情形就是四人圍著麻將桌,桌底放一盆碳火。有人覺得火不夠大,那加點木炭吧,還不夠,再加點。片刻之後,又覺得火太大,腳都快被烤熟了,那就取出一些木碳 直到火盆裡的火剛剛合適。這樣乙個看似簡單的情形中就包括pid控制系統的四個主要過程 設定目標,測量,比較和執行。結合pid控...