《ROS原理與技術(shù)應用》課件 能力模塊三 掌握自動駕駛系統(tǒng)的安裝與使用方法_第1頁
《ROS原理與技術(shù)應用》課件 能力模塊三 掌握自動駕駛系統(tǒng)的安裝與使用方法_第2頁
《ROS原理與技術(shù)應用》課件 能力模塊三 掌握自動駕駛系統(tǒng)的安裝與使用方法_第3頁
《ROS原理與技術(shù)應用》課件 能力模塊三 掌握自動駕駛系統(tǒng)的安裝與使用方法_第4頁
《ROS原理與技術(shù)應用》課件 能力模塊三 掌握自動駕駛系統(tǒng)的安裝與使用方法_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

《ROS原理與技術(shù)應用》能力模塊三掌握自動駕駛系統(tǒng)的安裝與使用方法

任務(wù)一認知ROS系統(tǒng)導入假設(shè)你想要搭建一個類似這樣可以自主建圖和導航的智能車,那么你首先需要選擇一個合適的自動駕駛系統(tǒng),目前機器人操作系統(tǒng)(ROS)就能很好解決這些問題目錄

CONTENTS01020304ROS的發(fā)展歷程自動駕駛系統(tǒng)開發(fā)系統(tǒng)首選ROSROS的主要特性ROS常見的功能工具05初步成型的ROS生態(tài)系統(tǒng)新授硬件技術(shù)的飛速發(fā)展在促進機器人領(lǐng)域快速發(fā)展和復雜化的同時,也對機器人系統(tǒng)的軟件開發(fā)提出了巨大挑戰(zhàn)在近幾年里,產(chǎn)生了多種優(yōu)秀的機器人軟件框架,為軟件開發(fā)工作提供了極大的便利,其中最為優(yōu)秀的軟件框架之一就是機器人操作系統(tǒng)(RobotOperatingSystem,ROS)一、ROS的發(fā)展歷程一、ROS的發(fā)展歷程ROS是一個用于編寫機器人軟件的靈活框架。它集成了大量的工具、庫、協(xié)議,提供了類操作系統(tǒng)所提供的功能,包括硬件抽象描述、底層驅(qū)動程序管理、共用功能的執(zhí)行、程序間的消息傳遞、程序發(fā)行包管理,可以極大簡化繁雜多樣的機器人平臺下的復雜任務(wù)創(chuàng)建與穩(wěn)定行為控制。ROS基本發(fā)展歷程如圖所示。一、ROS的發(fā)展歷程一、ROS的發(fā)展歷程2017年12月8日,萬眾矚目的ROS2.0終于發(fā)布了第一個正式版——ArdentApalone,其宣傳海報如圖所示??紤]到配套功能包的完備性,本教材仍將采用ROS1.0版本完成相關(guān)實訓任務(wù)。

