国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于有限狀態(tài)機(jī)(FSM)的多傳感器信息融合在輪式運(yùn)動機(jī)器人編程中的應(yīng)用?

2019-11-12 06:38
計算機(jī)與數(shù)字工程 2019年10期
關(guān)鍵詞:狀態(tài)機(jī)移動機(jī)器人編程

徐 偉

(江漢大學(xué)工程訓(xùn)練中心 武漢 430056)

1 引言

智能機(jī)器人是集成了環(huán)境探測與數(shù)據(jù)采集、實時動態(tài)決策與規(guī)劃、行為控制與執(zhí)行等多功能于一體的綜合系統(tǒng)。其中包含了傳感器技術(shù)、信息處理技術(shù)、計算機(jī)、自動化控制以及人工智能等多學(xué)科的專業(yè)知識,是機(jī)電一體化技術(shù)的綜合表現(xiàn)形式,是目前科學(xué)技術(shù)發(fā)展最活躍的領(lǐng)域之一[1]。智能移動機(jī)器人按移動方式可分為輪式運(yùn)動機(jī)器人、步行移動機(jī)器人(單足、雙足或多足)、蛇形機(jī)器人、履帶式移動機(jī)器人、爬行機(jī)器人等。其中,輪式運(yùn)動機(jī)器人作為一門新興的綜合技術(shù),廣泛地應(yīng)用于社會生產(chǎn)、生活、軍事、太空等技術(shù)領(lǐng)域,特別是取代人應(yīng)用于復(fù)雜、惡劣的工作環(huán)境,具有良好的民用和軍用應(yīng)用前景[2]。

國外科研機(jī)構(gòu)對移動機(jī)器人的研究開始于20世紀(jì)60 年代。1966 年至1972 年間,美國斯坦福研究院(SRI)的Nils Nilssen 和Charles Rosen 等成功研制出了名為Shakey 的地面自主移動機(jī)器人,標(biāo)志著機(jī)器人研究的開始。在我國,移動機(jī)器人的研究在“七五”開始起步,國家“863”計劃中的遙控駕駛防核化偵察車的立項確定,標(biāo)志著移動機(jī)器人研究的開始[3~4]。本文將以輪式運(yùn)動機(jī)器人為模型展開論述。

2 單個傳感器信息處理的編程思路

高度的智能化是機(jī)器人技術(shù)的必然發(fā)展趨勢,機(jī)器人對外界環(huán)境的感知完全通過不同類型的傳感器來實現(xiàn),所以傳感器技術(shù)則是實現(xiàn)機(jī)器人智能化的基礎(chǔ)。但是在機(jī)器人實際工作過程中,單個傳感器獲得的信息非常有限,而且還要受到傳感器自身性能的影響,因此智能機(jī)器人通常裝備數(shù)量較多的傳感器[5~7]。對于多傳感器機(jī)器人編程的時候,狀態(tài)羅列的越全,未來機(jī)器人的bug 越少。

如果對于多傳感器輪式運(yùn)動機(jī)器人的控制采用單個傳感器信息處理的方式,那么一般對于傳感器觸發(fā)不同情況可以用條件判斷分支流程去予以判斷,對于機(jī)器人所探知的不同傳感器信息,其自身的運(yùn)動行為也采用相對應(yīng)的運(yùn)動方式子程序模塊,比如前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等。這時機(jī)器人程序的一般思路是:

如果(機(jī)器人的某個傳感器觸發(fā)了)

{機(jī)器人的某幾個電機(jī)做個什么事;做多久;}

如果(機(jī)器人的另外某個傳感器觸發(fā)了)

{機(jī)器人的某幾個電機(jī)做個什么事;做多久;},以此類推。

這種方式是一種包容體系結(jié)構(gòu)(subsumption architecture)。在這種體系結(jié)構(gòu)內(nèi),處理器按照程序編寫的順序,輪流處理每個單獨(dú)的傳感器信息,可以人為手工劃分傳感器等級,甚至某些特定的傳感器可以否決或抑制其余的傳感器[8]。比如尋光-避障機(jī)器人,可以人為地將尋找光源(即確定光源目標(biāo))信息作為第一級傳感器信息,而障礙探測傳感器信息放在其次。但這種方法的問題在于不能很好地處理一些錯綜復(fù)雜的情況,在編程過程不可避免要用到大量的if 語句,以帶有2 個傳感器的機(jī)器人運(yùn)動判斷分支流程為例,程序用C 語言偽碼寫出來就是:

if{Sensor(端口a,觸發(fā))}

{Motor(L,順);Motor(R,逆);Delay(5);}

if{Sensor(端口b,觸發(fā))}

{Motor(L,逆);Motor(R,順);Delay(5);}

else{Motor(L,停);Motor(R,停);}

由上例可以看出,單個傳感器信息處理的編程思路主要有以下弊端。

首先,上面的例子僅僅是兩個傳感器,僅僅列舉了a 傳感器和b 傳感器單獨(dú)觸發(fā)時的運(yùn)動情況,沒有包含如a、b 傳感器僅觸發(fā)其中一個或者兩者同時觸發(fā)的情況,這必然會對后期機(jī)器人運(yùn)動過程產(chǎn)生影響。但是考慮各種情況必然要求在當(dāng)前if語句中另外增加else if 語句,大量的if 語句使程序的執(zhí)行效率變得非常低下,不僅程序語言編寫復(fù)雜、可讀性差,而且經(jīng)常出現(xiàn)識別不靈的情況。

其次,輪式機(jī)器人多傳感器的綜合,狀態(tài)數(shù)量按2 的N 次冪增加,即在3 個傳感器的情況下,不同傳感器觸發(fā)的組合有23=8;4個傳感器的情況下,不同傳感器觸發(fā)的組合有24=16;5個傳感器的情況下,不同傳感器觸發(fā)的組合有25=32……。如果按照傳統(tǒng)思路對各傳感器信息進(jìn)行分析,這樣一方面使機(jī)器人程序編譯的時所需要考慮的狀態(tài)呈幾何級數(shù)增加;另一方面對機(jī)器人控制器硬件的要求也相應(yīng)提高,造成成本和資源的增加。

第三,使各傳感器之間喪失了整體聯(lián)系,丟失了經(jīng)組合后蘊(yùn)含的有關(guān)環(huán)境整體特征,造成機(jī)器人運(yùn)行過程中的失控。

3 基于有限狀態(tài)機(jī)思想的機(jī)器人編程算法

3.1 傳感器信息融合和有限狀態(tài)機(jī)思想的原理

傳感器信息融合(sensor fusion)可有效地解決上述問題。傳感器信息融合綜合運(yùn)用自動化控制、信息處理、人工智能算法和統(tǒng)計等方面的理論技術(shù),利用信息互補(bǔ),對各個傳感器的信息進(jìn)行有機(jī)地整合,降低或者排除干擾因素,處理那些由不同傳感器發(fā)出的甚至是可能沖突的信號[9~10]。雖然不同的環(huán)境信息非常繁雜性,其特征各不相同,但經(jīng)過智能系統(tǒng)的處理,將信息進(jìn)行及時有效地融合后,是完全能夠比較精準(zhǔn)地反映出某個時刻或某個狀態(tài)下環(huán)境的屬性特點(diǎn)[11]。本文將用有限狀態(tài)機(jī)(FSM)的思想來進(jìn)行傳感器數(shù)據(jù)信息融合。

有限狀態(tài)機(jī)(Finite-state machine)簡稱FSM,表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型,它反映從系統(tǒng)開始到現(xiàn)在時刻的輸入變化的狀態(tài),它存儲的是關(guān)于過去的信息,指示狀態(tài)變更的是相對應(yīng)的動作,并且用滿足確定使轉(zhuǎn)移發(fā)生的條件來描述它[12]。它把復(fù)雜的控制邏輯分解成有限個穩(wěn)定狀態(tài),在每個狀態(tài)上判斷事件。由于有限狀態(tài)機(jī)有有限個狀態(tài),因此可以在實際中實現(xiàn)[13]。有限狀態(tài)機(jī)的思想可以廣泛地應(yīng)用于機(jī)器人多個傳感器觸發(fā)組合狀態(tài)的程序編程判斷中,大大提高檢測效率。仍然以帶有2 個傳感器的機(jī)器人在不同狀態(tài)中,傳感器返回值來說明情況,見表1。

表1 傳感器返回值轉(zhuǎn)換成二進(jìn)制數(shù)值

由上表容易看出,只要知道傳感器的觸發(fā)狀態(tài),就可以利用一定的算法,將不同狀態(tài)下傳感器的信息進(jìn)行整合成相關(guān)的序號信息,就可以按照相對應(yīng)的序號,利用如switch 語句按圖索驥,使機(jī)器人能夠根據(jù)自己接收到的傳感器信息組合值采取相應(yīng)的動作。

