




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
北方工業(yè)大學北方工業(yè)大學 本科畢業(yè)設計(論文)本科畢業(yè)設計(論文) 題 目: 基于 ROS 機器人系統(tǒng)的智能小車研制 指導教師: 專業(yè)班級: 學 號: 姓 名: 日 期: 2015 年 6 月 15 日 基于 ROS 機器人系統(tǒng)的智能小車研制 摘要 隨著機器人技術的發(fā)展,ROS(Robot Operating System)機器人系統(tǒng)受 到越來越多人的研究和學習。通過本次設計研制出了一臺以優(yōu)秀的開源機器 人操作系統(tǒng) ROS 作為軟件基礎的智能小車,拋棄了傳統(tǒng)的單片機等嵌入式軟 件代碼從零寫起的開發(fā)方案,軟件代碼以 ROS 系統(tǒng)的代碼規(guī)范和理念進行設 計。硬件電路方面采用了當下流行的開發(fā)電路板,這就對小車的可復制性, 給廣泛推廣提供了更大的空間,從而可以讓更多的人能夠參與到這種科技實 踐中,享受科技給生活帶來的樂趣。這個系統(tǒng)可以作為 ROS 系統(tǒng)的入門級學 習的實體解決方案,也可以作為家用可移動的監(jiān)控平臺,也可以作為物聯(lián)網 的一個終端設備。 關鍵詞:Robot Operating System;ROS;智能小車;物聯(lián)網 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 機器人的發(fā)展概況.1 1.2.2 機器人軟件平臺的發(fā)展概況2 1.2.3 ROS 系統(tǒng)的誕生和發(fā)展3 1.3 本課題的主要研究內容及安排.3 2 功能規(guī)劃及設計方案論證5 2.1 功能規(guī)劃5 2.2 本次設計方案選擇5 2.2.1 機械結構方案6 2.2.2 主控板的選擇.7 2.2.3 驅動方案選擇.8 2.3 軟件方案選擇10 2.4 系統(tǒng)總體運行模式10 3 系統(tǒng)設置與測試11 3.1 ROS 機器人系統(tǒng)安裝配置.11 3.2 創(chuàng)建 ROS 工作空間.13 3.3 創(chuàng)建和編譯 MROB包.13 3.4 啟動文件14 3.5 ROS 機器人系統(tǒng)節(jié)點.15 3.6 單片機節(jié)點代碼.16 3.6.1 單片機開發(fā)環(huán)境的設置.16 3.6.2 單片機程序17 3.7 網頁設計.18 3.8 攝像頭驅動與參數(shù)設定20 3.9 攝像頭測試21 3.10 小車運動控制算法22 4 裝置整體調試.23 4.1 硬件連接23 4.2 啟動節(jié)點24 4.3 運行網頁測試25 結論27 致謝28 主要參考文獻29 附件30 外文資料翻譯及原文42 1 1 引言 1.1 課題研究背景 隨著機器人領域的快速發(fā)展和復雜化,代碼的復用性和模塊化的要求越 來越強烈,而已有的機器人開源機器人操作系統(tǒng)很難滿足要求。2010 年 Willow Garage 公司發(fā)布了開源機器人操作系統(tǒng) ROS(Robot Operating System), 很快在機器人領域展開了學習和應用。 ROS 可以在許多 Linux 發(fā)行版本上運行,ROS 可以源碼安裝也可以采用 直接安裝,Willow Garage 公司僅僅提供了 Ubuntu 系統(tǒng)環(huán)境下的直接安裝方 法,在其他平臺上采用的多是源碼安裝方式。本次設計軟件上采用了 Ubuntu 系統(tǒng),作為 ROS 系統(tǒng)的安裝環(huán)境,方便了 ROS 的安裝以及可能存在的兼容 性問題。 Linux 作為開源系統(tǒng)對硬件平臺高度適應性,使的它能夠很好的移 植到不同的平臺上,在嵌入式、服務器等領域得到了廣泛的應用。Ubuntu 是 Linux 眾多發(fā)行版本中很優(yōu)秀的的版本,Ubuntu 建基于 Debian 的不穩(wěn)定分支, 是以桌面應用為主的桌面操作系統(tǒng),運作主要依賴 Canonical 有限公司的支 持,同時亦有來自 Linux 社區(qū)的熱心人士提供協(xié)助?,F(xiàn)在搭載 ROS 系統(tǒng)的機 器人有 PR2、REEM-C 等,這些機器人都造假昂貴,適合實驗室作為研究, 但不太適合初學者做為學習 ROS 的平臺。 1.2 本課題的發(fā)展現(xiàn)狀 1.2.1 機器人的發(fā)展概況 機器人的分類和定義有好多種,一般可以分為工業(yè)機器人和特種機器人, 工業(yè)機器人主要是應用在工業(yè)現(xiàn)場的機械臂,特種機器人主要是具有一定智 能的,具有一定的自主性的機器人,例如服務性機器人、無人機等。 2 1920 年機器人一詞出現(xiàn)在一部文學作品中,1959 年第一臺機器人被設計 出來,標志著機器人真正的誕生。經過長達半個世紀的發(fā)展,機器人應用的 領域不斷地擴大,普及的程度也越來越高。越來越多的工業(yè)機器人進入到共 生產中,大大降低了工業(yè)生產的成本,服務性機器人也在不斷的取得突破性 的發(fā)展。通過現(xiàn)在的市場調查發(fā)現(xiàn),越來越多的人愿意嘗試機器人產品,這 將大大刺激服務性機器人市場的發(fā)展,更多的新技術將會應運而生。 1.2.2 機器人軟件平臺的發(fā)展概況 機器人軟件開發(fā)平臺或者開發(fā)框架是指為機器人開發(fā)提供了可重用的軟 件包、軟件開發(fā)、編譯、仿真工具等軟件的集合,機器人軟件平臺節(jié)約了機 器人開發(fā)者的時間和成本。目前有多種機器人開發(fā)框架和軟件開發(fā)平臺,商 用的機器人軟件開發(fā)平臺有 Evolution Robotics、Microsoft Robotics Studio(MSRS) 、Skilligent 等,開源的機器人框架有 Cylon.js、Artoo、Gobot、ROS 等。 MSRS 是微軟開發(fā)的機器人軟件平臺,能夠在微軟開發(fā)的 windows 和 windowsCE 下面運行,它提供了完備了的仿真和圖形化的開發(fā)環(huán)境。Cylon.js 是一個機器人 JavaScript 開發(fā)框架,可以使用 Node.js 進行機器人的開發(fā)和物 理計算,他支持多個硬件平臺。Artoo 是用 Ruby 語言寫成的 Cylon.js 機器人 開發(fā)框架的姐妹項目,編程語言偏門,不支持 c 語言等熱門的語言,不利于 機器人的擴展。Gobot 機器人開發(fā)框架采用 Go 語言編寫完成,Go 語言有 Google 開發(fā),主要用來做云計算和云服務的語言,更適合運用于服務器程序 的編寫。ROS 是開源的機器人系統(tǒng)可以與其他開源框架進行結合,ROS 提出 了自己獨特的解決方案,軟件開發(fā)標準,集成了 SLAM 導航等功能,擁有獨 3 立的仿真環(huán)境,通過硬件抽象語言可以建立自己的機器人模型進行仿真學習。 1.2.3 ROS 系統(tǒng)的誕生和發(fā)展 ROS 系統(tǒng)起源于 2007 年斯坦福大學人工智能實驗室的 STAIR 項目與 Willow Garage 機器人技術公司的個人機器人項目(Personal Robots Program) 之間的合作,ROS 的軟件研究成果在機器人 PR2 上進行體驗展示。 在開源的交互中,ROS 得到完善和推廣.ROS 是一種開源的、用于機器 人的后操作系統(tǒng),或者說次級操作系統(tǒng)。它提供類似操作系統(tǒng)所提供的功能, 包含硬件抽象描述、底層驅動程序管理、共用功能的執(zhí)行、程序間的消息傳 遞、程序發(fā)行包管理等,也提供一些工具程序和庫用于獲取、建立、編寫和 運行多機整合的程序。 1.3 本課題的主要研究內容及安排 本設計基于 Robot Operating System 和嵌入式開發(fā)板,設計一輛智能小車, 通過網頁可以實現(xiàn)對軟件系統(tǒng)的監(jiān)控。小車硬件部分主要是將成熟的硬件進 行適當?shù)拇钆?,本次設計的重點是設計軟件,搭建 ROS 系統(tǒng)運行環(huán)境和 web 服務器,編寫相關的軟件代碼,主要包括網頁代碼和 ROS 節(jié)點代碼。 課題主要研究內容及安排如下: 1. 查閱相關文獻資料; 2. 確定系統(tǒng)總體設計方案; 3. 對元器件進行選型、統(tǒng)計并采購; 4. 對硬件進行組裝; 4 5. 搭建軟件開發(fā)環(huán)境; 6. 單片機基礎代碼設計及調試; 7. 網頁代碼設計及調試; 8. 整合代碼及調試; 9. 撰寫畢業(yè)設計論文。 5 2 功能規(guī)劃及設計方案論證 2.1 功能規(guī)劃 本次設計需要搭建一個智能小車。通過網頁可以實現(xiàn)對小車的運動軌跡 的控制,小車可以響應用戶指令完成前進和后退直線運動和轉向運動。網頁 端可以監(jiān)控系統(tǒng)的運行狀態(tài),可以清楚的了解系統(tǒng)運行狀況??梢詫崿F(xiàn)視頻 實時傳輸功能,用戶可以實時觀察到小車拍攝到的畫面。 2.2 本次設計方案選擇 硬件平臺的搭建需要設計合適的機械部分和硬件部分。機械部分主要包 含智能小車底盤、云臺、攝像頭、主控板、鍵盤、電機驅動等。硬件部分主 要負責運行系統(tǒng)和代碼,小車的運動控制??蛇x擇的方案如下: 方案 1 可以選擇電腦與單片機組合。電腦負責運行 Ubuntu 系統(tǒng)和 ROS 系統(tǒng)等,單片機負責底層的小車運行控制。電腦和單片機之間通過串口通訊。 電腦的運行速度快,處理能力強,系統(tǒng)運行更加流暢,能夠運行 ROS 系統(tǒng)的 完整版本,可以運行 rviz 3D 視圖等圖形化工具。缺點是電腦的體積大,重量 也較大,需要的車體盤會偏大,需要的更大的驅動力,會增加小車制作的成 本和控制的難度。 方案 2 選擇 arm 開發(fā)板作為小車的控制層,運行 Ubuntu 和 ROS 系統(tǒng)等, 并且負責小車的運動控制。優(yōu)點是 arm 開發(fā)板的成本較低,體積小,重量輕, 易于在小車上安裝,可以縮小小車的體積,減輕小車的重量,小車更加易于 控制。缺點是 ROS 的部分功能不能在 arm 平臺讓很好的運行,但是不影響核 心功能。Arm 開發(fā)板直接控制小車的運行,這樣可以使得系統(tǒng)更加的簡潔, 6 由于電機驅動功率較大,在電機運行時,電流或者電電壓的過大波動可能會 燒毀 arm 芯片,影響到系統(tǒng)的整體穩(wěn)定性。 方案 3 采用 arm 開發(fā)板和單片機的組合,開發(fā)板和單片機之間采用串口 進行通訊。ARM 開發(fā)板運行 Ubuntu 和 ROS 系統(tǒng),可以通過串口發(fā)送指令給 單片機。單片機可以產生 PWM 控制電機的轉動。這種方案既保證了小車體 積較小,成本低,也保證了系統(tǒng)的穩(wěn)定性。 通過以上的方案比較我們選擇方案三作為本次設計的硬件解決方案, 2.2.1 機械結構方案 本次設計的是智能小車,需要選擇一個移動平臺作為開發(fā)的基礎,由于 材質的不同,價格差別也較多。底盤可以選擇鋁合金、鋼板、亞克力等,車 輪子可以選擇普通的塑料橡膠輪、履帶等。金屬的車盤會使得車子更加的穩(wěn) 定牢固,但是要求的電機的驅動能力更強,成本也偏高。綜合考慮本次采用 的是塑料材質的車底盤。 圖 2.2 所示即為本次采用的小車平臺。小車底盤是亞克力材料,強度較 高,相對于鋁合金更加易于加工。小車底盤有 4 個輪子,每個輪子都有獨立 的電機進行驅動,小車轉向操作更加靈活,驅動力更強,可以搭載更多的傳 感器,完成復雜的任務。 云臺采用簡易的雙軸的舵機云臺,如圖 2.1,兩個舵機可以驅動攝像頭云 臺左右上下運動運行,本次設計沒有采用云臺配套的攝像頭,需要對云臺和 攝像頭進行一定的加工,才能將攝像頭固定在云臺上,通過云臺的移動,攝 像頭的拍攝范圍更加廣闊。 7 圖 2.1 云臺和攝像頭 圖 2.2 小車底盤 2.2.2 主控板的選擇 ARM 公司一直主導著嵌入式行業(yè),市面上流行的 ARM 嵌入式開發(fā)板種 類較多,卡片式也是一種嵌入式開發(fā)板,樹莓派是卡片式電腦的典型代表, 8 接上顯示屏鼠標等就可以進行辦公瀏覽網頁等操作,使用起來十分方便,價 格低廉,性能上比不上真正意義的電腦,但是能夠滿足基本的需求。 本次設計計劃采用樹莓派 arm 開發(fā)板,樹莓派第一代產品作為一款開源 的 arm 開發(fā)板,在許多志愿者的參與下,各種應用已經形成規(guī)模,很容易上 手,做各種開發(fā)。但是由于第一代產品是 2012 年的產品,不支持 ubuntu 系 統(tǒng),在其他的 linux 版本下安裝 ROS,需要進行編譯等操作,存在兼容性問題, 不易于本次的設計開發(fā),而且性能較差,無法本次設計的要求。本次設計采 用國產的香蕉派開源板作為主控板,如圖 2.4(a)所示,相對于樹莓派,香 蕉派具有運行頻率高、內存大、內核更加先進等優(yōu)勢,而且支持 ubuntu 系統(tǒng), 系統(tǒng)運行流暢。表 2.1 為兩塊開板的硬件配置對照。 表 2.1 硬件配置對比 CPU內存內存板載存儲板載存儲電源電源USB 借口借口 Cortex-A7 雙核1GBDDR3SD 卡5V 直流電2 個 ARM1176JZF-S512MSD 卡5V 直流電2 個 2.2.3 驅動方案選擇 硬件電路部分需要設計控制板和驅動電路以及其他必要的傳感器電路。 本次設計采用單片機作為電機運動的控制板,控制電機運轉。單片機選擇 AVR 單片機,型號為 ATmega328,開發(fā)板選擇 Arduino,如圖 2.4(b)所示, Arduino 為一款開源硬件,具有標準的硬件接口,獨立的開發(fā)環(huán)境和標準的 函數(shù)庫,每一種擴展板都有對應的函數(shù)庫,方便軟件代碼的編寫,可以不用 花太多的精力放在底層的開發(fā)上,可以更好的專注于邏輯功能的實現(xiàn)上。本 次設計中有 4 個直流電機,2 個舵機需要控制,電機驅動需要能夠驅動 4 個 9 電機。2 個舵機可以直接由單片機進行驅動。本次選擇了型號為 C3A3 的 arduino 電機驅動板,如圖 2.3 所示,此款電機驅動的板可以驅動 4 個直流電 機或者 2 個步進電機,同時可以驅動兩個舵機,能夠滿足本次設計的要求。 圖 2.3 電機驅動 (a) (b) 圖 2.4 單片機和主控板 10 2.3 軟件方案選擇 ROS 系統(tǒng)依賴于 Linux 系統(tǒng),本次設計選用了 Ubuntu 系統(tǒng)作為 ROS 系 統(tǒng)的依賴系統(tǒng),由于 Ubuntu 的衍生版本眾多,針對不同的應用場合和硬件平 臺 Ubuntu 有多種衍生版本,由于本次設計選用的 arm 平臺,運算處理能力 有限,因此選用了對硬件要求不高的 Lubuntu14.04 做為本次設計的操作系統(tǒng)。 ROS 系統(tǒng)更新速度比較快,已發(fā)行多個版本,本次設計采用的是 indigo 版本, 雖然現(xiàn)在的許多中文資料是 hydro 版本或者更老的版本,但這并不會影響本 次設計。Indigo 版本的 ROS 和 Lubuntu 14.04 版本都有 5 年的官方支持的維 護更新,這樣能夠保證在 5 年內不用跟新系統(tǒng),可以不升級系統(tǒng)的條件下將 繼續(xù)完善本次設計。 用戶需要通過 Web 服務器來訪問本機的網頁,本次設計采用 Apache 作 為本次設計的 web 服務器。Apache 網頁服務器是一款開源的軟件,是世界排 行第一的網頁服務器,它可以多種操作系統(tǒng)平臺上運行,具有簡單、速度快、 穩(wěn)定性高、安全性高等優(yōu)點,被許多世界知名的網站采用,例如亞馬遜,雅 虎等。 2.4 系統(tǒng)總體運行模式 本章主要是對整個系統(tǒng)設計的一個總體概括,通過對可行性方案的分析 與研究來決定采取哪種方案更加適合這次的畢業(yè)設計,本次選擇的方案運行 的基本模式如圖 2.5 所示。 圖中 ROS 系統(tǒng)核心在香蕉派開發(fā)板上運行,ROS 系統(tǒng)內部節(jié)點之間通 過話題進行數(shù)據(jù)交換,Arduino 開發(fā)板和香蕉派之間采用 USB 線進行鏈接, 通過串口通信協(xié)議進行通信。通過串口可以實現(xiàn) ROS 系統(tǒng)和單片機的鏈接, 11 輸入設備可以時操縱桿、攝像頭、激光雷達等,本次設計中攝像頭作為輸入 設備,Arduino 開發(fā)板作為一個 ROS 系統(tǒng)節(jié)點,通過話題傳遞電機控制的指 令。 圖 2.5 系統(tǒng)運行模式 3 系統(tǒng)設置與測試 3.1 ROS 機器人系統(tǒng)安裝配置 1. 設置 local 指令,配置語言環(huán)境。 sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES =POSIX 2. 設置源列表文件 sources.list。 sudo sh -c echo “deb /ros/ubuntu trusty main“ 12 /etc/apt/sources.list.d/ros-latest.list 3. 設置證書。 wget /ros/rosdistro/master/ros.key -O - | sudo apt-key add - 4. 安裝 ROS 系統(tǒng)基礎版本 sudo apt-get install ros-indigo-ros-base 5. 設置環(huán)境變量 在每個 shell 啟動的時候,通過下面這條指令可以實現(xiàn) ROS 環(huán)境變量被添 加到每個 bash 中 echo “source /opt/ros/indigo/setup.bash“ /.bashrc source /.bashrc 6. 運行 roscore 指令測試系統(tǒng)是否安裝成功。運行結果如下: 13 圖 3.1 運行結果 3.2 創(chuàng)建 ROS 工作空間 1. 創(chuàng)建工作目錄 跳轉到 home 目錄下: cd 運行指令創(chuàng)建工作目錄: mkdir -p /catkin_ws/src 2. 初始化工作空間 跳轉工作目錄: mkdir -p /catkin_ws/src 初始化指令: 14 catkin_init_workspace 3. 編譯工作空間 跳轉工作目錄: cd /catkin_ws/ 運行編譯指令: catkin_make 4. 設置工作空間環(huán)境變量 source devel/setup.bash 在每次打開終端是都需要運行一次這個指令,否則 ROS 指令找不到這個 工作空間下的任何包。 3.3 創(chuàng)建和編譯 Mrob 包 1. 跳轉工作目錄到 catkin 工作空間 cd /catkin_ws/src 2. 創(chuàng)建 Mrob 包 catkin_create_pkg Mrob std_msgs rospy roscpp 3. 編譯 Mrob 包 跳轉工作目錄:cd /catkin_ws 編譯 Mrob 包:catkin_make -pkg Mrob 通過添加pkg 選項可以選擇需要編譯的 catkin 包??梢圆挥镁幾g當前工 作空間下無關的包,節(jié)省時間,提高編譯的效率 4. 添加當前工作空間到 ROS 環(huán)境內 . /catkin_ws/devel/setup.bash 15 3.4 啟動文件 啟動文件的語言風格上和 XML 文件相同,擁有自己獨特的標簽,可以用 來設定節(jié)點啟動需要的參數(shù),可以啟動已經編譯完成的 ROS 節(jié)點,在管理大 型的機器人項目時候,可以方便的管理需要啟動的節(jié)點,不用通過 rosrun 指 令單個的啟動節(jié)點。啟動文件代碼如下: 之間包含的是啟動文件的主要代碼,聲明了需要啟動的節(jié) 點和需要傳遞參數(shù)。聲明的是啟動文件需要啟動的節(jié)點,節(jié)點所 在的包是 rospy_tutorials,節(jié)點類型是 talker,名字是 talker,類型和包是直接 相關的參數(shù)不能夠隨便改寫,名字參數(shù)可以隨便改,但是一般和類型名字相 同。 編寫啟動文件需要在/catkin_ws/src/Mrob 目錄下面創(chuàng)建一個 launch 目錄, 每個工包的所有的啟動文件都存放在這個目錄下面,一般以.launch 作為文件名 字的結尾。編寫完成后可以通過 roslaunch 命令運行。啟動文件創(chuàng)建過程: 1. 跳轉工作目錄 cd /catkin_ws/src/Mrob 2. 運行指令創(chuàng)建 launch 目錄 mkdir launch 3. 編寫啟動文件并保存 vim test.launch. 16 3.5 ROS 機器人系統(tǒng)節(jié)點 節(jié)點在 ROS 系統(tǒng)是算法框圖級的概念,是 ROS 系統(tǒng)中運行的一個基本 單位,一個完整的 ROS 機器人系統(tǒng)包含若干個節(jié)點,節(jié)點負責數(shù)據(jù)的處理工 作,完成特定的功能,節(jié)點可以通過節(jié)點管理器進行管理,通過 ROS 幾點管 理器,各節(jié)點之間才能夠通信,單個節(jié)點不能夠直接進行通信。 每一個節(jié)點的代碼一般包含一個主函數(shù)和回調函數(shù),回調函數(shù)主要負責 數(shù)據(jù)運算,完成節(jié)點的主要職能。主函數(shù)通過節(jié)點的初始化,調用回調函數(shù) 處理數(shù)據(jù),完成節(jié)點主要功能。一般 ROS 節(jié)點與其他節(jié)點通信的方式有兩種, 一種是 publish,將節(jié)點運算的結果發(fā)布出去,一種是 subscribe,通過訂閱的 方式獲得其他節(jié)點的信息,作為節(jié)點數(shù)據(jù)的輸入。例如本次設計中網頁需要 攝像頭拍攝的畫面,就需要訂閱畫面的節(jié)點數(shù)據(jù),通過這種方式,ROS 會將 攝像頭的數(shù)據(jù)發(fā)布到網頁上,我們才能實時的觀測到攝像頭拍攝的畫面 3.6 單片機節(jié)點代碼 3.6.1 單片機開發(fā)環(huán)境的設置 本次設計沒有采用 AVR 開發(fā)環(huán)境,而是選擇了 Arduino 開發(fā)板特定的開發(fā)環(huán) 境,arduino 圖形開發(fā)環(huán)境 linux 也可以運行。AVR 在 linux 下直接開發(fā)需要 運用 gcc 等開發(fā)工具,設置起來十分麻煩,圖形開發(fā)環(huán)境還需要配合 eclipse,開發(fā)起來相對麻煩. 1.通過指令方式安裝 arduino 開發(fā)環(huán)境 sudo apt install arduino 2.設置 arduino 的工作目錄,arduino 開發(fā)環(huán)境安裝完成后,打開開發(fā)環(huán)境 17 選擇工作目錄 sketchbook 存放的地址。 3.安裝 arduinor 串口驅動 sudo apt-get install ros-indigo-rosserial-arduino sudo apt-get install ros-indigo-rosserial 4.安裝 ros 庫到 arduino 開發(fā)環(huán)境 跳轉工作目錄:cd /sketchbook/libraries 運行指令安裝庫:rosrun rosserial_arduino make_libraries.py . 完成上面的步驟以后,ros_lib 會出現(xiàn)在 arduino 開發(fā)環(huán)境下,如圖 3.2。 Arduino 開發(fā)環(huán)境下的 ros_lib 是將 ROS 系統(tǒng)內發(fā)布節(jié)點函數(shù)、點閱訂閱節(jié) 點函數(shù)等移植到了單片機環(huán)境下,并且對單片機的串口波特率、系統(tǒng)時鐘等 進行了設置,使得 ROS 系統(tǒng)內部的重要函數(shù)能夠在單片機的環(huán)境下運行,通 過串口單片機可以與 ROS 系統(tǒng)的主機進行通信。ros_lib 通過不同的編譯條件 可以適配到不同的單片機中,擴展了 ROS 系統(tǒng)的應用場合。 18 圖 3.2 Arduino IDE 3.6.2 單片機程序 單片機在本次設計中是一個節(jié)點程序,負責控制 4 個電機和兩個舵機。 在 arduino 的開發(fā)環(huán)境下,沒有 main 函數(shù),需要運行的代碼都卸載 loop 函數(shù) 里面,loop 函數(shù)取代了 main 函數(shù)和死循環(huán) while(1),方便了開發(fā)。在代碼正 式運行前需要對代碼運行需要的硬件環(huán)境進行設置,所有設置在 setup()中完 成。這種編碼方式使得代碼清晰明了。流程圖如圖 3.3。 在單片機里需要完成的 ROS 節(jié)點代碼,需要編寫小車控制回調函數(shù) M_controlCallBack,負責小車的運動方向控制。舵機回調函數(shù)負責舵機的運 動控制。設定硬件資源。訂閱電機和舵機控制的話題 cmd_vel,初始化訂閱 結點,loop 函數(shù)里面每循環(huán)一次,運行一次 spinonce 函數(shù),spinonce 函數(shù)負 責調用回調函數(shù),完成控制動作。spinonce()在每次循環(huán)中值執(zhí)行一次,只調 用一次回調函數(shù)。spin()函數(shù)會從被調用的的時候一直調用回調函數(shù),知道系 統(tǒng)停止運行才返回,本次設計中通過 loop 函數(shù)和 spinonce()函數(shù)配合就可以 完成 spin()函數(shù)的功能。詳細代碼見附錄。 19 圖 3.3 流程圖 3.7 網頁設計 網頁代碼采用 html 和 JavaScript 語言進行編寫,詳細代碼見附錄,主要 實現(xiàn)實時圖像觀測、小車運動控制、舵機控制。頁面布局依靠 HTML 和 CSS,本 次采用表格的方式負責基本的布局,通過 JS 代碼在表格內部添加具體的按鈕 等功能塊,JavaScript 是事件驅動的語言,本次設計中大量的采用點擊事件, 當基本的頁面加載完成之后,JS 代碼開始運行,監(jiān)聽頁面的事件,當對應的 事件發(fā)生時,JS 會用相應的代碼相應這個事件。本次大量的運用了點擊事件, 通點擊頁面的按鈕,可以實現(xiàn)網頁與 ROS 的通信,可以發(fā)布節(jié)點、訂閱節(jié)點。 本次選用 ROS 的 JS 庫作為基礎,文件名稱是 ros.js。這個庫主要定義了 與 rosbridge 通信的相關協(xié)議,以及 ROS 中訂閱節(jié)點、發(fā)布節(jié)點等函數(shù)的 JS 代碼實現(xiàn),可以通過定義定義 ROS 對象來調用其中的函數(shù)。在設計中需要考 20 慮頁面布局和需要訂閱的節(jié)點和發(fā)布的節(jié)點。本次設計中每個功能都被設計 在一個獨立的文件中,starting.js 文件主要實現(xiàn)網頁和 ROS 的通信,在 stating 文件中定義了 connection 對象,這個對象復擇設置 ip 地址,初始化各個模塊, 實現(xiàn)各個模塊的的頁面布局和事件監(jiān)聽設置。Connection 對象的所有方法存 在 connection.js 文件中,所有的 JS 文件通過 index.html 文件加載到瀏覽器中, 通過瀏覽器可以查看代碼,如圖 3.4。 rosbridge 軟件包可以作為網頁和 ROS 系統(tǒng)之間通信的橋梁,ROS 和瀏覽 器通過 WebSoket 協(xié)議進行通信。WebSocet 是 HTML5 的一中新的通信協(xié)議。 他實現(xiàn)了瀏覽器和服務器的全雙工通信。rosbridge_server 實現(xiàn)了 ROS 與瀏覽 器之間的通信。在使用網頁功能前需要開啟 rosbridge_server,否則瀏覽器和 ROS 系統(tǒng)之間不能正常的通信,網頁功能將不能實現(xiàn)。 21 圖 3.4 網頁代碼 3.8 攝像頭驅動與參數(shù)設定 本次設計采用的市面上常見的一般攝像頭,采用通用攝像攝像頭驅動既可以, 因此選的是 ROS 系統(tǒng)攝像頭包為 uvc_camera,uvc_camera 可以驅動一般的 攝像頭并且可以在 ROS 內發(fā)布圖像消息,其他節(jié)點可以訂閱相關的消息作為 圖像處理或者傳輸?shù)膶ο?。如果想要在普通權限下使用攝像頭,需要設計系 統(tǒng)的設備規(guī)則,設置方法: 1.創(chuàng)建并編輯 uvc.rules sudo vim /ect/udev/rules.d/uvc.rules 2.編輯 uvc.rules,對設備 ID 信息等進行設置 # UVC cameras SUBSYSTEMS=“usb“,ENVDEVTYPE=“usb_device“, ATTRSidVendor=“1871“, ATTRSidProduct=“0316“, MODE=“0666“ 通過 lsusb 指令可以查看產品的 ID 號、生產廠家 ID 號等。如下圖所示: 22 圖 3.6 USB 設備信息 3.9 攝像頭測試 將攝像頭插在 arm 開發(fā)上面通過 guvcview 軟件測試,guvcview 軟件可以 正常顯示畫面,說明攝像頭能夠正常的工作,arm 板的供電也能夠滿足攝 像頭的需要。 ROS 系統(tǒng)集成了許多優(yōu)秀的圖形化開發(fā)工具,rviz 是 3D 可視化工具,主 要用來查看圖像、坐標、地圖等。rviz 對硬件的依賴較強,ROS 的基礎版 本里也沒有對 rviz 進行安裝。因此沒有采用 rviz 作為本次攝像頭的測試 工具,本次設計采用的是 image_view 包作為測試工具,用來訂閱 camera_uvc 發(fā)布的圖像信息,并且顯示在屏幕上面。測試結果如圖: 23 圖 3.7 攝像頭測試 3.10 小車運動控制算法 小車的控制信號來自網頁,通過網頁可以控制兩個 2 個舵機和 4 個電機, 可以實現(xiàn)舵機的上下左右運動,小車的前后運動和左右的轉向。小車的轉向 是通過采集鼠標點擊畫布的坐標實現(xiàn)的。畫布分為 8 個區(qū)域,每個區(qū)域發(fā)送 的坐標不同,通過判斷坐標所在的區(qū)域可以控制小車不同的運方向,8 個區(qū) 域分別對應到小車的 4 種運行方式上,分別是向前運動、向后運動、左轉、 右轉。對應的軟件代碼。 攝像頭的運動比較簡單,通過 4 個按鈕的點擊完成,每個按鈕可以發(fā)送 不同的坐標信息,表征不同的運動方向,當單片機接收到數(shù)據(jù)后,通過判斷 數(shù)值完成相應的動作。點擊 UP 時,按鈕攝像頭可以向上運動,DOWN 按鈕 可以使攝像頭向下運動,可以完成向左向右的運動。 24 4 裝置整體調試 4.1 硬件連接 本次設計采用的電源是普通的移動電源, 攝像頭和主控制板板之間采用 USB 連接,單片機和主控板之間采用 USB 連接,USB 口負責單片機的供電。 將 4 個電機連接到驅動板,由于 USB 口的供電能力有限,選擇給驅動板單獨 供電。驅動板接線如圖 4.1 所示,驅動板兩側接直流電機,右下角是舵機接 線,上方為供電口,驅動板和單片機開發(fā)板通過排針鏈接,可將驅動板疊加 到 Arduino 上面。圖 1 為小車的整體效果圖: 圖 4.1 小車整體效果 25 圖 4.2 驅動板 4.2 啟動節(jié)點 本次設計中需要啟動節(jié)點有串口節(jié)點、攝像頭節(jié)點,需要啟動的服務是 圖片傳輸服務和 websoket 服務。啟動串口節(jié)點可以實現(xiàn)主板和單片機的通信。 通過 rostopic 指令可以查看 ROS 正在運行的話題如圖 4.3。 26 圖 4.3 話題指令 4.3 運行網頁測試 在局域網內可以通過 IP 來訪問小車的網站,小車的登陸賬號為小車的 IP 地址,網頁的右上角是登陸欄,在登陸欄中輸入的設備的 IP 地址,點擊 connect 按鈕就可以連接到小車上,登陸后效果如圖 4.4,connect 按鈕會顯示 為 disconnect,可以點擊 disconnect 按鈕斷開與設備的連接。連接到設備后可 以進行相關的控制和操作,如提交話題、發(fā)布信息等。 網頁被分為 5 個區(qū)域,camera 區(qū)域顯示的是攝像頭拍攝的實時畫面, servo 是舵機的控制區(qū)域,joystick 區(qū)域為小車運動控制區(qū)域,可以遙控小車 27 的運動,左下角為 ROS 系統(tǒng)的檢測區(qū)域,通過此區(qū)域可以觀測 ROS 系統(tǒng)正 在運行的話題、服務、節(jié)點。 圖 4.4 網頁效果 28 結論 經過對本課題的研究與實際制作,制作完成了一輛基于 ROS 機器人系統(tǒng) 的智能小車,制作了一個網站。小車拍攝圖像可以傳輸?shù)骄W頁,ROS 系統(tǒng)的 運行參數(shù)可以傳輸?shù)骄W頁,小車可以接收到網頁傳輸過來的指令,調整運動 的軌跡。主要完成的工作如下: 1.完成了智能小車硬件平臺的搭建工作,小車可以在相應的指令下運動, 可以拍攝畫面,并且將畫面實時傳輸?shù)骄W頁當中; 2.完成了網頁的設計,實現(xiàn)了網頁對小車的控制,通過網頁可以注冊節(jié) 點,提交話題,與 ROS 系統(tǒng)可以進行對話; 3.完成各種硬件選型和硬件連接調試,小車硬件系統(tǒng)的組裝; 4.完成了網頁服務器的搭建,能實現(xiàn)局域網內通過 IP 訪問網頁; 5.完成了整體裝置測試,實現(xiàn)設計功能要求。通過本平臺可以學習 ROS 系統(tǒng)的基礎知識。 本次設計中還存在一些問題和解決方式: 1.開機后需要通過終端進行 ROS 系統(tǒng)的啟動,在實際應用中需要轉換 成隨系統(tǒng)自啟動。 2.網頁界面簡陋,后期需要做出美化工作。網頁存在 bug 需要修補。 3.由于安全證書的原因,網頁 SSH 不能夠很好的工作。 4.小車運動速度太慢,小車的驅動能力不夠強。后期需要自己設計驅動, 增加驅動能力。 29 致謝 非常感謝北方工業(yè)大學四年的培養(yǎng),北方工業(yè)大學不僅僅教會了我專業(yè) 知識也給予了我探索未知的勇氣。非常感謝楊老師對我的課題的理解和支持, 楊老師一直鼓勵著我去實踐,通過實踐不斷的學習知識,增長經驗。非常感 謝斯坦福實驗室提供的 ROS 系統(tǒng),謝謝好心網友給我提供的幫助。 30 主要參考文獻 1 張建偉,張立偉,胡穎,張俊. 開源機器人操作系統(tǒng)ROSM. 科學出版社, 2012,09 2 Aaron Martinez Enrique Fernndez.ROS 機器人程序設計M.2014,09 3 王淑芳,電機驅動技術M.科學出版社,2008,10(3):90-94 4 葉青,周文遠,宋宇,田建國. 一種實時視頻采集處理系統(tǒng)的設計與實現(xiàn) J. 光電子激光,2006,1 5 Michael Dawson.Python 編程初學者指南M.北京:人民郵電出版社. 2014,06 6 吉鵬,馬云峰等. 微機原理與接口技術M. 北京:高等教育出版社, 2003.12 7 Jason M. OKane. A Gentle Introduction to ROSM,2013,10 8 潘光洋,蔡娜.Linux 從處學到入門M.電子工業(yè)出版社,2014,06 9 胡壽松. 自動控制原理M. 北京:科學出版社,2007 10胡向東. 傳感器與檢測技術M. 北京:機械工業(yè)出版社,2009 31 附件 1. 單片機代碼 #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. 網頁代碼 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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文庫發(fā)布:客艙安全
- 敬老院消防課件
- 醫(yī)療事故案例分析(1112月)
- 教學課件制作學習
- 冰雪課程教學課件
- 教育技術課件開發(fā)方法
- 教育局人工智能培訓課件
- 題型03 控制變量法探究實驗-備戰(zhàn)2020年中考化學實驗題型特訓(原卷版)
- 新疆選品會活動方案
- 【綿陽】2025年四川綿陽招聘派駐綿陽經開區(qū)機關工作人員24人筆試歷年典型考題及考點剖析附帶答案詳解
- 北京市西城區(qū)2022-2023學年三年級上學期英語期末試卷(含聽力音頻)
- 海洋機器人與人工智能知到智慧樹章節(jié)測試課后答案2024年秋哈爾濱工程大學
- 2024-2025學年人教新目標英語八年級下冊期末綜合檢測卷(含答案)
- 涼糕擺攤技術培訓課件
- 幕墻清洗安全培訓
- 制造業(yè)雙重預防機制實施方案
- 大學生村官考試公共基礎知識考點
- 雨污分流及路面修復工程施工組織設計方案
- 大班航天科技課程設計
- 裝飾工程項目考核評分表
- 山東省東營市2023-2024學年高二下學期7月期末 英語試題(含解析)
評論
0/150
提交評論