嚴格意義上來講,ROS是一款用于機器人或自動駕駛的應用軟件開發(fā)平臺,并不是一個真正的操作系統(tǒng)(因為它需要是基于Ubuntu操作系統(tǒng)安裝使用)。要保證一個復雜的系統(tǒng)穩(wěn)定、高效地運行,每個模塊都能發(fā)揮出最大的潛能,ROS提供了一個成熟有效的管理機制,使得系統(tǒng)中的每個軟硬件模塊都能有效地進行互動。ROS提供了大量的程序庫和工具,使得開發(fā)人員能夠更好地在機器人或人工智能領(lǐng)域中進行學習與研究。另外,ROS本身還具有許多功能,軟硬件驅(qū)動、可視化工具、消息傳遞等。二、自動駕駛系統(tǒng)開發(fā)系統(tǒng)首選--ROSROS的主要目標是為機器人研究和開發(fā)提供代碼復用的支持。ROS是一個分布式框架,以節(jié)點(node)為進程,這些進程被封裝在易于被分享和發(fā)布的功能包和程序包中。ROS的主要特性可以歸納為以下幾點:三、ROS的主要特性4豐富的功能軟件包5免費且開源性1點對點設(shè)計2分布式設(shè)計3支持多語言三、ROS的主要特性在ROS中,每一個進程都以一個節(jié)點的形式運行,可以分布于多個不同的主機。節(jié)點間的通信消息通過一個帶有發(fā)布和訂閱功能的RPC傳輸系統(tǒng),從發(fā)布節(jié)點傳送到接收節(jié)點。這種點對點的設(shè)計可以分散定位、導航等功能帶來的實時計算壓力,適應多機器人的協(xié)同工作。ROS在處理進程之間的通信時,采用了耦合度相對較低的點對點設(shè)計。點對點設(shè)計ROS是一個分布式設(shè)計的框架,不僅可以實現(xiàn)ROS工程之間的集成和發(fā)布,還能夠移植到其他軟件平臺上使用。ROS框架具有的模塊化特點使得每個功能節(jié)點可以進行單獨編譯,并且使用統(tǒng)一的消息接口讓模塊的移植、復用更加便捷。同時,ROS開源社區(qū)中移植或集成了大量已有開源項目車、PointCloudLibrary庫等,開發(fā)者可以使用豐富的資源實現(xiàn)機器人應用的快速開發(fā)。分布式設(shè)計三、ROS的主要特性為了支持更多應用的移植和開發(fā),ROS被設(shè)計成為一種語言弱相關(guān)的框架結(jié)構(gòu)。ROS使用簡潔、中立的定義語言描述模塊之間的消息接口,在編譯過程中再產(chǎn)生所使用語言的目標文件,為消息交互提供支持,同時也允許消息接口的嵌套使用。目前已經(jīng)支持Python、C++、Java、Octave和LISP等多種不同的語言,也可以同時使用這些語言完成不同模塊的編程。支持多語言目前ROS已經(jīng)可以支持使用的第三方軟件包數(shù)量達到數(shù)千個,可以大大提高開發(fā)與測試的工作效率。例如可視化,開發(fā)者可以根據(jù)ROS定義的接口在其中顯示機器人3D模型、周圍環(huán)境圖、機器人導航路線等信息。此外,ROS中還有消息查看工具、物理仿真環(huán)境等組件,提高了機器人開發(fā)的效率。豐富的功能軟件包ROS遵照的BSD許可(一種開源許可)給使用者較大的自由,允許其修改和重新發(fā)布其中的應用代碼,甚至可以進行商業(yè)化的開發(fā)與銷售。ROS開源社區(qū)中的應用代碼以維護者來分類,主要包含WillowGarage公司和一些開發(fā)者設(shè)計、維護的核心庫部分,以及由不同國家的ROS社區(qū)組織開發(fā)和維護的全球范圍的開源代碼。免費且開源性四、ROS常見的功能工具ROS開發(fā)時經(jīng)常使用的工具包括:Gazebo、Rviz、rqt、rosbag、rosbridge、moveit。Gazebo是一款免費的機器人仿真軟件,其使用界面如圖所示。它提供高保真度的物理模擬,一整套傳感器模型,以及對用戶和程序非常友好的交互方式。能夠在復雜的室內(nèi)和室外環(huán)境中準確高效地模擬機器人工作的功能,通常與ROS聯(lián)合使用,為開發(fā)者提供了優(yōu)異的仿真環(huán)境。gazebo支持urdf/sdf格式文件,后文會提及兩者的區(qū)別,它們均用于描述仿真環(huán)境,官方也提供了一些集成好的常用的模型模塊,可以直接導入使用。四、ROS常見的功能工具RViz是ROS中一款三維可視化平臺(其操作界面如圖所示),一方面能夠?qū)崿F(xiàn)對外部信息的圖形化顯示,另外還可以通過rviz給對象發(fā)布控制信息,從而實現(xiàn)對機器人的監(jiān)測與控制。中間部分為3D視圖顯示區(qū),能夠顯示外部信息;上部為工具欄,包括視角控制、目標設(shè)置、地點發(fā)布等,還可以添加自定義的一些插件;左側(cè)為顯示項目,顯示當前選擇的插件,并且能夠?qū)Σ寮膶傩赃M行設(shè)置;下側(cè)為時間顯示區(qū)域,包括系統(tǒng)時間和ROS時間等;右側(cè)為觀測視角設(shè)置區(qū)域,可以設(shè)置不同的觀測視角rqt是非常好用的數(shù)據(jù)流可視化工具,其顯示界面如圖所示。使用rqt可以更直觀地看到消息的通信架構(gòu)和流通路徑,rqt是一個圖形化用戶接口框架,它允許以插件的形式來實現(xiàn)各種圖形工具和接口。在rqt中你能以可??看翱诘男问絹磉\行所以存在的GUI工具。四、ROS常見的功能工具ROS常見的功能工具rosbag主要用于記錄、回放、分析rostopic中的數(shù)據(jù),其數(shù)據(jù)結(jié)構(gòu)如圖3-1-12所示。它可以將指定rostopic中的數(shù)據(jù)記錄到.bag后綴的數(shù)據(jù)包中,便于對其中的數(shù)據(jù)進行離線分析和處理。ROS常見的功能工具四、ROS常見的功能工具rosbridge是一個用在ROS系統(tǒng)和其他系統(tǒng)之間的一個功能包,就像是它的名字一樣,起到一個“橋梁”的作用,使得ros系統(tǒng)和其他系統(tǒng)能夠進行交互。01ROS節(jié)點1可以是智慧貓決策單元jetsonnano,ROS節(jié)點2是底盤控制單元Arduino2560控制板,它們之間的通信就是通過rosbridge來完成的。rosbridge為非ROS程序提供了一個JSONAPI,有許多與rosbridge進行交互的前端,包括一個用于Web瀏覽器交互的WebSocket服務(wù)器。Rosbridge_suite是一個包含rosbridge的元程序包,用于rosbridge的各種前端程序包(如WebSocket程序包)和幫助程序包。比如在自動駕駛領(lǐng)域,rosbridge功能包用于自動駕駛主控單元與底盤之間的通信。0302risvridge四、ROS常見的功能工具moveit是ros中一系列移動操作的功能包的組成,其顯示界面如圖所示。這個功能包特別適合多關(guān)節(jié)機械臂的運動控制,它提供了一系列成熟的插件和工具,可以實現(xiàn)機械臂控制的快速配置。起初,各種硬件技術(shù)泛濫,卻沒有能整合它們的操作系統(tǒng)。目前該領(lǐng)域最受矚目的ROS已經(jīng)開始為這些各種各樣的機器人部件初步構(gòu)建了較為龐大的生態(tài)系統(tǒng),如圖所示。ROS起步雖然微不足道,但正是其免費且開源的特性,ROS軟件包的數(shù)量近年來呈指數(shù)級增長,開發(fā)者可以在社區(qū)中下載、復用琳瑯滿目的自動駕駛功能模塊,這大大加速了ROS在自動駕駛領(lǐng)域的應用推廣。在ROS生態(tài)系統(tǒng)中,利用這些豐富且集中的資源,開發(fā)者和學習者可以實現(xiàn)機器人硬件設(shè)計、輔助開發(fā)自研機器人、仿真環(huán)境下的算法驗算、機器人系統(tǒng)的技能學習等目的。無論是提高個人技能,還是進行商業(yè)開發(fā),ROS生態(tài)系統(tǒng)提供的平臺和資源都能夠讓使用者站在巨人的肩膀上向更高處攀登,從而促進機器人領(lǐng)域的發(fā)展。五、初步成型的ROS生態(tài)系統(tǒng)任務(wù)實施一、任務(wù)準備(一)軟件、硬件準備(二)安全要求及注意事項1.JetsonNano或普通計算機,1臺。11.注意ROS系統(tǒng)的版本選擇Melodic。22.輸入命令的時候一定要細心,不要將命令輸入錯誤。

實施步驟有:二、實施步驟從互聯(lián)網(wǎng)搜索并了解常用的ROS發(fā)行版本包括哪些?它們對應的Ubuntu版本號是什么?發(fā)布時間和停止支持時間又是什么?將結(jié)果記錄到任務(wù)實施工單。01請根據(jù)網(wǎng)絡(luò)搜索ROS的特性主要包含哪些內(nèi)容,并將結(jié)果整理記錄到任務(wù)實施工單。02請通過網(wǎng)絡(luò)搜索ROS的應用領(lǐng)域都有哪些,并將結(jié)果整理記錄到任務(wù)實施工單。03隨堂討論隨堂討論大家熟悉的家用掃地機器人在作業(yè)過程中,通過APP制定的房間地圖和指定的路徑行走,完成清潔任務(wù)。想要實現(xiàn)這一系列的功能需要具備的是什么。1.各組派代表統(tǒng)計遇到的問題。2.各組就各自的主要問題進行交流,并分享解決方法。謝

看《ROS原理與技術(shù)應用》能力模塊三掌握自動駕駛系統(tǒng)的安裝與使用方法

任務(wù)二安裝ROS系統(tǒng)導入為了深入學習ROS,本次任務(wù)將學習ROS的安裝,為后續(xù)基于ROS的線控底盤、激光雷達燈應用打好基礎(chǔ)。目錄

