版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
緒論課題背景及其研究的意義與目的隨著科技和社會(huì)的不斷進(jìn)步,移動(dòng)機(jī)器人技術(shù)在我們的生活和工作中扮演著越來(lái)越關(guān)鍵的角色。移動(dòng)機(jī)器人是最早被研發(fā)的機(jī)器人類(lèi)型,它們的移動(dòng)方式多種多樣,如履帶式、輪式、蛇行式、腿式、復(fù)合式和跳躍式等。履帶式機(jī)器人因其在不同地形上的出色性能而受到認(rèn)可,如其在松軟地面上的穩(wěn)定性和附著能力。但是,它們通常需要更多的能源,速度較慢,并且在轉(zhuǎn)向時(shí)可能會(huì)對(duì)地面造成一定的破壞。腿式機(jī)器人能夠適應(yīng)復(fù)雜的地形和滿(mǎn)足多種性能要求,但由于其復(fù)雜的機(jī)械結(jié)構(gòu)和高度自由的運(yùn)動(dòng),它們通常移動(dòng)速度較慢、難以控制,并且能源消耗較大。跳躍式和蛇行式機(jī)器人在某些特定環(huán)境和應(yīng)用中表現(xiàn)出色,但它們也存在運(yùn)動(dòng)平穩(wěn)性和承載能力方面的局限性。復(fù)合式機(jī)器人具有適應(yīng)特殊環(huán)境的能力,如管道內(nèi)部,有些還具有形態(tài)變化的功能。然而,它們的機(jī)械結(jié)構(gòu)和控制系統(tǒng)相對(duì)復(fù)雜。與此相比,輪式移動(dòng)機(jī)器人因其簡(jiǎn)單的機(jī)械結(jié)構(gòu)、方便的控制和驅(qū)動(dòng)方式、高效的工作性能以及快速的移動(dòng)速度而受到廣泛應(yīng)用。盡管它們?cè)谶\(yùn)動(dòng)穩(wěn)定性和路徑規(guī)劃方面可能存在一些問(wèn)題,但這些問(wèn)題隨著新技術(shù)的出現(xiàn)而逐漸得到解決。隨著技術(shù)的進(jìn)步,未來(lái)的輪式移動(dòng)機(jī)器人可能會(huì)具備更多的功能和能力,如跳躍、飛行、形態(tài)變化、潛水等[1]。在設(shè)計(jì)這些機(jī)器人時(shí),除了考慮到性能、靈活性和工作環(huán)境等因素外,還需要考慮成本、能源消耗、環(huán)保性和使用材料等問(wèn)題,以滿(mǎn)足現(xiàn)代社會(huì)的多樣化需求。智能移動(dòng)機(jī)器人的發(fā)展在在軍事和探測(cè)、救援等領(lǐng)域有大量的使用空間。近年來(lái)我國(guó)的相關(guān)研究也如火如荼的經(jīng)行中來(lái)滿(mǎn)足不同需求的應(yīng)用場(chǎng)合,如外星探測(cè)車(chē)、機(jī)械狗如圖(1-1)、水下救援艇等,此類(lèi)開(kāi)發(fā)已經(jīng)有了多年的基礎(chǔ)與歷史。智能移動(dòng)機(jī)器人的應(yīng)用在軍事上目前已經(jīng)有了深入的研究與發(fā)展。不久前展出的步兵機(jī)器狗剛一亮相就引起熱議,我國(guó)在相關(guān)鄰域也有很大的發(fā)展,我國(guó)的步兵機(jī)器狗在避障、導(dǎo)航、控制精度與穩(wěn)定性能平衡性能方面都遙遙領(lǐng)先。這一項(xiàng)目使得我國(guó)在復(fù)雜環(huán)境作戰(zhàn);人員安全方面都有相應(yīng)的作用。在日常生活方面,智能移動(dòng)機(jī)器人的開(kāi)發(fā)與研究也在改變著我們的日常生活。經(jīng)過(guò)50多年的研究和開(kāi)發(fā),全球科研人員通過(guò)不斷嘗試開(kāi)發(fā)和研究出多功能、多樣式的導(dǎo)盲機(jī)器人,現(xiàn)已進(jìn)入大眾視野。該種導(dǎo)盲機(jī)器人結(jié)合了視覺(jué)、光學(xué)雷達(dá)、聲控、導(dǎo)航、避障等一系列功能目前功能已較為完善[2]。目前來(lái)看的話(huà)種類(lèi)有智能導(dǎo)盲杖和穿戴式導(dǎo)盲器等如圖(1-2)、手持導(dǎo)盲儀等,大大的幫助了盲人群體提高了盲人生活質(zhì)量。圖1-1國(guó)產(chǎn)紅隼步兵機(jī)械狗圖1-2智能導(dǎo)盲杖除上述方面外在星球探測(cè)方面;星球探測(cè)車(chē)實(shí)質(zhì)上就是一個(gè)智能移動(dòng)機(jī)器人。星球探測(cè)機(jī)器人是指在星球表面移動(dòng)或固定并且攜帶科學(xué)儀器,能夠適應(yīng)地外天體表面環(huán)境的智能移動(dòng)機(jī)器人[3]。這種機(jī)器人的主要優(yōu)勢(shì)在于滿(mǎn)足科學(xué)探測(cè)儀器的移動(dòng)需求,同時(shí)也擴(kuò)展了人類(lèi)科學(xué)探索的范圍。人類(lèi)的太空探測(cè)活動(dòng)大大推動(dòng)了外星探測(cè)機(jī)器人的發(fā)展。自上世紀(jì)70年代以來(lái),外星球探測(cè)器已被廣泛用于探索外太空天體、行星表面的采樣等任務(wù)。目前的針對(duì)火星于月球的探測(cè)任務(wù)中外星探測(cè)器起到了重要的作用,為地外行星的探測(cè)做出了巨大貢獻(xiàn),得到了大量的氣象、圖片、礦物資料。玉兔號(hào)月球探測(cè)器如圖(1-3)所攜帶的大量月壤給我國(guó)的地外活動(dòng)與探索取得了巨大的進(jìn)步。在智能移動(dòng)機(jī)器人領(lǐng)域,星球探測(cè)機(jī)器人已成為地外天體探測(cè)日益發(fā)展的重要核心裝備。中國(guó)未來(lái)的月球移動(dòng)科研站、火星物質(zhì)采樣返回、小行星的探測(cè)等外星探測(cè)任務(wù)對(duì)星球探測(cè)智能移動(dòng)機(jī)器人的需求已日益加深。圖1-3玉兔號(hào)月球探測(cè)器與本課題相關(guān)的國(guó)內(nèi)外研究現(xiàn)狀國(guó)外智能車(chē)控制系統(tǒng)研究現(xiàn)狀美國(guó)最早開(kāi)發(fā)了一款智能跟隨移動(dòng)機(jī)器人,名為“Shakey”如圖(1-4)所示。該機(jī)器人配備了傳感器測(cè)距技術(shù)和視覺(jué)處理技術(shù),能夠感知外界和周?chē)h(huán)境,具有一定程度的智能化。然而,由于當(dāng)時(shí)視覺(jué)技術(shù)和傳感器技術(shù)尚不成熟,Shakey的工作表現(xiàn)并不十分穩(wěn)定。到了1991年,一所美國(guó)大學(xué)將視覺(jué)跟隨技術(shù)作為重點(diǎn)研究方向,成功將其應(yīng)用于無(wú)人機(jī)技術(shù)。同年,該大學(xué)還研發(fā)出一種新型的視覺(jué)定位系統(tǒng),能夠通過(guò)圖像分析和算法處理實(shí)現(xiàn)對(duì)移動(dòng)目標(biāo)的追蹤和定位。在1996年,Nordlund等人利用瑞典國(guó)家發(fā)展委員會(huì)的資助,將移動(dòng)目標(biāo)追蹤技術(shù)引入機(jī)器人領(lǐng)域進(jìn)行研究。而在2005年,美國(guó)首次推出了首款四足腿式機(jī)器人BigDog,如圖(1-5)所示。圖1-4Shakey智能跟隨移動(dòng)機(jī)器人圖1-5腿足式機(jī)器人BigDogBigDog機(jī)器人配備了多種傳感器,利用視覺(jué)技術(shù)和傳感器技術(shù)來(lái)實(shí)現(xiàn)避障和位置追蹤功能。然而,傳感器容易受到無(wú)線(xiàn)信號(hào)干擾,導(dǎo)致跟蹤不夠精確。在2013年,美國(guó)研發(fā)了一款名為CaddyTrek如圖(1-6)所示的高爾夫球場(chǎng)球童機(jī)器人,正面和底部都裝有傳感器,利用相關(guān)技術(shù)實(shí)時(shí)跟隨用戶(hù)。然而,由于價(jià)格昂貴,很難被廣泛普及。作為機(jī)器人研究的先驅(qū)國(guó)家,隨著科技的發(fā)展,美國(guó)的機(jī)器人研發(fā)技術(shù)更加先進(jìn)和全面,使其處于領(lǐng)先地位[5]。日本被譽(yù)為“機(jī)器人王國(guó)”,其機(jī)器人研究技術(shù)不斷改進(jìn)和提高。2016年,日本研發(fā)了Atlas機(jī)器人如圖(1-7)所示,配備立體攝像機(jī)和定位雷達(dá),能夠?qū)崿F(xiàn)自主定位和導(dǎo)航功能。2017年,日本的WHILL公司與松下電子合作,推出了一款名為WHILLNEXT如圖(1-8)的自主駕駛機(jī)器人,也稱(chēng)為輪椅機(jī)器人。該機(jī)器人搭載了傳感器定位和圖像識(shí)別技術(shù),能夠通過(guò)移動(dòng)的方向和距離計(jì)算自身位置。然而,這兩款機(jī)器人在空間狹窄或光線(xiàn)較暗的環(huán)境下存在較大局限性。圖1-6CaddyTrek圖1-7Atlas圖1-8WHILLNEXT2017年,意大利一位科學(xué)家發(fā)明了一款名為Gita的機(jī)器人,如圖(1-9)所示。該機(jī)器人利用攝像頭識(shí)別位置進(jìn)行定位,同時(shí)配備傳感器用于避障,采用GPS跟蹤用戶(hù)并跟隨其后。然而,在大量實(shí)驗(yàn)中發(fā)現(xiàn),Gita機(jī)器人存在方向和定位錯(cuò)誤的問(wèn)題,而且其樣品不完整,用戶(hù)需要配備一條帶有攝像頭的皮帶。另外,2012年西班牙發(fā)明了一款行李箱機(jī)器人,如圖(1-10)所示。該機(jī)器人利用藍(lán)牙傳感器與手機(jī)藍(lán)牙相連,并通過(guò)控制器控制電機(jī)速度實(shí)現(xiàn)跟隨功能。目前,這種跟隨行李箱的應(yīng)用相對(duì)較為普及,但在復(fù)雜環(huán)境下其穩(wěn)定性較差,而且跟隨距離有限[6]。圖1-9Gita圖1-10跟隨行李箱國(guó)內(nèi)智能車(chē)控制系統(tǒng)研究現(xiàn)狀國(guó)內(nèi)智能移動(dòng)機(jī)器人的研究相對(duì)起步較晚,目前許多項(xiàng)目仍處于單項(xiàng)研究階段。其主要研究方向包括以下五個(gè)關(guān)鍵技術(shù)方面:全局路徑規(guī)劃基于地圖的研究;局部路徑規(guī)劃基于傳感器信息的技術(shù)研究;路徑規(guī)劃仿真技術(shù)的探索;信息融合與傳感技術(shù)的研究;智能機(jī)器人設(shè)計(jì)與實(shí)現(xiàn)[7]。中國(guó)在智能機(jī)器人領(lǐng)域的研究起步較晚,但隨著國(guó)內(nèi)高科技產(chǎn)業(yè)的迅速發(fā)展,政府對(duì)創(chuàng)新項(xiàng)目尤其是機(jī)器人項(xiàng)目的投資力度不斷增加。盡管與其他國(guó)家先進(jìn)水平相比,中國(guó)的移動(dòng)機(jī)器人技術(shù)項(xiàng)目在產(chǎn)業(yè)化和商業(yè)化方面還存在較大差距,但經(jīng)過(guò)多年努力,已經(jīng)取得了一些重大突破。一些研究機(jī)構(gòu)和高校如香港城市大學(xué)、中科院沈陽(yáng)自動(dòng)化研究所、中國(guó)科學(xué)院自動(dòng)化所以及哈爾濱工業(yè)大學(xué)等,都開(kāi)展了自動(dòng)導(dǎo)航、服務(wù)機(jī)器人、防爆機(jī)器人、AGV等智能機(jī)器人項(xiàng)目的研究。早在1999年,清華大學(xué)等知名研究院和高校就開(kāi)始了機(jī)器人目標(biāo)追蹤技術(shù)的研究,2001年清華大學(xué)等高校研發(fā)出一套基于視覺(jué)的偵察系統(tǒng),雖然當(dāng)時(shí)的分辨率較低,但處理速度已達(dá)每秒12幀,該系統(tǒng)可通過(guò)圖像處理和無(wú)線(xiàn)通信技術(shù)對(duì)目標(biāo)物體進(jìn)行追蹤和檢測(cè)。2005年,中國(guó)科學(xué)院又研發(fā)出一款基于視覺(jué)的伺服機(jī)器人系統(tǒng),能夠?qū)崟r(shí)追蹤速度不到0.3m/s的目標(biāo)物體,利用圖像處理技術(shù)實(shí)現(xiàn)。2013年,“嫦娥三號(hào)”月球探測(cè)車(chē)成功著陸月球,利用大量傳感器和導(dǎo)航自制系統(tǒng)在月球上穩(wěn)定行駛并進(jìn)行勘測(cè),采集樣品并分析,得到大量科學(xué)數(shù)據(jù)。2018年,“嫦娥四號(hào)”如圖(1-11)成功登月,成為全球首個(gè)登上月球背面的探測(cè)器,具有避障和自主導(dǎo)航巡視功能,是中國(guó)航天領(lǐng)域的重要里程碑。百度公司在2015年研發(fā)了國(guó)內(nèi)首個(gè)可在城市道路和高速上運(yùn)行的無(wú)人駕駛機(jī)器人如圖(1-12)所示,也稱(chēng)為輪式機(jī)器人,通過(guò)雷達(dá)和多種傳感器等算法技術(shù)進(jìn)行定位分析[8]。浙江工業(yè)大學(xué)設(shè)計(jì)研發(fā)了一款基于視覺(jué)的目標(biāo)跟隨智能移動(dòng)機(jī)器人如圖(1-13)所示,采用低成本的視覺(jué)傳感器,但輸出維度高,易受溫度和環(huán)境影響。圖1-11嫦娥四號(hào)圖1-12無(wú)人駕駛車(chē)圖1-13跟隨機(jī)器人2022年,國(guó)內(nèi)疫情的變化對(duì)智能移動(dòng)機(jī)器人市場(chǎng)產(chǎn)生了顯著影響。全年增速?gòu)哪瓿醯木徛D(zhuǎn)變?yōu)槟昴┑目焖僭鲩L(zhǎng),尤其在動(dòng)力電池、離散制造、光伏和新能源汽車(chē)等領(lǐng)域增速顯著。項(xiàng)目需求迅速增多,項(xiàng)目規(guī)模不斷擴(kuò)大,可復(fù)制性也越來(lái)越強(qiáng)。這段時(shí)間展現(xiàn)了“物競(jìng)天擇,適者生存”的真諦。在疫情危機(jī)中,那些追求高品質(zhì)、規(guī)??蓮?fù)制化和優(yōu)體驗(yàn)的企業(yè)獲得了蓬勃發(fā)展的良機(jī)。目前,中國(guó)智能化移動(dòng)機(jī)器人市場(chǎng)的發(fā)展機(jī)遇主要體現(xiàn)在國(guó)內(nèi)多元化的場(chǎng)景需求上。隨著產(chǎn)業(yè)變革和科技革命的加速推進(jìn),機(jī)器人技術(shù)與云計(jì)算、5G通信、人工智能等技術(shù)深度融合,其應(yīng)用的深度和廣度也在不斷擴(kuò)展?,F(xiàn)代工業(yè)生產(chǎn)對(duì)移動(dòng)機(jī)器人產(chǎn)品的需求日益增強(qiáng)。同時(shí),移動(dòng)機(jī)器人正加速滲透到新的行業(yè),出現(xiàn)了越來(lái)越多跨領(lǐng)域、跨行業(yè)的應(yīng)用融合現(xiàn)象[9]。這些年來(lái),國(guó)內(nèi)不斷涌現(xiàn)各種新技術(shù)、模式、產(chǎn)品和業(yè)態(tài),這體現(xiàn)了我國(guó)移動(dòng)機(jī)器人在技術(shù)上的競(jìng)爭(zhēng)力不斷增強(qiáng),將進(jìn)一步推動(dòng)我國(guó)移動(dòng)機(jī)器人行業(yè)走向更加廣闊的未來(lái)。本文的主要研究?jī)?nèi)容本文的研究?jī)?nèi)容主要是以制作以ROS機(jī)器人操作系統(tǒng)為基本框架的語(yǔ)音控制移動(dòng)機(jī)器人,首先會(huì)對(duì)該聲音控制移動(dòng)小車(chē)做一個(gè)系統(tǒng)的設(shè)計(jì)方案,包括總體設(shè)計(jì)方案和結(jié)構(gòu)介紹,其次介紹硬件方面的分析與選型,最后是系統(tǒng)軟件部分的設(shè)計(jì)分析與選擇。在這次畢業(yè)設(shè)計(jì)中,系統(tǒng)軟件部分的核心和至關(guān)重要的部分是ROS機(jī)器人操作系統(tǒng)。機(jī)器人作為高度復(fù)雜的系統(tǒng),其設(shè)計(jì)涵蓋了諸多方面,包括機(jī)械結(jié)構(gòu)設(shè)計(jì)、機(jī)械加工、上層設(shè)計(jì)以及嵌入式軟件設(shè)計(jì)等,這需要對(duì)各種軟硬件進(jìn)行集成??梢哉f(shuō),機(jī)器人系統(tǒng)是當(dāng)今工業(yè)體系中的集大成者。ROS是RobotOperatingSystem的縮寫(xiě),是一個(gè)開(kāi)源的機(jī)器人操作系統(tǒng),集成了大量的庫(kù)、工具和協(xié)議,提供了類(lèi)似于操作系統(tǒng)的功能,旨在簡(jiǎn)化對(duì)機(jī)器人的控制[10]。此外,ROS還提供了用于在多臺(tái)電腦和多個(gè)系統(tǒng)上獲取、編寫(xiě)、構(gòu)建和運(yùn)行代碼的庫(kù)和工具??梢哉f(shuō),ROS在某種程度上相當(dāng)于是“機(jī)器人的框架”,其設(shè)計(jì)者將其打造成了一個(gè)集工具軟件包、機(jī)器人高層技能等的超級(jí)工具。本文會(huì)著重簡(jiǎn)紹ROS在移動(dòng)機(jī)器人主機(jī)即樹(shù)莓派上的安裝方法和系統(tǒng)的對(duì)樹(shù)莓派進(jìn)行介紹,其次對(duì)ROS環(huán)境的搭建方式做詳細(xì)的介紹,最后對(duì)ROS系統(tǒng)在本次畢業(yè)設(shè)計(jì)中所用到的核心內(nèi)容即信息節(jié)點(diǎn)的發(fā)布與訂閱的相關(guān)功能進(jìn)行總體的介紹。在上文中介紹過(guò)移動(dòng)機(jī)器人的設(shè)計(jì)是當(dāng)今工業(yè)體系中的集大成者,因此機(jī)器人的設(shè)計(jì)包含了機(jī)械結(jié)構(gòu)的設(shè)計(jì)、機(jī)械加工、上層設(shè)計(jì)和嵌入式軟件設(shè)計(jì)等是各種軟件和硬件的集成,如圖(1-14)因此本文會(huì)對(duì)這些方面做系統(tǒng)和全面的介紹。除了上層的ROS系統(tǒng)外在硬件方面針對(duì)下位機(jī)電機(jī)驅(qū)動(dòng)也有相關(guān)的介紹,如驅(qū)動(dòng)模塊與驅(qū)動(dòng)板的通訊機(jī)制;下位機(jī)驅(qū)動(dòng)板的程序設(shè)計(jì),除此之外還有下位機(jī)驅(qū)動(dòng)板的測(cè)速原理即測(cè)速方法以及測(cè)速程序的設(shè)計(jì),最后也是最重要的下位機(jī)與上位機(jī)的串口通訊。圖1-14移動(dòng)機(jī)器人設(shè)計(jì)原理圖除上述外還有對(duì)小車(chē)整體的導(dǎo)航功能的調(diào)試,包括導(dǎo)航和路徑規(guī)劃的實(shí)現(xiàn),路徑規(guī)劃是導(dǎo)航中的一項(xiàng)核心功能,只有合理的路徑規(guī)劃才能保證機(jī)器人能夠安全、快速、準(zhǔn)確、節(jié)能的到達(dá)目的地,為實(shí)現(xiàn)這一功能在ROS的導(dǎo)航功能包navigation中為我們開(kāi)發(fā)者提供了move_base功能包來(lái)實(shí)現(xiàn)路徑規(guī)劃的功能。除此之外還有作為傳感器的雷達(dá)與語(yǔ)音模塊的調(diào)試最后實(shí)現(xiàn)總體功能。系統(tǒng)總體設(shè)計(jì)方案分析系統(tǒng)總體設(shè)計(jì)方案及結(jié)構(gòu)介紹本次畢業(yè)設(shè)計(jì)的主題是基于ROS的語(yǔ)音控制機(jī)器人,這個(gè)機(jī)器人系統(tǒng)實(shí)質(zhì)上是一個(gè)集成了機(jī)械和電子的一體化設(shè)備,其設(shè)計(jì)也是高度集成的系統(tǒng)性實(shí)現(xiàn)。這款移動(dòng)機(jī)器人采用輪式結(jié)構(gòu),可以整體劃分為三個(gè)主要部分:上位機(jī)部分、下位機(jī)部分和傳感器部分。該移動(dòng)機(jī)器人采用兩輪差速驅(qū)動(dòng),在下位機(jī)部分的底盤(pán)結(jié)構(gòu)中為保持機(jī)器人機(jī)身的穩(wěn)定性因此加裝兩個(gè)萬(wàn)向輪來(lái)作為支撐如圖(2-1)所示。動(dòng)力采用編碼電機(jī)來(lái)提供,之所以使用編碼電機(jī)是考慮到移動(dòng)機(jī)器人有路徑規(guī)劃和定位的功能因此該移動(dòng)機(jī)器人需要實(shí)時(shí)監(jiān)測(cè)移動(dòng)速度。下位機(jī)最主要的部分是電機(jī)驅(qū)動(dòng)系統(tǒng),電機(jī)驅(qū)動(dòng)系統(tǒng)分為電機(jī)控制板和電機(jī)驅(qū)動(dòng)驅(qū)動(dòng)板。電機(jī)控制板將電機(jī)轉(zhuǎn)向和轉(zhuǎn)速命令傳遞到電機(jī)驅(qū)動(dòng)板,電機(jī)驅(qū)動(dòng)板將運(yùn)動(dòng)信號(hào)傳遞至電機(jī),電機(jī)提供動(dòng)力。這里之所以需要電機(jī)驅(qū)動(dòng)板是因?yàn)殡姍C(jī)控制板的驅(qū)動(dòng)電壓僅有直流5伏,而電機(jī)的驅(qū)動(dòng)電壓為直流12伏,機(jī)器人的測(cè)速功能也是由電機(jī)控制板來(lái)實(shí)現(xiàn)的。圖2-1移動(dòng)機(jī)器人底盤(pán)上述為移動(dòng)機(jī)器人的下位機(jī)部分,與下位機(jī)相連的輸入速度和方向指令的為上位機(jī)部分。上位機(jī)部分使用的是安裝了18.04版本的ROS機(jī)器人操作系統(tǒng)的樹(shù)莓派板。樹(shù)莓派是一款專(zhuān)為學(xué)習(xí)計(jì)算機(jī)編程而設(shè)計(jì)的教育類(lèi)應(yīng)用硬件,大小只有信用卡大小,系統(tǒng)基于Linux,因此可以很方便地安裝ROS機(jī)器人操作系統(tǒng)。傳感器部分選用思嵐的室內(nèi)用雷達(dá)與麥克風(fēng)陣列。雷達(dá)是用于掃描機(jī)器人周?chē)h(huán)境用于識(shí)別障礙物和分析障礙物信息從而實(shí)現(xiàn)定位和路徑規(guī)劃功能的。激光雷達(dá)主要通過(guò)發(fā)射激光束,該激光束直射到物體上并反射回激光雷達(dá)。通過(guò)三角法或TOF測(cè)距,激光雷達(dá)可以計(jì)算出與障礙物之間的距離,并通過(guò)反射信號(hào)的特征來(lái)分析物體的特性,比如材質(zhì)。麥克風(fēng)陣列是由多個(gè)聲學(xué)傳感器組成的系統(tǒng),這些傳感器排列在一起,用于采樣和處理聲場(chǎng)的空間特性。上述即為此次畢業(yè)設(shè)計(jì)的關(guān)于系統(tǒng)總體設(shè)計(jì)方案和結(jié)構(gòu)方面的介紹,總共是集合了搭載了ROS機(jī)器人操作系統(tǒng)的樹(shù)莓派作為上位機(jī)和arduino加驅(qū)動(dòng)板、電機(jī)組成的下位機(jī)和雷達(dá)、麥克風(fēng)陣列組成的傳感器部分等組成,具體結(jié)構(gòu)圖如圖(2-2)所示。圖2-2移動(dòng)機(jī)器人的總體結(jié)構(gòu)圖系統(tǒng)硬件部分的分析與選型系統(tǒng)的硬件部分主要分為上位機(jī)的硬件部分即樹(shù)莓派與各類(lèi)電源與信號(hào)的引出線(xiàn),下位機(jī)部分即ArduinoMega2560電機(jī)控制板和L298P電機(jī)驅(qū)動(dòng)板,底盤(pán)部分即帶編碼器電機(jī)和車(chē)輪及萬(wàn)向輪以及車(chē)架,傳感器部分為思嵐雷達(dá)和麥克風(fēng)陣列。上位機(jī)部分,由于ROS系統(tǒng)需要的控制系統(tǒng)的選擇是多樣的,一般常用的是基于ARM、x86等架構(gòu)的處理器,比如工控機(jī)、PC端、樹(shù)莓派等。不同的處理器肯定都存在一定的優(yōu)缺點(diǎn),例如工控機(jī)和PC端,處理器的性能強(qiáng)大,但是體積大、功耗高、靈活性差。相反的嵌入式系統(tǒng)則體積小有的僅有一張信用卡的大小,功耗低;往往只需要5v的直流電就可以驅(qū)動(dòng),靈活性高;可以方便的拆裝和攜帶。但嵌入式也有致命的缺陷就是處理器的性能較弱,只能運(yùn)行較為簡(jiǎn)單的指令。在此次的畢業(yè)設(shè)計(jì)中因?yàn)檩^為簡(jiǎn)單不需要太強(qiáng)悍的處理性能,而且用PC端筆記本電腦需要較大的底盤(pán)和功率較大的電機(jī);也需要較大的空間來(lái)經(jīng)行測(cè)試,因此此次的畢業(yè)設(shè)計(jì)選用嵌入式處理器即樹(shù)莓派4b如圖(2-3)。圖2-3樹(shù)莓派RaspberryPi(樹(shù)莓派)是一款教育類(lèi)應(yīng)用硬件,專(zhuān)為學(xué)習(xí)計(jì)算機(jī)編程而設(shè)計(jì)。它是一臺(tái)微型電腦,大小僅有信用卡大小,系統(tǒng)基于Linux,可以安裝ROS機(jī)器人操作系統(tǒng)。樹(shù)莓派采用ARM架構(gòu)的嵌入式主板,主要使用MicroSD/SD卡作為內(nèi)存硬盤(pán)。周?chē)鋫溆?或4個(gè)USB接口和一個(gè)以太網(wǎng)接口,可連接鼠標(biāo)、鍵盤(pán)和網(wǎng)絡(luò)。它還擁有HDMI高清視頻輸出接口和視頻模擬信號(hào)的電視輸出接口。所有這些組件都集成在一張和行用卡大小相似的主板上,具備基本的PC功能,只需連接鍵盤(pán)和電視機(jī),就可以執(zhí)行文字處理、電子表格、高清視頻播放、游戲等功能。要讓樹(shù)莓派主板正常運(yùn)行,需要安裝一些必要的配件。樹(shù)莓派的周邊配件種類(lèi)豐富,包括但不限于:SD卡、USB電源、讀卡器、顯示屏、HDMI連接線(xiàn)、鼠標(biāo)、鍵盤(pán)、保護(hù)殼、風(fēng)扇等。此外,還可以添加各種傳感器,如溫度傳感器、雷達(dá)、麥克風(fēng)陣列等。對(duì)于畢業(yè)設(shè)計(jì)來(lái)說(shuō),所需的配件相對(duì)簡(jiǎn)單。下位機(jī)的硬件分別為ArduinoMega2560板和L298P電機(jī)驅(qū)動(dòng)模塊。Arduino是一款易于上手、靈活方便的開(kāi)源電子原型平臺(tái)。它允許用戶(hù)進(jìn)行簡(jiǎn)單的電路控制,并能夠通過(guò)各種傳感器感知環(huán)境,然后通過(guò)控制馬達(dá)、燈光或其他設(shè)備來(lái)影響環(huán)境并反饋信息。ArduinoMega2560如圖(2-4)所示。Arduino是一種“集成電路”也稱(chēng)為“微電路”、“微芯片”或“芯片”。集成電路其實(shí)是一種微型電子器件或配件,通過(guò)集成電路再結(jié)合外圍的一些電子元器件、傳感器等,可以用于感知環(huán)境即濕度、溫度、聲音、光線(xiàn)等,也可以用來(lái)影響環(huán)境例如調(diào)節(jié)電機(jī)的轉(zhuǎn)速和控制燈光的亮度和控制燈的開(kāi)關(guān)。但是傳統(tǒng)集成電路的應(yīng)用比較繁瑣,Arduino的出現(xiàn)才使得以往作為高度專(zhuān)業(yè)的集成電路現(xiàn)在變得平易近人。電機(jī)驅(qū)動(dòng)板的可選則型號(hào)比較多,比如:L298N、TB6612、L298P等,但是用這些電機(jī)驅(qū)動(dòng)板與Arduino;電機(jī)相連時(shí),需要使用大量杜邦線(xiàn),接線(xiàn)會(huì)顯得很凌亂,而且需要大量的此類(lèi)知識(shí),因此這次的畢業(yè)設(shè)計(jì)會(huì)采用一款L298P優(yōu)化后的電機(jī)驅(qū)動(dòng)板,如圖(2-5),該驅(qū)動(dòng)板將接線(xiàn)端子、供電端子、保護(hù)電路、L298P芯片均集成在一張電路板上,直接扦插在Arduinomega2560板上即可。圖2-4ArduinoMega2560圖2-5L298P電機(jī)驅(qū)動(dòng)板L298P是一種集成的雙全橋驅(qū)動(dòng)器芯片,可用于控制步進(jìn)電機(jī)或直流電機(jī)。L298P具有多種多樣的功能,包括電流控制、雙全橋輸出、過(guò)熱保護(hù)等特性。L298P芯片通常被用于各種各樣的電機(jī)驅(qū)動(dòng)應(yīng)用,例如機(jī)器人、打印機(jī)、小車(chē)等。通過(guò)對(duì)L298P芯片的控制用戶(hù)可以對(duì)電機(jī)的轉(zhuǎn)向和速度經(jīng)行控制。底盤(pán)的硬件有車(chē)架、萬(wàn)向輪、車(chē)輪、帶編碼器電機(jī)。車(chē)架、萬(wàn)向輪、車(chē)輪不需要太多的介紹,這里最主要的部分是有編碼器的直流減速電機(jī)如圖(2-6)所示。圖2-6編碼器DC減速電機(jī)在ROS智能車(chē)中常使用帶有編碼器的直流減速電機(jī)。這種電機(jī)主要由三部分組成:電機(jī)主體、減速箱和編碼器。電機(jī)主體通過(guò)輸入軸與減速箱連接,減速箱能夠有效地降低電機(jī)的轉(zhuǎn)速,并提升其輸出的力矩。編碼器位于電機(jī)尾部的AB相類(lèi)型的霍爾編碼器,通過(guò)讀取編碼器輸出的波形圖,可以計(jì)算電機(jī)的轉(zhuǎn)速和車(chē)輛的前進(jìn)速度,并控制電機(jī)的轉(zhuǎn)向。帶編碼器的直流減速電機(jī)的端子排布方式如下:M1是電機(jī)電源的正極(和M2對(duì)調(diào)可以實(shí)現(xiàn)正反轉(zhuǎn)),GND是編碼器電源的負(fù)極,C2和C1是編碼器的信號(hào)線(xiàn),VCC是編碼器電源的正極,M2是電機(jī)電源的負(fù)極(和M1對(duì)調(diào)可以實(shí)現(xiàn)正反轉(zhuǎn)),如圖(2-7)所示。圖2-7電機(jī)端子圖傳感器部分選用的分別為激光雷達(dá)與麥克風(fēng)陣列。此次畢業(yè)設(shè)計(jì)所使用的是思嵐A1高速版激光雷達(dá)的外觀(guān)如下圖所示(圖2-8)。激光雷達(dá)是目前機(jī)器人制造和無(wú)人車(chē)領(lǐng)域中最為重要、關(guān)鍵且常見(jiàn)的傳感器之一。它是機(jī)器人感知外界環(huán)境的高效工具和重要手段。雷達(dá)是用于掃描機(jī)器人周?chē)h(huán)境用于識(shí)別障礙物和分析障礙物信息從而實(shí)現(xiàn)定位和路徑規(guī)劃功能的。激光雷達(dá)主要通過(guò)發(fā)射激光束,將光束直射到物體上,然后測(cè)量反射回來(lái)的光束,利用三角法或TOF測(cè)距等方法計(jì)算出與障礙物之間的距離。此外,激光雷達(dá)還能分析反射回來(lái)的信號(hào)特征,從而確定物體的特征,例如其材質(zhì)。此次畢業(yè)設(shè)計(jì)所選用的雷達(dá)是在思嵐A1的基礎(chǔ)上的改良版,在A1的基礎(chǔ)上集成了一個(gè)撥動(dòng)開(kāi)關(guān)和一個(gè)typec的接口以及一個(gè)掃描頻率調(diào)節(jié)器,可以實(shí)現(xiàn)7-16Hz無(wú)極調(diào)節(jié)。圖2-8思嵐A1高速版激光雷達(dá)麥克風(fēng)陣列是一套特殊的聲學(xué)信號(hào)的處理裝置,一種麥克風(fēng)陣列由一組位于不同空間位置的全向麥克風(fēng)組成,并按照特定的規(guī)則布置。這種布局使得麥克風(fēng)陣列能夠?qū)臻g中傳播的聲音信號(hào)進(jìn)行空間采樣,從而在采集到的信號(hào)中包含了聲音源在空間中的位置信息。麥克風(fēng)陣列的工作原理其實(shí)主要是利用波束形成技術(shù)和聲源定位技術(shù),可以實(shí)現(xiàn)對(duì)目標(biāo)聲源的定位和跟蹤。通過(guò)到達(dá)時(shí)間差來(lái)計(jì)算聲源與陣列的距離和角度,然后在期望的方向上形成一個(gè)波束,只接收來(lái)自該方向的信號(hào),從而提取聲源并抑制噪聲。本次畢業(yè)設(shè)計(jì)選用的科大訊飛麥克風(fēng)陣列如圖(2-9)所示,該設(shè)備具有多項(xiàng)優(yōu)點(diǎn)主要包括:功耗低,最大使用電流200mA/5V,用鋰電池供電就可以運(yùn)用于移動(dòng)場(chǎng)合使用??苫芈曄齼?yōu)化,回聲消除效果得到提升,噪音消除更干凈,并且可以通過(guò)串口來(lái)設(shè)置設(shè)備回聲的消除增益,可適配不同功率的喇叭。輸出的聲音可調(diào)節(jié),可以通過(guò)串口來(lái)設(shè)置輸出聲音的大小,來(lái)方便用戶(hù)調(diào)節(jié)??梢灾С炙柠満土湹那袚Q,只需要用戶(hù)替換對(duì)應(yīng)的麥克風(fēng)板卡就能夠?qū)崿F(xiàn)不同的配置。錄音效果非常優(yōu)秀,底噪處理非常干凈,在5米范圍內(nèi)設(shè)備信噪比很高,所以對(duì)于遠(yuǎn)場(chǎng)識(shí)別來(lái)說(shuō)非常重要。相應(yīng)的所選用的這款麥克風(fēng)陣列也存在一些缺點(diǎn):在某些情況下有可能出現(xiàn)噪聲較大的問(wèn)題,這一般是由于共地干擾、信號(hào)線(xiàn)的質(zhì)量問(wèn)題或電源的質(zhì)量存在問(wèn)題所導(dǎo)致的。麥克風(fēng)陣列一定要使用喚醒詞激活才能開(kāi)始工作,這有可能會(huì)使用戶(hù)的使用難度增加。如果麥克風(fēng)距離喇叭太近,或者使喇叭沖向了麥克風(fēng)陣列,或者是麥克風(fēng)陣列沒(méi)有加裝減震墊來(lái)隔離,這可能會(huì)導(dǎo)致設(shè)備回聲消除功能受到影響從而回聲消除不干凈。圖2-9麥克風(fēng)陣列系統(tǒng)軟件部分的設(shè)計(jì)分析與選擇在上一節(jié)中系統(tǒng)的介紹了所選用的硬件類(lèi)型,根據(jù)所選用的硬件可確定軟件的種類(lèi)。首先根據(jù)整個(gè)系統(tǒng)的需求選用的上位機(jī)系統(tǒng)軟件是ROS的melodic版本。在此次畢業(yè)設(shè)計(jì)中最為重要的;最為核心的非ROS系統(tǒng)莫屬了如圖(2-10)。ROS是機(jī)器人操作系統(tǒng)的簡(jiǎn)稱(chēng),是一個(gè)開(kāi)源的操作系統(tǒng),專(zhuān)為機(jī)器人開(kāi)發(fā)而設(shè)計(jì)。ROS集成了大量的庫(kù)、工具和協(xié)議,提供了類(lèi)似于操作系統(tǒng)的功能,旨在簡(jiǎn)化對(duì)機(jī)器人的控制。它還提供了跨多臺(tái)電腦和多個(gè)系統(tǒng)的代碼獲取、編寫(xiě)、構(gòu)建和運(yùn)行的工具和庫(kù)??梢哉f(shuō),ROS在某種程度上扮演著機(jī)器人開(kāi)發(fā)的框架角色,將工具軟件包、通訊機(jī)制、機(jī)器人生態(tài)系統(tǒng)以及機(jī)器人高層技能整合為一個(gè)超級(jí)工具。由于機(jī)器人體系的復(fù)雜性和龐大性,迄今為止沒(méi)有任何個(gè)人、組織或公司能夠獨(dú)立完成系統(tǒng)性的機(jī)器人開(kāi)發(fā)研究工作。因此,一種更合適的策略是讓機(jī)器人的研發(fā)者專(zhuān)注于自己擅長(zhǎng)的領(lǐng)域,而將其他模塊直接利用由相關(guān)領(lǐng)域更專(zhuān)業(yè)的研發(fā)團(tuán)隊(duì)實(shí)現(xiàn)的成果。這種合作模式使得研究者能夠更高效地利用各自的專(zhuān)業(yè)知識(shí),推動(dòng)機(jī)器人技術(shù)的發(fā)展。這種基于“復(fù)用”的分工協(xié)作遵循了“不重復(fù)發(fā)明輪子”的原則[10],這樣顯然是可以提高機(jī)器人的研發(fā)效率的。尤其是隨著機(jī)器人軟件庫(kù)越來(lái)越龐大,硬件越來(lái)越豐富這種模塊化和復(fù)用性開(kāi)發(fā)需求也越發(fā)的強(qiáng)烈。在上述的大背景下,在
2007
年,一家名叫柳樹(shù)車(chē)庫(kù)的機(jī)器人開(kāi)發(fā)公司發(fā)布了
ROS;機(jī)器人操作系統(tǒng),ROS是一套機(jī)器人開(kāi)發(fā)通用的軟件框架,可以提升各種功能模塊復(fù)用性,隨著該系統(tǒng)的不斷完善與迭代,如今的ROS機(jī)器人操作系統(tǒng)已經(jīng)成為了機(jī)器人開(kāi)發(fā)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。圖2-10ROS版本ROS擁有以下優(yōu)點(diǎn)。ROS各個(gè)模塊之間可以通過(guò)發(fā)布和訂閱消息的方式進(jìn)行通信,這提高了軟件的可擴(kuò)展性和可維護(hù)性。ROS可以支持多種編程語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā),如python、C++等,這使得開(kāi)發(fā)者在進(jìn)行開(kāi)發(fā)時(shí)可以選擇自己所熟悉的語(yǔ)言,同時(shí)這樣也有利于編程代碼的復(fù)用和移植。這樣就降低了開(kāi)發(fā)的難度。ROS還提供了一些豐富的可視化工具,如rqt、RViz等這樣就可以方便開(kāi)發(fā)者經(jīng)行數(shù)據(jù)分析、3D建模和調(diào)試。ROS還具有開(kāi)放性和社區(qū)支持,ROS是開(kāi)源的,擁有豐富的資源和龐大的社區(qū),開(kāi)發(fā)者可以獲取到大量的示例代碼、教程和解決方案,同時(shí)也可以通過(guò)社區(qū)這個(gè)平臺(tái)和其他開(kāi)發(fā)者進(jìn)行學(xué)習(xí)和交流。當(dāng)然ROS也具有一定的局限性。ROS在實(shí)時(shí)性的方面具有一定的問(wèn)題,由于消息傳遞機(jī)制和分布式設(shè)計(jì)ROS在處理實(shí)時(shí)性的要求較高的任務(wù)有可能會(huì)受到一定程度的限制,雖然在ROS2.0版本在實(shí)時(shí)性方面進(jìn)行了改造,但是仍然還需要去搭配其他的實(shí)時(shí)性更強(qiáng)的硬件或系統(tǒng)進(jìn)行使用。ROS系統(tǒng)的框架結(jié)構(gòu)相對(duì)復(fù)雜,這樣對(duì)于初學(xué)者來(lái)說(shuō)肯定需要花費(fèi)大量的時(shí)間去學(xué)習(xí)和理解,同時(shí),由于ROS具有開(kāi)源的性質(zhì),因此它的代碼風(fēng)格和質(zhì)量可能都會(huì)存在巨大的差異,這樣一來(lái)也會(huì)增強(qiáng)使用和學(xué)習(xí)的難度。最后就是依賴(lài)性問(wèn)題,ROS的功能包之間還存在依賴(lài)關(guān)系,這樣就使得在配置和部署ROS系統(tǒng)時(shí)就可能需要考慮這些依賴(lài)的依賴(lài)性問(wèn)題,此外,由于ROS的跨平臺(tái)性,不同硬件平臺(tái)和操作系統(tǒng)之間的兼容性問(wèn)題就會(huì)導(dǎo)致很多額外的工作量。總的來(lái)說(shuō),ROS機(jī)器人操作系統(tǒng)是一個(gè)功能性很強(qiáng)大且靈活的操作系統(tǒng),具有諸多優(yōu)點(diǎn),但如上述所言也存在許多需要改進(jìn)的方面。因此在選用ROS開(kāi)發(fā)時(shí)需要根據(jù)具體的技術(shù)要求和項(xiàng)目需求進(jìn)行綜合的考慮。在上節(jié)中可知在硬件方面此次畢業(yè)設(shè)計(jì)選用了嵌入式電機(jī)控制板ArduinoMega2560。首先準(zhǔn)備一塊Arduino板型號(hào)為ArduinoMega2560,還需要準(zhǔn)備軟件的環(huán)境,要安裝ArduinoIDE,如圖(2-11)。Arduino的開(kāi)發(fā)語(yǔ)言系統(tǒng)最初設(shè)計(jì)時(shí)融合了多種計(jì)算機(jī)語(yǔ)言的特點(diǎn),形成了一種簡(jiǎn)潔而綜合的語(yǔ)言。它的語(yǔ)法更接近于C++,但不支持C++的異常處理,也沒(méi)有STL庫(kù)。開(kāi)發(fā)者可以將其視為精簡(jiǎn)版的C++語(yǔ)言。在Arduino的基本語(yǔ)法中,包括庫(kù)文件包含、宏定義、函數(shù)、變量、繼承、類(lèi)等,與C++語(yǔ)言非常相似。除此之外Arduino中的語(yǔ)言還有一些API實(shí)現(xiàn)。除上述外ArduinoIDE還提供了直觀(guān)的圖形化界面,這樣方便用戶(hù)進(jìn)行調(diào)試和編程。在IDE中,用戶(hù)可以創(chuàng)建新的程序文件,并且能在編輯區(qū)編寫(xiě)新的程序代碼。IDE還為用戶(hù)提供了豐富的示例代碼和函數(shù)庫(kù),幫助開(kāi)發(fā)者可以去快速的構(gòu)建各種應(yīng)用。一旦程序已經(jīng)編寫(xiě)完成,用戶(hù)還可以通過(guò)IDE自帶的編譯功能來(lái)對(duì)代碼進(jìn)行校驗(yàn),以確保語(yǔ)法沒(méi)有出現(xiàn)錯(cuò)誤。接下來(lái)用戶(hù)需要將以編輯好且編譯成功的程序上傳到Arduino板上。如圖(2-12)所示。然后通過(guò)IDE的上傳功能;程序會(huì)被燒錄到Arduino板的MCU里面,并且準(zhǔn)備運(yùn)行。除此之外,ArduinoIDE還為用戶(hù)內(nèi)置了串口監(jiān)視器的功能,可以直接顯示從Arduino板上輸入和輸出的串口數(shù)據(jù)。用戶(hù)也可以經(jīng)由串口監(jiān)視器向Arduino板輸入并發(fā)送指定數(shù)據(jù),進(jìn)行交互和調(diào)試。除了上述的基本的上傳和編程功能外,ArduinoIDE還為開(kāi)發(fā)者提供了其他的實(shí)用性的功能和工具。例如用戶(hù)可以通過(guò)在IDE的“打開(kāi)”功能上查看已經(jīng)存在的程序架構(gòu)的列表,并根據(jù)開(kāi)發(fā)需要修改代碼或連接。除此之外,IDE還可以支持保存程序文件功能,以防止發(fā)生意外錯(cuò)誤而導(dǎo)致的數(shù)據(jù)丟失。總而言之,ArduinoIDE是一個(gè)易于使用且功能強(qiáng)大的工具,為使用Arduino的開(kāi)發(fā)者提供了便捷的開(kāi)發(fā)環(huán)境。無(wú)論是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者還是初學(xué)者,都可以通過(guò)ArduinoIDE軟件部署和快速構(gòu)建各種Arduino的應(yīng)用。圖2-11ArduinoIDE圖2-12ArduinoIDE硬件、端口選擇本章小結(jié)本章對(duì)系統(tǒng)的總體設(shè)計(jì)方案做了詳細(xì)的敘述對(duì)結(jié)構(gòu)也經(jīng)行了系統(tǒng)的介紹。對(duì)系統(tǒng)的硬件部分經(jīng)行了分析和選型,對(duì)上位機(jī)樹(shù)莓派以及下位機(jī)的電機(jī)控制板ArduinoMega2560與電機(jī)驅(qū)動(dòng)模塊L298P經(jīng)行了介紹,對(duì)底盤(pán)部分的編碼器電機(jī)和傳感器部分的激光雷達(dá)和麥克風(fēng)陣列也經(jīng)行了介紹,并詳細(xì)的分析了各設(shè)備的優(yōu)缺點(diǎn)。最后對(duì)系統(tǒng)的軟件部分的設(shè)計(jì)與選擇經(jīng)行了詳細(xì)的介紹,其中重點(diǎn)介紹了ROS機(jī)器人操作系統(tǒng),并對(duì)ROS機(jī)器人操作系統(tǒng)做了優(yōu)缺點(diǎn)的分析與介紹。對(duì)下位機(jī)的系統(tǒng)軟件ArduinoIDE也經(jīng)行了系統(tǒng)的介紹,并詳細(xì)的分析了該系統(tǒng)的優(yōu)缺點(diǎn)。ROS層設(shè)計(jì)及實(shí)現(xiàn)RaspberryPiROS系統(tǒng)的安裝與介紹在上位機(jī)的開(kāi)發(fā)與調(diào)試中我們選用的是ROS機(jī)器人操作系統(tǒng),因此我們還需要經(jīng)行ROS系統(tǒng)的安裝,由于此次上位機(jī)選用的是樹(shù)莓派,但我們此次的畢業(yè)設(shè)計(jì)選用的并不是樹(shù)莓派官方提供的操作系統(tǒng);而是安裝Ubuntu18.04版本。首先要注意的是,并不是所有型號(hào)的樹(shù)莓派都可以運(yùn)行Ubuntu18.04,樹(shù)莓派第三代是32位系統(tǒng)的,第四代卻是64位系統(tǒng)的,所以我們安裝Ubuntu鏡像文件時(shí)要看清楚是第幾代型號(hào)的樹(shù)莓派,是多少位的系統(tǒng)。我們此次畢業(yè)設(shè)計(jì)選用的是樹(shù)莓派4B即第四代64位系統(tǒng)的樹(shù)莓派,因此可以下載同樣是64位的Ubuntu18.04系統(tǒng)。在安裝系統(tǒng)之前因先準(zhǔn)備好一張TF內(nèi)存卡,準(zhǔn)備一個(gè)讀卡器,在Ubuntu官網(wǎng)或其他開(kāi)源的網(wǎng)站來(lái)獲取Ubuntu18.04的可樹(shù)莓派搭載的系統(tǒng)鏡像文件。接下來(lái)就是燒錄軟件的設(shè)置,本次程序安裝用樹(shù)莓派官方的燒錄程序進(jìn)行安裝,如圖(3-1)所示。圖3-1樹(shù)莓派官方燒錄軟件在準(zhǔn)備好上述的硬件及燒錄軟件后首先將裝有TF卡的讀卡器插入PC端,依次點(diǎn)擊選擇SD卡,選擇操作系統(tǒng)。如果你準(zhǔn)備的TF卡不是FAT32格式的或者里面有殘留文件不是完全空白的,需要先對(duì)TF內(nèi)存卡進(jìn)行格式化,選擇擦除選項(xiàng)之后,點(diǎn)擊燒錄選項(xiàng)就可以將內(nèi)存卡格式化了!選擇“使用自定義鏡像”,再選擇鏡像文件下載位置,對(duì)樹(shù)莓派燒錄軟件進(jìn)行基本的設(shè)置,配置WiFi賬號(hào)密碼,和添加ssh,以方便后面的聯(lián)網(wǎng)和配置ROS1。設(shè)置好后點(diǎn)擊保存后經(jīng)行燒錄。因?yàn)闊洉r(shí)用的不是官方的系統(tǒng)鏡像文件因此會(huì)存在一些問(wèn)題,燒錄后網(wǎng)絡(luò)配置的密碼會(huì)發(fā)生變化變成其他編碼格式,我們要對(duì)該文件進(jìn)行一定的修改。將WiFi名字和密碼改成自己的,保存退出。這時(shí)候如果直接插入TF卡并啟動(dòng)樹(shù)莓派,系統(tǒng)就會(huì)報(bào)錯(cuò):缺少啟動(dòng)文件。因此需要在github官網(wǎng)上面下載最新的啟動(dòng)文件用來(lái)替換舊的啟動(dòng)文件。第一次啟動(dòng)網(wǎng)絡(luò)連接一般是不正常的,有很大可能ping不通網(wǎng)址,再次重啟之后就可以正常連接網(wǎng)絡(luò)了。一般Ubuntu18.04樹(shù)莓派版本都是桌面版的,因此想要經(jīng)行圖形化操作還要安裝Ubuntu桌面,裝好后如圖(3-2)所示。圖3-2樹(shù)莓派Ubuntu系統(tǒng)桌面裝好后大概率是英文的,可以對(duì)系統(tǒng)進(jìn)行一下漢化。在給樹(shù)莓派安裝完Ubuntu系統(tǒng)后再安裝ROS機(jī)器人操作系統(tǒng),ROS機(jī)器人操作系統(tǒng)的安裝比較復(fù)雜,但和PC端的操作類(lèi)似。首先配置軟件和更新,可參考PC端的實(shí)現(xiàn)方式。其次設(shè)置安裝源,可以選擇官方默認(rèn)安裝源,但是官方默認(rèn)的安裝源服務(wù)器在國(guó)外,由于在外網(wǎng)下載存在一定的局限性會(huì)導(dǎo)致安裝失?。灰虼丝梢栽O(shè)置更換成國(guó)內(nèi)的開(kāi)源的安裝源,例如國(guó)內(nèi)中科大安裝源、國(guó)內(nèi)清華的安裝源。然后用命令行設(shè)置key,然后進(jìn)入安裝步驟。到目前為止ROS機(jī)器人操作系統(tǒng)就安裝完成了。其實(shí)安裝ROS這一步可以不用這么復(fù)雜,目前我國(guó)已經(jīng)有開(kāi)發(fā)者對(duì)ROS的安裝進(jìn)行了集成化,如可以在“魚(yú)香茄子”社區(qū)找到一鍵安裝ROS的連接并經(jīng)行安裝,上述的安裝步驟都已經(jīng)過(guò)了開(kāi)發(fā)者的集成非常的方便快捷,如圖(3-3)所示。圖3-3一鍵安裝ROS安裝好ROS后要對(duì)裝好的機(jī)器人操作系統(tǒng)進(jìn)行測(cè)試,測(cè)試方式也很簡(jiǎn)單。ROS操作系統(tǒng)集成了很多小程序,能夠檢查系統(tǒng)能否正常的運(yùn)行。首先通過(guò)快捷鍵“ctrl+alt+T”來(lái)分別打開(kāi)3個(gè)系統(tǒng)終端,在第一個(gè)終端里鍵入roscore來(lái)對(duì)ROS系統(tǒng)進(jìn)行一個(gè)激活操作,然后在第二個(gè)終端里鍵入“rosrunturtlesimturtlesim_node”這時(shí)會(huì)彈出一個(gè)藍(lán)底色有一只海龜?shù)膱D形化界面。最后在第三個(gè)終端里鍵入“rosrunturtlesimturtle_teleop_key”然后通過(guò)接盤(pán)上的上下左右鍵來(lái)對(duì)圖形界面里的海龜進(jìn)行操作,會(huì)出現(xiàn)如圖(3-4)的情形。圖3-4ROS操作系統(tǒng)測(cè)試經(jīng)過(guò)上述操作系統(tǒng)安裝就基本完成了,經(jīng)過(guò)ROS系統(tǒng)的環(huán)境搭建就可以進(jìn)行系統(tǒng)節(jié)點(diǎn)的發(fā)布與訂閱了。ROS系統(tǒng)的環(huán)境搭建樹(shù)莓派的ROS機(jī)器人系統(tǒng)和大多數(shù)的開(kāi)發(fā)環(huán)境一樣。在ROS中理論上只需在記事本上就可以編寫(xiě)最基本的ROS程序;即用記事本或文件編輯器,但工欲善其事必先利其器,所以為了提高畢業(yè)設(shè)計(jì)的開(kāi)發(fā)效率,可以先安裝使用方便的工具和集成開(kāi)發(fā)的工具即終端、IDE等。為了在ROS中提高效率,我們經(jīng)常需要使用終端,并且可能需要同時(shí)打開(kāi)多個(gè)終端窗口。為了方便使用,我們推薦使用一款實(shí)用的終端軟件:Terminator。你可以通過(guò)在終端中輸入“sudoaptinstallterminator”命令來(lái)下載安裝這款實(shí)用終端軟件。效果如圖(3-4)所示。Terminator是一款性能強(qiáng)大的超級(jí)終端軟件,它的特色在于其可以分屏操作的特性,能夠極大的提高用戶(hù)的開(kāi)發(fā)工作效率。在使用Terminator時(shí),也可以通過(guò)快捷鍵或者鼠標(biāo)右鍵較為方便地在同一個(gè)窗口終端中創(chuàng)建多個(gè)終端面板窗口,進(jìn)行多個(gè)任務(wù)的處理。例如,用戶(hù)可以垂直或水平的來(lái)分割終端窗口,可以使用Ctrl+Tab快捷鍵在多個(gè)終端窗口之間相互切換,甚至可以通過(guò)對(duì)Terminator設(shè)置,可以將Terminator設(shè)置成GNOME的桌面缺省終端,可使用CTRL+ALT+T來(lái)快速打開(kāi)。圖3-4Terminator終端它還集成了許多實(shí)用性的快捷鍵,如使用Ctrl+V和Ctrl+C進(jìn)行黏貼和復(fù)制,使用Ctrl+點(diǎn)擊會(huì)以默認(rèn)程序方式打開(kāi)相關(guān)的URL資源等。Terminator還具備一些其他的特性,例如通過(guò)拖放文本和URL,甚至Nautilus、Finder和Windows的資源管理器中的文件,都可以將其拖放到Terminator上再以文本形式插入,并且自動(dòng)引用包含有shell元字符的文件名。同時(shí),它還提供了查找的功能,可以在終端窗口中搜索文本和表達(dá)式,并快速移至上一個(gè)或下一個(gè)匹配項(xiàng)??偟膩?lái)說(shuō),Terminator是一款操作便捷且功能強(qiáng)大的終端軟件,無(wú)論是對(duì)于系統(tǒng)開(kāi)發(fā)者還是系統(tǒng)的管理員來(lái)說(shuō),這都是一款值得推薦的工具軟件。VScode可以通過(guò)ROS系統(tǒng)自帶的軟件商店下載或者通過(guò)在官網(wǎng)下載安裝包再通過(guò)“sudodpkg-ixxxx.deb”命令行來(lái)安裝。安裝后的VScode不能馬上用于ROS編程,還要給VScode集成一些ROS的插件來(lái)使用。這些插件包括但不限于Chinese、C/C++、Python、CMakeTools、CMake。圖3-5VScodeVSCode是微軟公司開(kāi)發(fā)的免費(fèi)源代碼編輯器,可在多個(gè)操作系統(tǒng)上使用。它提供了豐富的功能,包括代碼自動(dòng)補(bǔ)全、語(yǔ)法高亮、查看定義等,并支持用戶(hù)通過(guò)安裝擴(kuò)展插件來(lái)擴(kuò)展功能。VSCode具有簡(jiǎn)潔的界面設(shè)計(jì)和快速的啟動(dòng)速度,使得日常編程任務(wù)更加高效。編輯功能方面,它提供了多代碼片段、智能代碼提示等功能,幫助用戶(hù)更有效地編輯代碼。此外,VSCode集成了強(qiáng)大的調(diào)試功能,支持多種編程語(yǔ)言的調(diào)試。開(kāi)發(fā)者可以通過(guò)安裝各種擴(kuò)展插件來(lái)增強(qiáng)其功能,如支持更多集成版本控制工具、提供代碼格式化等。跨平臺(tái)使用是VSCode的另一優(yōu)點(diǎn),它可以在macOS、Windows和Linux等操作系統(tǒng)上運(yùn)行,為開(kāi)發(fā)者提供了更大的靈活性。ROS系統(tǒng)節(jié)點(diǎn)的發(fā)布與訂閱智能機(jī)器人是一項(xiàng)高度復(fù)雜的系統(tǒng)性實(shí)現(xiàn)產(chǎn)物,在一個(gè)機(jī)器人上可能會(huì)集成各種傳感器例如雷達(dá)、攝像頭、聲音控制元件和GPS等以及運(yùn)動(dòng)控制的實(shí)現(xiàn)。為了達(dá)到解耦合,在ROS中的每一個(gè)功能點(diǎn)其實(shí)都是一個(gè)單獨(dú)的進(jìn)程,而每一個(gè)獨(dú)立進(jìn)程都是獨(dú)立運(yùn)行的。更確切的講,ROS是進(jìn)程的分布式框架。
因?yàn)檫@些進(jìn)程甚至還能夠分布于不同主機(jī),在不同主機(jī)上協(xié)同工作,從而達(dá)到分散計(jì)算壓力。不過(guò)隨之而來(lái)的也有一個(gè)問(wèn)題:不同的進(jìn)程之間是如何進(jìn)行通信的?也就是說(shuō)不同進(jìn)程間是如何實(shí)現(xiàn)數(shù)據(jù)交換的呢?就需要介紹一下ROS中的通信機(jī)制了。在ROS中,信息傳遞的核心機(jī)制是通過(guò)發(fā)布和訂閱節(jié)點(diǎn)來(lái)實(shí)現(xiàn)的。下面是關(guān)于ROS系統(tǒng)中節(jié)點(diǎn)信息的發(fā)布與訂閱的解釋?zhuān)喊l(fā)布定義:發(fā)布是指節(jié)點(diǎn)向特定主題發(fā)送指定信息的行為,將數(shù)據(jù)或信息廣播到ROS網(wǎng)絡(luò)中。實(shí)現(xiàn):在ROS中,通常會(huì)通過(guò)創(chuàng)建一個(gè)發(fā)布者對(duì)象來(lái)實(shí)現(xiàn)消息的發(fā)布。發(fā)布者對(duì)象的功能是能夠負(fù)責(zé)將數(shù)據(jù)正確的發(fā)布到指定的主題上。所發(fā)布的數(shù)據(jù)可以是任何種類(lèi)的消息,這些發(fā)布的消息是由ROS的消息中的類(lèi)型定義。例如:一個(gè)傳感器的節(jié)點(diǎn)是可能會(huì)發(fā)布其捕捉和收集到的數(shù)據(jù),如濕度、溫度或者位置信息等。訂閱定義:訂閱功能是指節(jié)點(diǎn)監(jiān)聽(tīng)特定主題上的信息,并且能夠接收這些消息的行為。通過(guò)訂閱功能,節(jié)點(diǎn)是可以獲取到其他節(jié)點(diǎn)上發(fā)布的信息或數(shù)據(jù)。實(shí)現(xiàn):在ROS中訂閱功能通常是通過(guò)先創(chuàng)建一個(gè)訂閱者(Subscriber)的對(duì)象來(lái)實(shí)現(xiàn)此功能的。創(chuàng)建的訂閱者對(duì)象會(huì)監(jiān)聽(tīng)到所指定的主題,并且在有消息發(fā)布出來(lái)時(shí)接收到并處理這些消息。例如:一個(gè)控制節(jié)點(diǎn)可以去訂閱傳感器節(jié)點(diǎn)發(fā)送傳輸?shù)臄?shù)據(jù),然后根據(jù)接收的這些數(shù)據(jù)去執(zhí)行相應(yīng)的控制操作。發(fā)布功能與訂閱功能的關(guān)系發(fā)布與訂閱的模式:ROS中的發(fā)布方和訂閱方共同構(gòu)成了一種發(fā)布-訂閱機(jī)制,這是一種比較常見(jiàn)的通信模式。在該種模式下,發(fā)布者方是不需要去知道有哪些訂閱者方正在接收發(fā)布者發(fā)布的數(shù)據(jù),同樣的道理,訂閱者方也是不需要知道信息數(shù)據(jù)是從哪個(gè)發(fā)布者方那里來(lái)的。像這種解耦的通信方式是可以使得ROS系統(tǒng)更加的靈活和可擴(kuò)展性的。主題(Topic):發(fā)布功能和訂閱功能都是圍繞主題進(jìn)行的。在ROS中,主題是消息傳遞的通道,節(jié)點(diǎn)通過(guò)發(fā)布和訂閱特定主題來(lái)進(jìn)行數(shù)據(jù)的交換和共享??偟膩?lái)說(shuō),節(jié)點(diǎn)就可以輕松地實(shí)現(xiàn)共享數(shù)據(jù);從而協(xié)作完成任務(wù),從而實(shí)現(xiàn)構(gòu)建出功能強(qiáng)大的機(jī)器人的系統(tǒng)功能。在實(shí)際的應(yīng)用中,開(kāi)發(fā)者們需要根據(jù)具體的需求去設(shè)計(jì)合理的發(fā)布和訂閱策略,以此來(lái)確保數(shù)據(jù)的準(zhǔn)確性、實(shí)時(shí)性和完整性。在ROS系統(tǒng)中,實(shí)現(xiàn)基本通信有三種策略:話(huà)題通信、服務(wù)通信和參數(shù)服務(wù)器。其中,話(huà)題通信是最常用的一種,它基于發(fā)布訂閱模式,即一個(gè)節(jié)點(diǎn)發(fā)布消息,另一個(gè)節(jié)點(diǎn)訂閱該消息。話(huà)題通信適用范圍廣泛,常見(jiàn)于各種場(chǎng)景。例如此次畢業(yè)設(shè)計(jì)常見(jiàn)到的一類(lèi)場(chǎng)景:在移動(dòng)機(jī)器人執(zhí)行導(dǎo)航功能時(shí),通常會(huì)利用激光雷達(dá)等傳感器來(lái)獲取環(huán)境信息,然后進(jìn)行計(jì)算生成機(jī)器人的運(yùn)動(dòng)控制信息,以驅(qū)動(dòng)機(jī)器人底盤(pán)運(yùn)動(dòng)。在這個(gè)過(guò)程中,會(huì)多次使用話(huà)題通信功能來(lái)實(shí)現(xiàn)不同模塊之間的信息傳遞和協(xié)作。話(huà)題通信的實(shí)現(xiàn)模型是較為復(fù)雜的,該模型結(jié)構(gòu)示意圖如圖(3-5)所示,該模型中涉及到三個(gè)角色:ROSMaster、Talker、Listener。圖3-5話(huà)題通信結(jié)構(gòu)示意圖ROSMaster承擔(dān)了管理發(fā)布者和訂閱者注冊(cè)信息的任務(wù),它會(huì)匹配相同話(huà)題的發(fā)布者和訂閱者,并協(xié)助它們建立連接。一旦連接建立,發(fā)布者就可以發(fā)布消息,而訂閱者則可以訂閱并接收這些消息。主要流程為:首先,當(dāng)話(huà)題發(fā)布者(Talker)啟動(dòng)時(shí),它會(huì)通過(guò)遠(yuǎn)程過(guò)程調(diào)用(RPC)在ROSMaster中注冊(cè)自己的信息,包括所要發(fā)布消息的話(huà)題名稱(chēng)。ROSMaster將這些節(jié)點(diǎn)的注冊(cè)信息記錄在注冊(cè)表中。其次,ROSMaster會(huì)在注冊(cè)表中尋找匹配信息的發(fā)布者和訂閱者,并通過(guò)RPC機(jī)制向訂閱者發(fā)送發(fā)布者的RPC地址信息。然后,訂閱者根據(jù)接收到的RPC地址,通過(guò)RPC向發(fā)布者發(fā)送連接請(qǐng)求,包括訂閱的消息類(lèi)型、話(huà)題名稱(chēng)和通信協(xié)議(TCP/UDP)等信息。發(fā)布者接收到訂閱者的請(qǐng)求后,通過(guò)RPC向訂閱者確認(rèn)連接,并發(fā)送自身的TCP地址信息。接下來(lái),訂閱者根據(jù)收到的信息,使用TCP與發(fā)布者建立網(wǎng)絡(luò)連接。最后,連接建立后,發(fā)布者開(kāi)始向訂閱者發(fā)布信息。在ROS中,服務(wù)通信是一種常見(jiàn)的通信模式,它采用請(qǐng)求-響應(yīng)的機(jī)制,節(jié)點(diǎn)之間相互通信。比如,當(dāng)機(jī)器人在巡邏過(guò)程中,控制系統(tǒng)分析傳感器數(shù)據(jù),如果發(fā)現(xiàn)可疑物體、人或障礙物時(shí),需要拍攝照片并留存。這時(shí)就會(huì)用到服務(wù)通信。服務(wù)通信相對(duì)于話(huà)題通信來(lái)說(shuō)更加簡(jiǎn)單明了。在服務(wù)通信中,涉及到三個(gè)角色:ROSMaster、Server和Client。ROSMaster負(fù)責(zé)管理服務(wù)端和客戶(hù)端的注冊(cè)信息,它會(huì)匹配話(huà)題相同的服務(wù)端與客戶(hù)端,并幫助它們建立連接。一旦連接建立完成,客戶(hù)端就可以發(fā)送請(qǐng)求信息,服務(wù)端則會(huì)返回相應(yīng)的響應(yīng)信息。圖3-6服務(wù)通信模型整個(gè)流程由以下步驟實(shí)現(xiàn):首先,服務(wù)端啟動(dòng)后會(huì)向ROSMaster注冊(cè)自身信息,包括所提供的服務(wù)名稱(chēng)。ROSMaster將這些信息記錄在注冊(cè)表中。然后,客戶(hù)端啟動(dòng)后也會(huì)向ROSMaster注冊(cè)自身信息,包括需要請(qǐng)求的服務(wù)名稱(chēng)。同樣,ROSMaster將客戶(hù)端信息記錄在注冊(cè)表中。接下來(lái),ROSMaster根據(jù)注冊(cè)表中的信息匹配服務(wù)端和客戶(hù)端,并通過(guò)RPC向客戶(hù)端發(fā)送服務(wù)端的TCP地址信息,以便建立連接。第四步客戶(hù)端發(fā)送請(qǐng)求,客戶(hù)端根據(jù)第二步響應(yīng)的信息,使用TCP與服務(wù)端建立網(wǎng)絡(luò)連接,并發(fā)送相應(yīng)的請(qǐng)求數(shù)據(jù)。第四步服務(wù)端發(fā)送響應(yīng),服務(wù)端接收、解析收到的請(qǐng)求數(shù)據(jù),并產(chǎn)生對(duì)應(yīng)的響應(yīng)結(jié)果返回給客戶(hù)端。在ROS中,參數(shù)服務(wù)器通信機(jī)制主要用于實(shí)現(xiàn)節(jié)點(diǎn)之間的數(shù)據(jù)共享。參數(shù)服務(wù)器可以看作是一個(gè)獨(dú)立于所有節(jié)點(diǎn)的公共容器,節(jié)點(diǎn)可以將數(shù)據(jù)存儲(chǔ)在其中,并允許其他節(jié)點(diǎn)調(diào)用。不同的節(jié)點(diǎn)也可以向參數(shù)服務(wù)器中存儲(chǔ)數(shù)據(jù)。舉個(gè)例子,假設(shè)我們想要實(shí)現(xiàn)導(dǎo)航功能,首先需要進(jìn)行路徑規(guī)劃,包括全局路徑規(guī)劃和本地路徑規(guī)劃。在這個(gè)過(guò)程中,不同節(jié)點(diǎn)需要共享路徑信息。參數(shù)服務(wù)器通信方式就可以滿(mǎn)足這種需求,它允許節(jié)點(diǎn)之間共享數(shù)據(jù),類(lèi)似于全局變量的概念。因此,參數(shù)服務(wù)器通信方式提供了一種便捷的方法,讓多個(gè)節(jié)點(diǎn)之間能夠共享數(shù)據(jù),并在不同節(jié)點(diǎn)之間實(shí)現(xiàn)數(shù)據(jù)交互。參數(shù)服務(wù)器是在ROS中實(shí)現(xiàn)通信的一種簡(jiǎn)單方式,它是三種通信機(jī)制中最為簡(jiǎn)單的。在這種通信機(jī)制中,有三個(gè)主要角色:ROSMaster(管理者)、Talker(參數(shù)設(shè)置者)和Listener(參數(shù)調(diào)用者)。ROSMaster充當(dāng)一個(gè)公共的容器,用于保存參數(shù)數(shù)據(jù)。參數(shù)設(shè)置者可以向容器中設(shè)置參數(shù),而參數(shù)調(diào)用者則可以從容器中獲取參數(shù)。圖3-7參數(shù)服務(wù)器模型參數(shù)服務(wù)器通信機(jī)制的實(shí)現(xiàn)流程可以簡(jiǎn)要概括如下:首先,參數(shù)設(shè)置者通過(guò)遠(yuǎn)程過(guò)程調(diào)用(RPC)向參數(shù)服務(wù)器發(fā)送指定參數(shù)(包括參數(shù)名和值),然后ROSMaster將這些參數(shù)保存到參數(shù)列表中。接著,參數(shù)調(diào)用者向參數(shù)服務(wù)器發(fā)送查詢(xún)請(qǐng)求,請(qǐng)求中包含需要查找的參數(shù)名。最后,ROSMaster根據(jù)查詢(xún)請(qǐng)求找到對(duì)應(yīng)的參數(shù)值,并將結(jié)果通過(guò)RPC發(fā)送給參數(shù)調(diào)用者。本章小結(jié)本章從對(duì)本次畢業(yè)設(shè)計(jì)從ROS層面來(lái)做設(shè)計(jì)即實(shí)現(xiàn)。首先,我們介紹了在樹(shù)莓派上安裝和配置ROS系統(tǒng)的過(guò)程,包括安裝Ubuntu系統(tǒng)以及在其上安裝ROS系統(tǒng),并對(duì)系統(tǒng)進(jìn)行了詳細(xì)介紹。在第二部分為ROS系統(tǒng)的環(huán)境搭建做了詳細(xì)的介紹以及操作過(guò)程,分別介紹了超級(jí)終端和VScode程序編輯器,并分析了這兩個(gè)應(yīng)用在ROS開(kāi)發(fā)時(shí)的作用以及優(yōu)缺點(diǎn)。在第三部分對(duì)ROS系統(tǒng)的通信機(jī)制經(jīng)行了介紹,著重的對(duì)系統(tǒng)節(jié)點(diǎn)的發(fā)布和訂閱經(jīng)行了講解,分別介紹了話(huà)題通信、服務(wù)通信和參數(shù)服務(wù)器的系統(tǒng)介紹和模型以及它們各自的實(shí)現(xiàn)方式。ArduinoMega2560層設(shè)計(jì)及實(shí)現(xiàn)L298P驅(qū)動(dòng)模塊與Arduino板Arduino是一款易于學(xué)習(xí)和使用的開(kāi)源電子原型平臺(tái),它提供了簡(jiǎn)單的電路控制功能。通過(guò)連接各種傳感器,Arduino可以感知周?chē)h(huán)境,并通過(guò)控制電機(jī)、燈光等裝置來(lái)對(duì)環(huán)境產(chǎn)生影響,并反饋信息。ArduinoMega2560如圖(4-1)所示。圖4-1ArduinoMega2560智能小車(chē)的軟件系統(tǒng)采用了ArduinoMega2560最小系統(tǒng)。ArduinoMega2560是一種基于ATmega2560微控制器的開(kāi)發(fā)板,具有豐富的輸入輸出接口,包括54個(gè)數(shù)字IO端口(其中15個(gè)支持PWM輸出)、16個(gè)模擬輸入端口、4個(gè)UART串口等。它配備了16MHz晶振、USB連接接口、電池接口、ICSP頭和復(fù)位按鈕,用戶(hù)可以通過(guò)USB連接電腦或者使用交直流變壓器來(lái)使用它[11]。它具有大量的I/O口和較快的處理速度,這也是它比ArduinoUNO更加適合該文小車(chē)的特性[12]。ArduinoMega2560的針腳信息相當(dāng)豐富,涵蓋了多種功能和接口。以下是關(guān)于ArduinoMega2560針腳的一些關(guān)鍵信息:1、數(shù)字引腳:ArduinoMega2560擁有54個(gè)數(shù)字輸入/輸出引腳,編號(hào)從0到53。其中一些數(shù)字引腳具有PWM(脈寬調(diào)制)功能,用于控制模擬輸出。2、串行通信:Mega2560提供了4組串行通信端口,每組包括一個(gè)RX(接收)引腳和一個(gè)TX(發(fā)送)引腳。這些端口可以用于與其他設(shè)備或PC進(jìn)行串行通信。3、Mega2560支持6個(gè)外部中斷源,它們分別對(duì)應(yīng)引腳2(外部中斷0)、3(外部中斷1)、21(外部中斷2)、20(外部中斷3)、19(外部中斷4)、18(外部中斷5)。這些引腳可以用于響應(yīng)外部事件,觸發(fā)中斷服務(wù)程序。4、SPI通信:Mega2560支持SPI(串行外設(shè)接口)通信,對(duì)應(yīng)的引腳為53(SS)、51(MOSI)、50(MISO)和52(SCK)。SPI通信常用于與多種外設(shè)進(jìn)行高速數(shù)據(jù)傳輸。5、板上LED:Mega2560板上有一個(gè)LED,對(duì)應(yīng)的引腳為13。這個(gè)LED通常用于指示Arduino板的電源狀態(tài)或程序運(yùn)行狀態(tài)。6、ArduinoMega2560還配備了16個(gè)模擬輸入引腳,編號(hào)從A0到A15。這些引腳可以用于接收和讀取模擬傳感器的數(shù)值,如光敏電阻、溫度傳感器等。7、此外,Mega2560還包括電源引腳、USB接口、ICSP接口等,用于供電、編程和調(diào)試??偟膩?lái)說(shuō),ArduinoMega2560的針腳信息豐富多樣,能夠滿(mǎn)足各種復(fù)雜的項(xiàng)目需求。通過(guò)合理配置和使用這些針腳,可以實(shí)現(xiàn)各種功能和控制任務(wù)。請(qǐng)注意,在使用Mega2560時(shí),應(yīng)參考官方文檔或相關(guān)資料,確保正確連接和使用各個(gè)針腳。此次的畢業(yè)設(shè)計(jì)所用到的數(shù)字引腳和外部中斷引腳。下表為ArduinoMega2560的數(shù)據(jù)說(shuō)明:控制器ATmega2560工作電壓5V輸入電壓(推薦)7-12V輸入電壓(限制)6-20V數(shù)字I/O口54(含15路PWM輸出)模擬輸入口16每個(gè)I/O口直流電流40mA3.3v口直流電流50mA閃存(FlashMemory)256KB(其中8KB用作bootloader)靜態(tài)存儲(chǔ)器(SRAM)8KBEEPROM4KB時(shí)鐘16MHz電機(jī)驅(qū)動(dòng)板的可選則型號(hào)比較多,比如:L298N、TB6612、L298P等,但是用這些電機(jī)驅(qū)動(dòng)板與Arduino;電機(jī)相連時(shí),需要使用大量杜邦線(xiàn),接線(xiàn)會(huì)顯得很凌亂,而且需要大量的此類(lèi)知識(shí),因此這次的畢業(yè)設(shè)計(jì)會(huì)采用一款L298P優(yōu)化后的電機(jī)驅(qū)動(dòng)板,如圖(4-2),該驅(qū)動(dòng)板將接線(xiàn)端子、供電端子、保護(hù)電路、L298P芯片均集成在一張電路板上,直接扦插在Arduinomega2560板上即可,與Arduinomega2560結(jié)合后如圖(4-3)所示。L298P是一種集成的雙全橋驅(qū)動(dòng)器芯片,可用于控制步進(jìn)電機(jī)或直流電機(jī)。L298P具有多種多樣的功能,包括電流控制、雙全橋輸出、過(guò)熱保護(hù)等特性。L298P芯片通常被用于各種各樣的電機(jī)驅(qū)動(dòng)應(yīng)用,例如機(jī)器人、打印機(jī)、小車(chē)等。通過(guò)對(duì)L298P芯片的控制用戶(hù)可以對(duì)電機(jī)的轉(zhuǎn)向和速度經(jīng)行控制。L298P是一款較常用的功能芯片,這種擴(kuò)展板具有以下優(yōu)點(diǎn):首先,入門(mén)門(mén)檻低,易于上手;其次,L298P芯片廣受歡迎,有大量的示例代碼和用戶(hù)群體支持,只需燒錄相應(yīng)代碼即可操作。此外,L298P芯片具有強(qiáng)大的驅(qū)動(dòng)能力,采用ST意法半導(dǎo)體公司的專(zhuān)業(yè)大功率電機(jī)驅(qū)動(dòng)芯片,可驅(qū)動(dòng)絕大多數(shù)智能小車(chē)電機(jī),最高驅(qū)動(dòng)電流可達(dá)2A。此外,L298PShield直流電機(jī)驅(qū)動(dòng)器支持PLL鎖相環(huán)模式和PWM調(diào)速模式,方便根據(jù)開(kāi)發(fā)需求進(jìn)行切換。最后,接線(xiàn)方便靈活,電機(jī)供電可選用ArduinoVIN輸入或驅(qū)動(dòng)器上的接線(xiàn)柱輸入,電路設(shè)計(jì)合理,布線(xiàn)清晰,方便用戶(hù)使用。當(dāng)然,L298P也存在一些缺點(diǎn),如驅(qū)動(dòng)能力很有限:芯片的內(nèi)阻較大,負(fù)載稍大時(shí)就會(huì)發(fā)熱嚴(yán)重,利用率也比較低。當(dāng)然了上述對(duì)優(yōu)缺點(diǎn)的分析是相對(duì)的,而且可能因具體的需求的不同和應(yīng)用場(chǎng)景而有所變化。因此,對(duì)于選擇是否使用L298P時(shí),是需要根據(jù)實(shí)際的情況來(lái)進(jìn)行權(quán)衡和考慮的。圖4-2L298P電機(jī)驅(qū)動(dòng)板圖4-3L298P與Arduinomega2560結(jié)合L298P的線(xiàn)端說(shuō)明主要包括以下幾個(gè)部分:IN1-IN4:這些是輸入邏輯電平信號(hào)端。OUT1-OUT4:這些端口用于連接執(zhí)行器,例如電機(jī)。具體來(lái)說(shuō),OUT1和OUT2可以接電機(jī)的兩端,用于控制電機(jī)的轉(zhuǎn)動(dòng)。同樣,IN1、2與OUT1、2對(duì)應(yīng),IN3、4與OUT3、4也有類(lèi)似的對(duì)應(yīng)關(guān)系。ENA、B:通過(guò)控制這些使能端,可以實(shí)現(xiàn)對(duì)電機(jī)的啟動(dòng)和停止。VS:這是邏輯電源輸入端,用于接入電源,為L(zhǎng)298P提供工作電壓。VSS:這是負(fù)載的電源輸入端,用于連接電機(jī)的電源,確保電機(jī)能夠正常工作。請(qǐng)注意,這些線(xiàn)端的具體功能和連接方式可能會(huì)因具體的L298P型號(hào)和應(yīng)用場(chǎng)景而有所不同。因此,在實(shí)際使用時(shí),建議參考L298P的官方文檔或相關(guān)資料,以確保正確連接和使用。L298P電機(jī)驅(qū)動(dòng)板的驅(qū)動(dòng)邏輯表:IN1IN2IN3IN4ENAENB電機(jī)A狀態(tài)電機(jī)B狀態(tài)LOWLOWLOWLOWLOWLOW停止停止HIGHLOWLOWLOWHIGHLOW正轉(zhuǎn)停止LOWHIGHLOWLOWHIGHLOW反轉(zhuǎn)停止LOWLOWHIGHLOWLOWHIGH停止正轉(zhuǎn)LOWLOWLOWHIGHLOWHIGH停止反轉(zhuǎn)HIGHLOWHIGHLOWHIGHHIGH正轉(zhuǎn)正轉(zhuǎn)LOWHIGHLOWHIGHHIGHHIGH反轉(zhuǎn)反轉(zhuǎn)HIGHHIGHLOWLOWHIGHHIGH剎車(chē)停止LOWLOWHIGHHIGHHIGHHIGH停止剎車(chē)注意:1、控制電機(jī)A的動(dòng)作使用IN1和IN2引腳,而控制電機(jī)B的動(dòng)作則使用IN3和IN4引腳。當(dāng)IN1和IN2都為L(zhǎng)OW時(shí),電機(jī)A停止運(yùn)轉(zhuǎn);當(dāng)IN1為HIGH且IN2為L(zhǎng)OW時(shí),電機(jī)A正向轉(zhuǎn)動(dòng);當(dāng)IN1為L(zhǎng)OW且IN2為HIGH時(shí),電機(jī)A反向轉(zhuǎn)動(dòng)。同樣,當(dāng)IN3和IN4的邏輯與IN1和IN2類(lèi)似時(shí),控制電機(jī)B的行為與之類(lèi)似。2、ENA和ENB分別控制電機(jī)A和電機(jī)B的電源使能。當(dāng)使能端為L(zhǎng)OW時(shí),相應(yīng)的電機(jī)停止工作;當(dāng)使能端為HIGH時(shí),電機(jī)根據(jù)IN1-IN4的邏輯狀態(tài)進(jìn)行工作。剎車(chē)狀態(tài)通常是通過(guò)同時(shí)激活電機(jī)的一個(gè)方向控制信號(hào)和剎車(chē)控制信號(hào)實(shí)現(xiàn)的。在此邏輯表中,我們假設(shè)電機(jī)A的剎車(chē)是通過(guò)同時(shí)設(shè)置IN1和IN2為HIGH來(lái)實(shí)現(xiàn)的。Arduino程序設(shè)計(jì)使用ArduinoMega2560經(jīng)行系統(tǒng)開(kāi)發(fā)只有硬件是不夠的還需要寫(xiě)入運(yùn)行程序,除了硬件之外還需要準(zhǔn)備軟件的環(huán)境因此要安裝ArduinoIDE,對(duì)于軟件的下載、開(kāi)發(fā)環(huán)境的搭建以及優(yōu)缺點(diǎn)在第二章有詳細(xì)的介紹這里不在贅述,因此這里主要對(duì)Arduino的程序經(jīng)行主要介紹。Arduino的編程語(yǔ)言設(shè)計(jì)融合了C++、Java和C等計(jì)算機(jī)語(yǔ)言的特點(diǎn),是一種相對(duì)簡(jiǎn)潔而綜合的語(yǔ)言。其語(yǔ)法與C++相似,但不支持C++的異常處理,并且沒(méi)有STL庫(kù)。開(kāi)發(fā)者可以將其視作精簡(jiǎn)版的C++。在Arduino的基本語(yǔ)法中,包括宏定義、變量、庫(kù)文件包含、繼承、類(lèi)等,與C++高度相似。在本次畢業(yè)設(shè)計(jì)中,主要使用了Arduino的一些API功能,而功能需求并不是很復(fù)雜。Arduino的程序基本分為兩大部分為loop()函數(shù)和setup()函數(shù)。在Arduino程序中,voidsetup()函數(shù)用于初始化設(shè)置,例如設(shè)置針腳的輸入輸出類(lèi)型、初始化變量以及設(shè)置波特率等。該函數(shù)在上電或重啟時(shí)執(zhí)行一次。voidloop()函數(shù)則是Arduino程序的主函數(shù),其中的代碼會(huì)被不斷重復(fù)執(zhí)行,直到電源被斷開(kāi)或者程序被停止。ArduinoIDE中提供了一些常用常量的封裝,如HIGH和LOW,分別用于定義引腳的高電平和低電平;INPUT和OUTPUT用于定義數(shù)字引腳的輸入和輸出?!皌rue、false”為邏輯層定義,true為對(duì);false為錯(cuò)。在此次畢業(yè)設(shè)計(jì)ROS智能車(chē)中,控制車(chē)輛的動(dòng)作比如前進(jìn)、后退及對(duì)速度的調(diào)節(jié),此處就涉及到了電機(jī)的速度控制與轉(zhuǎn)向,本節(jié)主要就是對(duì)轉(zhuǎn)向和速度的控制程序設(shè)計(jì)進(jìn)行介紹。首先要了解電機(jī)的接線(xiàn),因?yàn)榇舜萎呍O(shè)選用的電機(jī)驅(qū)動(dòng)板是依照ArduinoMega2560專(zhuān)門(mén)設(shè)計(jì)集成的,直接用扦插的方式連接因此不需要考慮ArduinoMega2560板與電機(jī)驅(qū)動(dòng)板的連接,如果使用其他形式的電機(jī)驅(qū)動(dòng)板就需要用電線(xiàn)連接,例如用tb6612電機(jī)驅(qū)動(dòng)板驅(qū)動(dòng)模塊的接線(xiàn)如圖(4-4)所示。左電機(jī)的驅(qū)動(dòng)端M1與M2端對(duì)應(yīng)的是Arduino板的引腳4(DIRA)和引腳5(PWMA),引腳4是控制轉(zhuǎn)向的,引腳5主要輸出PWM。右電機(jī)的驅(qū)動(dòng)端M1與M2對(duì)應(yīng)的Arduino板的引腳6(PWMB)和引腳7(DIRB),引腳7是控制轉(zhuǎn)向的,引腳6主要輸出PWM值。而PWM值主要用于控制電機(jī)的轉(zhuǎn)速。圖4-4tb6612電機(jī)驅(qū)動(dòng)模塊的接線(xiàn)圖以下為控制電機(jī)的基本原理程序,將該程序?qū)懭階rduino板后觀(guān)察電機(jī)轉(zhuǎn)動(dòng)。首先左輪正轉(zhuǎn)3秒;右輪反轉(zhuǎn)3秒,然后停止3秒,然后左輪反轉(zhuǎn)3秒;右輪正轉(zhuǎn)3秒,然后再停止3秒,以這樣的轉(zhuǎn)動(dòng)規(guī)律不停循環(huán)。intDIRA=4;intPWMA=5;intDIRB=7;intPWMB=6;voidsetup(){//四個(gè)引腳都設(shè)置為OUTPUTpinMode(DIRA,OUTPUT);pinMode(PWMA,OUTPUT);pinMode(DIRB,OUTPUT);pinMode(PWMB,OUTPUT);}voidloop(){//左輪正向轉(zhuǎn)動(dòng)3秒;右輪反向轉(zhuǎn)動(dòng)3秒digitalWrite(DIRA,HIGH);analogWrite(PWMA,100);digitalWrite(DIRB,HIGH);analogWrite(PWMB,100);delay(3000);//停止3秒digitalWrite(DIRA,HIGH);analogWrite(PWMA,0);digitalWrite(DIRB,HIGH);analogWrite(PWMB,0);delay(3000);//左輪反向轉(zhuǎn)動(dòng);右輪正向轉(zhuǎn)動(dòng),分別轉(zhuǎn)動(dòng)3秒digitalWrite(DIRA,LOW);analogWrite(PWMA,100);digitalWrite(DIRB,LOW);analogWrite(PWMB,100);delay(3000);//停止3秒digitalWrite(DIRA,LOW);analogWrite(PWMA,0);digitalWrite(DIRB,LOW);analogWrite(PWMB,0);delay(3000);以上的示例程序即為Arduino對(duì)本次畢業(yè)設(shè)計(jì)的電機(jī)控制原理。Arduino的PWM功能允許通過(guò)數(shù)字引腳輸出模擬信號(hào),常用于調(diào)節(jié)LED的亮度或電機(jī)的速度。在這輛車(chē)中,采用PWM來(lái)控制電機(jī)的轉(zhuǎn)速,即通過(guò)周期性地開(kāi)關(guān)電源,并根據(jù)需要調(diào)整開(kāi)關(guān)的時(shí)間長(zhǎng)短來(lái)控制轉(zhuǎn)速。PWM調(diào)速控制在直流電機(jī)中得到廣泛應(yīng)用。通過(guò)單片機(jī)的軟件編程產(chǎn)生PWM信號(hào)比使用硬件產(chǎn)生信號(hào)更為簡(jiǎn)單[13]。單片機(jī)不斷掃描引腳接口,一旦檢測(cè)到信號(hào)變化,便執(zhí)行相應(yīng)的程序,以實(shí)現(xiàn)車(chē)身調(diào)整功能。這包括通過(guò)循跡或精準(zhǔn)控制部分來(lái)調(diào)整車(chē)身姿態(tài),并通過(guò)發(fā)送適當(dāng)?shù)男盘?hào)給電機(jī)來(lái)調(diào)節(jié)[12]。電機(jī)測(cè)速原理此次畢業(yè)設(shè)計(jì)所選用的電機(jī)為編碼器減速直流電機(jī),因?yàn)橐獙?shí)現(xiàn)小車(chē)的定位和導(dǎo)航因此需要對(duì)小車(chē)的速度經(jīng)行測(cè)量和監(jiān)控,電機(jī)主要由編碼器來(lái)實(shí)現(xiàn)測(cè)速的。編碼器是一種設(shè)備,用于將數(shù)據(jù)或信號(hào)(如比特流)轉(zhuǎn)換為可傳輸、通信和存儲(chǔ)的信號(hào)形式。它可以將直線(xiàn)或角位移轉(zhuǎn)換為電信號(hào),分別稱(chēng)為碼尺和碼盤(pán)。根據(jù)讀取方式,編碼器可分為非接觸式和接觸式兩種;根據(jù)基本工作原理,又可分為絕對(duì)式和增量式兩類(lèi)。增量式編碼器將位移轉(zhuǎn)換為周期性電信號(hào),再將其轉(zhuǎn)換為計(jì)數(shù)脈沖,用脈沖數(shù)量表示位移量。而絕對(duì)式編碼器的每個(gè)位置都對(duì)應(yīng)一個(gè)唯一的數(shù)字碼,因此其顯示值僅與起始位置和終止位置相關(guān),而與測(cè)量過(guò)程中的中間步驟無(wú)關(guān)。在電機(jī)的定子磁場(chǎng)中,永久磁鐵的磁極固定,使磁力線(xiàn)通向轉(zhuǎn)子。當(dāng)轉(zhuǎn)子旋轉(zhuǎn)時(shí),定子的磁通量會(huì)周期性變化,導(dǎo)致霍爾元件的輸出信號(hào)頻率發(fā)生變化[14]。常見(jiàn)的電機(jī)轉(zhuǎn)速數(shù)字測(cè)量方法包括測(cè)周期法和測(cè)頻率法[15]。研究中使用了測(cè)頻率法來(lái)測(cè)量轉(zhuǎn)速,這實(shí)際上是在單位時(shí)間內(nèi)對(duì)信號(hào)進(jìn)行計(jì)數(shù),計(jì)數(shù)的結(jié)果就是信號(hào)的頻率如圖(4-5)所示。換言之,轉(zhuǎn)速就是頻率,只是單位不同。測(cè)速的原理就是測(cè)量頻率,測(cè)速方法決定了測(cè)速信號(hào)硬件的連接方式。在研究中,我們采用了測(cè)頻率法來(lái)確定轉(zhuǎn)速。這種方法實(shí)際上是對(duì)信號(hào)進(jìn)行計(jì)數(shù),以確定單位時(shí)間內(nèi)的信號(hào)頻率[16]。換句話(huà)說(shuō),轉(zhuǎn)速可以看作是頻率,只是單位不同。因此,測(cè)速的本質(zhì)就是頻率的測(cè)量,而選擇測(cè)速方法將會(huì)影響測(cè)速信號(hào)硬件的連接方式[17]。圖4-5測(cè)速原理圖此次畢業(yè)設(shè)計(jì)需要著重了解的是編碼器的測(cè)速原理:AB相編碼器由A相和B相組成,每個(gè)相在轉(zhuǎn)過(guò)一個(gè)單位的角度時(shí)都會(huì)產(chǎn)生一個(gè)脈沖信號(hào)(每圈可產(chǎn)生多個(gè)脈沖信號(hào))。A相和B相的脈沖輸出彼此間相位延遲四分之一個(gè)周期,這種延遲關(guān)系可用于區(qū)分正轉(zhuǎn)和反轉(zhuǎn)方向。通過(guò)監(jiān)測(cè)A相和B相的上升沿和下降沿,可以實(shí)現(xiàn)單倍頻、雙倍頻或四倍頻的測(cè)速。測(cè)速原理如圖(4-6)所示。圖4-6AB相增量式編碼器的測(cè)速原理根據(jù)上述可知AB相增量式編碼器可以分為單倍頻、2倍頻和4倍頻三種測(cè)速模式,AB相增量式編碼器的A相和B相之間存在相位差,它們的脈沖輸出相互間隔1/4個(gè)周期。因此,當(dāng)車(chē)輪旋轉(zhuǎn)一圈時(shí),A相和B相分別會(huì)產(chǎn)生一次上升沿和一次下降沿,根據(jù)圖(4-6)可知上升沿和下降沿會(huì)對(duì)應(yīng)另一相的高或低電平,例如在A相出現(xiàn)上升沿時(shí)對(duì)應(yīng)B是高電平;則此時(shí)車(chē)輪正轉(zhuǎn)速度是正數(shù),對(duì)應(yīng)B是低電平;則此時(shí)車(chē)輪反轉(zhuǎn)速度是負(fù)數(shù)。按此次畢業(yè)設(shè)計(jì)所對(duì)應(yīng)的硬件即編碼器電機(jī)旋轉(zhuǎn)一周可發(fā)射11個(gè)脈沖,減速比為30,即電機(jī)轉(zhuǎn)30圈車(chē)輪在減速器的影響下只轉(zhuǎn)一圈。根據(jù)以上的原理即信息就可以寫(xiě)出電機(jī)的測(cè)速原理偽代碼。單倍頻測(cè)速時(shí)的原理偽代碼如下:2倍頻的原理偽代碼如下:4倍頻測(cè)速時(shí)的原理偽代碼如下:由上述的原理偽代碼可知4倍頻測(cè)速時(shí)的精確度更高,因此在畢設(shè)中選用4倍頻變速來(lái)測(cè)速。ros_arduino_bridge配置在ros中還提供了一個(gè)已經(jīng)封裝了的模塊:ros_arduino_bridge,該模塊由下位機(jī)驅(qū)動(dòng)和上位機(jī)控制兩部分組成,通過(guò)該模塊可以更為快捷、方便的實(shí)現(xiàn)自己的機(jī)器人平臺(tái)。主要內(nèi)容如下:1、ROS與Arduino之間的橋接架構(gòu);2、修改下位機(jī)Arduino程序的步驟。需要注意的是,官方提供的示例所需的硬件在國(guó)內(nèi)可能不易獲取,因此可能需要修改源代碼以適配當(dāng)前可用的硬件。該功能包包含了用于控制Arduino的ROS驅(qū)動(dòng)程序和Arduino庫(kù),旨在提供在ROS下運(yùn)行Arduino控制的機(jī)器人的完整解決方案。目前的主要關(guān)注點(diǎn)是一個(gè)基本控制器(basecontroller),它能夠兼容不同的驅(qū)動(dòng)器,能夠接收ROSTwist類(lèi)型的消息,并能夠發(fā)布里程計(jì)數(shù)據(jù)。官方提供的部分硬件不易采購(gòu),需要修改下位機(jī)程序,以適配當(dāng)前硬件。ros_arduino_bridge結(jié)構(gòu)雖然復(fù)雜,但是關(guān)注的只有兩大部分:ros_arduino_bridge/ros_arduino_firmware/src/libraries/ROSArduinoBridgeros_arduino_bridge/ros_arduino_python/config/arduino_params.yaml前者是Arduino端的固件包實(shí)現(xiàn),需要修改并上傳至Arduino電路板;后者是ROS端的一個(gè)配置文件,相關(guān)驅(qū)動(dòng)已經(jīng)封裝完畢,我們只需要修改配置信息即可。整體而言,借助于ros_arduino_bridge可以大大提高我們的開(kāi)發(fā)效率。arduino端編碼器驅(qū)動(dòng):在整個(gè)PID閉環(huán)控制中,測(cè)速是必不可少的一環(huán)。為了適配當(dāng)前使用的AB相編碼器,我們需要修改代碼。盡管這涉及到功能的重寫(xiě),但測(cè)速部分已經(jīng)封裝好,只需實(shí)現(xiàn)編碼器計(jì)數(shù)即可。大致的實(shí)現(xiàn)步驟如下:在ROSArduinoBridge.ino中,我們需要注釋掉之前的編碼器驅(qū)動(dòng),并添加自定義的編碼器驅(qū)動(dòng)。在encoder_driver.h文件中,需要設(shè)置編碼器的引腳,并聲明初始化函數(shù)以及中斷函數(shù)。encoder_driver.ino中實(shí)現(xiàn)編碼器計(jì)數(shù)以及重置函數(shù);ROSArduinoBridge.ino中setup函數(shù)調(diào)用編碼器初始化函數(shù)。測(cè)試編寫(xiě)適配硬件的encoder_driver.h文件(測(cè)速程序的頭文件):#elifdefinedARDUINO_MY_COUNTER#defineLEFT_A20#defineLEFT_B21#defineRIGHT_A18#defineRIGHT_B19voidinitEncoders();voidleftEncoderEventA();voidleftEncoderEventB();voidrightEncoderEventA();voidrightEncoderEventB();#endif圖(4-7)定義編碼器編寫(xiě)適配硬件的encoder_driver.ino文件(測(cè)速程序),以下為主要部分代碼:#elifdefinedARDUINO_MY_COUNTERvoidinitEncoders(){pinMode(LEFT_A,INPUT);//212pinMode(LEFT_B,INPUT);//203pinMode(RIGHT_A,INPUT);//185pinMode(RIGHT_B,INPUT);//194}voidleftEncoderEventA(){if(digitalRead(LEFT_A)==HIGH){if(digitalRead(LEFT_B)==HIGH){left_count++;}else{left_count--;}}else{if(digitalRead(LEFT_B)==LOW){left_count++;}else{left_count--;}}}圖4-8電機(jī)測(cè)速編譯相關(guān)程序并上傳,打開(kāi)串口監(jiān)視器,然后旋轉(zhuǎn)車(chē)輪,在串口監(jiān)視器中錄入e即可查看左右編碼器計(jì)數(shù),錄入命令r可以重置計(jì)數(shù)。arduino端電機(jī)驅(qū)動(dòng):實(shí)現(xiàn)自定義電機(jī)驅(qū)動(dòng)的步驟與上一節(jié)的編碼器驅(qū)動(dòng)類(lèi)似:在ROSArduinoBridge.ino中,需要注釋掉之前的電機(jī)驅(qū)動(dòng)部分,并添加自定義的電機(jī)驅(qū)動(dòng)代碼。在motor_driver.h文件中,設(shè)置左右電機(jī)的引腳配置。motor_driver.ino中實(shí)現(xiàn)初始化與速度設(shè)置函數(shù);圖4-9引腳參數(shù)設(shè)置編寫(xiě)適配L298P的motor_driver.h文件(驅(qū)動(dòng)程序的頭文件):編寫(xiě)適配L298P的motor_driver.ino文件(驅(qū)動(dòng)程序),如下為重要部分代碼:圖4-10電機(jī)控制編譯并上傳程序,打開(kāi)串口監(jiān)視器,然后輸入命令,命令格式為:mnum1num2,num1和num2分別為單位時(shí)間內(nèi)左右電機(jī)各自轉(zhuǎn)動(dòng)的編碼器計(jì)數(shù),而默認(rèn)單位時(shí)間為1/30秒。PID調(diào)速:調(diào)試時(shí),需要在diff_controller.h中打印input的值,然后通過(guò)串口繪圖器輸入命令:m參數(shù)1參數(shù)2,根據(jù)繪圖結(jié)果調(diào)試:Kp、Ki和Kd的值。圖4-11PID調(diào)速在調(diào)試過(guò)程中,可以先針對(duì)單個(gè)電機(jī)的PID進(jìn)行調(diào)試。例如,可以先將對(duì)右側(cè)電機(jī)PID的調(diào)用部分注釋掉:doPID(&rightPID)。需要注意的是,即使PID算法相同,如果參與計(jì)算的數(shù)據(jù)單位不同,也會(huì)導(dǎo)致不同的調(diào)試結(jié)果。因此,不能直接復(fù)用之前的調(diào)試結(jié)果。RaspberryPi與Arduino的串口通信首先就可以將ros_arduino_bridge功能包上傳至樹(shù)莓派,并在PC端通過(guò)鍵盤(pán)控制小車(chē)的運(yùn)動(dòng)了,實(shí)現(xiàn)流程如下:系統(tǒng)準(zhǔn)備;程序修改;從PC端上傳程序至樹(shù)莓派;分別啟動(dòng)PC與樹(shù)莓派端相關(guān)節(jié)點(diǎn),并實(shí)現(xiàn)運(yùn)動(dòng)控制。系統(tǒng)準(zhǔn)備ros_arduino_bridge是依賴(lài)于python-serial功能包的,請(qǐng)先在樹(shù)莓派端安裝該功能包。程序修改:需要載入yaml格式的配置文件,該文件在config目錄下已經(jīng)提供了模板,只需要復(fù)制文件并按需配置即可,復(fù)制文件并重命名,配置如下:在樹(shù)莓派端進(jìn)入工作空間并編譯。手動(dòng)控制啟動(dòng)ros_arduino_bridge節(jié)點(diǎn):roslaunchros_arduino_pythonarduino.launch啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn):rosrunteleop_twist_keyboardteleop_twist_keyboard.py如無(wú)異常,現(xiàn)在就可以在PC端通過(guò)鍵盤(pán)控制小車(chē)運(yùn)動(dòng)了,并且PC端還可以使用rviz查看小車(chē)的里程計(jì)信息。本章小結(jié)本章首先對(duì)L298P驅(qū)動(dòng)模塊與ArduinoMega2560板進(jìn)行了詳細(xì)介紹。ArduinoMega2560板介紹了包括硬件和軟件開(kāi)發(fā)時(shí)的優(yōu)缺點(diǎn)。Arduino是一款簡(jiǎn)單易用的開(kāi)發(fā)板,具有易于制作和使用的特點(diǎn)。它內(nèi)置了專(zhuān)用的集成電路
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年泰國(guó)大型活動(dòng)交通疏導(dǎo)試題含答案
- 北京警察學(xué)院《電力系統(tǒng)分析》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 河南省新鄉(xiāng)市輝縣市2024-2025學(xué)年八年級(jí)上學(xué)期期末生物試題(含答案)
- 2026年環(huán)??萍夹袠I(yè)政策報(bào)告及碳中和技術(shù)
- 2026年及未來(lái)5年中國(guó)多肽蛋白行業(yè)發(fā)展前景預(yù)測(cè)及投資方向研究報(bào)告
- 護(hù)理課件制作中的互動(dòng)元素
- 體育榮譽(yù)制度
- 會(huì)所會(huì)員卡制度
- 2025至2030中國(guó)智能穿戴設(shè)備市場(chǎng)現(xiàn)狀及產(chǎn)業(yè)鏈投資規(guī)劃報(bào)告
- 臨沂市公安機(jī)關(guān)2025年第四季度招錄警務(wù)輔助人員備考題庫(kù)帶答案詳解
- 鐵路勞動(dòng)安全 課件 第二篇 常見(jiàn)事故預(yù)防
- 農(nóng)貿(mào)市場(chǎng)環(huán)境衛(wèi)生清潔行動(dòng)工作方案
- 淮安市2022-2023學(xué)年七年級(jí)上學(xué)期期末地理試題
- 2024屆高考語(yǔ)文二輪復(fù)習(xí)專(zhuān)題-文言文閱讀(上海專(zhuān)用)(解析版)
- 2024可打印的離婚協(xié)議書(shū)模板
- 2024屆廣東省深圳市中考物理模擬試卷(一模)(附答案)
- 《房顫的藥物治療》課件
- 診所污水處理管理制度
- 輔導(dǎo)員工作的職責(zé)與使命課件
- 新疆交通職業(yè)技術(shù)學(xué)院教師招聘考試歷年真題
- 吊籃租賃安拆分包合同
評(píng)論
0/150
提交評(píng)論