馬 鑫,吳銀川
(西安石油大學(xué) 陜西省油氣井測控技術(shù)重點實驗室,西安 710065)
石油管道巡檢工作是管道日常維護的重要環(huán)節(jié),國內(nèi)石油管線巡護以傳統(tǒng)人工巡檢為主,受人為和地理區(qū)域因素的影響,導(dǎo)致復(fù)雜地理環(huán)境下的管線以及人力無法達到區(qū)域的場所,巡檢困難[1]。隨著科技的發(fā)展和人類探索空間的擴大,機器人技術(shù)的應(yīng)用更為廣泛,設(shè)計出對地形適應(yīng)能力強的機器人日益重要[2]。在智能機器人領(lǐng)域中,應(yīng)用于陸地工作的移動機器人主要包括履帶式機器人、輪式機器人和足式機器人等。根據(jù)以往的研究表明,輪式機器人在較為平坦的地形上行駛時,比足式、履帶式機器人具有移動速度迅速,移動平穩(wěn),控制簡單的優(yōu)勢,但在崎嶇地面移動時,這些能力就會大打折扣,而履帶式移動方式雖然在崎嶇地面也能行走,但是這種方式無法適應(yīng)環(huán)境多變的一些特殊場景。前兩者因其操作簡單、移動速度快等優(yōu)點,主要用于地形較為平坦的區(qū)域;足式機器人因為具有立足點離散、運動方式靈活多變等優(yōu)勢,適用于具有非線性結(jié)構(gòu)化特點的真實場景[3]。
為了使六足機器人各肢體能更好地協(xié)調(diào),以及使六足機器人能更好地適應(yīng)石油管道巡檢中各種復(fù)雜環(huán)境,需要對其步態(tài)、控制系統(tǒng)進行分析和設(shè)計。因此,本文設(shè)計了一種六足機器人控制系統(tǒng),以STM32F103RCT6作為主控板,采用舵機驅(qū)動板控制機器人移動,配置傳感器模塊,從而實現(xiàn)石油管道智能巡檢。
本設(shè)計腿部機械結(jié)構(gòu)如圖1所示,圖1中機器人共有六條腿,中間紅色區(qū)域作為機器人主體可裝置各類傳感器和機器人電路系統(tǒng),機器人每條腿都由3個舵機組成,分別形成六足機器人的髖關(guān)節(jié)、膝關(guān)節(jié)和踝關(guān)節(jié),其中1、4、7、10、13、16號舵機為六足機器人髖關(guān)節(jié),2、5、8、11、14、17號舵機為機器人膝關(guān)節(jié),3、6、9、12、15、18號舵機為機器人踝關(guān)節(jié),髖關(guān)節(jié)主要負責(zé)機器人腿部的轉(zhuǎn)動,膝關(guān)節(jié)和踝關(guān)節(jié)負責(zé)機器人腿的抬升運動,膝關(guān)節(jié)和踝關(guān)節(jié)之間采用弧形連接件形成機器人的大腿,弧形結(jié)構(gòu)可以有效地增強大腿抵抗外力的強度,踝關(guān)節(jié)與地面之間同樣采用弧形連接件形成小腿,這樣可以使機器人在移動過程中保持平穩(wěn)。這種機械結(jié)構(gòu)具有結(jié)構(gòu)簡單、行走平穩(wěn)等特點,相對于傳統(tǒng)的輪式和履帶式移動方式,這種機械結(jié)構(gòu)更適合在復(fù)雜環(huán)境中移動[4]。
圖1 六足機器人正視圖Fig.1 Front view of hexapod robot
本設(shè)計共分為主控板、舵機驅(qū)動板、電源、降壓電路、舵機等部分,其中主控板采用STM32F103RCT6,舵機驅(qū)動板采用PCA9685,舵機型號采用MG996R舵機,電路系統(tǒng)框架圖如圖2所示。傳感器模塊通過采集外部信息,然后將采集到的數(shù)據(jù)信息通過數(shù)據(jù)接口反饋給主控板,主控板根據(jù)傳感器模塊反饋回來的數(shù)據(jù)判斷外部環(huán)境是否適合機器人行走,接著電源模塊通過降壓電路給舵機驅(qū)動板提供穩(wěn)壓電壓,主控板通過I2C接口控制舵機驅(qū)動板,然后舵機驅(qū)動板通過PWM控制舵機轉(zhuǎn)動,從而使機器人移動。
圖2 電路系統(tǒng)框架Fig.2 Circuit system framework
本文設(shè)計的六足機器人主要包括以下模塊:STM32F103系列主控板、舵機驅(qū)動板、電源模塊、傳感器模塊,其中舵機驅(qū)動板采用PCA9685?,F(xiàn)對六足機器人驅(qū)動部分闡述如下:
舵機驅(qū)動采用舵機驅(qū)動板控制,舵機驅(qū)動板與控制板串口連接如圖3所示。驅(qū)動板與主控板之間采用I2C方式通信,OE引腳連接主控板PC5接口,低電平使能有效,I2C通信總線由數(shù)據(jù)線SDA和時鐘線SCL構(gòu)成。當I2C總線處于空閑狀態(tài)時,數(shù)據(jù)線SDA和時鐘線SCL均為高電平。
圖3 主控板與驅(qū)動板接口Fig.3 Interface between main control board and driver board
I2C通信過程由開始、發(fā)送、響應(yīng)、接收、停止5個部分組成,I2C通信時序如圖4所示。在開始信號之后,主控板發(fā)送開始信號。當時鐘線SCL處于低電平時,數(shù)據(jù)線SDA允許改變數(shù)據(jù);當時鐘線SCL處于高電平時,數(shù)據(jù)線SDA不能改變數(shù)據(jù)[5]。在I2C通信協(xié)議中,一個時鐘周期只能傳輸1bit數(shù)據(jù),數(shù)據(jù)傳輸8個時鐘周期后,在第9個時鐘周期內(nèi),舵機驅(qū)動板將數(shù)據(jù)線SDA變?yōu)榈碗娖剑⑶耶a(chǎn)生一個應(yīng)答信號給主控板。若在第9個時鐘周期內(nèi),時鐘線SCL為高電平,數(shù)據(jù)線SDA未被主控板檢測到為低電平時,則視為舵機驅(qū)動板沒有產(chǎn)生應(yīng)答信號,表明數(shù)據(jù)傳輸失敗,然后舵機驅(qū)動板釋放數(shù)據(jù)線SDA以使主控板繼續(xù)傳輸數(shù)據(jù),如果主控板發(fā)送停止信號,則此次數(shù)據(jù)傳輸結(jié)束[6]。
圖4 I2C通信時序Fig.4 I2C Communication timing
本設(shè)計所需18個舵機,且1個驅(qū)動板只有16個舵機接口,因此通過采用兩個驅(qū)動板串聯(lián)的方式使驅(qū)動板與舵機連接,驅(qū)動板與舵機連接方式如圖5所示。驅(qū)動板與每一個舵機連接都需要3根線,分別是電源線VCC、控制線PWM和地線GND,其中控制線用來輸出PWM脈沖。驅(qū)動板通過PWM線向舵機配置脈沖從而控制舵機轉(zhuǎn)動,舵機轉(zhuǎn)動的角度和控制線配置PWM脈沖的寬度成正比。因此,通過I2C總線協(xié)議,使兩個舵機驅(qū)動板可以產(chǎn)生18路PWM脈沖,從而控制六足機器人移動[7]。
圖5 驅(qū)動板與舵機接口Fig.5 Interface between drive board and steering gear
六足機器人整個驅(qū)動部分是由兩塊舵機驅(qū)動板串聯(lián)而成,在實際中,每塊舵機驅(qū)動板都有1個確定的控制命令,每塊驅(qū)動板的控制命令都由4部分組成:驅(qū)動板地址、舵機地址、脈寬起始地址LED_ON、脈寬結(jié)束地址LED_OFF。舵機驅(qū)動板控制命令格式為:
驅(qū)動板地址(1個字節(jié))+舵機地址(1個字節(jié))+脈寬起始值on(2個字節(jié))+脈寬結(jié)束值off(2個字節(jié))。
驅(qū)動板地址共有8位,其中最高地址位固定為1,最低位為W/R讀寫模式選擇,第二位到第七位地址位由驅(qū)動板外接電平確定。當寫入程序時,第一個舵機驅(qū)動板地址的最高位不變,其余7個地址位為0。不同的是,第二個舵機驅(qū)動板的第6個地址位為1。因此,第一個舵機驅(qū)動板的器件地址為0x80,第二個舵機驅(qū)動板的器件地址為0x84。一個舵機驅(qū)動板上可以控制16個舵機通道,每個通道的地址設(shè)置為0x00、...、0x0F。
每個PWM通道有4個寄存器LEDn_ON_H、LEDn_ON_L、LEDn_OFF_H、LED_OFF_L,舵機驅(qū)動板通過采用控制PWM脈沖寬度的方式來控制舵機旋轉(zhuǎn)的角度,關(guān)系如圖6所示,寄存器LEDn_ON_H和LED_ON_L控制輸出脈沖寬度的起始值on,LEDn_OFF_H和LEDn_OFF_L控制輸出脈沖寬度的結(jié)束值off。由于舵機驅(qū)動板的分辨率為12位,所以脈沖寬度起始值on和結(jié)束值off的范圍為0~4095,其中脈沖寬度起始值on設(shè)置為0,并且一般舵機只能旋轉(zhuǎn)180°,接收PWM的頻率為50Hz,則有舵機角度與輸入脈沖時間對應(yīng) :0°-0.5ms、45°-1.0ms、90°-1.5ms、135°-2.0ms、180°-2.5ms,角度φ與脈沖寬度結(jié)束值off的關(guān)系如式(1)所示:
圖6 舵機PWM脈寬Fig.6 Servo PWM pulse width
以舵機驅(qū)動板1為例,使其中舵機1旋轉(zhuǎn)60°,則off為239,十六進制為0x00ef,則其命令格式為:0x80(驅(qū)動板地址)+0x00(舵機地址)+0x0000(脈寬起始值)+0x00ef(脈寬結(jié)束值)。
目前,常見的六足機器人步態(tài)主要有三角步態(tài)和四足步態(tài)、五足步態(tài)。四足步態(tài)為機器人在任意時刻的狀態(tài)均為四足支撐,同時機器人的兩側(cè)各有一足向前擺動;五足步態(tài)是將六足機器人的六條腿按照順序依次前進,每次只有一條腿移動,另外五條腿支撐機器人;三角步態(tài)也稱交替三角步態(tài),由機器人一側(cè)的前足、后足和另外一側(cè)的中足構(gòu)成兩組交替擺動,三角步態(tài)是自然界中多數(shù)昆蟲最常使用的一種步態(tài),也被譽為最快速有效的靜態(tài)穩(wěn)定步態(tài)。由于四足步態(tài)的速度比三足步態(tài)快,五足步態(tài)在3種步態(tài)里面是最穩(wěn)定的,但是由于四足步態(tài)在機器人移動過程中穩(wěn)定性較差,五足步態(tài)在機器人移動過程中移動速度較慢,而且三角步態(tài)的移動模式簡單,速度和穩(wěn)定性適中,因此非常適合步行架構(gòu)的機器人的直線行走[8]。本文設(shè)計的六足機器人采用三角步態(tài)進行移動,以機器人前進為例,具體的步態(tài)分解如圖7所示。
圖7 機器人前進步態(tài)分解圖Fig.7 Decomposition diagram of robot's forward gait
六足機器人移動時將6個腿部分為兩個組,其中左側(cè)前腿(a)、右側(cè)中腿(d)、左側(cè)后腿(e)組成第一組,右側(cè)前腿(b)、左側(cè)中腿(c)、右側(cè)后腿(f)組成第二組。當機器人前進時,首先處于靜止站立狀態(tài),接著左側(cè)前腿(a)、右側(cè)中腿(d)、左側(cè)后腿(e)抬起、向前轉(zhuǎn)動,然后右側(cè)前腿(b)、左側(cè)中腿(c)、右側(cè)后腿(f)向后轉(zhuǎn)動,同時左側(cè)前腿(a)、右側(cè)中腿(d)、左側(cè)后腿(e)落下,接著左側(cè)前腿(a)、右側(cè)中腿(d)、左側(cè)后腿(e)恢復(fù)原來的角度,并且右側(cè)前腿(b)、左側(cè)中腿(c)、右側(cè)后腿(f)抬起、向前轉(zhuǎn)動,然后右側(cè)前腿(b)、左側(cè)中腿(c)、右側(cè)后腿(f)落下,并且左側(cè)前腿(a)、右側(cè)中腿(d)、左側(cè)后腿(e)向后轉(zhuǎn)動,最后所有腿恢復(fù)靜止站立狀態(tài)。
編寫機器人主程序時,除了編寫主程序外,還需要編寫子程序,包括機器人的前進、后退、轉(zhuǎn)彎、避障等程序。在對機器人進行程序編寫時,首先進行系統(tǒng)初始化,包括I2C串口配置、GPIO的配置、舵機驅(qū)動板的地址分配等。初始化后,傳感器模塊傳輸數(shù)據(jù),接著對接收到的數(shù)據(jù)進行判斷,最后通過控制占空比調(diào)節(jié)機器人關(guān)節(jié)角度,從而控制機器人移動[9]。以機器人避障程序為例,其避障程序流程圖如圖8所示。當機器人進行避障時,首先傳感器對機器人前方進行檢測,若機器人前方有障礙物時,則判斷障礙物與機器人之間的距離與安全距離的大小,若實際距離小于安全距離,機器人左轉(zhuǎn),從而避開前方障礙物[10]。
圖8 避障程序流程圖Fig.8 Obstacle avoidance program flowchart
本設(shè)計選擇STM32F103RCT6作為主控板,PCA9685作為舵機驅(qū)動板,MG996R直流伺服舵機作為關(guān)節(jié)驅(qū)動,通過在PCA9685上控制脈沖寬度(PWM)來使舵機進行轉(zhuǎn)動,從而操縱機器人進行移動。在安裝機器人腿部關(guān)節(jié)時,需要調(diào)整舵機的角度以保證機器人移動過程中不會因為動作進行的順序發(fā)生碰撞,以保證機器人調(diào)試順利。等機器人的控制程序錄入后,通過在實驗室測試,測得機器人正常移動速度為2m/min,最小轉(zhuǎn)彎半徑為10cm,超聲波有效測量距離為2m。
通過在實驗室測試發(fā)現(xiàn),機器人在地面可以穩(wěn)定行走,并且在行走過程中可以有效地躲避前方障礙物,以及可以對周圍環(huán)境進行正常測量,但是機器人爬坡能力和避障能力還有待提高,且機器人控制方法可以進一步優(yōu)化,后續(xù)還可以搭配其他傳感器以及攝像頭模塊,使機器人系統(tǒng)可以更好地適應(yīng)石油巡檢管線環(huán)境。