CONTENTS010203ROS的發(fā)行版本ROS整體框架設(shè)計ROS的安裝方法新授到目前為止ROS發(fā)布了ROS1.0、BoxTurtle、CTurtle、Diamondback、ElectricEmys、Fuerte、GroovyGalapagos、HydroMedusa、IndigoIgloo、JadeTurtle、KineticKame、LunarLoggerhead、Melodic和Noetic等版本,目前使用比較穩(wěn)定的ROS版本是KineticKame和Melodic。一、ROS的發(fā)行版本一、ROS的發(fā)行版本時至今日ROS已經(jīng)相繼更新推出了多種版本,供不同版本的Ubuntu開發(fā)者使用。為了提供最穩(wěn)定的開發(fā)環(huán)境,ROS的每個版本都有一個推薦運行的Ubuntu版本,如下表所示。表ROS系統(tǒng)對應的Ubuntu版本ROS版本Ubuntu版本*IndigoUbuntu14.04JadeUbuntu15.04*KineticUbuntu16.04LunarUbuntu17.04*MelodicUbuntu18.04ROSNoeticUbuntu20.04從架構(gòu)層次的角度來說,ROS分為以下三點:01基于Linux的OS(OperatingSystem,操作系統(tǒng))層02實現(xiàn)通信機制的中間層03運行管理Master與各類節(jié)點node的應用層二、ROS整體框架設(shè)計二、ROS整體框架設(shè)計OS并不是一個傳統(tǒng)意義上的操作系統(tǒng),無法像Windows、Linux一樣直接運行在計算機硬件之上,而是需要依托于Linux系統(tǒng)。所以在OS層,我們可以直接使用ROS官方支持度最好的Ubuntu操作系統(tǒng),也可以使用macOS、Arch、Debian等操作系統(tǒng)。OS層ROS在中間層是基于TCPROS/UDPROS的通信系統(tǒng)。ROS的通信系統(tǒng)基于TCP/UDP網(wǎng)絡(luò),在此之上進行了再次封裝,也就是TCPROS/UDPROS。通信系統(tǒng)使用發(fā)布/訂閱、客戶端/服務(wù)器等模型,實現(xiàn)多種通信機制的數(shù)據(jù)傳輸。除了TCPROS/UDPROS的通信機制外,ROS還提供一種進程內(nèi)的通信方法——Nodelet,可以為多進程通信提供一種更優(yōu)化的數(shù)據(jù)傳輸方式,適合對數(shù)據(jù)傳輸實時性方面有較高要求的應用。在通信機制之上,ROS提供了大量機器人開發(fā)相關(guān)的庫,如數(shù)據(jù)類型定義、坐標變換、運動控制等,可以提供給應用層使用。中間層在應用層,ROS需要運行一個管理者——Master,負責管理整個系統(tǒng)的正常運行。ROS社區(qū)內(nèi)共享了大量的機器人應用功能包,這些功能包內(nèi)的模塊以節(jié)點為單位運行,以ROS標準的輸入輸出作為接口,開發(fā)者不需要關(guān)注模塊的內(nèi)部實現(xiàn)機制,只需要了解接口規(guī)則即可實現(xiàn)復用,極大地提高了開發(fā)效率。應用層從系統(tǒng)實現(xiàn)的角度來說,分為以下三點:01計算圖02文件系統(tǒng)03開源社區(qū)二、ROS整體框架設(shè)計二、ROS整體框架設(shè)計從計算圖的角度來看,ROS系統(tǒng)軟件的功能模塊以節(jié)點為單位獨立運行,可以分布于多個相同或不同的主機中,在系統(tǒng)運行時通過端對端的拓撲結(jié)構(gòu)進行連接,主要包括的內(nèi)容為:節(jié)點(node)、消息(message)、主題(topic)、服務(wù)(service)計算圖類似于操作系統(tǒng),ROS將所有文件按照一定的規(guī)則進行組織,不同功能的文件被放置在不同的文件夾中,文件系統(tǒng)中由各個不同功能的元功能包組成,每個元功能包都有對應的元功能清單。文件系統(tǒng)ROS開源社區(qū)中的資源非常豐富,而且可以通過網(wǎng)絡(luò)共享以下軟件和知識。1.發(fā)行版(Distribution),2.軟件源(Repository),3.ROSwiki,4.郵件列表(MailingList),5.ROSAnswers,6.ROSDiscourse開源社區(qū)三、ROS的安裝方法軟件源安裝是通過源碼包安裝,可以自行調(diào)整編譯參數(shù),最大化地定制安裝結(jié)果,能比較好地防止新手在安裝過程中因為一些參數(shù)設(shè)置錯誤而導致的安裝錯誤。而且它也相對比較安全,能在一定程度上防止惡意篡改。此外,它的卸載和遷徙過程也極為方便和簡單,如果不涉及系統(tǒng)庫文件,可以直接復制到另一臺機器上也可以使用。軟件源安裝源碼編譯安裝是指使用特定的格式和語法所書寫的文本代碼,經(jīng)過編譯成二進制語言后,在計算機上完成安裝。它的優(yōu)點是源碼包是開源的,可以進行修改發(fā)布。安裝時,可以選擇啟用或禁用功能,更加具有靈活性。源碼包是編譯安裝的,更加符合機器的特性,穩(wěn)定性好。源碼編譯安裝的缺點是安裝的步驟多,需要手動解決軟件之間的依賴性,比較繁瑣且編譯安裝時間長。編譯過程中如有報錯,初學者很難解決,往往需要解決一系列的問題,對新手不友好。源碼編譯安裝在本項目中,采用的安裝方式是軟件源安裝,通過配置系統(tǒng)軟件源和添加ROS軟件源完成ROS的安裝。本教程使用的開發(fā)平臺是Ubuntu18.04,ROS版本是Melodic。安裝流程如表所示三、ROS的安裝方法任務(wù)實施一、任務(wù)準備(一)軟件、硬件準備(二)安全要求及注意事項1.準備一臺電腦,在電腦中安裝好了虛擬機,并且在虛擬機中安裝好Ubuntu18.04版本的系統(tǒng);2.直接在電腦的硬盤上安裝好Ubuntu18.04版本系統(tǒng)。11.注意Ubuntu系統(tǒng)的版本不要弄錯;22.Ubuntu系統(tǒng)進入時會提示更新,請不要更新,否則會更新到新版本的系統(tǒng),進而導致需要安裝的ROS無法安裝正確的版本。

實施步驟有:二、實施步驟配置ROS安裝ROS系統(tǒng)配置ROS軟件安裝源ROS系統(tǒng)安裝前準備安裝ROS軟件包測試ROS060502010403二、實施步驟

步驟1:ROS系統(tǒng)安裝前準備

(1)點擊左下角

圖標,然后在彈出的軟件選擇界面中找到Sotfware&Updates

(2)擊后即可進入到軟件和更新設(shè)置的界面,點擊UbuntuSoftware選項,在該選項中勾選關(guān)鍵字“universe”、“restricted”以及“multiverse”三項。檢查Ubuntu初始環(huán)境:在正式的ROS安裝前,需要先完成Ubuntu的初始環(huán)境配置。二、實施步驟

步驟1:ROS系統(tǒng)安裝前準備