其具體算法如下:

首先設(shè)置一個變量s,初值為0,用來存儲傳感器的二進(jìn)制狀態(tài)序號,即上表中十進(jìn)制結(jié)果的值。

然后分別有序讀取每個傳感器陣腳的數(shù)值,用左移位“<<”運(yùn)算將每一位值左移,空出來的位用0填補(bǔ)。即控制器先讀取的某一傳感器的狀態(tài)數(shù)值,用移位運(yùn)算移動到第二位,空位用“0”進(jìn)行補(bǔ)足;再讀取另一傳感器狀態(tài)數(shù)值,兩個信息數(shù)值間作“或”運(yùn)算。比如表1 中兩個傳感器均觸發(fā)的情況:1 號傳感器讀?。ㄕ妫┎⒆笠?位,得“01”;2號傳感器讀?。ㄕ妫┎⒆笠? 位,得“10”;將“01”和“10”作“或”運(yùn)算,即得“11”,結(jié)果即為狀態(tài)“3”。

算法程序偽碼語句如下:

s=0;

for(i=0;i<2;i++)

{s=s|digitalRead(pin[i])<<i;}

switch(s)

{case 0x00:{動作0;}break;

case 0x01:{動作1;}break;

case 0x02:{動作2;}break;

case 0x03:{動作3;}break;}

3.2 有限狀態(tài)機(jī)思想的多傳感器機(jī)器人的實例應(yīng)用

以基于Arduino單片機(jī)的躲避懸崖機(jī)器人的實例應(yīng)用來說明。Arduino 單片機(jī)是一個開源的單片機(jī)電子設(shè)計硬件平臺,是全球非電子類專業(yè)人員所喜歡用來開發(fā)的一款單片機(jī)硬件控制板。其硬件部分由Atmel AVR 單片機(jī)、I/O 接口及相關(guān)電路組成。軟件部分則包括標(biāo)準(zhǔn)的程序編譯器和程序下載器。作為一種新型的集成開發(fā)環(huán)境,其采用C++或Java語言編程,簡單易用且適用面廣[14~15]。Arduino 可以直接處理各種傳感器接收的電子信號,并將其轉(zhuǎn)換為計算機(jī)可以識別的數(shù)字信號“0”或者“1”,同樣也可以將計算機(jī)的數(shù)字信號輸入到相應(yīng)的引腳輸出口,是指成為驅(qū)動輸出元件動作的電子信號[16]。

在這里設(shè)定的躲避懸崖場景,并不同于傳統(tǒng)的防跌落機(jī)器人。傳統(tǒng)的防跌落機(jī)器人,對于機(jī)器人而言可能有很大的運(yùn)動空間,機(jī)器人可以毫無顧忌地進(jìn)行掉頭、轉(zhuǎn)向等動作,機(jī)器人在平臺上的運(yùn)動可以說是漫無方向性的,所需要顧忌的僅僅是在平臺邊緣的時候才需躲避邊緣、防止跌落。而長堤型賽道由于寬度和機(jī)器人自身寬度相差僅為10mm,換言之機(jī)器人兩邊與賽道各相距5mm。當(dāng)機(jī)器人行走在長堤型跑道上時,一方面要按照跑道的方向前進(jìn),另一方面還要隨時對于運(yùn)動情況作出判斷,采取相應(yīng)的動作姿態(tài)。因為前一個狀態(tài)的調(diào)整過程都有可能使機(jī)器人在某一方向上落于跑道下面,使機(jī)器人在行駛調(diào)姿過程中就跌落。所以機(jī)器人需要時刻通過傳感器的探測和數(shù)據(jù)采集,不斷調(diào)整機(jī)器人行駛狀態(tài),使機(jī)器人防止走空摔落。

3.2.1 機(jī)器人行走原理

其運(yùn)動結(jié)構(gòu)是前輪驅(qū)動方式,后兩輪是從動輪。其探測感知懸崖邊緣原理是在機(jī)器人前后左右輪四個方向上都安裝探測傳感器,當(dāng)機(jī)器人在實地上行走時,傳感器所反映的邏輯信號量為“1”;反之,當(dāng)機(jī)器人某個方向上處于懸空狀態(tài)時,傳感器所反映的邏輯信號量為“0”,這樣就能通過邏輯信號量的不同而知道機(jī)器人目前所處的環(huán)境狀態(tài)。

3.2.2 機(jī)器人狀態(tài)列表分析

