1.序言
半年沒寫過博客了,不過這對于我的博客來說似乎是常態(tài)?這半年來忙著做畢業(yè)論文,沒弄什么自己的研究,而實驗室的東西實在是不好泄露出來,所以我也是“雖欲言無可進(jìn)者”了。
上星期趁著論文提交的空擋,把一直拖著的一個小項目開了個頭,其實是朋友有個外快小項目要做,具體內(nèi)容不說,項目的基礎(chǔ)是XY平臺的視覺控制,因此在前期研究中主要要做平臺選型、控制購買、接線研究、模擬實驗等工作,這里記述下來以防忘記,順便也給其他人做個參考。
本次控制通過相機(jī)采集圖像,以此為反饋信號做控制,使平臺上的某個點(diǎn)位移到指定的位置。然后本文寫得更像隨筆形式,內(nèi)容可能有點(diǎn)雜亂,見諒了。
2.平臺選型與硬件接線
2.1 XY平臺選型
項目中需要做到精度較高的位移控制,且承重要求3kg以上,因此XY平臺選型時主要考慮步進(jìn)電機(jī)的XY平臺,淘寶上一搜就是一大片。
從中挑選了一臺二手日本平臺,由于價錢便宜店家不提供技術(shù)支持,接線什么的得自己搞。
2.2 步進(jìn)電機(jī)驅(qū)動
步進(jìn)電機(jī)驅(qū)動不需要購買,我手上有一塊前輩留下來的,正好可以用,同樣沒有任何資料。從其電路板上發(fā)現(xiàn)驅(qū)動芯片是TA8435H,于是查到其引腳功能表。
根據(jù)這個功能表可以確定驅(qū)動上幾個引腳的功能,并用一個四相步進(jìn)電機(jī)測試,發(fā)現(xiàn)驅(qū)動板功能完好。
在電機(jī)供電上,考慮到要驅(qū)動兩臺步進(jìn)電機(jī),并獲得足夠的驅(qū)動力,因此我試用了一個12V 4.5A的開關(guān)電源。
2.3采集卡
為了使計算機(jī)能夠控制電機(jī)驅(qū)動,這里還需要一個電腦IO卡,我用的依然是以前留下來mc100 USB Card,方便好用還便宜,淘寶上一搜一大把。這個東西IO口波紋比較大,而且沒做好隔離容易燒,不過既然是實驗用,那就將就一下了,實際產(chǎn)品中是肯定不能用這個的。
2.4平臺接線
平臺到貨后檢查發(fā)現(xiàn)電機(jī)型號查不到,只知道是三洋1.5A的步進(jìn)電機(jī),沒辦法只好電機(jī)的線給撥了,用物理方法來測極性。撥開線后發(fā)現(xiàn)步進(jìn)電機(jī)是8相的,于是要測出四組通路,通過萬用表測通,發(fā)現(xiàn)相通的幾根線是這樣的:
紅-綠
藍(lán)-白
黃-棕
黑-灰
為了測出四組線的相性,需要進(jìn)行多次接線測試,并匯總結(jié)果得到下表(只保留了幾組數(shù)據(jù),實際中我為了完全確認(rèn)相性,各種接線組合都測了):
根據(jù)這個表,可以確定最終的接線方法,此處使用的是并聯(lián)接法,連線如下表。
8相步進(jìn)電機(jī)還有另外一種串聯(lián)接法如下圖:
2.5硬件組裝結(jié)果
最后把兩個電機(jī)都接到步進(jìn)電機(jī)驅(qū)動上,USB采集卡插好,XY平臺鎖死,相機(jī)固定。
得到了個凌亂的實驗現(xiàn)場,圖中上面那坨黑的是工業(yè)相機(jī)。
3.平臺控制算法
控制這一塊我已經(jīng)丟了差不多三年了,現(xiàn)在再撿起來發(fā)現(xiàn)PID都不會寫了,再加上步進(jìn)電機(jī)的控制我也沒做過,總之是不好弄啊。
首先極力回憶一下本科時微機(jī)原理課程設(shè)計里做步進(jìn)電機(jī)控制那題是什么做控制的,想起有兩種控制方式,一是控制步進(jìn)電機(jī)的步長,二是控制其步數(shù)。那么這里既然要控制的是位移量,那么控制步數(shù)應(yīng)該是比較好的選擇。但對步進(jìn)電機(jī)來說,每秒走1000步幾乎已經(jīng)是極限了,再快的話電機(jī)扭矩會不夠,而1000步轉(zhuǎn)換到XY平臺上實際也就位移了1cm,所以當(dāng)位移量較大時,控制的滯后環(huán)節(jié)可能會較大。但走幾步就再控制一下也不現(xiàn)實,畢竟相機(jī)的采樣時間擺在那,幾步就采樣控制一下那么控制花費(fèi)的時間可能會較長……
想來想去也沒想到一個最佳的控制方案,總之先用PID控制試試看。
于是搜索增量式PID公式,花十幾分鐘把C++版本的PID控制器寫出來:
然后設(shè)計控制周期為100ms,死區(qū)5個像素,胡亂設(shè)置一下PID參數(shù),只做x方向的平臺控制。結(jié)果…好嘛,不管怎么樣調(diào)試系統(tǒng)震蕩都很嚴(yán)重,大概是這樣子的:
最后我實在是懶得整定PID參數(shù)了,于是重新設(shè)計控制算法。
當(dāng)誤差大于50像素,用PD控制快速移動平臺。
當(dāng)誤差在50像素以內(nèi)時,根據(jù)事先做好的標(biāo)定[注1],查表獲得位移的步長進(jìn)行一次移動。
移動完成后再次檢查還有多少誤差,以1的步長慢慢消除該誤差。
[注1]這里目標(biāo)點(diǎn)的位置是固定的,因此可以實現(xiàn)進(jìn)行多次標(biāo)定,確定圖像上各個坐標(biāo)上的點(diǎn)要位移目標(biāo)點(diǎn)處需要走多少步,但考慮到相機(jī)畸變這個標(biāo)定是無法完全準(zhǔn)確的,因此為盡量減少畸變造成的誤差,位移的目標(biāo)點(diǎn)應(yīng)放在相機(jī)視野中心,且只做該點(diǎn)半徑50像素內(nèi)的點(diǎn)的位移步數(shù)標(biāo)定。
根據(jù)上述控制流程,能夠較為快速地完成控制,控制精度可在0.5像素以內(nèi),具體可以達(dá)到多少由于現(xiàn)在相機(jī)的安裝位置角度都沒定下來,所以我暫時也沒仔細(xì)測了。
4.程序結(jié)構(gòu)設(shè)計
XY平臺涉及到X方向與Y方向的控制,兩個控制是相互獨(dú)立的,因此我采用了兩個線程對它們分別控制,下面是隨手亂畫的結(jié)構(gòu)圖:
程序運(yùn)行后開辟三個線程,其中兩個分別負(fù)責(zé)驅(qū)動兩臺電機(jī),主線程則負(fù)責(zé)計算控制量,該控制量也就是另外兩個控制線程的步數(shù)。
在架構(gòu)上尚未做設(shè)計,但為了提高程序的可拓展性(畢竟實用化后相機(jī)、采集卡都得換),項目內(nèi)的幾個操作類都通過基類設(shè)計好了統(tǒng)一的接口,以方便今后更換硬件。
5.圖像處理算法
這里圖像處理算法偷懶了,采用的是《相機(jī)位姿估計2:[應(yīng)用]實時位姿估計與三維重建相機(jī)姿態(tài)》中跟蹤紅點(diǎn)的方法,原理是差不多的,只是這里改成了追蹤黑點(diǎn)而已,就不詳細(xì)寫了。
實際項目里圖像算法當(dāng)然不會那么簡單,不過這里目前還是一片空白,是下一步的工作重點(diǎn)了。
6.實驗截圖
最后隨便給兩張程序運(yùn)行時的截圖,控制臺坐標(biāo)是當(dāng)前黑點(diǎn)坐標(biāo),控制目標(biāo)是[500,500],u1是x平臺的控制量,u2是y平臺的控制量。
運(yùn)行過程中
兩秒后完成位移,黑點(diǎn)被移動到設(shè)定位置。
完成控制
-
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
150文章
3090瀏覽量
147280 -
反饋信號
+關(guān)注
關(guān)注
0文章
29瀏覽量
8209
發(fā)布評論請先 登錄
相關(guān)推薦
評論