(3)進行下載服務(wù)器選擇。首先界面中找到Downloadfrom的下拉選框,并點擊選擇“other”,接著在新的彈窗(中找到“China”,并在子選項中選“”,最后點擊右下角“ChooseServer”。(4)完成上述操作后會彈出一個新的視窗,提示更換軟件源后需要更新軟件,選擇“Reload”,系統(tǒng)會自動完成當前軟件的更新。更新完成則完成了Ubuntu初始環(huán)境的配置。二、實施步驟

步驟2:配置ROS軟件安裝源:

(1)配置ROS官方源配置好Ubuntu環(huán)境后,接著在Ubuntu中安裝ROS系統(tǒng),首先需要獲得ROS的安裝源,類似于windows中軟件包的獲取。ROS官方源一般指存放ROS軟件數(shù)據(jù)的官方服務(wù)器地址,可以通過以下步驟進行設(shè)置。

使用下面指令將ROS官方數(shù)據(jù)源地址添加到sources.list:inwinic@inwinic-desktop:~$sudosh-c'echo"deb/ros/ubuntu$(lsb_release-sc)設(shè)置key命令如下:二、實施步驟

步驟2:配置ROS軟件安裝源:

(2)配置國內(nèi)的源因為ROS官方源的服務(wù)器在我國境外,為了讓安裝更加順暢,建議將國內(nèi)備份的數(shù)據(jù)源地址也添加到sources.list

添加keys指令如下公鑰是Ubuntu系統(tǒng)的一種安全機制,也是ROS安裝中不可缺的一部分。二、實施步驟

步驟2:配置ROS軟件安裝源:

(3)系統(tǒng)更新輸入以下指令完成更新系統(tǒng),確保自己的軟件包和索引是最新的。注意:如果執(zhí)行update時,系統(tǒng)出現(xiàn)如下報錯:W:GPG錯誤:/ros/ubuntuxenialInRelease:由于沒有公鑰,無法驗證下列簽名:NO_PUBKEY5F16B97C1AD28806E:倉庫“/ros/ubuntubionicInRelease”沒有數(shù)字簽名。N:無法安全地用該源進行更新,所以默認禁用該源。需要添加該公鑰來解決,解決辦法,執(zhí)行具體命令如下:sudoapt-getupdate--從服務(wù)器獲取軟件列表,并在本地保存為文件。sudoapt-getupgrade--本地安裝軟件與本地軟件列表對比,如本地安裝版本低,會提示更新。二、實施步驟

步驟2:配置ROS軟件安裝源:

命令行最后的數(shù)字與NO_PUBKEY后面的數(shù)字保持一致。如出現(xiàn)下圖,表示系統(tǒng)更新成功。二、實施步驟

步驟3:安裝ROS系統(tǒng)

成功運行如圖Ubuntu18.04安裝的ROS(桌面完整版)命令如下:二、實施步驟

步驟4:配置ROS

安裝完ROS之后必須對其進行正確的配置。配置ROS要經(jīng)過初始化rosdep、ROS環(huán)境配置、安裝rosinstall、查看環(huán)境變量以及啟動測試。在配置過程中應該按照先后順序完成,不可打亂先后順序,配置過程如下:(1)初始化rosdep注意:由于網(wǎng)絡(luò)環(huán)境不同,rosdep進行更新時可能會失敗,在輸入sudorosdepupdate進行更新時如果出現(xiàn)錯誤:ERROR:errorloadingsourceslist:('Thereadoperationtimedout',),則解決辦法:反復執(zhí)行sudorosdepupdate命令,直到更新成功,如圖所示。rosdep的作用是在你需要編譯源碼的時候為其安裝一些系統(tǒng)依賴所必需用到的工具。二、實施步驟

步驟4:配置ROS

(2)ROS環(huán)境配置在每次打開終端時都需要先運行下面這條命令后才能運行ros相關(guān)的命令,為了避免這一繁瑣過程,可以事先在.bashrc文件(初學者請注意:該文件是在當前系統(tǒng)用戶的home目錄下)中添加這條命令,這樣每次登錄后系統(tǒng)已經(jīng)幫你執(zhí)行這些命令配置好環(huán)境。將source/opt/ros/melodic/setup.bash命令寫入到~/.bashrc文件中,命令如下:刷新.bashrc文件,使新添加的命令生效注意:如果只是在當前窗口輸入命令“source/opt/ros/melodic/setup.bash”,該命令只在當前終端有有效,每次新開一個終端都要重新配置環(huán)境。用echo語句將命令添加到bashrc文件中,可以保證每新打開一個終端,該命令都有效。二、實施步驟

步驟4:配置ROS

(3)安裝rosinstallrosinstall是ROS中一個獨立分開的常用命令行工具,它可以方便讓你通過一條命令就可以給某個ROS軟件包下載很多源碼樹。在ubuntu上安裝這個工具,請運行:(4)查看環(huán)境變量:確保你已經(jīng)成功設(shè)置了像ROS_ROOT和ROS_PACKAGE_PATH、ROS_MASTER_URI這樣的環(huán)境變量,可以通過以下命令查看:通過命令查詢的當前環(huán)境信息如圖二、實施步驟

步驟5:測試ROS

驗證ROS是否完成配置最好的辦法是查看其能否正常啟動,以下是驗證的步驟。(1)首先啟動ROS,輸入代碼運行roscore:之后每次使用ROS時,都需要輸入roscore完成啟動工作,才能完成后續(xù)運行。如果出現(xiàn)下圖所示,那么說明ROS正常啟動了二、實施步驟

步驟5:測試ROS

(2)接下來,我們通過ROS的標志性的圖形——小海龜,來簡單的測試ROS運行是否正常。<1>重新打開一個終端窗口(終端2),輸入如下命令:輸入后將會彈出如圖窗口:二、實施步驟

步驟5:測試ROS

<2>看到小海龜出現(xiàn)在屏幕上后,如果我們想操縱這只小海龜,那么我們需要再重新打開新的一個終端(終端3),并輸入:<3>將鼠標聚焦在第三個終端窗口上,然后通過鍵盤上的方向鍵,控制小海龜正常移動,并且在屏幕上留下移動軌跡,如圖所示:注意:在用鍵盤控制前,如果點擊了其它窗口,將導致無法控制小海龜移動。需要重新點擊開啟了鍵盤控制的終端窗口(終端3),才能控制小海龜。二、實施步驟

步驟6:安裝ROS軟件包

不同的ROS軟件包可以幫助我們實現(xiàn)不同的功能。我們可以通過安裝這些軟件包,并調(diào)用這些軟件包來實現(xiàn)我們需要實現(xiàn)的功能。通常我們的軟件包(Package)就可以分為二進制包和源代碼包,如表所示二進制包里面包括了已經(jīng)編譯完成,可以直接運行的程序。你通過sudoapt-getinstall來進行下載和解包(安裝),執(zhí)行完該指令后就可以馬上使用了。源代碼包里是程序的原始代碼,在你的計算機上必須經(jīng)過編譯,生成了可執(zhí)行的二進制文件,方可運行。一些個人開發(fā)的程序、第三方修改或者你希望修改的程序都應當通過源代碼包的來編譯安裝。二、實施步驟

步驟6:安裝ROS軟件包

(1)二進制包的安裝在ROS中,我們可能經(jīng)常會遇到缺少相關(guān)的ROS依賴的問題。有些時候你編譯或者運行一些ROS程序,系統(tǒng)會提示找不到XXX功能包。遇到這樣的問題可以查詢下是否缺少相關(guān)的依賴包。如果是缺少ROS的依賴,通??梢杂靡韵赂袷降拿顏韺崿F(xiàn)安裝:$sudoapt-getinstallros-[ROS版本]-[功能包名字]例如我們需要在melodic版ROS中安裝功能包slam_gmapping,完整命令如下:安裝的軟件包存放在/opt/ros/melodic目錄下(melodic代表你所安裝的ROS版本名稱,如果安裝的是其它版本的ROS,則melodic更換為其它版本名),該目錄包含bin、etc、include、lib、share目錄和一些配置文件。如下圖所示:二、實施步驟

步驟6:安裝ROS軟件包

ROS目錄包含用戶在安裝ROS時選擇的功能包和ROS運行程序。詳情如圖所示:(2)源代碼包的安裝在學習和使用ROS的過程中,有很多開源的源代碼軟件包供我們下載學習和進行二次開發(fā)??梢酝ㄟ^軟件包在Github(GitHub是一個面向開源及私有軟件項目的托管平臺,因為只支持Git作為唯一的版本庫格式進行托管,故名GitHub)上的地址,將其下載到本地進行安裝使用研究。通??梢允褂萌缦赂袷矫顏硐螺d:$gitclone[軟件包下載鏈接]下載到工作空間里,然后我們對功能包進行編譯,編譯完成后就可以使用了。下載的命令如下:隨堂討論隨堂討論在安裝的過程中Ubuntu系統(tǒng)的版本如果不符合,能否安裝,安裝后能否運行?1.各組派代表統(tǒng)計遇到的問題。2.各組就各自的主要問題進行交流,并分享解決方法。謝

看《ROS原理與技術(shù)應用》能力模塊三掌握自動駕駛系統(tǒng)的安裝與使用方法

任務(wù)三完成ROS文件系統(tǒng)的構(gòu)建導入經(jīng)典機器人PR2依靠強大的ROS,可以獨立完成多種復雜的任務(wù),例如PR2可以自己開門、找到插頭給自己充電、打開冰箱取出啤酒、打簡單的臺球等等。實現(xiàn)上述功能PR2需要安裝、調(diào)用相關(guān)的ROS功能包,而這些功能包均以文件的形式存放。目錄

CONTENTS010203Catkiin編譯系統(tǒng)工作空間功能包(Package)新授Catkin是ROS的官方構(gòu)建體系,是ROS構(gòu)建系統(tǒng)的繼承者,ROS構(gòu)建系統(tǒng)catkin結(jié)合了CMake宏和Python腳本,在CMake的正常工作流之上提供了一些功能。Catkin的設(shè)計比rosbuild更為傳統(tǒng),允許更好地分發(fā)包、更好的交叉編譯支持和更好的可移植性。Catkin的工作流與CMake非常相似,但同時為自動“查找包”基礎(chǔ)結(jié)構(gòu)和構(gòu)建多個依賴項目提供了支持時間。Catkin操作簡單、高效,可移植性更好,而且支持交叉編譯和更加合理的功能包分配。一、Catkin編譯系統(tǒng)一、Catkin編譯系統(tǒng)Catkin是基于CMake的編譯構(gòu)建系統(tǒng),具有以下特點:01Catkin沿用了包管理的傳統(tǒng)像find_package()基礎(chǔ)結(jié)構(gòu),pkg-config02擴展了CMake,自動生成find_package()代碼,pkg-config文件03操作簡單、高效,可移植性更好04支持交叉編譯和更加合理的功能包分配二、工作空間工作空間是創(chuàng)建、修改、編譯軟件包的目錄。工作空間就像是一個倉庫,里面存放著ROS的各種工程項目,便于系統(tǒng)組織管理調(diào)用。在可視化圖形界面里體現(xiàn)為一個文件夾。我們寫的ROS代碼通常就放在工作空間中。編譯后會在catkin_ws目錄下自動創(chuàng)建了build、devel兩個文件夾,加上原有的src文件夾,在catkin_ws工作空間里面總共包含src、build、devel這三個文件夾這些文件夾的具體用途如下:src:ROS的源代碼軟件包build:catkin(CMake)的緩存信息和中間文件devel:生成的目標文件(包括msg、srv頭文件,動態(tài)鏈接庫,靜態(tài)鏈接庫,可執(zhí)行文件等)、環(huán)境變量二、工作空間在編譯時,catkin編譯系統(tǒng)會遞歸的查找和編譯src文件夾下的每一個源代碼包。因此可以把幾個源代碼包放到同一個文件夾下,結(jié)構(gòu)如圖所示。二、工作空間同樣,在命令行操作中,也可以在工作空間下使用tree命令,查看到具體的文件結(jié)構(gòu):得到的空間結(jié)構(gòu)框架大致為;三、功能包(Package)功能包package是ROS源代碼存放的地方,任何ROS的代碼無論是C++還是Python都要放到package中,這樣才能正常的編譯和運行。一個工作空間可以包含多個package,一個package可以編譯出來多個目標文件(ROS可執(zhí)行程序、動態(tài)靜態(tài)庫、頭文件等等)。常見的package結(jié)構(gòu)如圖三、功能包(Package)在新版本的ROS中,將原有功能包集(Stack)的概念升級為元功能包(MetaPackage),元功能包通常與功能包一起位于src文件夾內(nèi)元功能包的作用是組織多個用于同一目的的功能包,例如一個ROS導航的元功能包中會包含建圖、定位、導航等多個功能包。元功能包的文件系統(tǒng)除了一些功能包外,還通常包含了一些如圖上所示的文件三、功能包(Package)package常見命令如下:三、功能包(Package)pacakge.xml是package軟件包的描述文件,包含了package的名稱、版本號、內(nèi)容描述、作者、軟件許可、編譯構(gòu)建工具、編譯依賴、運行依賴等信息。<packageformat="2">:遵循xml標簽文本的寫法,格式為format2,從這個語句到最后</package>的部分是ROS功能包的配置部分。<name>:功能包的名稱。使用創(chuàng)建功能包時輸入的功能包名稱。正如其他選項,用戶可以隨時更改。<version>:功能包的版本??梢宰杂芍付?lt;description>:功能包的簡要說明。通常用兩到三句話描述。<maintainer>:提供功能包管理者的姓名和電子郵件地址。<license>:記錄版權(quán)許可證。寫B(tài)SD、MIT、Apache、GPLv3或LGPLv3即可。<buildtool_depend>:描述構(gòu)建系統(tǒng)的依賴關(guān)系。我們使用catkin構(gòu)建系統(tǒng),因此填寫catkin。<build_depend>:在編寫功能包時寫下您所依賴的功能包的名稱。<exec_depend>:填寫運行功能包時依賴的功能包的名稱。文件中的標簽注釋如下:package.xml文件常見的內(nèi)容如下:三、功能包(Package)主要內(nèi)容的含義如下:cmake_minimum_required(VERSION2.8.3):操作系統(tǒng)中安裝的cmake的最低版本project(inwinic):功能包名稱為inwinicfind_package():添加依賴項。新增加的依賴項需要補充到該項的括號里。catkin_python_setup():使用rospy時的配置選項。其功能是調(diào)用Python安裝過程setup.py文件。add_message_files():是添加消息文件的選項。FILES將引用當前功能包目錄中的*.msg文件,自動生成一個頭文件(*.h)。add_service_files():添加要使用的服務(wù)文件的選項。使用FILES會引用功能包目錄中的*.srv文件。add_action_files():添加要使用的動作文件的選項。使用FILES會引用功能包目錄中的*.action文件。CMakeLists.txt文件中主要定義了功能包的名字、依賴包、源文件以及目標文件編譯規(guī)則等內(nèi)容,文件的常見內(nèi)容如圖:三、功能包(Package)主要內(nèi)容的含義如下:generate_messages():設(shè)置依賴的消息的選項。generate_dynamic_reconfigure_options():使用dynamic_reconfigure時加載要引用的配置文件。catkin_package():

INCLUDE_DIRS表示將使用INCLUDE_DIRS后面的內(nèi)部目錄include的頭文件LIBRARIES表示將使用的功能包的庫CATKIN_DEPENDS后面指定如roscpp或std_msgs等依賴包DEPENDS是一個描述系統(tǒng)依賴包的設(shè)置三、功能包(Package)include_directories():指定源代碼的頭文件路徑為功能包中的include目錄,如果想指定一個額外的include目錄時,寫在括號內(nèi)的“${catkin_INCLUDE_DIRS}”的下一行即可。add_library():通過功能包下src目錄中的zrobot.cpp文件來創(chuàng)建對應的庫文件。zrobot.cpp文件是自行創(chuàng)建的C++文件名。add_dependencies():定義目標文件構(gòu)建時需要依賴的其它已構(gòu)建好的目標文件。target_link_libraries():將目標文件與庫文件進行鏈接add_executable():通過src目錄下的zrobot_node.cpp文件生成可執(zhí)行文件{PROJECT_NAME}_node,如果有多個*.cpp文件,將其添加到zrobot_node.cpp后面。如果要創(chuàng)建多個可執(zhí)行文件,需要通過add_executable()新增。主要內(nèi)容的含義如下:任務(wù)實施一、任務(wù)準備(一)軟件、硬件準備(二)安全要求及注意事項1.安裝好ROS系統(tǒng)的電腦一臺,ROS系統(tǒng)的版本為Melodic。11.注意操作的目錄在home目錄下進行;22.初始化工作空間的命令和創(chuàng)建功能包的命令執(zhí)行時,需要確認當前操作目錄是否正確。

實施步驟有:二、實施步驟創(chuàng)建功能包查找功能包創(chuàng)建工作空間并初始化010302二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:創(chuàng)建工作空間并初始化

(1)假設(shè)空間名為catkin_ws,創(chuàng)建一個多級目錄~/catkin_cdws/src:(2)進入到目錄~/catkin_ws/,進入工作空間,后續(xù)的編譯必須在這個路徑上執(zhí)行(3)初始化工作空間:二、實施步驟

步驟1:創(chuàng)建工作空間并初始化

(4)為了確保正確加載源文件,可以用以下命令查看:顯示如下:二、實施步驟

步驟1:創(chuàng)建工作空間并初始化

(5)創(chuàng)建工作空間的過程中需要注意以下三點:<1>~/catkin_ws路徑是catkin工作空間結(jié)構(gòu)的最高層級,第二層級的文件夾src是用于存放ROS軟件包的。<2>執(zhí)行catkin_init_workspace進行工作空間的初始化后,會在src文件夾下創(chuàng)建CMakeLists.txt文件,并創(chuàng)建從“CMakeLists.txt”指向“/opt/ros/melodic/share/catkin/cmake/toplevel.cmake”的鏈接。在執(zhí)行catkin_make編譯后,也會自動生成同樣的鏈接文件,所以也可以直接在~/catkin_ws目錄下執(zhí)行編譯命令來進行初始化工作空間。<3>如果要單獨編譯特定的功能包,可以采用如下兩個命令:命令1:catkin_make--pkg[功能包名]命令2:catkin_make-DCATKIN_WHITELIST_PACKAGES=“[功能包名]”二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟2:創(chuàng)建功能包

(1)創(chuàng)建一個功能包需要在先進入catkin_ws/src目錄下,然后用catkin_create_pkg命令進行創(chuàng)建,具體命令如下:其中“inwinic”是功能包名,“std_msgs”、“rospy”、“roscpp”是依賴的包名。創(chuàng)建功能包的時候可以設(shè)置依賴一個或多個功能包,每個功能包之間用空格間隔開。依賴項的詳細內(nèi)容如下:std_msgs:常見的消息類型,表示基本數(shù)據(jù)類型和其它基本消息構(gòu)造,如多維數(shù)組。rospy:ROS的純Python客戶端庫,使用PYTHON實現(xiàn)ROS的功能。roscpp:ROS的C++客戶端庫,使用C++實現(xiàn)ROS的各種功能。catkin_create_pkg完成了功能包的初始化后,新建了CMakeLists.txt和package.xml兩個文件,相關(guān)的依賴項也自動填入了兩個文件中。二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟2:創(chuàng)建功能包

(2)完成功能包的初始化后,如果想要功能包能夠被系統(tǒng)找到,需要先回到catkin_ws目錄下,進行編譯才能完成功能包的最終環(huán)境配置,具體操作命令如下:(3)編譯完成后,將刷新環(huán)境的命令寫入到~/.bashrc文件里(4)刷新當前終端環(huán)境二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟3:查找功能包

(1)使用rospackfind命令查找功能包inwinic:(2)命令被正確執(zhí)行后,將顯示以下內(nèi)容:隨堂討論隨堂討論在查找功能包時,如果出現(xiàn)報錯,提示找不到inwinic功能包,是出現(xiàn)了什么問題1.各組派代表統(tǒng)計遇到的問題2.各組就各自的主要問題進行交流,并分享解決方法。謝

看《ROS原理與技術(shù)應用》能力模塊三掌握自動駕駛系統(tǒng)的安裝與使用方法

任務(wù)四完成ROS通信系統(tǒng)的構(gòu)建導入在ROS的世界里面,最小的進程單元就是節(jié)點(node),通常來說一個節(jié)點負責整個機器人系統(tǒng)中某一個單獨的功能往往實際情況中,整體系統(tǒng)的功能多,運行節(jié)點數(shù)量也非常龐大,了解節(jié)點分布結(jié)構(gòu)以及各節(jié)點之間如何通信就成為了學習ROS必不可少的一步。目錄

CONTENTS010203ROS系統(tǒng)常見術(shù)語節(jié)點(node)ROS通信新授一、ROS系統(tǒng)常見術(shù)語01節(jié)點(node)

02主節(jié)點(master)03消息(msg)04話題(topic)05服務(wù)(service)06動作(action)一、ROS系統(tǒng)常見術(shù)語1.節(jié)點(note)節(jié)點是指在ROS中運行的最小進程單元??梢园阉醋饕粋€可執(zhí)行程序或一個小的功能模塊。例如,自動駕駛車輛可能會把激光雷達定義為一個節(jié)點,深度攝像頭是另一個節(jié)點,線控底盤也是一個節(jié)點。在ROS中注重各個功能模塊的復用,經(jīng)常將較復雜的功能細分為多個節(jié)點,提升節(jié)點的可復用型,有利于提升變成效率。一、ROS系統(tǒng)常見術(shù)語2.主節(jié)點(master)主節(jié)點負責節(jié)點到節(jié)點的連接和消息通信,類似于節(jié)點管理器的作用。當節(jié)點運行時,需要向主節(jié)點注冊自己的信息(節(jié)點名,發(fā)布/接收的話題名、服務(wù)名、消息類型等),通過主節(jié)點建立起節(jié)點間的訪問和消息的傳遞。智慧貓的決策單元就充當了這個主節(jié)點的角色。

一、ROS系統(tǒng)常見術(shù)語3.消息(msg)節(jié)點之間通過消息來發(fā)送和接收數(shù)據(jù)。消息里包括消息的簡單數(shù)據(jù)結(jié)構(gòu)。使用消息的通信方法包括TCPROS,UDPROS等。每一條消息都要發(fā)布到相應的話題。例如定義一個名為障礙物的消息類型,消息中包含的五個字段,分別是障礙物的長度、寬度、高度、運動線速度和運動角速度。一、ROS系統(tǒng)常見術(shù)語4.話題(topic)話題可以理解為是某一類消息的總稱,發(fā)布者(publisher)和訂閱者(subscriber)通過向主節(jié)點注冊話題名,來建立相互之間的連接,通過TCPROS/UDPROS來實現(xiàn)具體消息的傳遞。話題是一種異步通信方式,一個話題可以有多個訂閱者,發(fā)布者和訂閱者之間是相互解耦的,發(fā)布者發(fā)布話題時不需要有訂閱者,訂閱者訂閱話題時不需要有發(fā)布者。話題的名稱在功能包里必須具有唯一性。例如自動駕駛車輛的攝像頭、驅(qū)動系統(tǒng)和制動系統(tǒng)都被分別定義為單獨的一個節(jié)點。攝像頭節(jié)點發(fā)布一個檢測路面是否出現(xiàn)行人的主題,頻率為20Hz,攝像頭此時就充當一個主題發(fā)布者的角色。再定義動系統(tǒng)和制動系統(tǒng)三個節(jié)點都去訂閱這個檢測路面行人的主題,那么這三個節(jié)點就充當該主題的訂閱者。如果前方出現(xiàn)行人,驅(qū)動系統(tǒng)停止工作,制動系統(tǒng)則會同步開啟制動車輛。二、節(jié)點(node)節(jié)點間通信的架構(gòu)如圖:節(jié)點名在系統(tǒng)中必須唯一。節(jié)點可以采用C++或Python語言來進行編寫。所有節(jié)點啟動的時候都要在主節(jié)點進行注冊,因此在運行節(jié)點的時候,必須要先啟動主節(jié)點(master),否則啟動的時候會報錯。rosnode是節(jié)點處理的工具,與之匹配的命令如圖二、節(jié)點(node)啟動主節(jié)點的常用命令如下:主節(jié)點啟動后,才能夠啟動的其它節(jié)點。啟動其它節(jié)點命令的格式如下:$rosrun[功能包名][可執(zhí)行文件名]1.啟動節(jié)點啟動主節(jié)點:在新窗口中啟動小海龜節(jié)點:在新窗口中啟動鍵盤控制節(jié)點:2.查看當前運行的節(jié)點:命令執(zhí)行后,可以看到當前運行的節(jié)點如圖所示其中“/turtlesim”節(jié)點是小海龜節(jié)點,“/teleop_turtle”節(jié)點是鍵盤控制節(jié)點,“/rosout”是用于接收所有節(jié)點輸出的節(jié)點,該節(jié)點一般可以不用關(guān)注。二、節(jié)點(node)3.查看節(jié)點信息(以/turtlesim為例):查看到的節(jié)點信息如圖所示,可以看到節(jié)點訂閱的話題,發(fā)布的話題,以及節(jié)點包含的服務(wù)。二、節(jié)點(node)詳細節(jié)點內(nèi)容如下:二、節(jié)點(node)查看節(jié)點關(guān)系圖:在新的命令窗口中輸入如下命令:顯示的節(jié)點關(guān)系如圖三、ROS通信ROS系統(tǒng)中主要的通信方式有話題(Topic)、服務(wù)(Service)和動作(Action)三種。話題(Topic)是最常用的一種。對于實時性、周期性的消息,使用話題(Topic)來傳輸是最佳的選擇。話題(Topic)是一種點對點的單向通信方式,這里的“點”指的是節(jié)點(node)。話題(Topic)通信時,首先需要publisher節(jié)點和subscriber節(jié)點都到節(jié)點管理器進行注冊,然后publisher會發(fā)布topic,subscriber在master的指揮下會訂閱該topic,從而建立起sub-pub之間的通信。注意整個過程是單向的。服務(wù)(Service)方式在通信模型上與topic做了區(qū)別。服務(wù)(Service)通信是雙向的,它不僅可以發(fā)送消息,同時還會有反饋。所以服務(wù)(Service)包括兩部分,一部分是請求方(Clinet),另一部分是應答方/服務(wù)提供方(Server)。這時請求方(Client)就會發(fā)送一個request,要等待server處理,反饋回一個reply,這樣通過類似“請求-應答”的機制完成整個服務(wù)通信。動作(Action)通信中,Actionlib是ROS中一個很重要的庫,類似service通信機制,actionlib也是一種請求響應機制的通信方式,actionlib主要彌補了service通信的一個不足,就是當機器人執(zhí)行一個長時間的任務(wù)時,假如利用service通信方式,那么publisher會很長時間接受不到反饋的reply,致使通信受阻。當service通信不能很好的完成任務(wù)時候,actionlib則可以比較適合實現(xiàn)長時間的通信過程,actionlib通信過程可以隨時被查看過程進度,也可以終止請求,這樣的一個特性,使得它在一些特別的機制中擁有很高的效率。123三、ROS通信(一)話題(Topic)1.消息(msg) Message就是節(jié)點間話題通信時傳遞的具體信息,msg的類型包括bool、int、uint、float、string、array]等,自定義的消息文件后綴為“.msg”。msg我們可以理解為是一個“類”,那么我們每次發(fā)布的內(nèi)容可以理解為“對象”,以圖像的消息sensor_msg/image中的image.msg為例,消息文件定義內(nèi)容如下:std_msg/Headerheaderuint32seq//消息序號timestamp//存儲ROS中的時間戳信息stringframe_id//綁定的坐標系uint32height//圖像的高度uint32width//圖像的寬度stringencoding//圖像的編碼格式

