-
1 # 機器人觀察
-
2 # 工業採購寶
第一種:巡線感測器LineMod
巡線感測器採用紅外光巡線感測系統,包括一個感測器採集電路板和相關處理演算法程式。巡線感測系統用於機器人巡線導航,可用於清潔機器人導航、比賽用機器人、工業AGV無人導引車等。紅外光巡線感測系統採用紅外光作為檢測光源,避免了外界可見光對巡線感測的干擾和影響,可以在高亮或全黑暗的光照條件下工作。內部處理演算法基於施密特濾波器及自適應閾值學習演算法(http://blog.csdn.NET/superdont/article/details/6661994),對每個紅外反射管分別進行閾值學習,可以彌補因為器件差異和反射條件差異造成的感測誤差。本系統可以自學習地面黑白反光狀態,對不同地面反光的變化具有較強的自適應能力,能自主調節到最靈敏穩定的巡線感測模式。
巡線感測器採用ATmega16A微控制器,提供3種通訊介面:IO、I2C、UART。使用者可根據需要選擇其中一種介面讀取感測器模組的檢測結果。使用者可使用撥碼開關或者I2C、UART通訊介面控制此巡線板進入取樣學習模式。
第二種: 基於PID演算法的巡線演算法
(要求小車至少6路感測器才會起到效果!!!)PID演算法巡線
模型:你控制一個人讓他以PID控制的方式走110步後停下。
(1)P比例控制,就是讓他走110步,他按照一定的步伐走到一百零幾步(如108步)或100多步(如112步)就停了。 說明:
P比例控制是一種最簡單的控制方式。其控制器的輸出與輸入誤差訊號成比例關係。當僅有比例控制時系統輸出存在穩態誤差(Steady-state error)。
(2)PI積分控制,就是他按照一定的步伐走到112步然後回頭接著走,走到108步位置時,然後又回頭向110步位置走。在110步位置處來回晃幾次,最後停在110步的位置。 說明:
在積分I控制中,控制器的輸出與輸入誤差訊號的積分成正比關係。對一個自動控制系統,如果在進入穩態後存在穩態誤差,則稱這個控制系統是有穩態誤差的或簡稱有差系統(System with Steady-state Error)。為了消除穩態誤差,在控制器中必須引入“積分項”。積分項對誤差取決於時間的積分,隨著時間的增加,積分項會增大。這樣,即便誤差很小,積分項也會隨著時間的增加而加大,它推動控制器的輸出增大使穩態誤差進一步減小,直到等於零。因此,比例+積分(PI)控制器,可以使系統在進入穩態後無穩態誤差。
(3)PD微分控制,就是他按照一定的步伐走到一百零幾步後,再慢慢地向110步的位置靠近,如果最後能精確停在110步的位置,就是無靜差控制;如果停在110步附近(如109步或111步位置),就是有靜差控制。 說明:
在微分控制D中,控制器的輸出與輸入誤差訊號的微分(即誤差的變化率)成正比關係。
自動控制系統在克服誤差的調節過程中可能會出現振盪甚至失穩,其原因是由於存在有較大慣性元件(環節)或有滯後(delay)元件,具有抑制誤差的作用,其變化總是落後於誤差的變化。解決的辦法是使抑制誤差作用的變化“超前”,即在誤差接近零時,抑制誤差的作用就應該是零。這就是說,在控制器中僅引入“比例P”項往往是不夠的,比例項的作用僅是放大誤差的幅值,而目前需要增加的是“微分項”,它能預測誤差變化的趨勢。這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等於零,甚至為負值,從而避免了被控量的嚴重超調。所以對有較大慣性或滯後的被控物件,比例P+微分D(PD)控制器能改善系統在調節過程中的動態特性
PID的流程簡單到了不能再簡單的程度,透過誤差訊號控制被控量,而控制器本身就是比例、積分、微分三個環節的加和。這裡我們規定(在t時刻):1.輸入量為rin(t);2.輸出量為rout(t);
3.偏差量為err(t)=rin(t)-rout(t);pid的控制規律為
理解一下這個公式,主要從下面幾個問題著手,為了便於理解,把控制環境具體一下:
1.規定這個流程是用來為直流電機調速的;2.輸入量rin(t)為電機轉速預定值;3.輸出量rout(t)為電機轉速實際值
2.那麼以下幾個問題需要弄清楚:
3.1.透過PID環節之後的U(t)是什麼值呢?
4.2.控制執行器(直流電機)轉動轉速應該為電壓值(也就是PWM佔空比)。3.那麼U(t)與PWM之間存在怎樣的聯絡呢?
5.http://blog.21ic.com/user1/3407/archives/2006/33541.html(見附錄1)這篇文章上給出了一種方法,即,每個電壓對應一個轉速,電壓和轉速之間呈現線性關係。但是我考慮這種方法的前提是把直流電機的特性理解為線性了,而實際情況下,直流電機的特性絕對不是線性的,或者說在區域性上是趨於線性的,這就是為什麼說PID調速有個範圍的問題。具體看一下
6.http://articles.e-works.net.cn/component/article90249.htm(見附錄2)這篇文章就可以瞭解了。所以在正式進行調速設計之前,需要現有開環系統,測試電機和轉速之間的特性曲線(或者查閱電機的資料說明),然後再進行閉環引數整定。這篇先寫到這,下一篇說明連續系統的離散化問題。並根據離散化後的特點講述位置型PID和增量型PID的用法和C語言實現過程。
二.PID演算法的離散化
上一節中,我論述了PID演算法的基本形式,並對其控制過程的實現有了一個簡要的說明,透過上一節的總結,基本已經可以明白PID控制的過程。這一節中先繼續上一節內容補充說明一下。
1.說明一下反饋控制的原理,透過上一節的框圖不難看出,PID控制其實是對偏差的控制過程;
2.如果偏差為0,則比例環節不起作用,只有存在偏差時,比例環節才起作用。3.積分環節主要是用來消除靜差,所謂靜差,就是系統穩定後輸出值和設定值之間的差值,積分環節實際上就是偏差累計的過程,把累計的誤差加到原有系統上以抵消系統造成的靜差。
4.而微分訊號則反應了偏差訊號的變化規律,或者說是變化趨勢,根據偏差訊號的變化趨勢來進行超前調節,從而增加了系統的快速性。
好了,關於PID的基本說明就補充到這裡,下面將對PID連續系統離散化,從而方便在處理器上實現。下面把連續狀態的公式再貼一下:
假設取樣間隔為T,則在第KT時刻:偏差err(K)=rin(K)-rout(K);
積分環節用加和的形式表示,即err(K)+err(K+1)+……;微分環節用斜率的形式表示,即[err(K)-err(K-1)]/T;從而形成如下PID離散表示形式:
則u(K)可表示成為:
至於說Kp、Ki、Kd三個引數的具體表達式,我想可以輕鬆的推出了,這裡節省時間,不再詳細表示了。
其實到這裡為止,PID的基本離散表示形式已經出來了。目前的這種表述形式屬於位置型PID,另外一種表述方式為增量式PID,由U上述表示式可以輕易得到:
那麼:
這就是離散化PID的增量式表示方式,由公式可以看出,增量式的表達結果和最近三次的偏差有關,這樣就大大提高了系統的穩定性。需要注意的是最終的輸出結果應該為
u(K)+增量調節值;
PID的離散化過程基本思路就是這樣,下面是將離散化的公式轉換成為C語言,從而實現微控制器的控制作用。
回覆列表
機器人巡線的在工業生產中,有幾種,另外目前比較多的是樂高的機器人比賽,這裡先說一下樂高的機器人比賽的巡線方法。
巡線在LEGO機器人比賽中經常見到,是一項非常基礎實用的需要掌握的知識。在設計巡線機器人之前,首先要了解它的幾種控制方法,這裡提供3種基本常見的方法,僅供參考:
一、Z字型巡線方法(俗稱二分法)
最常見,也最簡單,但是左右搖擺幅度大,程式較為簡單,這裡就不提供了,網上也有很多,這裡說下單光感和雙光感兩者之間在巡線方面的一些區別(注意:這裡的區別主要單指兩者之間的區別,並沒有同其他方法進行比較):
單光感:
優點:成本低,只需要一個顏色感測器(光電感測器);機械機構簡單;程式簡單;
缺點:左右搖擺幅度大,無法進行復雜路線的巡線,容易脫離黑線;
雙光感:
優點:左右搖擺幅度小;可以解決較為複雜的路線,比如“十字形”;
缺點:成本高,需要兩個顏色感測器(光電感測器);程式較為複雜,使用分叉切換結構。
作法:
當機器人的顏色感測器(光電感測器)檢測到白線部分的時候,則左轉(右轉);當機器人的顏色感測器(光電感測器)檢測到黑線部分的時候,則右轉(左轉);下圖中我們可以看到二分法就是很簡單的if/else,機器人只有兩個動作。
判斷方法:
1.透過顏色感測器(光電感測器)檢測白線部分的反射光值為55,黑線部分為25,則兩者的中間為40,可以假定當機器人在行走時,檢測到反射光值大於40,則為白線部分,反之。
2.機器人只有左轉、右轉兩種動作,速度較慢,容易脫離黑線。
3.行走過程中大幅度的搖擺,浪費時間電池電量。
4.相對而言,雙光感巡線比單光感的巡線準確度較高,並且能夠適應一些複雜路線的循跡,但程式比單光感複雜。
5.單雙巡線適合初學者。
二、三段巡線法
主要是指機器人在行走過程中,有左轉、直行和右轉三種不同的運動軌跡。和Z字型巡線有點類似,主要區別在顏色感測器(光電感測器)檢測到黑白反射光值的中間值時,機器人執行直行狀態。
這種方法,速度比之前的要快,更為準確,搖擺幅度減小,程式也比之前複雜。
到了中間的三階段之後,我們設計一個區間(光值43-47),這時代表機器人略偏但是不算太偏,所以還是直走。直到光值小於43或是大於47代表篇很多了才進行修正。
三、比例控制(詳細可以百度搜索,網上好多啦,真的好多技術大神)
主要是指依照機器人檢測到不同的反射光值,來決定轉向的角度。這裡設定的區間為30-50。
(當我把這個圖做完的時候,感覺特別像膏藥,開個玩笑)
上圖中,數字代表反射光值,紅色圓圈為顏色感測器(光電感測器)的檢測部分,黑色部分為黑線。黑線的反射光值為30,白線的反射光值為50。
1.反射光值在30-35之間,機器人向右轉向角度大一點;
2.反射光值在35-40之間,機器人向右轉向角度小一點;
3.反射光值等於40,機器人直行;
4.反射光值在40-45之間,機器人向左轉向角度小一點;
5.反射光值在45-50之間,機器人向左轉向角度大一點;
需要注意的是:上圖中的數字僅為參考數字,具體數字以實際測量為準;同時機器人左轉右轉的角度大小,也由電機輸出的功率控制。這種程式較為複雜,但是速度快準確率高。
上圖將區間分為5段,在之前是三段,有三階段就有四階段五階段,最後這麼多階段就會變成一條直線,比例控制方法的比例事實上就是這條線的斜率。斜率愈大代表機器人對於誤差愈敏感,修正幅度也愈大。這在程式中我們是用一個引數kp來調整。kp不是愈大愈好!kp過大會讓機器人變得神經兮兮,一點點誤差也一直在修正反而效果不好。這裡都需要反覆地調整,請加油吧!
目前國內有許多人已經會這種比例巡線方法,主要還是引數值的測試和調整,這種PID(比例、積分和微分)巡線發方法,上圖為P演算法,關鍵在P的測量,後面兩種積分微分我也不會。
首先我們來看張圖片,算比較經典的:
從這裡我們可以看出許多理想性的假設:
1. 每次修正都要能夠回到白色場地,這就是為什麼當軌跡曲率變化太大(例如許多左彎後接一個右彎、髮夾彎(髮夾彎是指彎的外形呈髮夾狀,彎的角度少於90度,出彎之後方向呈180度的改變,當以上種種因素都符合的話,那一個便是髮夾彎)甚至直角灣時,都會在此飛出去的,從而死翹翹了…
2. 機器人根本不會直走,因為我們的程式就是這樣寫的,左前方右前方一直重複移動。這樣會造成明明是大直線,但是機器人還在那邊左右左右修正,太慢了。
3. 機器人不知道彎道的變化程度,每次修正的動作皆相同,傳統的兩分法是取黑色軌跡線與白色場地的光值之中間值作為判斷邊界(上面已經說過),例如(30+50)/2=40。小於40視為偵測到黑線,反之則代表在白色部分。如果光值是46或47,代表此時只有偏離一點點,應該進行小幅度修正就好。但是二分法就是無法作到(上面也已經講過)。
4. 黑就是均勻的黑,白就是均勻的白,怎麼可能嘛!這要考慮到光照,桌面乾淨程度等等……實際上很難有均勻顏色這種事的。所以由此可以延伸出非常多東西可以深入去玩,你的機器人也會愈來愈聰明。匯入比例控制方法,讓機器人碰到劇烈彎道時可以修正得更快速,當誤差為零時,機器人就是直走!以第三種方法的設定來說,光值會在30-50之間連續變化,誤差產生時會影響機器人的馬達轉速。以髮夾彎來說,機器人一定會瞬間切入黑色軌跡線較深,這時光值會下降比較多,機器人便是由這種方法來得知彎道的曲率,作出更適合的修正。
5. 每次都重新更新判斷邊界值,機器人對於環境的適應力會更高。
附上NXC程式程式碼(可能手機顯示會出現錯行的情況,所以每隔行我都用紅色字型來區分):
//我是p控制task main(){SetSensorLight(S3);int kp=2; //比例引數int light_initial = Sensor(S3); //程式啟動時先抓一次光值,這時請將光感測器所投射出的光圈擺在黑線左測一半處int light_realtime; //即時光值int vl,vr; //左右輪速while(true){light_realtime = Sensor(S3); //更新即時光值vl = 40 + kp*(light_realtime-light_initial); //計算左輪速,40 是基礎速度,代表當誤差為0時,機器人將以此速度直走vr = 40 + kp*(light_realtime+light_initial); //計算右輪速, +/- 是代表進彎時的修正方向,可根據實際狀況修改OnFwd(OUT_B,vl); //出發!OnFwd(OUT_C,vr);}}