版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
6.1主要應(yīng)用背景
6.2技術(shù)原理
6.3實(shí)踐操作與步驟全世界已有為數(shù)較多的機(jī)器人在運(yùn)行,機(jī)器人行業(yè)已成為一個(gè)很有發(fā)展前景的行業(yè),對(duì)國民經(jīng)濟(jì)和人們生活的各個(gè)方面已產(chǎn)生重要影響。在眾多智能化機(jī)器人中,智能車輛可以稱得上是一項(xiàng)最早走出實(shí)驗(yàn)室的實(shí)用發(fā)明,是未來重要的發(fā)展方向。智能車輛可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)運(yùn)作,不需要人為管理。智能循跡車是目前智能車輛研究的熱點(diǎn),這種車輛的實(shí)現(xiàn)需要計(jì)算機(jī)、嵌入式軟件及數(shù)字技術(shù)等的有機(jī)結(jié)合,也需要跨學(xué)科(通信、電子、計(jì)算機(jī)等)的設(shè)計(jì)能力。本章主要從技術(shù)原理和實(shí)踐操作角度對(duì)智能循跡車進(jìn)行描述,通過介紹基于STM32微控制器和基于樹莓派的智能循跡小車的技術(shù)原理,以及基于樹莓派的智能小車的實(shí)踐操作,使讀者對(duì)智能循跡車有一個(gè)大致的了解。通過構(gòu)建智能小車系統(tǒng),可以培養(yǎng)讀者設(shè)計(jì)并實(shí)現(xiàn)自動(dòng)控制系統(tǒng)的能力。在實(shí)踐過程中,熟悉如何設(shè)計(jì)小車的外圍電路,如何采用智能控制算法實(shí)現(xiàn)小車的智能循跡。通過靈活運(yùn)用相關(guān)學(xué)科的理論知識(shí),并動(dòng)手進(jìn)行實(shí)際操作,達(dá)到理論和實(shí)踐的統(tǒng)一,在此過程中,逐步加深對(duì)智能循跡車的理解和認(rèn)識(shí)。6.1主要應(yīng)用背景車輛作為一種簡單高效的運(yùn)載工具,兼顧機(jī)動(dòng)性與靈活性,非常適合用來制作可移動(dòng)式機(jī)器人。在小車上安裝控制電路與傳感器,再輔以電機(jī)驅(qū)動(dòng),它就從一輛普通小車進(jìn)化成了一輛智能小車。隨著智能化技術(shù)的發(fā)展,全國電子競賽與各省電子競賽幾乎每次都有智能小車方面的題目,比如飛思卡爾智能車競賽。全國各大高校也都重視智能小車項(xiàng)目的研究,可見智能小車具有較大的研究意義。智能小車的主要應(yīng)用場所有很多,比如,在倉儲(chǔ)業(yè)、制造業(yè)中,智能小車可用作無人搬運(yùn)車;在石油化工領(lǐng)域,智能小車可用于檢測工業(yè)管道中存在的損傷、裂紋等問題;在特種行業(yè)中,智能小車可用于災(zāi)難救援、排爆滅火等;在軍事方面,智能小車能較隱蔽地完成監(jiān)視、安全巡邏等軍事任務(wù)。智能小車能夠?qū)崟r(shí)顯示時(shí)間、速度、里程,具有自動(dòng)尋跡、尋光、避障功能,可控行駛速度、準(zhǔn)確定位停車,并具有遠(yuǎn)程傳輸圖像等功能,常見的智能小車如圖6.1所示。世界上許多國家都在如火如荼地進(jìn)行智能車輛的研究和開發(fā)。第一臺(tái)智能小車是由斯坦福研究院(SRI)的NilsNi-ssen和Charlenrosen等人在1972年研制而成的,并取名為Shakey,如圖6.2所示。20世紀(jì)50年
代
開
始,美
國
等
發(fā)
達(dá)
國
家
著
手
進(jìn)
行
智
能
車
輛
的
研
究,1954年
美
國BarrettElectronics公司研究開發(fā)了世界上第一臺(tái)自主引導(dǎo)車系統(tǒng)AGVS,如圖6.3所示。20世紀(jì)90年代開始,智能車輛進(jìn)入了深入、系、大規(guī)模的研究階段。我國開展智能車輛方面的技術(shù)研究較晚,開始于20世紀(jì)80年代。雖然我國在智能車輛技術(shù)方面的研究總體上落后于發(fā)達(dá)國家,并且存在一定程度的技術(shù)差距,但是我們也取得了一系列的成果,主要有:(1)2003年,由中國第一汽車集團(tuán)公司和國防科學(xué)技術(shù)大學(xué)歷時(shí)一年半合作研制的紅旗CA7460自主駕駛轎車在湖南長沙試驗(yàn)成功,這標(biāo)志著我國第一輛自主駕駛轎車的誕生。(2)南京理工大學(xué)、北京理工大學(xué)、浙江大學(xué)、國防科技大學(xué)、清華大學(xué)等多所院校聯(lián)合研制了7B.8軍用室外自主車,該車裝有彩色攝像機(jī)、激光雷達(dá)、陀螺慣導(dǎo)定位等傳感器。6.2技
術(shù)
原
理6.2.1系統(tǒng)硬件組成1.STM32微控制器智能小車智能小車控制系統(tǒng)將采集到的傳感器信號(hào)送入STM32微控制器中,STM32微控制器根據(jù)采集到的信號(hào)做出不同的判斷,從而控制小車的運(yùn)動(dòng)方向和運(yùn)動(dòng)速度。1)主控板STM32F103C8T6是ST旗下一款常用的基于Cortex-M3內(nèi)核的微控制器,具有執(zhí)行代碼效率高、外設(shè)資源豐富等眾多優(yōu)點(diǎn)。該系列微控制器的工作頻率設(shè)定在72MHz,內(nèi)置高達(dá)128KB的內(nèi)置Flash存儲(chǔ)器和20KB的SRAM,具有豐富的通用I/O端口及時(shí)鐘電路、復(fù)位電路和電源管理。存儲(chǔ)器根據(jù)控制器指定的位置存進(jìn)和取出信息。STM32微控制器內(nèi)部結(jié)構(gòu)如圖6.4所示。STM32微控制器主系統(tǒng)主要由4個(gè)驅(qū)動(dòng)單元和4個(gè)被動(dòng)單元構(gòu)成。4個(gè)驅(qū)動(dòng)單元是:通用DMA1、通用DMA2、內(nèi)核DCode總線和ICode系統(tǒng)總線。4個(gè)被動(dòng)單元是:AHB到APB的橋,連接所有的APB設(shè)備、內(nèi)部flash閃存、內(nèi)部SRAM、FSMC,它們通過一個(gè)多級(jí)的AHB總線相互連接。2)紅外傳感器循跡模塊紅外傳感器主要由紅外發(fā)射管、紅外接收管和部分電路組成。要做到4路循跡,則需要使用4個(gè)獨(dú)立的紅外傳感器。紅外傳感器模塊實(shí)物如圖6.5所示,紅外傳感器模塊電路如圖6.6所示。3)其他傳感器其他傳感器如火焰識(shí)別傳感器等,其工作原理為:火焰的熱輻射具有離散光譜的氣體輻射和連續(xù)光譜的固體輻射,不同燃燒物的火焰輻射強(qiáng)度、波長分布有所差異,但總體來說,燃燒物對(duì)應(yīng)火焰溫度的1~2μm近紅外波長域有最大的輻射強(qiáng)度?;鹧孀R(shí)別傳感器是機(jī)器人專門用來搜尋火源的傳感器,它利用自身對(duì)紅外線十分敏感的特點(diǎn),將火焰的亮點(diǎn)轉(zhuǎn)化成高度變化的電平信號(hào),輸入到處理器中?;鹧孀R(shí)別傳感器如圖6.7所示。4)驅(qū)動(dòng)單元通常智能小車的驅(qū)動(dòng)單元會(huì)選擇小型電機(jī),其中電機(jī)可分為無刷電機(jī)和有刷電機(jī)。相對(duì)而言,無刷電機(jī)擁有更好的性能,因?yàn)闊o刷電機(jī)沒有損耗,并且噪聲比較小。除此之外,電機(jī)的轉(zhuǎn)速對(duì)車輛的行進(jìn)速度至關(guān)重要。以正常成年人為例,其走路的速度為4~5km/h,大約為1m/s。如果選擇常規(guī)的直徑為4.2cm左右的輪胎,其
周
長=0.042×3.14=0.13188m,那
么
走1m的距離需要轉(zhuǎn)7.58圈,也就是每秒轉(zhuǎn)7.58圈,其速度為455轉(zhuǎn)/min。目前市場上售賣的電機(jī)均能實(shí)現(xiàn)每秒萬轉(zhuǎn)的速度,因此在設(shè)計(jì)循跡小車時(shí),必須增加減速箱來達(dá)成400~500轉(zhuǎn)的速度目標(biāo)。常見驅(qū)動(dòng)單元如圖6.8所示。5)驅(qū)動(dòng)板驅(qū)動(dòng)板是一種集成了多種功能的電路板,用于控制智能小車的運(yùn)動(dòng)和操作。不同的驅(qū)動(dòng)板有著不同的功能,驅(qū)動(dòng)板通常負(fù)責(zé)電力提供、傳感器接口、數(shù)據(jù)存儲(chǔ)、處理器承載、播放器功能等。圖6.9所示為市場上某款驅(qū)動(dòng)板的多重功能接口。6)紅外避障模塊常見的紅外避障模塊如圖6.10所示,紅外避障模塊與傳感器之間的連線如圖6.11所示。2.基于樹莓派控制智能小車樹莓派是RaspberryPi基金會(huì)開發(fā)的一款微型電腦,是專為學(xué)習(xí)使用而設(shè)計(jì)的。它是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內(nèi)存硬盤,卡片主板周圍有1/2/4個(gè)USB接口和一個(gè)10/100以太網(wǎng)接口(A型沒有網(wǎng)口),可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時(shí)擁有視頻模擬信號(hào)的電視輸出接口和HDMI高清視頻輸出接口。以上部件全部整合在一張僅比信用卡稍大的主板上,具備所有PC的基本功能,只需接通電視機(jī)和鍵盤,就能執(zhí)行如處理電子表格、處理文字、玩游戲、播放高清視頻等諸多功能。RaspberryPiB款只提供電腦主板,無內(nèi)存、電源、鍵盤、機(jī)箱或連線,可以把它看作只有信用卡大小的微型電腦,適配的系統(tǒng)為Linux發(fā)行版。智能小車的構(gòu)成如下:(1)小車底板(2個(gè))、電機(jī)(4個(gè))、車輪(4個(gè))、杜邦線、銅柱、螺絲若干。(2)超聲波傳感器(1個(gè)),舵機(jī)(1個(gè))。(3)循跡傳感器(3個(gè))。(4)避障傳感器(2個(gè),左右)。(5)USB攝像頭(1個(gè)),舵機(jī)(2個(gè))。(6)樹莓派4B主控板(2G版本)(1個(gè))。(7)樹莓派擴(kuò)展板(1個(gè))。(8)電池(1個(gè))。(9)電壓顯示模塊(1個(gè))。(10)四輪驅(qū)動(dòng)模塊。四輪驅(qū)動(dòng)模塊的作用是驅(qū)動(dòng)四個(gè)電機(jī)帶動(dòng)小車完成循跡的運(yùn)動(dòng)任務(wù),其包含的控制內(nèi)容有車輛的速度、車輛的狀態(tài)(正轉(zhuǎn)、反轉(zhuǎn)、停止),并且管理電機(jī)的供電部分。圖6.12所示為本文使用的樹莓派四輪驅(qū)動(dòng)板。其中包含了2個(gè)輸出口、板載5V供電和12V供電、供電管理、邏輯輸入口、2個(gè)通道。該驅(qū)動(dòng)板可驅(qū)動(dòng)2路直流電機(jī),使能端ENA、ENB為高電平時(shí)有效,不同控制方式及直流電機(jī)狀態(tài)如表6.1所示.若要對(duì)直流電機(jī)進(jìn)行PWM調(diào)速,需設(shè)置IN1和IN2,確定電機(jī)的轉(zhuǎn)動(dòng)方向。然后對(duì)使能端輸出PWM脈沖,即可實(shí)現(xiàn)調(diào)速。注意當(dāng)使能信號(hào)為0時(shí),電機(jī)處于自由停止?fàn)顟B(tài);當(dāng)使能信號(hào)為1,且IN1和IN2為00或11時(shí),電機(jī)處于制動(dòng)狀態(tài),阻止電機(jī)轉(zhuǎn)動(dòng)。6.2.2系統(tǒng)工作原理1.智能小車的循跡智能循跡小車系統(tǒng)最關(guān)鍵的核心在于判定興建的路線,該功能通常借助外界已經(jīng)給定的軌跡進(jìn)行。常見的軌跡標(biāo)識(shí)有循跡指示線、交通標(biāo)識(shí)、交通道路、指示激光等,如圖6.13~圖6.16所示這些方式在本質(zhì)上都是通過人工的方式構(gòu)建準(zhǔn)確有效、可以通過的道路,主動(dòng)式地生成路線,隨后讓承載接收器的小車被動(dòng)進(jìn)行循跡活動(dòng)。智能小車的循跡方法主要有以下三種:第一種是紅外循跡法,主要依靠小車的紅外探測器實(shí)現(xiàn)。紅外探測器主要由紅外發(fā)射器和紅外接收器組成,其原理是紅外發(fā)射器發(fā)射的紅外光經(jīng)地面反射,黑色區(qū)域的紅外光被吸收,非黑色區(qū)域的紅外光被反射,使得紅外接收器接收到的紅外反射不同,改變其輸出電平,從而判斷黑線所在。第二種是攝像頭循跡法,利用攝像頭讀取車道信息,其獲取的圖像分為模擬信號(hào)和數(shù)字信號(hào)。第三種是激光循跡法,此種方法也是利用了黑色和其他顏色對(duì)紅外線的吸收作用不同,但相較于紅外循跡法檢測的距離更遠(yuǎn)。2.超聲波避障超聲波是一種頻率比較高的聲音,指向性很強(qiáng)。超聲波測距的原理是利用超聲波在空氣中的傳播速度已知,測量聲波在發(fā)射后遇到障礙物反射回來的時(shí)間,根據(jù)發(fā)射和接收的時(shí)間差計(jì)算出發(fā)射點(diǎn)到障礙物的實(shí)際距離。測距的公式為L=C×T其中,L是測量距離的長度,C是超聲波在空氣中的傳播速度,T是測量距離傳播的時(shí)間差,也就是發(fā)射到接收時(shí)間數(shù)值的一半。小車中的超聲波避障實(shí)物如圖6.17所示。本實(shí)驗(yàn)所使用的超聲波模塊的簡明工作原理如下:(1)給超聲波模塊接入電源和地(供電)。(2)給單片機(jī)的觸發(fā)引腳(trig)輸入一個(gè)時(shí)長為20μs的高電平。(3)模塊會(huì)自動(dòng)發(fā)射8個(gè)40kHz的聲波,同時(shí)回波引腳(echo)端的電平會(huì)由0變?yōu)?(此時(shí)應(yīng)該啟動(dòng)定時(shí)器計(jì)時(shí))。(4)當(dāng)超聲波返回被模塊接收到時(shí),回波引腳端的電平會(huì)由1變?yōu)?(此時(shí)應(yīng)該停止定時(shí)器計(jì)數(shù)),定時(shí)器記下的這個(gè)時(shí)間即為超聲波由發(fā)射到返回的總時(shí)長。(5)根據(jù)聲音在空氣中的速度(340m/s)即可計(jì)算出所測的距離。3.舵機(jī)模塊的設(shè)計(jì)實(shí)現(xiàn)舵機(jī)簡單地說就是集成了直流電機(jī)、電機(jī)控制器和減速器等,并將其封裝在一個(gè)便于安裝的外殼里的伺服單元。該單元可以有效地利用極簡的輸入信號(hào)實(shí)現(xiàn)電機(jī)轉(zhuǎn)動(dòng)。舵機(jī)上安裝了一個(gè)電位器(或其他角度傳感器),可檢測輸出軸轉(zhuǎn)動(dòng)的角度,控制板根據(jù)電位器的信息能比較精確地控制和保持輸出軸的角度。舵機(jī)的主體結(jié)構(gòu)如圖6.18所示,主要組成部分有外殼(包括上殼、中殼和下殼)、齒輪組、電機(jī)、控制電路。其工作原理是:控制電路接收信號(hào)源發(fā)出的控制信號(hào),并驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng);齒輪組將電機(jī)的速度進(jìn)行倍速縮小,并將電機(jī)的輸出扭矩進(jìn)行倍速擴(kuò)大,然后輸出;電位器和齒輪組的末級(jí)一起轉(zhuǎn)動(dòng),測量舵機(jī)軸轉(zhuǎn)動(dòng)的角度;電路板檢測信號(hào)并根據(jù)電位器判斷舵機(jī)轉(zhuǎn)動(dòng)的角度,然后控制舵機(jī)轉(zhuǎn)動(dòng)到目
標(biāo)
角
度
或
保
持
在
目
標(biāo)
角
度。圖6.19所示為輸入的信號(hào)控制舵機(jī)臂變動(dòng)的過程簡圖。6.3實(shí)踐操作與步驟為了更好地展示智能小車的循跡原理和設(shè)計(jì),首先介紹常見的“樹莓派”套件完成的智能循跡小車。6.3.1實(shí)驗(yàn)環(huán)境相對(duì)于單片機(jī),樹莓派的開發(fā)群體更加廣泛,讀者在使用本章節(jié)基于樹莓派開發(fā)的智能小車后尚可使用該開發(fā)板進(jìn)行其他章節(jié)功能的實(shí)現(xiàn)。實(shí)驗(yàn)環(huán)境如表6.2所示。6.3.2實(shí)驗(yàn)代碼1.實(shí)驗(yàn)代碼下載地址代碼下載地址為:/undersail/easybot。2.代碼文件目錄結(jié)構(gòu)(1)代碼文件目錄結(jié)構(gòu)如下:(2).xml文件是已經(jīng)儲(chǔ)存好“紅綠燈行進(jìn)信息”的控制文件。其中的數(shù)據(jù)集文件包括:fullbody.xml,存放全部信息;stop_sign.xml,存放停止標(biāo)志;traffic_light.xml,存放交通燈信息處理。(3).py文件為本實(shí)驗(yàn)所需
的
執(zhí)
行
文
件:rc_driver.py,PC端
的
小
車
操
作
部
分;rc_control1.py,車輛控制信息;stream_client.py,相機(jī)傳媒信息;ultrasonic_client.py,超聲波控制信息。6.3.3實(shí)驗(yàn)步驟及結(jié)果1.導(dǎo)入相關(guān)的庫RPi.GPIO是第三方對(duì)樹莓派40個(gè)引腳進(jìn)行控制的庫。RPi.GPIO中有兩種引腳編號(hào)方式。第一種是使用電路板編號(hào)系統(tǒng),這在樹莓派電路板上是以P1開頭的。使用這種編號(hào)系統(tǒng)的優(yōu)勢是:不管電路板是哪種版本的,都不需要重新修改代碼。第二種是使用BCM數(shù)字編號(hào)系統(tǒng),這是一種低水平的工作方式,也是一種常用的芯片引腳編號(hào)方式。此部分關(guān)鍵代碼如下:這段代碼定義了一個(gè)名為″SingleMotor″的類,該類用于控制一個(gè)單個(gè)的直流電機(jī)。speed:電機(jī)的轉(zhuǎn)速,默認(rèn)值為35。freq:PWM信號(hào)的頻率,默認(rèn)值為50Hz。run_state:電機(jī)的運(yùn)行狀態(tài),默認(rèn)為″stop″。PWM:控制電機(jī)的PWM信號(hào)輸出引腳。IN1:控制電機(jī)正轉(zhuǎn)的GPIO輸出引腳。IN2:控制電機(jī)反轉(zhuǎn)的GPIO輸出引腳。Motor:保存PWM控制器的實(shí)例,如果未使用PWM控制電機(jī),則為None。在構(gòu)造函數(shù)中,使用GPIO.setup()函數(shù)設(shè)置IN1和IN2為輸出引腳。如果PWM不為None,則使用GPIO.setup()函數(shù)設(shè)置PWM為輸出引腳,創(chuàng)建一個(gè)名為″Motor″的PWM控制器實(shí)例,并通過調(diào)用start()方法啟動(dòng)PWM控制器。″SingleMotor″類可以通過修改speed屬性來控制電機(jī)的轉(zhuǎn)速,并通過修改run_state屬性來控制電機(jī)的運(yùn)行狀態(tài)(″stop″″forward″″backward″)。如果PWM不為None,則可以使用PWM控制器來實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)速的控制?!錝ingleMotor″類中設(shè)置電機(jī)轉(zhuǎn)速的代碼如下:該方法中有一個(gè)名為″speed″的參數(shù),表示要設(shè)置的電機(jī)速度,取值范圍為0~100。在方法的第一行,使用″if″語句判斷當(dāng)前是否使用PWM控制電機(jī),如果未使用,則返回當(dāng)前電機(jī)的運(yùn)行狀態(tài)″run_state″。″SingleMotor″類中控制電機(jī)正轉(zhuǎn)的代碼如下:在調(diào)用該方法時(shí),將電機(jī)的運(yùn)行狀態(tài)″run_state″設(shè)置為″up″,表示電機(jī)正在正轉(zhuǎn)。在方法的第二行和第三行中,使用GPIO.output()函數(shù)分別將電機(jī)的正轉(zhuǎn)引腳IN1設(shè)置為高電平、反轉(zhuǎn)引腳IN2設(shè)置為低電平、從而控制電機(jī)正轉(zhuǎn)。″SingleMotor″類中控制電機(jī)反轉(zhuǎn)的代碼如下:在調(diào)用該方法時(shí),將電機(jī)的運(yùn)行狀態(tài)″run_state″設(shè)置為″down″,表示電機(jī)正在反轉(zhuǎn)。在方法的第二行和第三行中,使用GPIO.output()函數(shù)分別將電機(jī)的正轉(zhuǎn)引腳IN1設(shè)置為低電平、反轉(zhuǎn)引腳IN2設(shè)置為高電平,從而控制電機(jī)反轉(zhuǎn)?!錝ingleMotor″類中控制電機(jī)停止的代碼如下:在調(diào)用該方法時(shí),將電機(jī)的運(yùn)行狀態(tài)″run_state″設(shè)置為″stop″,表示電機(jī)停止運(yùn)行。在方法的第二行和第三行中,使用GPIO.output()函數(shù)分別將電機(jī)的正轉(zhuǎn)引腳IN1和反轉(zhuǎn)引腳IN2都設(shè)置為低電平,從而控制電機(jī)停止?!錍arWheel″類用于控制智能小車的輪子(由左輪和右輪組成),其代碼如下:在類的構(gòu)造函數(shù)″init″中,定義了以下屬性:L_Wheel:左輪的″SingleMotor″實(shí)例。R_Wheel:右輪的″SingleMotor″實(shí)例。speed:小車的速度,默認(rèn)值為35。run_state:小車的運(yùn)行狀態(tài),默認(rèn)為″stop″。在構(gòu)造函數(shù)中,通過調(diào)用″set_speed″設(shè)置小車的速度,并將小車的運(yùn)行狀態(tài)設(shè)置為″stop″?!錍arWheel″類中控制小車左轉(zhuǎn)的代碼如下:在調(diào)用上述方法時(shí),將小車的運(yùn)行狀態(tài)″run_state″設(shè)置為″left″,表示小車正在左轉(zhuǎn)。在方法的第二行和第三行中,先調(diào)用左輪的″stop″停止左輪的運(yùn)行,然后調(diào)用右輪的″up″使右輪正轉(zhuǎn),從而控制小車左轉(zhuǎn)?!錍arWheel″類中控制小車右轉(zhuǎn)的代碼如下:在調(diào)用上述方法時(shí),將小車的運(yùn)行狀態(tài)″run_state″設(shè)置為″right″,表示小車正在右轉(zhuǎn)。在方法的第二行和第三行中,先調(diào)用左輪的″up″使左輪正轉(zhuǎn),然后調(diào)用右輪的″stop″停止右輪的運(yùn)行,從而控制小車右轉(zhuǎn)。2.超聲波避障部分的代碼實(shí)現(xiàn)在超聲波驅(qū)動(dòng)部分的實(shí)現(xiàn)代碼中,首先需要導(dǎo)入gpiozero庫,該庫最關(guān)鍵的功能是提供樹莓派GPIO設(shè)備的接口。gpiozero庫包含了許多常見元器件的接口,同時(shí)也支持復(fù)雜的元器件,如各種傳感器、模數(shù)轉(zhuǎn)換器、全彩LED燈、機(jī)器人套件以及更多的元器件和套件。通過使用gpiozero庫,用戶可以方便地控制樹莓派的GPIO設(shè)備,并實(shí)現(xiàn)各種有趣的項(xiàng)目,部分代碼如下:根據(jù)超聲波組件的使用功能對(duì)設(shè)備進(jìn)行控制的代碼如下:這段代碼使用gpiozero庫中的DistanceSensor類來創(chuàng)建一個(gè)名為″sensor″的距離傳感器實(shí)例,該實(shí)例使用GPIO引腳21和20連接到樹莓派上。3.舵機(jī)模塊部分的代碼實(shí)現(xiàn)首先在代碼中導(dǎo)入所需的庫(Adafruit_PCA9685),如圖6.20所示,Adafruit_PCA9685是一款用于控制樹莓派的16路PWM輸出的PCA9685庫。通過使用該庫,用戶可以輕松控制多個(gè)PWM設(shè)備,如舵機(jī)、電機(jī)、LED燈等。舵機(jī)控制代碼如下:這段代碼
導(dǎo)
入
了Adafruit_PCA9685庫、RPi.GPIO庫
和time庫,其
中Adafruit_PCA9685庫用于控制樹莓派的PCA9685PWM設(shè)備,RPi.GPIO庫
用
于
控
制
樹
莓
派
的GPIO引腳,time庫用于進(jìn)行與時(shí)間相關(guān)的操作?!錍arServo″為表示小車舵機(jī)控制器的類,其代碼如下:在類的構(gòu)造函數(shù)″init″中,定義了以下屬性:pwm_pca9685:用于控制舵機(jī)的PCA9685PWM設(shè)備實(shí)例。servo:字典類型的變量,用于存儲(chǔ)各個(gè)舵機(jī)的信息。在構(gòu)造函數(shù)中,通過調(diào)用″set_pwm_freq″設(shè)置舵機(jī)PWM設(shè)備的頻率為50Hz;然后通過調(diào)用″set_servo_angle″依次設(shè)置3個(gè)舵機(jī)的初始角度,分別是攝像頭舵機(jī)1、攝像頭舵機(jī)2和超聲波舵機(jī)。″set_servo_angle″用于設(shè)置指定舵機(jī)的角度,該方法接收兩個(gè)參數(shù),分別是channel和angle,其中channel表示舵機(jī)的通道號(hào),angle表示設(shè)置的角度值,其代碼如下:在調(diào)用上述方法時(shí),首先進(jìn)行參數(shù)檢查,確保通道號(hào)在0~2的范圍內(nèi);然后將angle限制在0~180的范圍內(nèi);接著,根據(jù)新的角度值計(jì)算得到PCA9685PWM設(shè)備的實(shí)際數(shù)值date,并使用″set_pwm″方法將該值發(fā)送給舵機(jī),控制其轉(zhuǎn)動(dòng)到指定的角度;最后將舵機(jī)的角度信息保存在″servo″字典中。如果傳入的通道號(hào)不在0~2的范圍內(nèi),則會(huì)輸出錯(cuò)誤信息。4.車輛的循跡部分首先執(zhí)行導(dǎo)入庫的操作,其代碼如下:創(chuàng)建″getLaneCurve″函數(shù),用于從輸入的圖像中提取車道曲率信息。該函數(shù)接收一幅圖像作為輸入?yún)?shù),并通過調(diào)用″thresholding″將其轉(zhuǎn)換為二值圖像。轉(zhuǎn)換后的圖像將用于后續(xù)的車道線檢測和曲率計(jì)算,其代碼如下:這段代碼定義了一個(gè)名為″thresholding″的函數(shù),用于將輸入的彩色圖像轉(zhuǎn)換為二值圖像。該函數(shù)首先通過調(diào)用OpenCV庫中的″cvtColor″將輸入圖像從BGR顏色空間轉(zhuǎn)換為HSV顏色空間。然后通過設(shè)置白色閾值的上下限,使用″inRange″將輸入圖像中符合要求的像素值提取出來,生成一個(gè)二值圖像。最后將生成的二值圖像作為函數(shù)的返回值。通過這段代碼可以使用顏色或邊緣檢測來獲取路徑。由于本文使用的是普通的A4紙來鋪設(shè)道路,因此找到A4紙就意味著循跡成功,可以簡單地使用顏色檢測來找到路徑。根據(jù)代碼生成的Warped圖像(經(jīng)過透視變換后的圖像)如圖6.21所示。在生成透視變幻的Warped圖像后,還需找到路徑中的曲線,這時(shí)可以通過使用像素的總和來實(shí)現(xiàn)。由于生成的Warped圖像是二進(jìn)制的,即它具有黑色或白色像素,因此可以將y方向上的像素值相加,如圖6.22所示。在圖6.22中,顯示所有白色像素的數(shù)值為255,所有黑色像素的數(shù)值為0??梢詫⑦@種方法應(yīng)用于每一列,將每列的像素值相加求和,得到480個(gè)值。通過比較每個(gè)值與閾值,可以確定中心紅線的左右方向。例如,如果中心紅線的左側(cè)有1000個(gè)像素值高于閾值,那么可以確定曲線向左,即車輛向左行駛。在上述例子中,有8列在左側(cè),3列在右側(cè)?;谏鲜龈拍?圖6.23所示為根據(jù)像素多少判斷循跡路線這一方法的正常工作的三種情況。從圖中可以清晰地看到,當(dāng)曲線向右時(shí),右側(cè)的像素?cái)?shù)多于左側(cè),反之亦然。當(dāng)曲線為直線時(shí),兩側(cè)的像素?cái)?shù)大致相同。然而,在圖6.24中,該方法將會(huì)出現(xiàn)問題。此時(shí)智能循跡小車的路線是直線,由于中心線一側(cè)存在更多像素,算法也會(huì)將循跡路線輸出為左曲線或右曲線。如何解決這個(gè)問題?答案是調(diào)整中心線。調(diào)整中心線后的循跡效果如圖6.25所示。因此開始循跡之前必須先找到基礎(chǔ)圖片的中心,然后比較中心線兩邊的像素,這兩個(gè)過程都可以用同一個(gè)函數(shù)來計(jì)算,這個(gè)函數(shù)稱為″getHistogram″。通過對(duì)這些像素進(jìn)行求和,基本可以得到柱狀圖。″getHistogram″函數(shù)把圖像作為一個(gè)輸入?yún)?shù),并對(duì)y方向上的所有像素進(jìn)行求和,其代碼如下:這里的“histValues”包含每列總和的480個(gè)值。因?yàn)閳D像中的一些像素可能只是噪聲,所以不便在計(jì)算中使用。有兩種方法可以提高精度,其一是基于實(shí)時(shí)數(shù)據(jù)動(dòng)態(tài)確定這個(gè)閾值。這可以通過找到histValues中的最大值,并乘以用戶定義的百分比來實(shí)現(xiàn)。這樣得到的乘積將作為閾值,用于判斷哪些列的總和足夠大,其可能代表路徑,而非噪聲。另一種方法是設(shè)置硬編碼值,但硬編碼值最好根據(jù)實(shí)時(shí)數(shù)據(jù)獲取。在本例中,可找到最大總和值,并將用戶定義的百分比乘以最大總和值來創(chuàng)建閾值,其代碼如下:接下來將每邊的所有像素?cái)?shù)相加,找到左右或直線方向。為了得到曲率的值,可以找到所有超過閾值的列的像素值,然后計(jì)算這些像素值的平均值。這意味著如果像素值從30開始到300結(jié)束,平均值將是(300-30)/2+30=165。智能小車實(shí)驗(yàn)循跡結(jié)果如圖6.26所示。進(jìn)行閾值判斷的代碼如下:7.1背景介紹
7.2技術(shù)原理
7.3實(shí)踐操作與步驟深度學(xué)習(xí)的快速發(fā)展促進(jìn)了智能機(jī)器人和機(jī)器視覺技術(shù)的成熟。隨著越來越多的智能工業(yè)機(jī)器人和智能設(shè)備被研發(fā)并應(yīng)用于生產(chǎn)和生活,人工智能領(lǐng)域已經(jīng)不再局限于算法層面?,F(xiàn)如今,完整的人工智能機(jī)器人系統(tǒng)由人工智能決策算法、機(jī)器視覺系統(tǒng)和硬件機(jī)械設(shè)備組成,這也成為了人工智能領(lǐng)域的發(fā)展趨勢。智能五子棋機(jī)器人的發(fā)展可以劃分為以下三個(gè)階段:第一階段的智能五子棋機(jī)器人主要采用人工啟發(fā)式算法。這種算法基于人類的直覺或經(jīng)驗(yàn),在可接受的計(jì)算時(shí)間和空間范圍內(nèi)提供一個(gè)可行解,但該可行解與最優(yōu)解的偏差通常無法預(yù)測。雖然利用啟發(fā)式算法通??梢栽诳山邮艿挠?jì)算時(shí)間內(nèi)求取問題的可行解,但不能保證其為全局最優(yōu)解,并且該算法不穩(wěn)定,其性能取決于具體問題和設(shè)計(jì)者經(jīng)驗(yàn)。第二階段的智能五子棋機(jī)器人采用了蒙特卡羅樹搜索算法。該算法基于實(shí)驗(yàn)求解事件出現(xiàn)的概率或隨機(jī)變量的期望值,并將其作為問題的解。蒙特卡羅樹搜索算法通過數(shù)學(xué)模擬實(shí)驗(yàn),抓住事物運(yùn)動(dòng)的幾何數(shù)量和幾何特征,以概率模型為基礎(chǔ),模擬問題的過程,得到近似解。其解題流程可歸結(jié)為三個(gè)主要步驟:構(gòu)造或描述概率過程,實(shí)現(xiàn)從已知概率分布抽樣,建立各種估計(jì)量。蒙特卡羅樹搜索算法簡單快速,在智能五子棋機(jī)器人領(lǐng)域得到了廣泛的應(yīng)用。第三階段的智能五子棋機(jī)器人突破性地采用了機(jī)器學(xué)習(xí)算法,成功地戰(zhàn)勝了職業(yè)棋手。機(jī)器學(xué)習(xí)是一門關(guān)于計(jì)算機(jī)基于數(shù)據(jù)構(gòu)建模型,并利用模型模擬人類智能活動(dòng)的學(xué)科。借助其強(qiáng)
大
的
泛
化
能
力,機(jī)
器
學(xué)
習(xí)
展
現(xiàn)
了
計(jì)
算
機(jī)
向
智
能
化
發(fā)
展
的
必
然
趨
勢。深
藍(lán)
和“AlphaGo”等智能五子棋機(jī)器人均為基于機(jī)器學(xué)習(xí)算法的衍生產(chǎn)物。本章建立了基于AlphaGobangZero算法的五子棋機(jī)器人。相比于傳統(tǒng)方法,AlphaGobangZero不使用手工構(gòu)建的評(píng)估函數(shù)和移動(dòng)排序啟發(fā)式算法,而是使用具有參數(shù)的深度神經(jīng)網(wǎng)絡(luò)。該神經(jīng)網(wǎng)絡(luò)以棋盤位置為輸入,輸出具有分量的移動(dòng)概率向量,同時(shí)對(duì)每個(gè)位置估計(jì)預(yù)期結(jié)果的標(biāo)量值。AlphaGobangZero完全從自我博弈中學(xué)習(xí)這些移動(dòng)概率和價(jià)值估計(jì),并用于指導(dǎo)它的搜索過程。7.1背景介紹近年來,強(qiáng)化學(xué)習(xí)因其強(qiáng)大的探索能力和自主學(xué)習(xí)能力,已經(jīng)與監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)(并稱為三大機(jī)器學(xué)習(xí)技術(shù)。伴隨著深度學(xué)習(xí)的蓬勃發(fā)展,功能強(qiáng)大的深度強(qiáng)化學(xué)習(xí)算法不斷涌現(xiàn),已經(jīng)廣泛應(yīng)用于游戲?qū)?、機(jī)器人控制、城市交通和商業(yè)活動(dòng)等領(lǐng)域,并取得了顯著成果。AlphaGo之父DavidSilver曾
指
出,“深
度
學(xué)
習(xí)+強(qiáng)
化
學(xué)
習(xí)=通
用
人
工
智
能”,后續(xù)大量的研究成果也表明,強(qiáng)化學(xué)習(xí)是實(shí)現(xiàn)通用人工智能的關(guān)鍵步驟。強(qiáng)化學(xué)習(xí)的核心是研究智能體與環(huán)境的相互作用,通過不斷學(xué)習(xí)最優(yōu)策略,做出序列決策并獲得最大回報(bào)。強(qiáng)化學(xué)習(xí)過程可以描述為馬爾可夫決策過程,MDP中智能體與環(huán)境的交互作用如圖7.1所示。其中參數(shù)空間可表示為一個(gè)五元組(A,S,P,R,γ),包括動(dòng)作空間A,狀態(tài)空間S、狀態(tài)轉(zhuǎn)移P:S×S×A→[0,1]、回報(bào)R∶S×A→R和折扣因子γ∈[0,1]。在某些情況下,智能體無法觀測到全部的狀態(tài)空間,這類問題稱為部分觀測馬爾可夫決策過程(POMDP),在多智能體強(qiáng)化學(xué)習(xí)(multi-agentRL)設(shè)置中尤其常見。自Bellman提出動(dòng)態(tài)規(guī)劃方法到AlphaGo打敗人類圍棋冠軍,強(qiáng)化學(xué)習(xí)經(jīng)歷了60年的發(fā)展,成為機(jī)器學(xué)習(xí)領(lǐng)域最熱門的研究和應(yīng)用方向之一。2006年,深度學(xué)習(xí)的提出引領(lǐng)了機(jī)器學(xué)習(xí)的第二次浪潮,在學(xué)術(shù)界和企業(yè)界不斷升溫,并成功推動(dòng)了2010年之后深度強(qiáng)化學(xué)習(xí)的蓬勃發(fā)展。人機(jī)對(duì)弈的起源很早,甚至早于計(jì)算機(jī)面世的時(shí)間。18世紀(jì),巴朗·馮·開普倉發(fā)明了一款弈棋機(jī)———“Turkey”,并帶著它在歐洲各國巡回表演。近代人機(jī)對(duì)弈的主要研究對(duì)象是國際象棋、圍棋、中國象棋、五子棋和西洋棋等。其中,國際象棋是研究歷史最久、投入最多的項(xiàng)目,也是屢屢獲得重大突破的項(xiàng)目。五子棋起源于古代中國,又稱為“五子連珠”“朝鮮五目”,英文名為“Gomoku”“Renju”或“Gobang”,傳入日本后得到了廣泛的發(fā)展和普及。在明治時(shí)期,出現(xiàn)了眾多五子棋高手,并對(duì)規(guī)則進(jìn)行了不斷的改進(jìn),例如對(duì)黑方做出各種禁手限制和將棋盤大小從19×19改為15×15等。由于五子棋黑方有巨大優(yōu)勢(Alis等人于1994年證明:假設(shè)棋盤無限大,雙方無限對(duì)弈下去,最終獲勝的一定是黑方),因此職業(yè)五子棋賽事都設(shè)有禁手規(guī)則。但為了簡化問題的研究,本章采用自由式的五子棋博弈規(guī)則。到了計(jì)算機(jī)時(shí)代,深藍(lán)和“AlphaGo”則代表了過去和現(xiàn)在人類在人機(jī)對(duì)弈上的最大成就。1997年,由美國IBM公司開發(fā)的深藍(lán)由32個(gè)微處理器組成,每秒可計(jì)算2億步,它通過并行計(jì)算成功地在標(biāo)準(zhǔn)國際象棋比賽中打敗了人類衛(wèi)冕世界冠軍。深藍(lán)計(jì)算機(jī)采用混合決策的方法,通過將超級(jí)計(jì)算機(jī)處理器與加速器芯片相結(jié)合,在超級(jí)計(jì)算機(jī)上運(yùn)行的軟件執(zhí)行一部分運(yùn)算,更復(fù)雜的棋步交給加速器處理,然后計(jì)算出可能的棋步和結(jié)果。而AlphaGo由谷歌旗下DeepMind公司戴密斯·哈薩比斯領(lǐng)銜的團(tuán)隊(duì)開發(fā),主要基于深度學(xué)習(xí)原理,通過自我博弈和神經(jīng)網(wǎng)絡(luò)訓(xùn)練,最終于2016年以4∶1的比分戰(zhàn)勝了人類圍棋世界冠軍李世石。這兩個(gè)系統(tǒng)的勝利標(biāo)志著人工智能在棋類游戲上取得了重大突破,同時(shí)也推動(dòng)了人工智能技術(shù)在其他領(lǐng)域的發(fā)展。2016年末,AlphaGo又以賬號(hào)“大師”在圍棋類網(wǎng)站上連勝眾多圍棋高手多達(dá)60余次。之后在2017年5月,AlphaGo參加了在中國烏鎮(zhèn)舉辦的“2017圍棋峰會(huì)”,并以總比分3∶0戰(zhàn)勝了排名世界第一的圍棋冠軍柯潔。至此,AlphaGo已完全進(jìn)化為圍棋界的“獨(dú)孤求敗”,在與人類棋手的對(duì)決中取得完勝的戰(zhàn)績。2017年10月,谷歌宣布推出了AlphaGo的最強(qiáng)版———AlphaGoZero。與AlphaGo通過研究人類棋譜來增進(jìn)自身棋力不同,Zero采用深度學(xué)習(xí)中的“生成對(duì)抗網(wǎng)絡(luò)”(GAN)來學(xué)習(xí)如何下棋,僅用了兩個(gè)小時(shí)就打敗了前任AlphaGo。本章介紹一種基于計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí)和機(jī)械控制技術(shù)的五子棋對(duì)弈系統(tǒng)。該系統(tǒng)借助計(jì)算機(jī)進(jìn)行核心控制,通過相機(jī)對(duì)棋盤進(jìn)行實(shí)時(shí)拍照,利用圖像處理技術(shù)提取棋子信息并傳輸?shù)轿遄悠宀呗詢r(jià)值網(wǎng)絡(luò)中進(jìn)行分析判定和計(jì)算。機(jī)械臂作為系統(tǒng)的執(zhí)行工具,通過控制吸盤實(shí)現(xiàn)落子。在與人類棋手對(duì)弈時(shí),系統(tǒng)會(huì)循環(huán)執(zhí)行拍照、圖像處理、棋局分析、計(jì)算下一步落子點(diǎn)坐標(biāo)、機(jī)械臂控制落子等步驟,直到對(duì)弈結(jié)束。這一系統(tǒng)集成了多種技術(shù),展示了人工智能在日常生活中的實(shí)際應(yīng)用。7.2技
術(shù)
原
理本章所使用的AlphaGobangZero算法與AlphaGoZero算法類似,因此接下來首先對(duì)AlphaGoZero算法進(jìn)行簡單介紹。人工智能的眾多長期目標(biāo)之一是創(chuàng)建能夠自己學(xué)習(xí)基本原則的程序,最近AlphaGoZero算法通過使用深度卷積神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)相關(guān)圍棋知識(shí),僅通過從自博弈中進(jìn)行強(qiáng)化學(xué)習(xí)來訓(xùn)練,從而在圍棋游戲中實(shí)現(xiàn)了超人的性能。這些程序使用人類大師手動(dòng)構(gòu)造的特征和仔細(xì)調(diào)整的權(quán)重來評(píng)估位置,并結(jié)合高性能的αβ搜索,使用大量智能的啟發(fā)式方法和特定領(lǐng)域的適應(yīng)來擴(kuò)展巨大的搜索樹。AlphaGoZero的算法主體主要包含兩個(gè)部分,即蒙特卡羅樹搜索算法與神經(jīng)網(wǎng)絡(luò)算法。在這兩種算法中,神經(jīng)網(wǎng)絡(luò)算法可根據(jù)當(dāng)前棋面形勢給出落子方案,以及預(yù)測當(dāng)前形勢下哪一方的贏面較大;蒙特卡羅樹搜索算法則可以看成一個(gè)對(duì)于當(dāng)前落子步法的評(píng)價(jià)和改進(jìn)工具,它能夠模擬出AlphaGoZero將棋子落在哪些地方可以獲得更高的勝率。AlphaGoZero的神經(jīng)網(wǎng)絡(luò)算法計(jì)算出的落子方案與蒙特卡羅樹搜索算法輸出的結(jié)果越接近,則勝率越大,即回報(bào)越高。因此,每落一顆子,AlphaGoZero都要優(yōu)化神經(jīng)網(wǎng)絡(luò)算法中的參數(shù),使其計(jì)算出的落子方案更接近蒙特卡羅樹搜索算法的結(jié)果,同時(shí)盡量減少勝者預(yù)測的偏差。本章效仿AlphaGoZero算法,采用使用了自博弈強(qiáng)化學(xué)習(xí)建立五子棋機(jī)器人的AI核心AlphaGobangZero,AlphaGobangZero不使用手工構(gòu)建的評(píng)估函數(shù)和移動(dòng)排序啟發(fā)式算法,而使用具有參數(shù)的深度神經(jīng)網(wǎng)絡(luò)(p,v)=fθ(s)。該神經(jīng)網(wǎng)絡(luò)將棋盤狀態(tài)s作為輸入,并輸出具有分量pa=Pr(a|s)的移動(dòng)概率向量p。對(duì)于狀態(tài)s,v≈E[z|s]估計(jì)預(yù)期結(jié)果z的價(jià)值v。AlphaGobangZero完全從自博弈中學(xué)習(xí)這些移動(dòng)概率和價(jià)值估計(jì)并用來指導(dǎo)落子策略的搜索。本章以計(jì)算機(jī)作為系統(tǒng)的控制端,相機(jī)作為棋盤信息的采集工具,機(jī)械臂作為計(jì)算機(jī)下棋的執(zhí)行工具。系統(tǒng)的大致流程如圖7.2所示,當(dāng)人類選手完成落子后,相機(jī)將棋盤的圖像送入計(jì)算機(jī)中由計(jì)算機(jī)進(jìn)行處理并作出決策,計(jì)算機(jī)再將下一步的動(dòng)作以及落子坐標(biāo)送給機(jī)械臂,機(jī)械臂通過氣泵控制吸盤,實(shí)現(xiàn)棋子的抓取和落子。完成后,人類棋手再次落子,循環(huán)上述步驟,直至對(duì)弈結(jié)束。7.2.1系統(tǒng)硬件組成1.高性能計(jì)算機(jī)高性能計(jì)算機(jī)主要負(fù)責(zé)運(yùn)行五子棋決策算法以及圖像處理算法。程序首先將棋盤圖像送入圖像處理算法,然后對(duì)棋盤中的角點(diǎn)和棋子進(jìn)行檢測,并對(duì)棋盤進(jìn)行建模,最后由策略算法進(jìn)行決策。2.RGB攝像頭RGB攝像頭負(fù)責(zé)采集棋盤的圖像信息。相機(jī)每隔3s對(duì)棋盤進(jìn)行一次拍照,并將得到的圖像傳送到高性能計(jì)算機(jī)中。RGB攝像頭是五子棋機(jī)器人與外界環(huán)境交互的主要信息來源。3.機(jī)械臂當(dāng)計(jì)算機(jī)完成對(duì)決策的分析后,通過機(jī)械臂來執(zhí)行下棋的動(dòng)作。計(jì)算機(jī)控制機(jī)械臂從零點(diǎn)移動(dòng)到取子點(diǎn)取子,再移動(dòng)到落子點(diǎn)落子,最后回到零點(diǎn)。本節(jié)采用Dobot機(jī)械臂,通過默認(rèn)USB串口進(jìn)行控制。7.2.2系統(tǒng)硬件工作原理本節(jié)采用的DobotMagician機(jī)械臂外觀如圖7.3所示,我們利用該機(jī)械臂提供的豐富的I/O接口進(jìn)行二次開發(fā)。本節(jié)中正是以PC為上位機(jī)控制器,將Magician機(jī)械臂二次開發(fā)為執(zhí)行機(jī)構(gòu),對(duì)棋子進(jìn)行抓取的。Dobot運(yùn)動(dòng)模式包括點(diǎn)動(dòng)模式、點(diǎn)位模式(PTP)、圓弧運(yùn)動(dòng)模式(ARC)。點(diǎn)動(dòng)模式即示教時(shí)移動(dòng)機(jī)械臂的坐標(biāo)系,使機(jī)械臂移動(dòng)至某一點(diǎn)。點(diǎn)位模式和圓弧運(yùn)動(dòng)模式總稱為存點(diǎn)再現(xiàn)運(yùn)動(dòng)模式。點(diǎn)位模式即實(shí)現(xiàn)點(diǎn)到點(diǎn)動(dòng),DobotMagician
的點(diǎn)位模式包括MOVJ、MOVL以及JUMP三種,如圖7.4和圖7.5所示。MOVJ模式為關(guān)節(jié)運(yùn)動(dòng)模式,由A點(diǎn)運(yùn)動(dòng)到B點(diǎn),各個(gè)關(guān)節(jié)從A點(diǎn)對(duì)應(yīng)的關(guān)節(jié)角運(yùn)行至B點(diǎn)對(duì)應(yīng)的關(guān)節(jié)角。在關(guān)節(jié)運(yùn)動(dòng)過程中,各個(gè)關(guān)節(jié)軸的運(yùn)行時(shí)間必須一致,且同時(shí)到達(dá)終點(diǎn)。MOVL為直線運(yùn)動(dòng),即A點(diǎn)到B點(diǎn)的路徑為直線。JUMP模式為門型運(yùn)動(dòng)軌跡,A點(diǎn)到B點(diǎn)以MOVJ運(yùn)動(dòng)模式移動(dòng)。對(duì)于本章的五子棋機(jī)器人來說,從零點(diǎn)出發(fā)到取子點(diǎn)、從取子點(diǎn)出發(fā)
到
落
子
點(diǎn)、從
落
子
點(diǎn)
回
到
零
點(diǎn),其
每
一
步
都
可
以
看
作
門
型
運(yùn)
動(dòng)
軌
跡,即JUMP運(yùn)動(dòng)模式。Dobot控制器根據(jù)以下信息計(jì)算出實(shí)時(shí)位姿的基準(zhǔn)值:底座碼盤讀數(shù)(可通過回零得到),大臂角度傳感器讀數(shù),小臂角度傳感器讀數(shù)。在控制Dobot時(shí),Dobot控制器將基于實(shí)時(shí)位姿的基準(zhǔn)值、實(shí)時(shí)運(yùn)動(dòng)狀態(tài)更新機(jī)械臂的實(shí)時(shí)位姿。本節(jié)根據(jù)Dobot的通信協(xié)議利用USB的接口方式來對(duì)機(jī)械臂運(yùn)動(dòng)進(jìn)行控制。Dobot機(jī)械臂主要使用的API接口包括連接檢測、警報(bào)機(jī)制、PTP點(diǎn)位運(yùn)動(dòng)模式以及回零(歸位)功能。機(jī)械臂每局對(duì)弈的執(zhí)行流程如圖7.6所示。機(jī)械臂在每一次執(zhí)行落子的環(huán)節(jié)中都可將動(dòng)作分解為三步:零點(diǎn)到取子點(diǎn),取子點(diǎn)到落子點(diǎn),落子點(diǎn)到零點(diǎn)。通過Dobot運(yùn)動(dòng)模式分析,結(jié)合機(jī)械臂下棋的實(shí)際動(dòng)作選用點(diǎn)位模式中的JUMP運(yùn)動(dòng)模式。Dobot機(jī)械臂每次下棋的運(yùn)動(dòng)模式如圖7.7所示。7.2.3策略價(jià)值網(wǎng)絡(luò)
策略價(jià)值網(wǎng)絡(luò)的輸入是當(dāng)前的局面狀態(tài)s,輸出是當(dāng)前局面下每一個(gè)可行行為的概率以及當(dāng)前局面的評(píng)分v。本節(jié)將通過Self-Play過程收集一系列(s,π,z)數(shù)據(jù),并以此來訓(xùn)練策略價(jià)值網(wǎng)絡(luò)。策略價(jià)值網(wǎng)絡(luò)的目標(biāo)是讓策略價(jià)值網(wǎng)絡(luò)輸出的行為概率P更加接近MCTS輸出的概率π,讓策略價(jià)值網(wǎng)絡(luò)輸出的局面評(píng)分v能更準(zhǔn)確地預(yù)測真實(shí)的對(duì)局結(jié)果z。對(duì)于價(jià)值網(wǎng)絡(luò),目標(biāo)為使局面評(píng)分v和實(shí)際蒙特卡羅樹搜索返回結(jié)果z的均方誤差最小化。對(duì)于策略網(wǎng)絡(luò),目標(biāo)為使目標(biāo)策略的評(píng)估函數(shù)J(πθ)的相反數(shù)-J(πθ)最小化,即使目標(biāo)策略的評(píng)估函數(shù)J(πθ)最大化。假定五子棋棋盤的尺寸為19×19,那么策略價(jià)值網(wǎng)絡(luò)接收的輸入s的大小為19×19×17,這個(gè)輸入代表了棋盤的狀態(tài)。如圖7.8所示,s由當(dāng)前玩家過去的8個(gè)落子位置特征平面、對(duì)手過去的8個(gè)落子位置特征平面和1個(gè)代表當(dāng)前玩家顏色的特征平面組成。假設(shè)當(dāng)前玩家使用黑棋,那么在當(dāng)前玩家的每一落子位置特征平面中,玩家棋子所在位置的值為1,其他位置的值為0,對(duì)手的落子位置特征平面同理。對(duì)于最后一個(gè)顏色特征平面,由于當(dāng)前玩家使用黑棋,因此特征平面的值全為1。輸入策略價(jià)值網(wǎng)絡(luò)的s經(jīng)過內(nèi)部層層處理之后,得到移動(dòng)概率向量p∈R361和當(dāng)前局面的評(píng)分v。若將19×19的棋盤展平為361維的向量,那么p的前361維的每一個(gè)元素pi代表在361維棋盤的第i維的落子概率。如圖7.9所示,策略價(jià)值網(wǎng)絡(luò)由1個(gè)卷積模塊、19或39個(gè)殘差模塊、1個(gè)策略預(yù)測器和1個(gè)價(jià)值預(yù)測器組成,其中策略預(yù)測器輸出p作為一個(gè)狀態(tài)到動(dòng)作的映射概率,而價(jià)值預(yù)測器輸出v作為當(dāng)前狀態(tài)的價(jià)值估計(jì)。而這兩個(gè)部分的輸出都被引入到蒙特卡羅樹搜索算法中,用來指導(dǎo)最終的下棋決策。策略價(jià)值網(wǎng)絡(luò)的第一塊是卷積模塊,它由1個(gè)卷積層、1個(gè)批歸一化層和1個(gè)ReLU激活函數(shù)組成,如圖7.10所示。由于輸入s的維度為19×19×17,因此卷積層包含256個(gè)filter,每個(gè)組包含17個(gè)3×3大小的卷積核。在卷積過程中,卷積核的步長為1,同時(shí)為了保持輸入的寬、高不變,需要置圖像兩側(cè)的填充為1。經(jīng)過卷積模塊、批歸一化模塊和ReLU激活函數(shù)處理后,卷積模塊的輸出為19×19×256的特征圖像。為了提升網(wǎng)絡(luò)的特征提取能力并防止出現(xiàn)梯度消失問題,在卷積層下面堆疊了19或39個(gè)殘差模塊,如圖7.11所示,每個(gè)殘差模塊由2個(gè)組成類似于卷積模塊的子模塊構(gòu)成,唯一不同的就是在第二個(gè)子模塊的ReLU激活函數(shù)之前加上了殘差連接,使輸入與批歸一化模塊的輸出相加再輸入ReLU激活函數(shù),最終輸出19×19×256的特征圖像。從最后一個(gè)殘差模塊輸出的特征圖像作為策略預(yù)測器(結(jié)構(gòu)如圖7.12所示)的輸入,經(jīng)過策略預(yù)測器內(nèi)部的卷積層、批歸一化層和全連接層的處理之后得到維度為19×19+1=362的移動(dòng)概率向量p。實(shí)際上為了計(jì)算誤差的方便,全連接層后會(huì)有softmax處理,由其得到對(duì)數(shù)概率logp。最后一個(gè)殘差塊的輸出還會(huì)輸入到價(jià)值預(yù)測器中,與策略預(yù)測器不同的是,價(jià)值預(yù)測器(結(jié)構(gòu)如圖7.13所示)中有兩個(gè)全連接層:第一個(gè)全連接層將輸入映射為256維的向量;第二個(gè)全連接層將256維的向量變?yōu)闃?biāo)量,最后經(jīng)過tanh函數(shù)將這個(gè)標(biāo)量壓縮到[-1,1]區(qū)間,得到v。AlphaGobangZero的策略價(jià)值網(wǎng)絡(luò)延續(xù)了AlphaGoZero的策略價(jià)值網(wǎng)絡(luò)架構(gòu),并對(duì)AlphaGoZero的神經(jīng)網(wǎng)絡(luò)作出以下修改:(1)使用9×9的棋盤,輸入st
只保留當(dāng)前玩家和對(duì)手過去3步的落子紀(jì)錄,去掉了代表當(dāng)前玩家的顏色特征平面,所以st
的維度為9×9×6。(2)卷積模塊的卷積層的輸出維度減少了128維。(3)殘差模塊設(shè)置為4個(gè)。(4)p的維度是9×9=81維(因?yàn)槲遄悠鍥]有停一手的操作)。(5)價(jià)值預(yù)測器的第一個(gè)全連接層將輸入向量映射到128維,而不是256維。7.2.4蒙特卡羅樹搜索算法蒙特卡羅樹搜索算法的基本思想就是利用隨機(jī)采樣的樣本值來估計(jì)真實(shí)值,理論基礎(chǔ)是中心極限定理,樣本數(shù)量越多,其平均值就越趨近真實(shí)值。理想情況下,使用策略價(jià)值網(wǎng)絡(luò)就足以選擇下一步走法。不過,蒙特卡羅樹搜索算法考慮盡可能多的棋面,并確保選擇了最好的走法。對(duì)于五子棋,簡單地用隨機(jī)對(duì)局的方式就可以評(píng)價(jià)某一步落子。從需要評(píng)價(jià)的那一步開始,雙方隨機(jī)落子,直到一局比賽結(jié)束。為了保證結(jié)果的準(zhǔn)確性,這樣的隨機(jī)對(duì)局通常需要進(jìn)行上萬盤,記錄下每一盤的結(jié)果(比如接下來的落子是黑子,那就根據(jù)規(guī)則記錄黑子勝了或輸了多少子),最后取這些結(jié)果的平均,就能得到對(duì)某一步棋的評(píng)價(jià)。最后要做的就是取評(píng)價(jià)最高的一步落子作為接下來的落子。也就是說為了決定一步落子就需要程序自己進(jìn)行上萬局的隨機(jī)對(duì)局,這對(duì)隨機(jī)對(duì)局的速度也提出了一定的要求。和使用了大量五子棋知識(shí)的傳統(tǒng)方法相比,這種方法的好處顯而易見,就是幾乎不需要五子棋的專業(yè)知識(shí),只需通過大量的隨機(jī)對(duì)局就能估計(jì)出一步棋的價(jià)值。在19×19的棋盤上,要窮舉出接下來的所有走法是不太現(xiàn)實(shí)的一件事,所以AlphaGobangzero使用了蒙特卡羅樹搜索(MCTS)算法。如圖7.14所示,AlphaGobangZero的MCTS主要包含三個(gè)步驟,分別是選擇、拓展與評(píng)估和反向傳播。蒙特卡羅樹的每一個(gè)節(jié)點(diǎn)代表一種棋盤狀態(tài)s,樹上的每一個(gè)父節(jié)點(diǎn)nf與其所有子節(jié)點(diǎn)的邊上都存著一些變量:置信區(qū)間算法(UCT)得到的值,其中cpuct為探索常數(shù),它的值越大,表示越有可能探索未被訪問或者訪問次數(shù)較少的子節(jié)點(diǎn)。假設(shè)棋盤上當(dāng)前落子數(shù)為t,當(dāng)前棋盤狀態(tài)表示為st,那么蒙特卡羅樹的根節(jié)點(diǎn)就對(duì)應(yīng)著st。假設(shè)打算對(duì)當(dāng)前局面進(jìn)行r次蒙特卡羅樹搜索,那么每一次搜索都會(huì)從根節(jié)點(diǎn)出發(fā),根據(jù)進(jìn)行動(dòng)作at*(對(duì)應(yīng)一維棋盤上的一個(gè)落點(diǎn))到達(dá)子節(jié)點(diǎn)st+1,接著重復(fù)上述步驟直至遇到葉節(jié)點(diǎn)nl或者游戲結(jié)束為止。當(dāng)在選擇過程中遇到葉節(jié)點(diǎn)nl時(shí),先前介紹的神經(jīng)網(wǎng)絡(luò)就可以派上用場了。將葉節(jié)點(diǎn)對(duì)應(yīng)的棋盤狀態(tài)輸入策略價(jià)值網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)對(duì)棋局進(jìn)行評(píng)估后得到移動(dòng)概率向量p和當(dāng)前棋盤狀態(tài)價(jià)值v。移動(dòng)概率向量p用來拓展葉節(jié)點(diǎn)nl,p中的每一個(gè)元素分別表示nl每一個(gè)子節(jié)點(diǎn)的先驗(yàn)概率P(s,a),同時(shí)需要將所有子節(jié)點(diǎn)的訪問次數(shù)初始化為0。在將葉節(jié)點(diǎn)nl對(duì)應(yīng)的棋盤狀態(tài)送入策略價(jià)值網(wǎng)絡(luò)后,就得到了葉節(jié)點(diǎn)對(duì)應(yīng)的v。所謂的反向傳播,就是指將v傳播到從根節(jié)點(diǎn)到葉節(jié)點(diǎn)這一路的所有節(jié)點(diǎn)上(不包含葉節(jié)點(diǎn)),這里可以使用遞歸的方式。由于這些節(jié)點(diǎn)的當(dāng)前玩家一直在切換,因此將-v傳入遞歸函數(shù)。至此算法完成了一次搜索。當(dāng)完成r次搜索后,根節(jié)點(diǎn)的每個(gè)子節(jié)點(diǎn)都被訪問過若干次了。接下來就根據(jù)根節(jié)點(diǎn)的各個(gè)子節(jié)點(diǎn)的訪問次數(shù)N(s,a),計(jì)算選擇動(dòng)作a的概率:式中:τ為溫度常數(shù)。最后根據(jù)每個(gè)子節(jié)點(diǎn)的π來隨機(jī)選擇一種動(dòng)作a*并在棋盤上執(zhí)行。從式(7.1)中可以看出,溫度常數(shù)τ越小,就越有可能選擇π越大的動(dòng)作,即越趨近最佳選點(diǎn),而溫度常數(shù)τ越大,越容易選到較低概率的點(diǎn)。7.2.5棋盤建模五子棋機(jī)器人在棋盤正上方布置高幀率相機(jī),實(shí)時(shí)對(duì)棋盤狀態(tài)進(jìn)行建模。具體的方式為使用Canny邊緣檢測和Hough變換生成拍攝圖片中棋盤的水平線與垂直線的交點(diǎn)(為中心),并將其抽象為一個(gè)19×19的二維數(shù)組。在此之后算法使用模板匹配的方式匹配每個(gè)交點(diǎn)上的棋子。數(shù)組中,無棋子的位置標(biāo)記為0,白子位置標(biāo)記為-1,黑子位置標(biāo)記為1。最終,整張棋盤以一個(gè)二維數(shù)組的方式保存。1.Canny邊緣檢測Canny邊緣檢測是一種從不同視覺對(duì)象中提取有用結(jié)構(gòu)信息并顯著減少要處理的數(shù)據(jù)量的技術(shù)。它已廣泛應(yīng)用于各種計(jì)算機(jī)視覺系統(tǒng)。Canny發(fā)現(xiàn),在不同的視覺系統(tǒng)上應(yīng)用邊緣檢測的要求是比較相似的。因此,可以在各種情況下實(shí)施滿足這些要求的邊緣檢測解決方案。這些邊緣檢測的要求一般包括:(1)以低錯(cuò)誤率檢測邊緣,這意味著檢測器應(yīng)準(zhǔn)確捕捉圖像中顯示的盡可能多的邊緣。(2)檢測到的邊緣點(diǎn)應(yīng)準(zhǔn)確定位在邊緣的中心。(3)圖像中的給定邊緣應(yīng)僅標(biāo)記一次,并且在可能的情況下,圖像中的噪聲不應(yīng)被檢測為錯(cuò)誤邊緣。因?yàn)樵肼暤拇嬖跁?huì)輕易地影響到圖像的邊緣,所以在進(jìn)行邊緣檢測時(shí)要先對(duì)圖像進(jìn)行平滑濾波,其中比較常用的濾波就是高斯濾波,將濾波記作H,其尺寸是(2k+1,2k+1),下面給出其表達(dá)式:當(dāng)k=2時(shí)的矩陣H如下:記圖像矩陣為A,那么使用高斯濾波對(duì)圖像做下面的卷積運(yùn)算:對(duì)圖像進(jìn)行高斯去噪后,接下來計(jì)算圖像梯度來尋找圖像中像素值變化更劇烈的點(diǎn),即邊緣。在圖像中,用梯度來表示灰度值的變化程度和方向,首先給出計(jì)算梯度大小的公式:式中:Gx和Gy表示在東西和南北方向上像素變化的差,G為像素變化總梯度,θ為總梯度的方向。在實(shí)際計(jì)算中,算法將連續(xù)梯度方向矢量分解為一小組離散方向,然后在前一步的輸出(邊緣強(qiáng)度和梯度方向)上移動(dòng)3×3濾波器。當(dāng)濾波器移動(dòng)到每個(gè)像素時(shí),如果其梯度幅度不大于梯度方向上兩個(gè)鄰居的大小,則抑制中心像素的邊緣強(qiáng)度(將其值設(shè)置為0)。例如:(1)如果四舍五入后的梯度角度為0°,且其梯度幅度大于東部和西部方向上像素的大小,則認(rèn)為該點(diǎn)在邊緣上。(2)如果四舍五入后的梯度角度為90°,且其梯度幅度大于北部和南部方向上像素的大小,則認(rèn)為該點(diǎn)在邊緣上。(3)如果四舍五入后的梯度角度為135°,且其梯度幅度大于西北部和東南部方向上像素的大小,則認(rèn)為該點(diǎn)在邊緣上。(4)如果四舍五入后的梯度角度為45°,且其梯度幅度大于東北和西南部方向上像素的大小,則認(rèn)為該點(diǎn)在邊緣上。一般情況下,可以使用一個(gè)閾值來檢測邊緣,但是這樣做準(zhǔn)確度并不高。如果能夠使用啟發(fā)式的方法確定兩個(gè)閾值,那么位于較小閾值之上的像素點(diǎn)都可以作為邊緣,這樣就有可能提高準(zhǔn)確度。如圖7.15所示,利用啟發(fā)式方法設(shè)置兩個(gè)閾值,分別為極大閾值和極小閾值。其中大于極大閾值的像素點(diǎn)都被檢測為邊緣,而小于極小閾值的像素點(diǎn)都被檢測為非邊緣。對(duì)于中間的像素點(diǎn),如果與確定為邊緣的像素點(diǎn)鄰接,則判定為邊緣;否則為非邊緣。2.Hough變換Hough變換是一種廣泛應(yīng)用于計(jì)算機(jī)視覺和圖像處理的變換方法,適用于檢測圖像中給定形狀的曲線,并用參數(shù)方程來描述它們。Hough變換的基本思想是對(duì)圖像像素的坐標(biāo)進(jìn)行坐標(biāo)變換,使得一些像素的坐標(biāo)在另一坐標(biāo)空間中的特定坐標(biāo)位置出現(xiàn)峰值,從而將檢測直線的問題轉(zhuǎn)換為尋找峰值位置的問題。在實(shí)際應(yīng)用中,通常將直線方程寫成參數(shù)空間中的形式,以便使用Hough變換進(jìn)行檢測:式中:ρ為原點(diǎn)到直線的距離,θ為直線的法線與x軸的夾角。根據(jù)這個(gè)方程,圖像坐標(biāo)空間中的一個(gè)點(diǎn)經(jīng)過Hough變換后對(duì)應(yīng)參數(shù)空間中的一條正弦曲線;圖像坐標(biāo)空間中的一條直線在參數(shù)空間變換為正弦曲線,則圖像坐標(biāo)空間中相交的線變換為參數(shù)空間中正弦曲線的交點(diǎn),根據(jù)交點(diǎn)在參數(shù)空間中的θ和ρ值即可求得交點(diǎn)在圖像空間對(duì)應(yīng)的直線的方程。攝像機(jī)標(biāo)定用的棋盤格為黑白相間的正方形,通過對(duì)其邊緣檢測,可以得到兩組平行直線,且這兩組平行直線相互垂直。攝像機(jī)采集圖像后,在模板平面與攝像機(jī)光軸垂直且無畸變和干擾的情況下,對(duì)圖像進(jìn)行邊緣檢測可得到與原模板相對(duì)應(yīng)的兩組相互垂直的平行直線:L1,L2。對(duì)檢測到的直線進(jìn)行Hough變換,將其變換為(θ,ρ)空間中的一系列曲線,根據(jù)Hough變換的性質(zhì),圖像空間的一組平行直線在(θ,ρ)空間中對(duì)應(yīng)的點(diǎn)集為P(θ,ρ)={p(θ,ρ)|θ=const},因此在參數(shù)空間中只要得到θ和ρ的值就可得到圖像空間中的直線方程:式中:i=1,2,…,n,n為圖像空間中的直線條數(shù);θi=const,即同一組平行直線的法線與x軸的夾角都相等,只是與原點(diǎn)的距離不同。只需找出參數(shù)空間中每一個(gè)交點(diǎn)的θ和ρ值,即可求出每一條直線方程,從而將尋找直線的問題轉(zhuǎn)化為在參數(shù)空間中尋找點(diǎn)的問題,使得問題簡化。對(duì)于得到的兩組相互垂直的直線:通過求解方程組L1中的每一個(gè)方程與L2中每一個(gè)方程的解,可求得所有的交點(diǎn),從而找到棋盤格的角點(diǎn)。在對(duì)棋盤角點(diǎn)進(jìn)行定位后,將棋盤的角點(diǎn)與建模得到的二維矩陣中的每一個(gè)元素相匹配,這樣在算法做出決策時(shí),便可將二維矩陣中的點(diǎn)轉(zhuǎn)換為實(shí)際棋盤的坐標(biāo),從而控制機(jī)械臂將棋子送往對(duì)應(yīng)位置。7.2.6系統(tǒng)總體流程1.智能博弈算法在與五子棋機(jī)器人進(jìn)行對(duì)弈之前,我們首先需要通過自博弈方法對(duì)智能博弈算法中的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。本節(jié)使用小批量梯度下降來訓(xùn)練神經(jīng)網(wǎng)絡(luò)。偽代碼如算法7.1所示。2.機(jī)器人總體系統(tǒng)在智能博弈算法的訓(xùn)練完成后,即可將機(jī)器人控制系統(tǒng)和智能博弈算法進(jìn)行整合,完成完整的五子棋機(jī)器人系統(tǒng)。系統(tǒng)整體流程如圖7.16所示,整個(gè)五子棋機(jī)器人的系統(tǒng)可以簡單拆分成以下幾個(gè)步驟。(1)攝像頭以固定的刷新率對(duì)棋盤圖像進(jìn)行采集,并將圖像傳輸?shù)礁咝阅苡?jì)算機(jī)。(2)高性能計(jì)算機(jī)接收上傳的圖片,使用Canny邊緣檢測以及Hough變換對(duì)棋盤進(jìn)行建模,將棋盤狀態(tài)抽象為二維數(shù)組。同時(shí)系統(tǒng)判斷二維數(shù)組的變化,若對(duì)手已完成落子,則進(jìn)入步驟(3);否則回到步驟(1)。(3)將對(duì)應(yīng)的棋盤狀態(tài)送入策略價(jià)值網(wǎng)絡(luò)并結(jié)合蒙特卡羅樹進(jìn)行推演,預(yù)測出最佳落子位置,將落子位置映射到真實(shí)坐標(biāo),傳輸給機(jī)械臂。若算法判斷博弈結(jié)束,則系統(tǒng)退出。(4)機(jī)械臂獲取動(dòng)作任務(wù)并執(zhí)行動(dòng)作,完成動(dòng)作后向系統(tǒng)發(fā)送信息,表示動(dòng)作已執(zhí)行完畢,系統(tǒng)收到信息后回到步驟(1)。7.3實(shí)踐操作與步驟7.3.1實(shí)驗(yàn)環(huán)境7.3.2實(shí)驗(yàn)操作步驟及結(jié)果實(shí)驗(yàn)環(huán)境如表7.1所示。4.算法訓(xùn)練訓(xùn)練五子棋AI的執(zhí)行代碼如下:$condaactivateAlpha_Gobang_Zero$pythontrain.py如果嚴(yán)格按照前3步進(jìn)行操作,可看到如圖7.17所示的輸出。損失函數(shù)(loss)的降低在一定程度上代表著AI在不斷進(jìn)行學(xué)習(xí),如果損失函數(shù)不能正常降低,應(yīng)檢查配置文件并且進(jìn)行參數(shù)調(diào)整。5.測試(1)若要對(duì)算法進(jìn)行學(xué)習(xí)了解,并在虛擬環(huán)境中享受與AI的對(duì)決,則可直接執(zhí)行以下命令:$condaactivateAlpha_Gobang_Zero$pythongame.py等待如圖7.18所示的UI界面出現(xiàn)后,點(diǎn)擊需要落子的位置即可開始對(duì)弈。(2)若想擁有一臺(tái)屬于自己的完整的智能五子棋機(jī)器人(如圖7.19所示),則需要與硬件配合開發(fā)。6.機(jī)器人的使用教程(1)打開電腦和機(jī)械臂。(2)如圖7.20所示,打開搜索界面,調(diào)出攝像頭,確認(rèn)棋盤完整地出現(xiàn)在攝像頭的拍攝區(qū)域。(3)打開主機(jī)終端,使用cd進(jìn)入本項(xiàng)目文件夾Dobot。(4)運(yùn)行命令pythonmain.py,點(diǎn)擊【start】按鈕。注意保持棋盤初始狀態(tài)無落子,將彈出的確認(rèn)棋盤狀態(tài)界面關(guān)閉。(5)初始化運(yùn)行成功后,出現(xiàn)如圖7.21所示界面。(6)遵從先黑后白的順序,機(jī)械臂執(zhí)白棋,即可與AI進(jìn)行酣暢淋漓的對(duì)弈。8.1主要應(yīng)用背景介紹
8.2技術(shù)原理
8.3實(shí)踐操作與步驟在人工智能機(jī)器人領(lǐng)域,國際象棋機(jī)器人、圍棋機(jī)器人、五子棋機(jī)器人均在不斷完善與更新,相關(guān)產(chǎn)品已投入市場。中國象棋是具有悠久歷史的中華國粹,因其簡單的規(guī)則、雅俗共賞的對(duì)弈樂趣、龐大的用戶基礎(chǔ)引起了人機(jī)對(duì)弈的游戲算法設(shè)計(jì)浪潮。一個(gè)可以進(jìn)行人機(jī)博弈的象棋機(jī)器人不僅可以陪伴老人與孩子,而且能夠規(guī)避計(jì)算機(jī)的諸多缺點(diǎn):比如電子顯示屏損傷孩子的視力,老人不熟悉電腦操作,電腦輻射具有副作用等。象棋機(jī)器人如圖8.1所示,它可以通過識(shí)別棋盤、估值預(yù)測從而控制執(zhí)行。它與用戶之間有良好的互動(dòng)性,從而增強(qiáng)玩家的游戲沉浸式體驗(yàn)。本章將從象棋機(jī)器人的相關(guān)技術(shù)發(fā)展現(xiàn)狀、技術(shù)原理、實(shí)踐操作三個(gè)部分來介紹象棋機(jī)器人的相關(guān)應(yīng)用及其效果。8.1統(tǒng)計(jì)量及其分布機(jī)器人技術(shù)是如今人工智能研究中十分活躍且被廣泛應(yīng)用的領(lǐng)域,是一門集合了機(jī)械、計(jì)算機(jī)、人工智能、傳感器、控制等基礎(chǔ)學(xué)科技術(shù)的綜合高新技術(shù)。機(jī)器人技術(shù)在工業(yè)、航空航天、醫(yī)療、社會(huì)生活等領(lǐng)域,其以往的作用是全部投入工業(yè)生產(chǎn)并創(chuàng)造產(chǎn)品價(jià)值,而如今娛樂服務(wù)型機(jī)器人開始出現(xiàn)并更新迭代進(jìn)入人們的日常生活,這些現(xiàn)象無不體現(xiàn)著社會(huì)的發(fā)展和科技的進(jìn)步。棋類游戲機(jī)器人是娛樂服務(wù)型機(jī)器人的一個(gè)主要分支,也一直是人工智能所要攻克的領(lǐng)域之一。1947年圖靈發(fā)表了“ComputingMachineryandIntelligence”并編寫了一個(gè)國際象棋的程序,這本書被稱為人工智能的開山之作。但是由于計(jì)算機(jī)在當(dāng)時(shí)十分稀缺,這個(gè)國際象棋程序沒有機(jī)會(huì)在計(jì)算機(jī)上運(yùn)行?!坝?jì)算機(jī)之父”馮·諾依曼提出了博弈論以及雙人對(duì)弈的最小最大算法(Minimax)。信息理論的創(chuàng)始人香農(nóng)于1950年發(fā)表了理論研究論文“ProgrammingaComputerforPlayingChess”,提出以函數(shù)來評(píng)價(jià)當(dāng)前棋局局勢的優(yōu)劣并將思維推理結(jié)果進(jìn)行量化,首開理論研究機(jī)器下棋的先河。約翰·麥卡錫提出了著名的α-β剪枝技術(shù),對(duì)有效控制博弈樹的規(guī)模提供了依據(jù)。隨后,卡內(nèi)基梅隆大學(xué)的紐厄爾、司馬賀等很快在實(shí)戰(zhàn)中實(shí)現(xiàn)了這一技術(shù)。1996年一場非比尋常的國際象棋比賽在美國費(fèi)城拉開帷幕,計(jì)算機(jī)“深藍(lán)”和棋王加里·卡斯帕羅夫均報(bào)名參加,世界為之矚目。1997年5月11日,加里·卡斯帕羅夫以2.5∶3.5(1勝2負(fù)3平)輸給IBM的計(jì)算機(jī)程序“深藍(lán)”,如圖8.2所示?!吧钏{(lán)”計(jì)算機(jī)是一臺(tái)帶有31個(gè)并行處理器的超級(jí)計(jì)算機(jī),它由國際商用機(jī)器公司(IBM)技術(shù)人員歷經(jīng)6年時(shí)間研制成功。該計(jì)算機(jī)有著高速計(jì)算的優(yōu)勢,3分鐘內(nèi)可以檢索500億步棋;而其弱點(diǎn)是不能像人一樣總結(jié)經(jīng)驗(yàn),隨機(jī)應(yīng)變能力還是趕不上以國際象棋為職業(yè)的世界棋王卡斯帕羅夫。但即便如此,計(jì)算機(jī)程序還是贏了棋王卡斯帕羅夫兩局。IBM公司稱這次“深藍(lán)”的成功是對(duì)弈機(jī)器人的里程碑?!吧钏{(lán)”能戰(zhàn)勝國際象棋大師,主要是基于以下兩點(diǎn):第一是豐富的國際象棋知識(shí),尤其是對(duì)這些知識(shí)的深入理解;第二是巨大的算力。雖然剪枝算法以及軟件對(duì)殘局的搜索在客觀上降低了搜索空間,但整體上依然屬于暴力窮舉。這種設(shè)計(jì)思路在20年后由Google研發(fā)的人工智能圍棋機(jī)器人AlphaGo中也仍然存在。2022年8月9日,全球領(lǐng)先的人工智能軟件公司商湯科技在北京召開新品發(fā)布會(huì),重磅推出其首個(gè)家庭消費(fèi)級(jí)人工智能產(chǎn)品———“元蘿卜SenseRobot”AI下棋機(jī)器人,如圖8.3所示。元蘿卜是一款融合了傳統(tǒng)象棋文化和人工智能技術(shù),既擁有人類象棋大師級(jí)別棋力,也具備機(jī)械臂來實(shí)現(xiàn)下棋動(dòng)作和人類互動(dòng)的機(jī)器人,能夠以沉浸式的交互體驗(yàn),激發(fā)青少年對(duì)象棋的關(guān)注和熱愛。元蘿卜包含AI學(xué)棋、殘局挑戰(zhàn)、26關(guān)棋力闖關(guān)、巔峰對(duì)決等多種模式,還獲得了中國象棋協(xié)會(huì)權(quán)威認(rèn)證,可以為零基礎(chǔ)青少年介紹和講解象棋文化、規(guī)則,并進(jìn)行官方象棋考級(jí)評(píng)測。元蘿卜在幫助青少年鍛煉思維的同時(shí),還能加深其對(duì)中國傳統(tǒng)文化的認(rèn)知和理解,不斷提升綜合素養(yǎng),讓孩子玩有所得、學(xué)有所成。元蘿卜可以模擬老師一對(duì)一上課的模樣,一邊進(jìn)行語音講解,一邊進(jìn)行下棋實(shí)操,還兼顧視頻演示,可以在減少孩子用眼負(fù)擔(dān)的同時(shí),保留線下互動(dòng)的趣味性,關(guān)鍵是其萌萌的宇航員模樣比真的老師更能吸引孩子坐下來學(xué)。元蘿卜是一臺(tái)在家庭書桌上就能擺放的實(shí)體機(jī)器人,可以幫助更多的青少年增進(jìn)對(duì)中國傳統(tǒng)文化的認(rèn)知和理解,開發(fā)智力,培養(yǎng)邏輯思維能力和提高綜合素養(yǎng)。本章實(shí)現(xiàn)的象棋機(jī)器人可完成元蘿卜的基礎(chǔ)下棋功能。8.2技
術(shù)
原
理中國象棋是從兩軍對(duì)陣中抽象出來的一種博弈游戲,下棋的雙方無時(shí)不在調(diào)動(dòng)自己的一切智能進(jìn)行演繹、推算。在人工智能領(lǐng)域始終將棋類的機(jī)器博弈作為最具挑戰(zhàn)性的研究方向之一。如圖8.4所示,象棋機(jī)器人本身是一個(gè)復(fù)雜的智能系統(tǒng),其涉及的關(guān)鍵技術(shù)包括象棋機(jī)器人的軟硬件控制、象棋棋盤和棋子的識(shí)別及機(jī)器人的自主博弈等,這些關(guān)鍵技術(shù)的研究是研發(fā)象棋機(jī)器人的根本,因此具有十分重要的研發(fā)價(jià)值。本章研究的中國象棋機(jī)器人旨在實(shí)現(xiàn)中國象棋的人機(jī)對(duì)弈,要實(shí)現(xiàn)這一功能需完成以下幾個(gè)方面的研究:(1)機(jī)械臂控制模塊。根據(jù)象棋機(jī)器人的工作空間要求,確定象棋機(jī)器人各軸的運(yùn)動(dòng)參數(shù),當(dāng)人類選手完成落子后,相機(jī)將棋盤的圖像送入計(jì)算機(jī)由計(jì)算機(jī)進(jìn)行處理并作出下棋決策,再將下一步的動(dòng)作以及落子坐標(biāo)傳給機(jī)械臂。機(jī)械臂通過氣泵控制吸盤,完成棋子的抓取、移動(dòng)和放置操作。(2)中國象棋棋盤、棋子圖像識(shí)別算法。中國象棋棋盤共90個(gè)角點(diǎn),對(duì)弈過程中棋子分布在其中的若干個(gè)角點(diǎn)上,棋盤棋子圖像識(shí)別算法的目的是要確定每個(gè)角點(diǎn)上是否落有象棋棋子,如果某角點(diǎn)上落有棋子,則判斷該角點(diǎn)上棋子的顏色及類型,定位紅黑雙方各棋子的位置,并充分考慮實(shí)際應(yīng)用場景中圖像受光照、位置等外部因素的影響,進(jìn)一步提高圖像識(shí)別的準(zhǔn)確性。(3)中國象棋人機(jī)博弈算法。在棋盤棋子圖像識(shí)別算法識(shí)別出棋盤信息后,通過一定的數(shù)據(jù)結(jié)構(gòu)將棋盤信息表示出來,然后結(jié)合各個(gè)棋子的走棋規(guī)則,一一羅列出棋盤局面上所有可能的走法,并將所有走法執(zhí)行之后產(chǎn)生的棋盤局面構(gòu)成一棵博弈樹,之后運(yùn)用相應(yīng)的搜索算法(本章象棋機(jī)器人實(shí)踐環(huán)節(jié)采用的是蒙特卡羅算法)對(duì)博弈樹進(jìn)行搜索,配合估值算法得出象棋機(jī)器人應(yīng)進(jìn)行的最佳走法。中國象棋機(jī)器人下棋流程如圖8.5所示。由于中國象棋機(jī)器人系統(tǒng)的硬件組成(高性能計(jì)算機(jī)、RGB攝像頭、機(jī)械臂)與第7章五子棋機(jī)器人的硬件組成相同,故本章不再對(duì)其機(jī)械臂做講解,以下將詳細(xì)介紹棋盤檢測算法及中國象棋人機(jī)博弈算法。8.2.1棋盤檢測算法棋盤棋子識(shí)別是象棋機(jī)器人穩(wěn)定工作的前提,象棋機(jī)器人只有“看”準(zhǔn)了,才能“下”好。中國象棋棋盤由九條豎線段及十條橫線段,以及這些線段相交構(gòu)成的一共90個(gè)角點(diǎn)組成。中國象棋棋子分為紅黑兩方,紅方棋子包括“帥”“士”“相”“車”“馬”“炮”“兵”這七種身份的棋子,黑方棋子包括“將”“士”“象”“車”“馬”“炮”“卒”這七種身份的棋子。對(duì)棋盤棋子進(jìn)行識(shí)別,目的是確定棋盤所有角點(diǎn)的狀態(tài),即角點(diǎn)區(qū)域是否存在棋子,對(duì)存在棋子的角點(diǎn)繼續(xù)識(shí)別出棋子的具體身份以及棋子位于角點(diǎn)區(qū)域中的具體位置。在對(duì)棋盤棋子進(jìn)行識(shí)別后,便可以確定象棋棋盤矩陣,為象棋機(jī)器人下棋算法部分所用。棋盤識(shí)別流程如下:(1)首先檢測出棋盤的4個(gè)角點(diǎn)坐標(biāo),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 罕見腫瘤的精準(zhǔn)醫(yī)療與個(gè)體化治療
- 預(yù)算評(píng)審質(zhì)量控制制度
- 2026年咸陽市高新一中教師招聘備考題庫及答案詳解(考點(diǎn)梳理)
- 罕見腫瘤的個(gè)體化治療治療策略優(yōu)化經(jīng)驗(yàn)與推廣
- 2025年建筑施工企業(yè)收發(fā)文管理制度
- 出納與財(cái)務(wù)制度
- 非稅收入財(cái)務(wù)制度
- 養(yǎng)豬小規(guī)模企業(yè)財(cái)務(wù)制度
- 餐廳收銀財(cái)務(wù)制度
- 地產(chǎn)項(xiàng)目財(cái)務(wù)制度
- 2025至2030中國EB病毒檢測行業(yè)標(biāo)準(zhǔn)制定與市場規(guī)范化發(fā)展報(bào)告
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘備考題庫及答案詳解1套
- 2026年浙江高考語文真題試卷+答案
- 2025 年大學(xué)人工智能(AI 應(yīng)用)期中測試卷
- 《市場營銷(第四版)》中職完整全套教學(xué)課件
- (正式版)DB61∕T 2121-2025 《風(fēng)力發(fā)電場集電線路設(shè)計(jì)規(guī)范》
- 疑難病例討論制度落實(shí)常見問題與改進(jìn)建議
- 創(chuàng)傷性脾破裂的護(hù)理
- 蓬深102井鉆井工程(重新報(bào)批)項(xiàng)目環(huán)境影響報(bào)告表
- 大模型金融領(lǐng)域可信應(yīng)用參考框架
- (新教材)2025年人教版七年級(jí)上冊(cè)歷史期末復(fù)習(xí)??贾R(shí)點(diǎn)梳理復(fù)習(xí)提綱(教師版)
評(píng)論
0/150
提交評(píng)論