uint8is_bigendian//圖像數(shù)據(jù)的大小端存儲模式uint32step//一行圖像數(shù)據(jù)的字節(jié)數(shù)量,作為數(shù)據(jù)的步長(以字節(jié)為單位)uint8[]data//存儲圖像數(shù)據(jù)的數(shù)組,大小為step*height個字節(jié)message相關(guān)的操作命令如右圖三、ROS通信(一)話題(Topic)有些時候我們需要保存一些消息文件,例如在調(diào)試的時候,我們需要保存一些調(diào)試信息,這個時候我們就需要用到rosbag這個工具。rosbag可以記錄訂閱消息并將消息打包為一個文件,這種記錄格式性能較好,對磁盤也較友好,為了減少磁盤使用空間,可以在創(chuàng)建包文件時壓縮它們。rosbag的主要命令如右圖三、ROS通信(一)話題(Topic)訂閱者和發(fā)布者在主節(jié)點中注冊話題名及消息的類型,訂閱者通過查詢在主節(jié)點中注冊的話題名稱,找到與之相匹配的發(fā)布者并建立連接,來實現(xiàn)話題的具體消息的接收。話題訂閱和發(fā)布的通信結(jié)構(gòu)示意圖如圖訂閱者和發(fā)布者有以下三種對應關(guān)系:(1)一對一:(2)一對多:(3)多對多:三、ROS通信(一)話題(Topic)話題常用的操作命令如下:常見命令運用示例如下:(1)首先在兩個不同窗口分別輸入以下命令,啟動主節(jié)點和小海龜節(jié)點:查看當前話題列表:查看到的話題列表如圖查看“/turtle1/cmd_vel”話題的消息類型:查詢得到的消息類型如圖三、ROS通信(一)話題(Topic)發(fā)布運動控制話題到小海龜,讓小海龜運動,命令如下:命令執(zhí)行后,會發(fā)現(xiàn)小海龜以1m/s的線速度和1m/s的角速度進行運動,如圖三、ROS通信(二)服務(wù)(Service)服務(wù)文件定義的模板如下:請求的格式——————應答的格式服務(wù)文件定義的示例如下:int64xint64y---int64sum(1)服務(wù)文件(srv)類似msg文件,srv文件是用來描述service數(shù)據(jù)類型的,service通信的數(shù)據(jù)格式定義在*.srv中。它聲明了一個服務(wù),包括請求(request)和響應(reply)兩部分。三、ROS通信(二)服務(wù)(Service)(2)服務(wù)(service)服務(wù)(service)的特點如下:自定義的服務(wù)文件后綴為“.srv”。服務(wù)包含有客戶端(client)和服務(wù)端(server)服務(wù)的通信是同步雙向通信,不僅可以發(fā)送消息,而且還會有應答,會形成阻塞??蛻舳撕头?wù)端分別在主節(jié)點中注冊發(fā)布的服務(wù)名及請求的服務(wù)名等。服務(wù)的發(fā)布和訂閱的通信結(jié)構(gòu)如圖服務(wù)(service)常用的操作命令如下:三、ROS通信(三)動作(Action)(1)動作文件模板類似msg文件,action文件是用來描述action相關(guān)信息的,action通信的數(shù)據(jù)格式定義在*.action中。它聲明了一個動作,目標、反饋、結(jié)果三個部分。動作文件定義的模板如下:目標---結(jié)果---反饋動作文件定義的示例如下:uint32lunch_id---uint32total_lunch_finished---float32percent_complete三、ROS通信(三)動作(Action)(2)動作特點動作(Action)的特點如下:動作和服務(wù)一樣,都包含請求和應答;動作比服務(wù)多了中途反饋,客戶端可以在多種執(zhí)行中獲得動作的狀態(tài)信息、結(jié)果信息或取消動作;動作的消息傳輸方式屬于異步雙向通信,不會形成阻塞。動作(Action)的通信結(jié)構(gòu)如圖任務(wù)實施一、任務(wù)準備(一)軟件、硬件準備(二)安全要求及注意事項1.安裝好ROS系統(tǒng)的電腦一臺。11.創(chuàng)建的文件名要前后一致,創(chuàng)建文件的后綴名不要寫錯;22.創(chuàng)建功能包的依賴項不能有缺項。

