




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
北方工業(yè)大學(xué)北方工業(yè)大學(xué) 本科畢業(yè)設(shè)計(jì)(論文)本科畢業(yè)設(shè)計(jì)(論文) 題 目: 基于 ROS 機(jī)器人系統(tǒng)的智能小車研制 指導(dǎo)教師: 專業(yè)班級(jí): 學(xué) 號(hào): 姓 名: 日 期: 2015 年 6 月 15 日 基于 ROS 機(jī)器人系統(tǒng)的智能小車研制 摘要 隨著機(jī)器人技術(shù)的發(fā)展,ROS(Robot Operating System)機(jī)器人系統(tǒng)受 到越來越多人的研究和學(xué)習(xí)。通過本次設(shè)計(jì)研制出了一臺(tái)以優(yōu)秀的開源機(jī)器 人操作系統(tǒng) ROS 作為軟件基礎(chǔ)的智能小車,拋棄了傳統(tǒng)的單片機(jī)等嵌入式軟 件代碼從零寫起的開發(fā)方案,軟件代碼以 ROS 系統(tǒng)的代碼規(guī)范和理念進(jìn)行設(shè) 計(jì)。硬件電路方面采用了當(dāng)下流行的開發(fā)電路板,這就對(duì)小車的可復(fù)制性, 給廣泛推廣提供了更大的空間,從而可以讓更多的人能夠參與到這種科技實(shí) 踐中,享受科技給生活帶來的樂趣。這個(gè)系統(tǒng)可以作為 ROS 系統(tǒng)的入門級(jí)學(xué) 習(xí)的實(shí)體解決方案,也可以作為家用可移動(dòng)的監(jiān)控平臺(tái),也可以作為物聯(lián)網(wǎng) 的一個(gè)終端設(shè)備。 關(guān)鍵詞:Robot Operating System;ROS;智能小車;物聯(lián)網(wǎng) Design of smart car based on Robot Operating System ABSTRACT The design chosen on the excellent open-source Robot Operating System as the basis for the design , abandoned the traditional development programs that written single-chip and other embedded software code from scratch, but written software code as the ROS system code specifications. I choosen the current popular development boards as hardware ,so the car can be easily copied , which allows more people to participate in the practice of this technology , science and enjoy technology more fun. The design of a web page for the interactive , the trolley car and the client is responsible for the implementation of client commands and image transfer , web client can receive the image transported by car , and you can control the trajectory of the car , observe the ROS system status . This system can be used as a ROS platform for beginner-level learners and as a home monitoring platform . It can be used as a terminal of the internet of things . KeywordsKeywords:Robot Operating System;smart car ;web server 目錄 1 引言1 1.1 課題研究背景1 1.2 本課題的發(fā)展現(xiàn)狀.1 1.2.1 機(jī)器人的發(fā)展概況.1 1.2.2 機(jī)器人軟件平臺(tái)的發(fā)展概況2 1.2.3 ROS 系統(tǒng)的誕生和發(fā)展3 1.3 本課題的主要研究內(nèi)容及安排.3 2 功能規(guī)劃及設(shè)計(jì)方案論證5 2.1 功能規(guī)劃5 2.2 本次設(shè)計(jì)方案選擇5 2.2.1 機(jī)械結(jié)構(gòu)方案6 2.2.2 主控板的選擇.7 2.2.3 驅(qū)動(dòng)方案選擇.8 2.3 軟件方案選擇10 2.4 系統(tǒng)總體運(yùn)行模式10 3 系統(tǒng)設(shè)置與測試11 3.1 ROS 機(jī)器人系統(tǒng)安裝配置.11 3.2 創(chuàng)建 ROS 工作空間.13 3.3 創(chuàng)建和編譯 MROB包.13 3.4 啟動(dòng)文件14 3.5 ROS 機(jī)器人系統(tǒng)節(jié)點(diǎn).15 3.6 單片機(jī)節(jié)點(diǎn)代碼.16 3.6.1 單片機(jī)開發(fā)環(huán)境的設(shè)置.16 3.6.2 單片機(jī)程序17 3.7 網(wǎng)頁設(shè)計(jì).18 3.8 攝像頭驅(qū)動(dòng)與參數(shù)設(shè)定20 3.9 攝像頭測試21 3.10 小車運(yùn)動(dòng)控制算法22 4 裝置整體調(diào)試.23 4.1 硬件連接23 4.2 啟動(dòng)節(jié)點(diǎn)24 4.3 運(yùn)行網(wǎng)頁測試25 結(jié)論27 致謝28 主要參考文獻(xiàn)29 附件30 外文資料翻譯及原文42 1 1 引言 1.1 課題研究背景 隨著機(jī)器人領(lǐng)域的快速發(fā)展和復(fù)雜化,代碼的復(fù)用性和模塊化的要求越 來越強(qiáng)烈,而已有的機(jī)器人開源機(jī)器人操作系統(tǒng)很難滿足要求。2010 年 Willow Garage 公司發(fā)布了開源機(jī)器人操作系統(tǒng) ROS(Robot Operating System), 很快在機(jī)器人領(lǐng)域展開了學(xué)習(xí)和應(yīng)用。 ROS 可以在許多 Linux 發(fā)行版本上運(yùn)行,ROS 可以源碼安裝也可以采用 直接安裝,Willow Garage 公司僅僅提供了 Ubuntu 系統(tǒng)環(huán)境下的直接安裝方 法,在其他平臺(tái)上采用的多是源碼安裝方式。本次設(shè)計(jì)軟件上采用了 Ubuntu 系統(tǒng),作為 ROS 系統(tǒng)的安裝環(huán)境,方便了 ROS 的安裝以及可能存在的兼容 性問題。 Linux 作為開源系統(tǒng)對(duì)硬件平臺(tái)高度適應(yīng)性,使的它能夠很好的移 植到不同的平臺(tái)上,在嵌入式、服務(wù)器等領(lǐng)域得到了廣泛的應(yīng)用。Ubuntu 是 Linux 眾多發(fā)行版本中很優(yōu)秀的的版本,Ubuntu 建基于 Debian 的不穩(wěn)定分支, 是以桌面應(yīng)用為主的桌面操作系統(tǒng),運(yùn)作主要依賴 Canonical 有限公司的支 持,同時(shí)亦有來自 Linux 社區(qū)的熱心人士提供協(xié)助?,F(xiàn)在搭載 ROS 系統(tǒng)的機(jī) 器人有 PR2、REEM-C 等,這些機(jī)器人都造假昂貴,適合實(shí)驗(yàn)室作為研究, 但不太適合初學(xué)者做為學(xué)習(xí) ROS 的平臺(tái)。 1.2 本課題的發(fā)展現(xiàn)狀 1.2.1 機(jī)器人的發(fā)展概況 機(jī)器人的分類和定義有好多種,一般可以分為工業(yè)機(jī)器人和特種機(jī)器人, 工業(yè)機(jī)器人主要是應(yīng)用在工業(yè)現(xiàn)場的機(jī)械臂,特種機(jī)器人主要是具有一定智 能的,具有一定的自主性的機(jī)器人,例如服務(wù)性機(jī)器人、無人機(jī)等。 2 1920 年機(jī)器人一詞出現(xiàn)在一部文學(xué)作品中,1959 年第一臺(tái)機(jī)器人被設(shè)計(jì) 出來,標(biāo)志著機(jī)器人真正的誕生。經(jīng)過長達(dá)半個(gè)世紀(jì)的發(fā)展,機(jī)器人應(yīng)用的 領(lǐng)域不斷地?cái)U(kuò)大,普及的程度也越來越高。越來越多的工業(yè)機(jī)器人進(jìn)入到共 生產(chǎn)中,大大降低了工業(yè)生產(chǎn)的成本,服務(wù)性機(jī)器人也在不斷的取得突破性 的發(fā)展。通過現(xiàn)在的市場調(diào)查發(fā)現(xiàn),越來越多的人愿意嘗試機(jī)器人產(chǎn)品,這 將大大刺激服務(wù)性機(jī)器人市場的發(fā)展,更多的新技術(shù)將會(huì)應(yīng)運(yùn)而生。 1.2.2 機(jī)器人軟件平臺(tái)的發(fā)展概況 機(jī)器人軟件開發(fā)平臺(tái)或者開發(fā)框架是指為機(jī)器人開發(fā)提供了可重用的軟 件包、軟件開發(fā)、編譯、仿真工具等軟件的集合,機(jī)器人軟件平臺(tái)節(jié)約了機(jī) 器人開發(fā)者的時(shí)間和成本。目前有多種機(jī)器人開發(fā)框架和軟件開發(fā)平臺(tái),商 用的機(jī)器人軟件開發(fā)平臺(tái)有 Evolution Robotics、Microsoft Robotics Studio(MSRS) 、Skilligent 等,開源的機(jī)器人框架有 Cylon.js、Artoo、Gobot、ROS 等。 MSRS 是微軟開發(fā)的機(jī)器人軟件平臺(tái),能夠在微軟開發(fā)的 windows 和 windowsCE 下面運(yùn)行,它提供了完備了的仿真和圖形化的開發(fā)環(huán)境。Cylon.js 是一個(gè)機(jī)器人 JavaScript 開發(fā)框架,可以使用 Node.js 進(jìn)行機(jī)器人的開發(fā)和物 理計(jì)算,他支持多個(gè)硬件平臺(tái)。Artoo 是用 Ruby 語言寫成的 Cylon.js 機(jī)器人 開發(fā)框架的姐妹項(xiàng)目,編程語言偏門,不支持 c 語言等熱門的語言,不利于 機(jī)器人的擴(kuò)展。Gobot 機(jī)器人開發(fā)框架采用 Go 語言編寫完成,Go 語言有 Google 開發(fā),主要用來做云計(jì)算和云服務(wù)的語言,更適合運(yùn)用于服務(wù)器程序 的編寫。ROS 是開源的機(jī)器人系統(tǒng)可以與其他開源框架進(jìn)行結(jié)合,ROS 提出 了自己獨(dú)特的解決方案,軟件開發(fā)標(biāo)準(zhǔn),集成了 SLAM 導(dǎo)航等功能,擁有獨(dú) 3 立的仿真環(huán)境,通過硬件抽象語言可以建立自己的機(jī)器人模型進(jìn)行仿真學(xué)習(xí)。 1.2.3 ROS 系統(tǒng)的誕生和發(fā)展 ROS 系統(tǒng)起源于 2007 年斯坦福大學(xué)人工智能實(shí)驗(yàn)室的 STAIR 項(xiàng)目與 Willow Garage 機(jī)器人技術(shù)公司的個(gè)人機(jī)器人項(xiàng)目(Personal Robots Program) 之間的合作,ROS 的軟件研究成果在機(jī)器人 PR2 上進(jìn)行體驗(yàn)展示。 在開源的交互中,ROS 得到完善和推廣.ROS 是一種開源的、用于機(jī)器 人的后操作系統(tǒng),或者說次級(jí)操作系統(tǒng)。它提供類似操作系統(tǒng)所提供的功能, 包含硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間的消息傳 遞、程序發(fā)行包管理等,也提供一些工具程序和庫用于獲取、建立、編寫和 運(yùn)行多機(jī)整合的程序。 1.3 本課題的主要研究內(nèi)容及安排 本設(shè)計(jì)基于 Robot Operating System 和嵌入式開發(fā)板,設(shè)計(jì)一輛智能小車, 通過網(wǎng)頁可以實(shí)現(xiàn)對(duì)軟件系統(tǒng)的監(jiān)控。小車硬件部分主要是將成熟的硬件進(jìn) 行適當(dāng)?shù)拇钆?,本次設(shè)計(jì)的重點(diǎn)是設(shè)計(jì)軟件,搭建 ROS 系統(tǒng)運(yùn)行環(huán)境和 web 服務(wù)器,編寫相關(guān)的軟件代碼,主要包括網(wǎng)頁代碼和 ROS 節(jié)點(diǎn)代碼。 課題主要研究內(nèi)容及安排如下: 1. 查閱相關(guān)文獻(xiàn)資料; 2. 確定系統(tǒng)總體設(shè)計(jì)方案; 3. 對(duì)元器件進(jìn)行選型、統(tǒng)計(jì)并采購; 4. 對(duì)硬件進(jìn)行組裝; 4 5. 搭建軟件開發(fā)環(huán)境; 6. 單片機(jī)基礎(chǔ)代碼設(shè)計(jì)及調(diào)試; 7. 網(wǎng)頁代碼設(shè)計(jì)及調(diào)試; 8. 整合代碼及調(diào)試; 9. 撰寫畢業(yè)設(shè)計(jì)論文。 5 2 功能規(guī)劃及設(shè)計(jì)方案論證 2.1 功能規(guī)劃 本次設(shè)計(jì)需要搭建一個(gè)智能小車。通過網(wǎng)頁可以實(shí)現(xiàn)對(duì)小車的運(yùn)動(dòng)軌跡 的控制,小車可以響應(yīng)用戶指令完成前進(jìn)和后退直線運(yùn)動(dòng)和轉(zhuǎn)向運(yùn)動(dòng)。網(wǎng)頁 端可以監(jiān)控系統(tǒng)的運(yùn)行狀態(tài),可以清楚的了解系統(tǒng)運(yùn)行狀況??梢詫?shí)現(xiàn)視頻 實(shí)時(shí)傳輸功能,用戶可以實(shí)時(shí)觀察到小車拍攝到的畫面。 2.2 本次設(shè)計(jì)方案選擇 硬件平臺(tái)的搭建需要設(shè)計(jì)合適的機(jī)械部分和硬件部分。機(jī)械部分主要包 含智能小車底盤、云臺(tái)、攝像頭、主控板、鍵盤、電機(jī)驅(qū)動(dòng)等。硬件部分主 要負(fù)責(zé)運(yùn)行系統(tǒng)和代碼,小車的運(yùn)動(dòng)控制??蛇x擇的方案如下: 方案 1 可以選擇電腦與單片機(jī)組合。電腦負(fù)責(zé)運(yùn)行 Ubuntu 系統(tǒng)和 ROS 系統(tǒng)等,單片機(jī)負(fù)責(zé)底層的小車運(yùn)行控制。電腦和單片機(jī)之間通過串口通訊。 電腦的運(yùn)行速度快,處理能力強(qiáng),系統(tǒng)運(yùn)行更加流暢,能夠運(yùn)行 ROS 系統(tǒng)的 完整版本,可以運(yùn)行 rviz 3D 視圖等圖形化工具。缺點(diǎn)是電腦的體積大,重量 也較大,需要的車體盤會(huì)偏大,需要的更大的驅(qū)動(dòng)力,會(huì)增加小車制作的成 本和控制的難度。 方案 2 選擇 arm 開發(fā)板作為小車的控制層,運(yùn)行 Ubuntu 和 ROS 系統(tǒng)等, 并且負(fù)責(zé)小車的運(yùn)動(dòng)控制。優(yōu)點(diǎn)是 arm 開發(fā)板的成本較低,體積小,重量輕, 易于在小車上安裝,可以縮小小車的體積,減輕小車的重量,小車更加易于 控制。缺點(diǎn)是 ROS 的部分功能不能在 arm 平臺(tái)讓很好的運(yùn)行,但是不影響核 心功能。Arm 開發(fā)板直接控制小車的運(yùn)行,這樣可以使得系統(tǒng)更加的簡潔, 6 由于電機(jī)驅(qū)動(dòng)功率較大,在電機(jī)運(yùn)行時(shí),電流或者電電壓的過大波動(dòng)可能會(huì) 燒毀 arm 芯片,影響到系統(tǒng)的整體穩(wěn)定性。 方案 3 采用 arm 開發(fā)板和單片機(jī)的組合,開發(fā)板和單片機(jī)之間采用串口 進(jìn)行通訊。ARM 開發(fā)板運(yùn)行 Ubuntu 和 ROS 系統(tǒng),可以通過串口發(fā)送指令給 單片機(jī)。單片機(jī)可以產(chǎn)生 PWM 控制電機(jī)的轉(zhuǎn)動(dòng)。這種方案既保證了小車體 積較小,成本低,也保證了系統(tǒng)的穩(wěn)定性。 通過以上的方案比較我們選擇方案三作為本次設(shè)計(jì)的硬件解決方案, 2.2.1 機(jī)械結(jié)構(gòu)方案 本次設(shè)計(jì)的是智能小車,需要選擇一個(gè)移動(dòng)平臺(tái)作為開發(fā)的基礎(chǔ),由于 材質(zhì)的不同,價(jià)格差別也較多。底盤可以選擇鋁合金、鋼板、亞克力等,車 輪子可以選擇普通的塑料橡膠輪、履帶等。金屬的車盤會(huì)使得車子更加的穩(wěn) 定牢固,但是要求的電機(jī)的驅(qū)動(dòng)能力更強(qiáng),成本也偏高。綜合考慮本次采用 的是塑料材質(zhì)的車底盤。 圖 2.2 所示即為本次采用的小車平臺(tái)。小車底盤是亞克力材料,強(qiáng)度較 高,相對(duì)于鋁合金更加易于加工。小車底盤有 4 個(gè)輪子,每個(gè)輪子都有獨(dú)立 的電機(jī)進(jìn)行驅(qū)動(dòng),小車轉(zhuǎn)向操作更加靈活,驅(qū)動(dòng)力更強(qiáng),可以搭載更多的傳 感器,完成復(fù)雜的任務(wù)。 云臺(tái)采用簡易的雙軸的舵機(jī)云臺(tái),如圖 2.1,兩個(gè)舵機(jī)可以驅(qū)動(dòng)攝像頭云 臺(tái)左右上下運(yùn)動(dòng)運(yùn)行,本次設(shè)計(jì)沒有采用云臺(tái)配套的攝像頭,需要對(duì)云臺(tái)和 攝像頭進(jìn)行一定的加工,才能將攝像頭固定在云臺(tái)上,通過云臺(tái)的移動(dòng),攝 像頭的拍攝范圍更加廣闊。 7 圖 2.1 云臺(tái)和攝像頭 圖 2.2 小車底盤 2.2.2 主控板的選擇 ARM 公司一直主導(dǎo)著嵌入式行業(yè),市面上流行的 ARM 嵌入式開發(fā)板種 類較多,卡片式也是一種嵌入式開發(fā)板,樹莓派是卡片式電腦的典型代表, 8 接上顯示屏鼠標(biāo)等就可以進(jìn)行辦公瀏覽網(wǎng)頁等操作,使用起來十分方便,價(jià) 格低廉,性能上比不上真正意義的電腦,但是能夠滿足基本的需求。 本次設(shè)計(jì)計(jì)劃采用樹莓派 arm 開發(fā)板,樹莓派第一代產(chǎn)品作為一款開源 的 arm 開發(fā)板,在許多志愿者的參與下,各種應(yīng)用已經(jīng)形成規(guī)模,很容易上 手,做各種開發(fā)。但是由于第一代產(chǎn)品是 2012 年的產(chǎn)品,不支持 ubuntu 系 統(tǒng),在其他的 linux 版本下安裝 ROS,需要進(jìn)行編譯等操作,存在兼容性問題, 不易于本次的設(shè)計(jì)開發(fā),而且性能較差,無法本次設(shè)計(jì)的要求。本次設(shè)計(jì)采 用國產(chǎn)的香蕉派開源板作為主控板,如圖 2.4(a)所示,相對(duì)于樹莓派,香 蕉派具有運(yùn)行頻率高、內(nèi)存大、內(nèi)核更加先進(jìn)等優(yōu)勢,而且支持 ubuntu 系統(tǒng), 系統(tǒng)運(yùn)行流暢。表 2.1 為兩塊開板的硬件配置對(duì)照。 表 2.1 硬件配置對(duì)比 CPU內(nèi)存內(nèi)存板載存儲(chǔ)板載存儲(chǔ)電源電源USB 借口借口 Cortex-A7 雙核1GBDDR3SD 卡5V 直流電2 個(gè) ARM1176JZF-S512MSD 卡5V 直流電2 個(gè) 2.2.3 驅(qū)動(dòng)方案選擇 硬件電路部分需要設(shè)計(jì)控制板和驅(qū)動(dòng)電路以及其他必要的傳感器電路。 本次設(shè)計(jì)采用單片機(jī)作為電機(jī)運(yùn)動(dòng)的控制板,控制電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)選擇 AVR 單片機(jī),型號(hào)為 ATmega328,開發(fā)板選擇 Arduino,如圖 2.4(b)所示, Arduino 為一款開源硬件,具有標(biāo)準(zhǔn)的硬件接口,獨(dú)立的開發(fā)環(huán)境和標(biāo)準(zhǔn)的 函數(shù)庫,每一種擴(kuò)展板都有對(duì)應(yīng)的函數(shù)庫,方便軟件代碼的編寫,可以不用 花太多的精力放在底層的開發(fā)上,可以更好的專注于邏輯功能的實(shí)現(xiàn)上。本 次設(shè)計(jì)中有 4 個(gè)直流電機(jī),2 個(gè)舵機(jī)需要控制,電機(jī)驅(qū)動(dòng)需要能夠驅(qū)動(dòng) 4 個(gè) 9 電機(jī)。2 個(gè)舵機(jī)可以直接由單片機(jī)進(jìn)行驅(qū)動(dòng)。本次選擇了型號(hào)為 C3A3 的 arduino 電機(jī)驅(qū)動(dòng)板,如圖 2.3 所示,此款電機(jī)驅(qū)動(dòng)的板可以驅(qū)動(dòng) 4 個(gè)直流電 機(jī)或者 2 個(gè)步進(jìn)電機(jī),同時(shí)可以驅(qū)動(dòng)兩個(gè)舵機(jī),能夠滿足本次設(shè)計(jì)的要求。 圖 2.3 電機(jī)驅(qū)動(dòng) (a) (b) 圖 2.4 單片機(jī)和主控板 10 2.3 軟件方案選擇 ROS 系統(tǒng)依賴于 Linux 系統(tǒng),本次設(shè)計(jì)選用了 Ubuntu 系統(tǒng)作為 ROS 系 統(tǒng)的依賴系統(tǒng),由于 Ubuntu 的衍生版本眾多,針對(duì)不同的應(yīng)用場合和硬件平 臺(tái) Ubuntu 有多種衍生版本,由于本次設(shè)計(jì)選用的 arm 平臺(tái),運(yùn)算處理能力 有限,因此選用了對(duì)硬件要求不高的 Lubuntu14.04 做為本次設(shè)計(jì)的操作系統(tǒng)。 ROS 系統(tǒng)更新速度比較快,已發(fā)行多個(gè)版本,本次設(shè)計(jì)采用的是 indigo 版本, 雖然現(xiàn)在的許多中文資料是 hydro 版本或者更老的版本,但這并不會(huì)影響本 次設(shè)計(jì)。Indigo 版本的 ROS 和 Lubuntu 14.04 版本都有 5 年的官方支持的維 護(hù)更新,這樣能夠保證在 5 年內(nèi)不用跟新系統(tǒng),可以不升級(jí)系統(tǒng)的條件下將 繼續(xù)完善本次設(shè)計(jì)。 用戶需要通過 Web 服務(wù)器來訪問本機(jī)的網(wǎng)頁,本次設(shè)計(jì)采用 Apache 作 為本次設(shè)計(jì)的 web 服務(wù)器。Apache 網(wǎng)頁服務(wù)器是一款開源的軟件,是世界排 行第一的網(wǎng)頁服務(wù)器,它可以多種操作系統(tǒng)平臺(tái)上運(yùn)行,具有簡單、速度快、 穩(wěn)定性高、安全性高等優(yōu)點(diǎn),被許多世界知名的網(wǎng)站采用,例如亞馬遜,雅 虎等。 2.4 系統(tǒng)總體運(yùn)行模式 本章主要是對(duì)整個(gè)系統(tǒng)設(shè)計(jì)的一個(gè)總體概括,通過對(duì)可行性方案的分析 與研究來決定采取哪種方案更加適合這次的畢業(yè)設(shè)計(jì),本次選擇的方案運(yùn)行 的基本模式如圖 2.5 所示。 圖中 ROS 系統(tǒng)核心在香蕉派開發(fā)板上運(yùn)行,ROS 系統(tǒng)內(nèi)部節(jié)點(diǎn)之間通 過話題進(jìn)行數(shù)據(jù)交換,Arduino 開發(fā)板和香蕉派之間采用 USB 線進(jìn)行鏈接, 通過串口通信協(xié)議進(jìn)行通信。通過串口可以實(shí)現(xiàn) ROS 系統(tǒng)和單片機(jī)的鏈接, 11 輸入設(shè)備可以時(shí)操縱桿、攝像頭、激光雷達(dá)等,本次設(shè)計(jì)中攝像頭作為輸入 設(shè)備,Arduino 開發(fā)板作為一個(gè) ROS 系統(tǒng)節(jié)點(diǎn),通過話題傳遞電機(jī)控制的指 令。 圖 2.5 系統(tǒng)運(yùn)行模式 3 系統(tǒng)設(shè)置與測試 3.1 ROS 機(jī)器人系統(tǒng)安裝配置 1. 設(shè)置 local 指令,配置語言環(huán)境。 sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES =POSIX 2. 設(shè)置源列表文件 sources.list。 sudo sh -c echo “deb /ros/ubuntu trusty main“ 12 /etc/apt/sources.list.d/ros-latest.list 3. 設(shè)置證書。 wget /ros/rosdistro/master/ros.key -O - | sudo apt-key add - 4. 安裝 ROS 系統(tǒng)基礎(chǔ)版本 sudo apt-get install ros-indigo-ros-base 5. 設(shè)置環(huán)境變量 在每個(gè) shell 啟動(dòng)的時(shí)候,通過下面這條指令可以實(shí)現(xiàn) ROS 環(huán)境變量被添 加到每個(gè) bash 中 echo “source /opt/ros/indigo/setup.bash“ /.bashrc source /.bashrc 6. 運(yùn)行 roscore 指令測試系統(tǒng)是否安裝成功。運(yùn)行結(jié)果如下: 13 圖 3.1 運(yùn)行結(jié)果 3.2 創(chuàng)建 ROS 工作空間 1. 創(chuàng)建工作目錄 跳轉(zhuǎn)到 home 目錄下: cd 運(yùn)行指令創(chuàng)建工作目錄: mkdir -p /catkin_ws/src 2. 初始化工作空間 跳轉(zhuǎn)工作目錄: mkdir -p /catkin_ws/src 初始化指令: 14 catkin_init_workspace 3. 編譯工作空間 跳轉(zhuǎn)工作目錄: cd /catkin_ws/ 運(yùn)行編譯指令: catkin_make 4. 設(shè)置工作空間環(huán)境變量 source devel/setup.bash 在每次打開終端是都需要運(yùn)行一次這個(gè)指令,否則 ROS 指令找不到這個(gè) 工作空間下的任何包。 3.3 創(chuàng)建和編譯 Mrob 包 1. 跳轉(zhuǎn)工作目錄到 catkin 工作空間 cd /catkin_ws/src 2. 創(chuàng)建 Mrob 包 catkin_create_pkg Mrob std_msgs rospy roscpp 3. 編譯 Mrob 包 跳轉(zhuǎn)工作目錄:cd /catkin_ws 編譯 Mrob 包:catkin_make -pkg Mrob 通過添加pkg 選項(xiàng)可以選擇需要編譯的 catkin 包??梢圆挥镁幾g當(dāng)前工 作空間下無關(guān)的包,節(jié)省時(shí)間,提高編譯的效率 4. 添加當(dāng)前工作空間到 ROS 環(huán)境內(nèi) . /catkin_ws/devel/setup.bash 15 3.4 啟動(dòng)文件 啟動(dòng)文件的語言風(fēng)格上和 XML 文件相同,擁有自己獨(dú)特的標(biāo)簽,可以用 來設(shè)定節(jié)點(diǎn)啟動(dòng)需要的參數(shù),可以啟動(dòng)已經(jīng)編譯完成的 ROS 節(jié)點(diǎn),在管理大 型的機(jī)器人項(xiàng)目時(shí)候,可以方便的管理需要啟動(dòng)的節(jié)點(diǎn),不用通過 rosrun 指 令單個(gè)的啟動(dòng)節(jié)點(diǎn)。啟動(dòng)文件代碼如下: 之間包含的是啟動(dòng)文件的主要代碼,聲明了需要啟動(dòng)的節(jié) 點(diǎn)和需要傳遞參數(shù)。聲明的是啟動(dòng)文件需要啟動(dòng)的節(jié)點(diǎn),節(jié)點(diǎn)所 在的包是 rospy_tutorials,節(jié)點(diǎn)類型是 talker,名字是 talker,類型和包是直接 相關(guān)的參數(shù)不能夠隨便改寫,名字參數(shù)可以隨便改,但是一般和類型名字相 同。 編寫啟動(dòng)文件需要在/catkin_ws/src/Mrob 目錄下面創(chuàng)建一個(gè) launch 目錄, 每個(gè)工包的所有的啟動(dòng)文件都存放在這個(gè)目錄下面,一般以.launch 作為文件名 字的結(jié)尾。編寫完成后可以通過 roslaunch 命令運(yùn)行。啟動(dòng)文件創(chuàng)建過程: 1. 跳轉(zhuǎn)工作目錄 cd /catkin_ws/src/Mrob 2. 運(yùn)行指令創(chuàng)建 launch 目錄 mkdir launch 3. 編寫啟動(dòng)文件并保存 vim test.launch. 16 3.5 ROS 機(jī)器人系統(tǒng)節(jié)點(diǎn) 節(jié)點(diǎn)在 ROS 系統(tǒng)是算法框圖級(jí)的概念,是 ROS 系統(tǒng)中運(yùn)行的一個(gè)基本 單位,一個(gè)完整的 ROS 機(jī)器人系統(tǒng)包含若干個(gè)節(jié)點(diǎn),節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的處理工 作,完成特定的功能,節(jié)點(diǎn)可以通過節(jié)點(diǎn)管理器進(jìn)行管理,通過 ROS 幾點(diǎn)管 理器,各節(jié)點(diǎn)之間才能夠通信,單個(gè)節(jié)點(diǎn)不能夠直接進(jìn)行通信。 每一個(gè)節(jié)點(diǎn)的代碼一般包含一個(gè)主函數(shù)和回調(diào)函數(shù),回調(diào)函數(shù)主要負(fù)責(zé) 數(shù)據(jù)運(yùn)算,完成節(jié)點(diǎn)的主要職能。主函數(shù)通過節(jié)點(diǎn)的初始化,調(diào)用回調(diào)函數(shù) 處理數(shù)據(jù),完成節(jié)點(diǎn)主要功能。一般 ROS 節(jié)點(diǎn)與其他節(jié)點(diǎn)通信的方式有兩種, 一種是 publish,將節(jié)點(diǎn)運(yùn)算的結(jié)果發(fā)布出去,一種是 subscribe,通過訂閱的 方式獲得其他節(jié)點(diǎn)的信息,作為節(jié)點(diǎn)數(shù)據(jù)的輸入。例如本次設(shè)計(jì)中網(wǎng)頁需要 攝像頭拍攝的畫面,就需要訂閱畫面的節(jié)點(diǎn)數(shù)據(jù),通過這種方式,ROS 會(huì)將 攝像頭的數(shù)據(jù)發(fā)布到網(wǎng)頁上,我們才能實(shí)時(shí)的觀測到攝像頭拍攝的畫面 3.6 單片機(jī)節(jié)點(diǎn)代碼 3.6.1 單片機(jī)開發(fā)環(huán)境的設(shè)置 本次設(shè)計(jì)沒有采用 AVR 開發(fā)環(huán)境,而是選擇了 Arduino 開發(fā)板特定的開發(fā)環(huán) 境,arduino 圖形開發(fā)環(huán)境 linux 也可以運(yùn)行。AVR 在 linux 下直接開發(fā)需要 運(yùn)用 gcc 等開發(fā)工具,設(shè)置起來十分麻煩,圖形開發(fā)環(huán)境還需要配合 eclipse,開發(fā)起來相對(duì)麻煩. 1.通過指令方式安裝 arduino 開發(fā)環(huán)境 sudo apt install arduino 2.設(shè)置 arduino 的工作目錄,arduino 開發(fā)環(huán)境安裝完成后,打開開發(fā)環(huán)境 17 選擇工作目錄 sketchbook 存放的地址。 3.安裝 arduinor 串口驅(qū)動(dòng) sudo apt-get install ros-indigo-rosserial-arduino sudo apt-get install ros-indigo-rosserial 4.安裝 ros 庫到 arduino 開發(fā)環(huán)境 跳轉(zhuǎn)工作目錄:cd /sketchbook/libraries 運(yùn)行指令安裝庫:rosrun rosserial_arduino make_libraries.py . 完成上面的步驟以后,ros_lib 會(huì)出現(xiàn)在 arduino 開發(fā)環(huán)境下,如圖 3.2。 Arduino 開發(fā)環(huán)境下的 ros_lib 是將 ROS 系統(tǒng)內(nèi)發(fā)布節(jié)點(diǎn)函數(shù)、點(diǎn)閱訂閱節(jié) 點(diǎn)函數(shù)等移植到了單片機(jī)環(huán)境下,并且對(duì)單片機(jī)的串口波特率、系統(tǒng)時(shí)鐘等 進(jìn)行了設(shè)置,使得 ROS 系統(tǒng)內(nèi)部的重要函數(shù)能夠在單片機(jī)的環(huán)境下運(yùn)行,通 過串口單片機(jī)可以與 ROS 系統(tǒng)的主機(jī)進(jìn)行通信。ros_lib 通過不同的編譯條件 可以適配到不同的單片機(jī)中,擴(kuò)展了 ROS 系統(tǒng)的應(yīng)用場合。 18 圖 3.2 Arduino IDE 3.6.2 單片機(jī)程序 單片機(jī)在本次設(shè)計(jì)中是一個(gè)節(jié)點(diǎn)程序,負(fù)責(zé)控制 4 個(gè)電機(jī)和兩個(gè)舵機(jī)。 在 arduino 的開發(fā)環(huán)境下,沒有 main 函數(shù),需要運(yùn)行的代碼都卸載 loop 函數(shù) 里面,loop 函數(shù)取代了 main 函數(shù)和死循環(huán) while(1),方便了開發(fā)。在代碼正 式運(yùn)行前需要對(duì)代碼運(yùn)行需要的硬件環(huán)境進(jìn)行設(shè)置,所有設(shè)置在 setup()中完 成。這種編碼方式使得代碼清晰明了。流程圖如圖 3.3。 在單片機(jī)里需要完成的 ROS 節(jié)點(diǎn)代碼,需要編寫小車控制回調(diào)函數(shù) M_controlCallBack,負(fù)責(zé)小車的運(yùn)動(dòng)方向控制。舵機(jī)回調(diào)函數(shù)負(fù)責(zé)舵機(jī)的運(yùn) 動(dòng)控制。設(shè)定硬件資源。訂閱電機(jī)和舵機(jī)控制的話題 cmd_vel,初始化訂閱 結(jié)點(diǎn),loop 函數(shù)里面每循環(huán)一次,運(yùn)行一次 spinonce 函數(shù),spinonce 函數(shù)負(fù) 責(zé)調(diào)用回調(diào)函數(shù),完成控制動(dòng)作。spinonce()在每次循環(huán)中值執(zhí)行一次,只調(diào) 用一次回調(diào)函數(shù)。spin()函數(shù)會(huì)從被調(diào)用的的時(shí)候一直調(diào)用回調(diào)函數(shù),知道系 統(tǒng)停止運(yùn)行才返回,本次設(shè)計(jì)中通過 loop 函數(shù)和 spinonce()函數(shù)配合就可以 完成 spin()函數(shù)的功能。詳細(xì)代碼見附錄。 19 圖 3.3 流程圖 3.7 網(wǎng)頁設(shè)計(jì) 網(wǎng)頁代碼采用 html 和 JavaScript 語言進(jìn)行編寫,詳細(xì)代碼見附錄,主要 實(shí)現(xiàn)實(shí)時(shí)圖像觀測、小車運(yùn)動(dòng)控制、舵機(jī)控制。頁面布局依靠 HTML 和 CSS,本 次采用表格的方式負(fù)責(zé)基本的布局,通過 JS 代碼在表格內(nèi)部添加具體的按鈕 等功能塊,JavaScript 是事件驅(qū)動(dòng)的語言,本次設(shè)計(jì)中大量的采用點(diǎn)擊事件, 當(dāng)基本的頁面加載完成之后,JS 代碼開始運(yùn)行,監(jiān)聽頁面的事件,當(dāng)對(duì)應(yīng)的 事件發(fā)生時(shí),JS 會(huì)用相應(yīng)的代碼相應(yīng)這個(gè)事件。本次大量的運(yùn)用了點(diǎn)擊事件, 通點(diǎn)擊頁面的按鈕,可以實(shí)現(xiàn)網(wǎng)頁與 ROS 的通信,可以發(fā)布節(jié)點(diǎn)、訂閱節(jié)點(diǎn)。 本次選用 ROS 的 JS 庫作為基礎(chǔ),文件名稱是 ros.js。這個(gè)庫主要定義了 與 rosbridge 通信的相關(guān)協(xié)議,以及 ROS 中訂閱節(jié)點(diǎn)、發(fā)布節(jié)點(diǎn)等函數(shù)的 JS 代碼實(shí)現(xiàn),可以通過定義定義 ROS 對(duì)象來調(diào)用其中的函數(shù)。在設(shè)計(jì)中需要考 20 慮頁面布局和需要訂閱的節(jié)點(diǎn)和發(fā)布的節(jié)點(diǎn)。本次設(shè)計(jì)中每個(gè)功能都被設(shè)計(jì) 在一個(gè)獨(dú)立的文件中,starting.js 文件主要實(shí)現(xiàn)網(wǎng)頁和 ROS 的通信,在 stating 文件中定義了 connection 對(duì)象,這個(gè)對(duì)象復(fù)擇設(shè)置 ip 地址,初始化各個(gè)模塊, 實(shí)現(xiàn)各個(gè)模塊的的頁面布局和事件監(jiān)聽設(shè)置。Connection 對(duì)象的所有方法存 在 connection.js 文件中,所有的 JS 文件通過 index.html 文件加載到瀏覽器中, 通過瀏覽器可以查看代碼,如圖 3.4。 rosbridge 軟件包可以作為網(wǎng)頁和 ROS 系統(tǒng)之間通信的橋梁,ROS 和瀏覽 器通過 WebSoket 協(xié)議進(jìn)行通信。WebSocet 是 HTML5 的一中新的通信協(xié)議。 他實(shí)現(xiàn)了瀏覽器和服務(wù)器的全雙工通信。rosbridge_server 實(shí)現(xiàn)了 ROS 與瀏覽 器之間的通信。在使用網(wǎng)頁功能前需要開啟 rosbridge_server,否則瀏覽器和 ROS 系統(tǒng)之間不能正常的通信,網(wǎng)頁功能將不能實(shí)現(xiàn)。 21 圖 3.4 網(wǎng)頁代碼 3.8 攝像頭驅(qū)動(dòng)與參數(shù)設(shè)定 本次設(shè)計(jì)采用的市面上常見的一般攝像頭,采用通用攝像攝像頭驅(qū)動(dòng)既可以, 因此選的是 ROS 系統(tǒng)攝像頭包為 uvc_camera,uvc_camera 可以驅(qū)動(dòng)一般的 攝像頭并且可以在 ROS 內(nèi)發(fā)布圖像消息,其他節(jié)點(diǎn)可以訂閱相關(guān)的消息作為 圖像處理或者傳輸?shù)膶?duì)象。如果想要在普通權(quán)限下使用攝像頭,需要設(shè)計(jì)系 統(tǒng)的設(shè)備規(guī)則,設(shè)置方法: 1.創(chuàng)建并編輯 uvc.rules sudo vim /ect/udev/rules.d/uvc.rules 2.編輯 uvc.rules,對(duì)設(shè)備 ID 信息等進(jìn)行設(shè)置 # UVC cameras SUBSYSTEMS=“usb“,ENVDEVTYPE=“usb_device“, ATTRSidVendor=“1871“, ATTRSidProduct=“0316“, MODE=“0666“ 通過 lsusb 指令可以查看產(chǎn)品的 ID 號(hào)、生產(chǎn)廠家 ID 號(hào)等。如下圖所示: 22 圖 3.6 USB 設(shè)備信息 3.9 攝像頭測試 將攝像頭插在 arm 開發(fā)上面通過 guvcview 軟件測試,guvcview 軟件可以 正常顯示畫面,說明攝像頭能夠正常的工作,arm 板的供電也能夠滿足攝 像頭的需要。 ROS 系統(tǒng)集成了許多優(yōu)秀的圖形化開發(fā)工具,rviz 是 3D 可視化工具,主 要用來查看圖像、坐標(biāo)、地圖等。rviz 對(duì)硬件的依賴較強(qiáng),ROS 的基礎(chǔ)版 本里也沒有對(duì) rviz 進(jìn)行安裝。因此沒有采用 rviz 作為本次攝像頭的測試 工具,本次設(shè)計(jì)采用的是 image_view 包作為測試工具,用來訂閱 camera_uvc 發(fā)布的圖像信息,并且顯示在屏幕上面。測試結(jié)果如圖: 23 圖 3.7 攝像頭測試 3.10 小車運(yùn)動(dòng)控制算法 小車的控制信號(hào)來自網(wǎng)頁,通過網(wǎng)頁可以控制兩個(gè) 2 個(gè)舵機(jī)和 4 個(gè)電機(jī), 可以實(shí)現(xiàn)舵機(jī)的上下左右運(yùn)動(dòng),小車的前后運(yùn)動(dòng)和左右的轉(zhuǎn)向。小車的轉(zhuǎn)向 是通過采集鼠標(biāo)點(diǎn)擊畫布的坐標(biāo)實(shí)現(xiàn)的。畫布分為 8 個(gè)區(qū)域,每個(gè)區(qū)域發(fā)送 的坐標(biāo)不同,通過判斷坐標(biāo)所在的區(qū)域可以控制小車不同的運(yùn)方向,8 個(gè)區(qū) 域分別對(duì)應(yīng)到小車的 4 種運(yùn)行方式上,分別是向前運(yùn)動(dòng)、向后運(yùn)動(dòng)、左轉(zhuǎn)、 右轉(zhuǎn)。對(duì)應(yīng)的軟件代碼。 攝像頭的運(yùn)動(dòng)比較簡單,通過 4 個(gè)按鈕的點(diǎn)擊完成,每個(gè)按鈕可以發(fā)送 不同的坐標(biāo)信息,表征不同的運(yùn)動(dòng)方向,當(dāng)單片機(jī)接收到數(shù)據(jù)后,通過判斷 數(shù)值完成相應(yīng)的動(dòng)作。點(diǎn)擊 UP 時(shí),按鈕攝像頭可以向上運(yùn)動(dòng),DOWN 按鈕 可以使攝像頭向下運(yùn)動(dòng),可以完成向左向右的運(yùn)動(dòng)。 24 4 裝置整體調(diào)試 4.1 硬件連接 本次設(shè)計(jì)采用的電源是普通的移動(dòng)電源, 攝像頭和主控制板板之間采用 USB 連接,單片機(jī)和主控板之間采用 USB 連接,USB 口負(fù)責(zé)單片機(jī)的供電。 將 4 個(gè)電機(jī)連接到驅(qū)動(dòng)板,由于 USB 口的供電能力有限,選擇給驅(qū)動(dòng)板單獨(dú) 供電。驅(qū)動(dòng)板接線如圖 4.1 所示,驅(qū)動(dòng)板兩側(cè)接直流電機(jī),右下角是舵機(jī)接 線,上方為供電口,驅(qū)動(dòng)板和單片機(jī)開發(fā)板通過排針鏈接,可將驅(qū)動(dòng)板疊加 到 Arduino 上面。圖 1 為小車的整體效果圖: 圖 4.1 小車整體效果 25 圖 4.2 驅(qū)動(dòng)板 4.2 啟動(dòng)節(jié)點(diǎn) 本次設(shè)計(jì)中需要啟動(dòng)節(jié)點(diǎn)有串口節(jié)點(diǎn)、攝像頭節(jié)點(diǎn),需要啟動(dòng)的服務(wù)是 圖片傳輸服務(wù)和 websoket 服務(wù)。啟動(dòng)串口節(jié)點(diǎn)可以實(shí)現(xiàn)主板和單片機(jī)的通信。 通過 rostopic 指令可以查看 ROS 正在運(yùn)行的話題如圖 4.3。 26 圖 4.3 話題指令 4.3 運(yùn)行網(wǎng)頁測試 在局域網(wǎng)內(nèi)可以通過 IP 來訪問小車的網(wǎng)站,小車的登陸賬號(hào)為小車的 IP 地址,網(wǎng)頁的右上角是登陸欄,在登陸欄中輸入的設(shè)備的 IP 地址,點(diǎn)擊 connect 按鈕就可以連接到小車上,登陸后效果如圖 4.4,connect 按鈕會(huì)顯示 為 disconnect,可以點(diǎn)擊 disconnect 按鈕斷開與設(shè)備的連接。連接到設(shè)備后可 以進(jìn)行相關(guān)的控制和操作,如提交話題、發(fā)布信息等。 網(wǎng)頁被分為 5 個(gè)區(qū)域,camera 區(qū)域顯示的是攝像頭拍攝的實(shí)時(shí)畫面, servo 是舵機(jī)的控制區(qū)域,joystick 區(qū)域?yàn)樾≤囘\(yùn)動(dòng)控制區(qū)域,可以遙控小車 27 的運(yùn)動(dòng),左下角為 ROS 系統(tǒng)的檢測區(qū)域,通過此區(qū)域可以觀測 ROS 系統(tǒng)正 在運(yùn)行的話題、服務(wù)、節(jié)點(diǎn)。 圖 4.4 網(wǎng)頁效果 28 結(jié)論 經(jīng)過對(duì)本課題的研究與實(shí)際制作,制作完成了一輛基于 ROS 機(jī)器人系統(tǒng) 的智能小車,制作了一個(gè)網(wǎng)站。小車拍攝圖像可以傳輸?shù)骄W(wǎng)頁,ROS 系統(tǒng)的 運(yùn)行參數(shù)可以傳輸?shù)骄W(wǎng)頁,小車可以接收到網(wǎng)頁傳輸過來的指令,調(diào)整運(yùn)動(dòng) 的軌跡。主要完成的工作如下: 1.完成了智能小車硬件平臺(tái)的搭建工作,小車可以在相應(yīng)的指令下運(yùn)動(dòng), 可以拍攝畫面,并且將畫面實(shí)時(shí)傳輸?shù)骄W(wǎng)頁當(dāng)中; 2.完成了網(wǎng)頁的設(shè)計(jì),實(shí)現(xiàn)了網(wǎng)頁對(duì)小車的控制,通過網(wǎng)頁可以注冊節(jié) 點(diǎn),提交話題,與 ROS 系統(tǒng)可以進(jìn)行對(duì)話; 3.完成各種硬件選型和硬件連接調(diào)試,小車硬件系統(tǒng)的組裝; 4.完成了網(wǎng)頁服務(wù)器的搭建,能實(shí)現(xiàn)局域網(wǎng)內(nèi)通過 IP 訪問網(wǎng)頁; 5.完成了整體裝置測試,實(shí)現(xiàn)設(shè)計(jì)功能要求。通過本平臺(tái)可以學(xué)習(xí) ROS 系統(tǒng)的基礎(chǔ)知識(shí)。 本次設(shè)計(jì)中還存在一些問題和解決方式: 1.開機(jī)后需要通過終端進(jìn)行 ROS 系統(tǒng)的啟動(dòng),在實(shí)際應(yīng)用中需要轉(zhuǎn)換 成隨系統(tǒng)自啟動(dòng)。 2.網(wǎng)頁界面簡陋,后期需要做出美化工作。網(wǎng)頁存在 bug 需要修補(bǔ)。 3.由于安全證書的原因,網(wǎng)頁 SSH 不能夠很好的工作。 4.小車運(yùn)動(dòng)速度太慢,小車的驅(qū)動(dòng)能力不夠強(qiáng)。后期需要自己設(shè)計(jì)驅(qū)動(dòng), 增加驅(qū)動(dòng)能力。 29 致謝 非常感謝北方工業(yè)大學(xué)四年的培養(yǎng),北方工業(yè)大學(xué)不僅僅教會(huì)了我專業(yè) 知識(shí)也給予了我探索未知的勇氣。非常感謝楊老師對(duì)我的課題的理解和支持, 楊老師一直鼓勵(lì)著我去實(shí)踐,通過實(shí)踐不斷的學(xué)習(xí)知識(shí),增長經(jīng)驗(yàn)。非常感 謝斯坦福實(shí)驗(yàn)室提供的 ROS 系統(tǒng),謝謝好心網(wǎng)友給我提供的幫助。 30 主要參考文獻(xiàn) 1 張建偉,張立偉,胡穎,張俊. 開源機(jī)器人操作系統(tǒng)ROSM. 科學(xué)出版社, 2012,09 2 Aaron Martinez Enrique Fernndez.ROS 機(jī)器人程序設(shè)計(jì)M.2014,09 3 王淑芳,電機(jī)驅(qū)動(dòng)技術(shù)M.科學(xué)出版社,2008,10(3):90-94 4 葉青,周文遠(yuǎn),宋宇,田建國. 一種實(shí)時(shí)視頻采集處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) J. 光電子激光,2006,1 5 Michael Dawson.Python 編程初學(xué)者指南M.北京:人民郵電出版社. 2014,06 6 吉鵬,馬云峰等. 微機(jī)原理與接口技術(shù)M. 北京:高等教育出版社, 2003.12 7 Jason M. OKane. A Gentle Introduction to ROSM,2013,10 8 潘光洋,蔡娜.Linux 從處學(xué)到入門M.電子工業(yè)出版社,2014,06 9 胡壽松. 自動(dòng)控制原理M. 北京:科學(xué)出版社,2007 10胡向東. 傳感器與檢測技術(shù)M. 北京:機(jī)械工業(yè)出版社,2009 31 附件 1. 單片機(jī)代碼 #include #include #include #include AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); Servo myservo1,myservo2; / create servo object to control a servo / a maximum of eight servo objects can be created int pos1 = 90; / variable to store the servo1 position int pos2 = 90; / variable to store the servo2 position float temp,temp1; ros:NodeHandle nh; void M_controlCallBack( const geometry_msgs:Twist else if(Mrun.linear.x0) else T_left(); if(Mrun.linear.x0) temp=Mrun.linear.x*(-1); if(temp=Mrun.angular.z) G_backward(); else T_left(); delay(100); if(Mrun.linear.x0) else T_right(); delay(100); if(Mrun.linear.x=temp1) G_backward(); else T_right(); 34 void servoContollCallBack(const geometry_msgs:Twist if(Mrun.linear.x=2.0) pos1+=10; myservo1.write(pos1); if(Mrun.linear.x=3) pos2+=10; if(Mrun.linear.x=4) pos2-=10; myservo2.write(pos2); ros:SubscriberservoSub(“cmd_vel1“,servoContollCal lBack); ros:SubscribermotorSub(“cmd_vel“,M_controlCallB ack); void setup() nh.initNode(); nh.subscribe(motorSub); nh.subscribe(servoSub); 35 / turn on motor motor1.setSpeed(255); / turn on motor motor2.setSpeed(255); / turn on motor motor3.setSpeed(255); / turn on motor motor4.setSpeed(255); realse_car(); myservo1.attach(9); / attaches the servo on pin 9 to the servo object myservo2.attach(10); myservo2.write(90); myservo2.write(90); void loop() nh.spinOnce(); 36 void realse_car() motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); void G_forward() motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); void G_backward() motor1.run(BACKWARD); motor2.run(BACKWARD); 37 motor3.run(BACKWARD); motor4.run(BACKWARD); void T_left() motor1.run(BACKWARD); motor2.run(BACKWARD); motor3.run(FORWARD); motor4.run(FORWARD); void T_right() motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); 38 2. 網(wǎng)頁代碼 gui 39 Camera servo Joystick Info Terminal var isConnecting=false; 40 function mov_servo(connection, servo_div) his.init=function() /while(servo_div.hasChildNode() /servo_div.removeChild(servo_div.lastChild); servo_UpButton=document.createElement(“input“); servo_UpButton.type=“button“; servo_UpButton.id=“servo_up“; servo_UpButton.value=“UP“; servo_div.appendChild(servo_UpButton); servo_DownButton=document.createElement(“input“); servo_DownButton.type=“button“; servo_DownButton.id=“servo_down“; servo_DownButton.value=“Down“; servo_div.appendChild(servo_DownButton); servo_LeftButton=document.createElement(“input“); servo_LeftButton.type=“button“; servo_LeftButton.id=“servo_up“; 41 servo_LeftButton.value=“Left“; servo_div.appendChild(servo_LeftButton); servo_RightButton=document.createElement(“input“); servo_RightButton.type=“button“; servo_RightButton.id=“servo_right“; servo_RightButton.value=“Right“; servo_div.appendChild(servo_RightButton); servo_AdviseButton=document.createElement(“input“); servo_AdviseButton.type=“button“; servo_AdviseButton.id=“servo_advise“; servo_AdviseButton.value=“Advise“; servo_div.appendChild(servo_AdviseButton); servo_AdviseButton.addEventListener(click,function(msg)advertise(connect ion,/cmd_vel,geometry_msgs/Twist);,false); servo_UpButton.addEventListene
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育技術(shù)創(chuàng)新推動(dòng)學(xué)習(xí)模式變革研究
- 2025年中國柜式冷凍箱市場競爭態(tài)勢及行業(yè)投資潛力預(yù)測報(bào)告
- 中國不銹鋼儲(chǔ)罐行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 英語動(dòng)詞不定式否定結(jié)構(gòu)的句法與音系研究
- 生物質(zhì)熱解揮發(fā)物的催化提質(zhì)研究
- 幼兒園健康活動(dòng)中教師教育支持的問題與提升策略研究-以H市幼兒園中班為例
- 鋼鐵企業(yè)綠色轉(zhuǎn)型的績效評(píng)價(jià)研究-以寶鋼股份為例
- 我國職業(yè)教育政策的量化評(píng)價(jià)與優(yōu)化研究-基于PMC指數(shù)模型
- 基于溫差均勻性原理的低溫?zé)狎?qū)動(dòng)氨吸收制冷優(yōu)化研究
- 2025至2030中國灌溉過濾器行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 村衛(wèi)生室年度校驗(yàn)工作總結(jié)
- 商務(wù)司機(jī)服務(wù)規(guī)范
- 2025年新思想概論考試題及答案
- 科學(xué)理財(cái)預(yù)防詐騙
- EPC項(xiàng)目-裝飾裝修EPC總承包工程-技術(shù)標(biāo)(實(shí)施計(jì)劃方案、實(shí)施技術(shù)方案、實(shí)施管理組織方案)
- 物業(yè)管理職責(zé)和職能
- 2025年輔警招聘考試試題庫-附答案(模擬題)
- 杭州市拱墅區(qū)2025招考社區(qū)專職工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 新《科學(xué)技術(shù)普及法》專題講座課件
- 博士申請(qǐng)全攻略
- (版)國家開放大學(xué)電大《組織行為學(xué)》機(jī)考終結(jié)性2套真題題庫及答案3
評(píng)論
0/150
提交評(píng)論