在這里設(shè)置I3、I4、I5、I6 四個邏輯信號擬輸入接口分別對應(yīng)右前、左前、右后、左后四個方向上的傳感器。傳感器觸發(fā)情況、機(jī)器人小車行駛狀態(tài)及對應(yīng)行為策略表見表2。

3.2.3 主程序設(shè)計

int pin[4]={6,5,4,3};

byte value;

void setup(){

for(int i=0;i<3;i++)

{pinMode(pin[i],INPUT);} //對6,4,5,3 四個輸入引腳進(jìn)行定義

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);} //對5,6,9,10 四個輸出引腳進(jìn)行定義;5,6引腳和9,10引腳分別控制左右兩個直流電機(jī)

void loop(){

value=0;

for(int i=0;i<3;i++)

{value|=(digital Read(pin[i])<<i);}//依次讀取相關(guān)引腳值,并左移,再與新值作“或”運(yùn)算

switch(value)

{case 0x00:

stop();

break;

case 0x01:

while(!digitalRead(pin[2])&&!digitalRead(pin[3]))

{right();}

break;

…… //具體各對應(yīng)行為以及直行、左轉(zhuǎn)、右轉(zhuǎn)、停止、后退等子程序就不冗述

case 0x0F:

forward();

break;

default:

stop();}}

表2 傳感器觸發(fā)情況、機(jī)器人小車行駛狀態(tài)及對應(yīng)行為策略表

4 結(jié)語

在設(shè)定的長堤型賽道場景下,由于未知環(huán)境隨機(jī)性太強(qiáng),無法完整獲得環(huán)境信息,采用有限狀態(tài)機(jī)思想,通過多個傳感器信息整合后,精確感知各種情況,使機(jī)器人根據(jù)相應(yīng)的判斷,采取相應(yīng)的智能化動作,不僅將分布在不同位置、處于不同狀態(tài)的多傳感器所提供的局部的、不完整的信息量加以綜合,能夠?qū)崿F(xiàn)機(jī)器人多個傳感器觸發(fā)組合狀態(tài)的判斷,大大提高檢測效率;而且使多傳感器機(jī)器人程序編譯相對簡化,增強(qiáng)程序可讀性。

另外,有限狀態(tài)機(jī)(FSM)思想方法不僅適用于文中所例舉的數(shù)字量傳感器,而且可以將其使用范圍延伸到模擬量傳感器的信息融合,可以用“C++語言”的“map()”函數(shù),將模擬量傳感器所檢測的較大范圍內(nèi)的數(shù)值映射到比較小的區(qū)間和比較接近的數(shù)量(比如無線遙控手柄位置、顏色等,可以用map()函數(shù)映射得到的數(shù)值0、1、2來表示),這就可以通過模擬量和數(shù)字量的結(jié)合產(chǎn)生不同的觸發(fā)組合狀態(tài),只不過情況更加復(fù)雜一點(diǎn),可以在算法上面做一些修改,仍然可以應(yīng)用有限狀態(tài)機(jī)的思想原理,在這里就不再冗述了。

猜你喜歡
狀態(tài)機(jī)移動機(jī)器人編程
移動機(jī)器人自主動態(tài)避障方法
基于粒子濾波的欠驅(qū)動移動機(jī)器人多目標(biāo)點(diǎn)跟蹤控制
移動機(jī)器人路徑規(guī)劃算法綜述
基于Verilog 的有限狀態(tài)機(jī)編程方式及研究
FPGA狀態(tài)機(jī)綜合可靠性探究 ①
元征X-431實測:奔馳發(fā)動機(jī)編程
編程小能手
紡織機(jī)上誕生的編程
基于有限狀態(tài)機(jī)的交會對接飛行任務(wù)規(guī)劃方法
移動機(jī)器人技術(shù)的應(yīng)用與展望
合江县| 洛宁县| 永福县| 和硕县| 资中县| 论坛| 田阳县| 临安市| 林州市| 毕节市| 教育| 托克托县| 郁南县| 井研县| 仁化县| 荔浦县| 汉源县| 卫辉市| 平顶山市| 宝鸡市| 十堰市| 南汇区| 正定县| 浦县| 安泽县| 班玛县| 乡城县| 杭州市| 彭阳县| 诸城市| 固原市| 惠安县| 定边县| 定州市| 巴林左旗| 宜兴市| 塔河县| 沭阳县| 固阳县| 镇原县| 灵台县|