實施步驟有:二、實施步驟ROS服務(wù)通信的構(gòu)建ROS動作通信的構(gòu)建ROS話題通信的構(gòu)建010302二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

接下來我們將了解如何創(chuàng)建兩個節(jié)點,一個發(fā)布數(shù)據(jù),另一個接收數(shù)據(jù)。在創(chuàng)建節(jié)點前,首先準備好已創(chuàng)建成功的工作空間“inwinic_ws”,并創(chuàng)建了功能包“inwinic_topic”,功能包的依賴項包含std_msgs、roscpp。二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

(1)創(chuàng)建Publisher的節(jié)點在inwinic_topic功能包中的src文件夾下創(chuàng)建pub_topic.cpp文件(通過cd指令進入到cd./inwinic_ws/src/inwinic_topic/src目錄中,通過touchpub_topic.cpp創(chuàng)建文件)。在文件內(nèi)添加如下代碼:二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

(2)創(chuàng)建一個Subscriber節(jié)點在inwinic_topic功能包中的src文件夾下創(chuàng)建sub_topic.cpp文件,具體創(chuàng)建過程如上一個文件所示。同樣,在sub_topic.cpp文件內(nèi)添加如下代碼并保存:二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

(3)修改CMakeList.txt文件添加編譯規(guī)則,來構(gòu)建pub_topic、sub_topic兩個可執(zhí)行文件。打開inwinic_topic功能包里面的CMakeList.txt文件,找到如下代碼位置:在上面代碼的后面添加如下代碼:二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

(4)編譯功能包:(5)測試:新打開三個不同的終端,分別輸入以下三個命令來分別啟動主節(jié)點、話題發(fā)布節(jié)點、話題訂閱節(jié)點:(6)在以上節(jié)點都正常啟動后,在新的窗口中查看當前運行的節(jié)點列表,命令如下:可以看到當前運行的節(jié)點主要有“/pub_msg”、“/sub_msg”和“/rosout”三個節(jié)點。二、實施步驟(一)創(chuàng)建工作空間并初始化

步驟1:ROS話題通信的構(gòu)建

(7)“/pub_msg”和“/sub_msg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論