《鴻蒙機(jī)器人編程》課件-2-1-ROS基礎(chǔ)理論_第1頁
《鴻蒙機(jī)器人編程》課件-2-1-ROS基礎(chǔ)理論_第2頁
《鴻蒙機(jī)器人編程》課件-2-1-ROS基礎(chǔ)理論_第3頁
《鴻蒙機(jī)器人編程》課件-2-1-ROS基礎(chǔ)理論_第4頁
《鴻蒙機(jī)器人編程》課件-2-1-ROS基礎(chǔ)理論_第5頁
已閱讀5頁,還剩156頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.ROS起源及特色SmoothingTheROSLearningCurve本課目的:給出學(xué)習(xí)ROS的有效路徑,加快學(xué)習(xí)速度內(nèi)容:WhatisROS?WhyisROS?Whattolearn?HowtoLearn??NXROBO20182什么是ROS?RobotOperatingSystem(ROS)是一個(gè)適用于機(jī)器人的開源的元操作系統(tǒng)。它提供了操作系統(tǒng)應(yīng)有的服務(wù),包括硬件抽象,底層設(shè)備控制,常用函數(shù)的實(shí)現(xiàn),進(jìn)程間消息傳遞,以及包管理。它也提供用于獲取、編譯、編寫、和跨計(jì)算機(jī)運(yùn)行代碼所需的工具和庫函數(shù)。松耦合點(diǎn)對(duì)點(diǎn)進(jìn)程網(wǎng)絡(luò),一個(gè)分布式的通信框架,幫助程序進(jìn)程之間更方便地通信。。支持的操作系統(tǒng)ROS主流在基于Unix的平臺(tái)上運(yùn)行。ROS的軟件主要在Ubuntu和MacOSX系統(tǒng)上測(cè)試,同時(shí)ROS小區(qū)仍持續(xù)支持Fedora,Gentoo,ArchLinux和其它Linux平臺(tái)。MicrosoftWindows已開始支時(shí)ROS,功能尚待完善。?NXROBO20183什么是ROS??NXROBO20184從計(jì)算圖視角理解ROSROS中可執(zhí)行程序的基本單位叫節(jié)點(diǎn)(node)節(jié)點(diǎn)之間通過消息、服務(wù)、動(dòng)作等機(jī)制進(jìn)行通信這樣就組成了一張網(wǎng)狀圖,也叫計(jì)算圖什么是ROS??NXROBO20185從文件系統(tǒng)視角理解ROSROS程序的不同組件放在不同的文件夾中文件夾根據(jù)不同的功能對(duì)文件進(jìn)行組織這就是ROS的文件系統(tǒng)結(jié)構(gòu)什么是ROS??NXROBO20186從開源社區(qū)視角理解ROSROS是開源軟件,全球機(jī)器人專家分享、貢獻(xiàn)自己的智慧在網(wǎng)絡(luò)社區(qū)分享和貢獻(xiàn)軟件及教程形成了強(qiáng)大的ROS開源社區(qū)ROS的起源?NXROBO20187脫胎于斯坦福的STAIR項(xiàng)目成長(zhǎng)于PR2機(jī)器人項(xiàng)目,ROS是該項(xiàng)目的軟件部分遵循OS理念:為了提高機(jī)器人設(shè)計(jì)和開發(fā)的效率避免機(jī)器人領(lǐng)域工作者重復(fù)造輪子,統(tǒng)一了開發(fā)標(biāo)準(zhǔn)ROS的歷史?NXROBO20188為什么學(xué)習(xí)ROS?機(jī)器人開發(fā):軟件開發(fā)的比重越來越大軟件框架選擇:是軟件架構(gòu)設(shè)計(jì)中一個(gè)重要的決策ROSPlayerYARPOrocosCARMENOrcaMOOSMicrosoftRoboticsStudio?NXROBO20189ROS的優(yōu)勢(shì)1,松散耦合的機(jī)制方便機(jī)器人軟件框架的組織2,最豐富的機(jī)器人功能庫方便快速搭建原型3,便利的數(shù)據(jù)記錄、分析、仿真工具,方便調(diào)試4,學(xué)界和產(chǎn)業(yè)界的標(biāo)準(zhǔn)方便學(xué)習(xí)和交流?NXROBO201810對(duì)于開發(fā)者:快速搭建機(jī)器人原型?NXROBO201811對(duì)于企業(yè):License許可ROS的核心是BSD許可證。這是一個(gè)非常寬松的開放許可證。允許在商業(yè)和閉源產(chǎn)品使用。/licenses/BSD-3-Clause/wiki/BSD_licenses?NXROBO201812對(duì)于研究人員:豐富的資源,最新的成果目前學(xué)術(shù)領(lǐng)域大部分最新成果都會(huì)發(fā)布ROS的版本“ROS:anopensourceRobotOperatingSystem”(Quigleyetal.,2009):論文引用量9869Source:GoogleScholar2022-07-13

?NXROBO201813最龐大的使用者群體,事實(shí)上的機(jī)器人標(biāo)準(zhǔn)2018年數(shù)據(jù):目前在使用操作系統(tǒng)做開發(fā)的人員用戶超過60萬。(個(gè)人用戶中國第二)?NXROBO201814官方支持ROS的機(jī)器人100+產(chǎn)品:目前已經(jīng)有很多機(jī)器人公司采用了ROS系統(tǒng)來開發(fā)一些應(yīng)用于全新市場(chǎng)的產(chǎn)品,如ClearPath,Rethink,Unbounded,Neurala,BlueRiver,BIG-i,最典型的就是WillowGarage的PR2機(jī)器人。大公司的支持:Nvidia、博世、高通、英特爾、寶馬以及大疆等。投資機(jī)構(gòu)的熱捧:僅2015年,相關(guān)風(fēng)險(xiǎn)投資機(jī)構(gòu)就在基于ROS操作系統(tǒng)的機(jī)器人公司投資了超過1.5億美元。?NXROBO201815代碼統(tǒng)計(jì)Thetotallinecountisover14millionlinesofcodeTherehavebeen2477authorsAnd181509commitsAveraging73.3commitsperauthor?NXROBO201816代碼語言cpp:2608592(63.98%)python:553332(13.57%)ansic:297629(7.30%)xml:280615(6.88%)lisp:149439(3.67%)java:135343(3.32%)ruby:26484(0.65%)sh:21120(0.52%)ROS的不足目前基于Ubuntu系統(tǒng),移植嵌入式系統(tǒng)困難無實(shí)時(shí)性設(shè)計(jì)體積較大系統(tǒng)整體運(yùn)行效率低總的來說,ROS不擅長(zhǎng)開發(fā)對(duì)實(shí)時(shí)性及成本要求嚴(yán)苛的產(chǎn)品。?NXROBO201817一句話概括ROS幫助你快速制作機(jī)器人的眾多軟件庫和工具的集合規(guī)定了統(tǒng)一通信接口的松耦合分布式開源軟件框架。最大的好處:即插即用,提供統(tǒng)一軟件接口,事實(shí)上的機(jī)器人研究的統(tǒng)一平臺(tái)。有了統(tǒng)一的平臺(tái),我們才有共同交流的可能,以上也是我們學(xué)習(xí)ROS的主要原因。?NXROBO201818ROS10YearMontage?NXROBO201819/245826128ROS應(yīng)該學(xué)什么??NXROBO201820入門起步設(shè)計(jì)思想核心概念核心模塊核心工具?NXROBO201821設(shè)計(jì)思想:分布式架構(gòu)?NXROBO201822核心概念Nodes(節(jié)點(diǎn))MessagesandTopics(消息與話題)Services(服務(wù))ROSMaster(ROS管理器)Parameters(參數(shù))Stacksandpackages(功能包集與功能包)?NXROBO201823ROSNodes節(jié)點(diǎn)是各自獨(dú)立的可執(zhí)行文件,能夠通過話題、服務(wù)或參數(shù)服務(wù)器與其他進(jìn)程(節(jié)點(diǎn))通信。ROS通過使用節(jié)點(diǎn)將代碼和功能解耦,提高了系統(tǒng)容錯(cuò)能力和可維護(hù)性,使系統(tǒng)簡(jiǎn)化。同時(shí),節(jié)點(diǎn)允許了ROS系統(tǒng)能夠布置在任意多個(gè)機(jī)器上并同時(shí)運(yùn)行。節(jié)點(diǎn)在系統(tǒng)中必須有唯一的名稱。節(jié)點(diǎn)可以使用不同的庫進(jìn)行編寫,如roscpp和rospy。roscpp基于C++rospy基于Python。?NXROBO201824ROSTopics話題是節(jié)點(diǎn)間用來傳輸數(shù)據(jù)的總線。N-to-NPublish/Subscribe模式:同一個(gè)話題也可以有很多個(gè)訂閱者。使用TCP/IP傳輸,稱為TCPROS,ROS默認(rèn)。使用UDP傳輸,稱為UDPROS,適合于遠(yuǎn)程操控任務(wù)。(低延遲高效率的傳輸方式,但可能產(chǎn)生數(shù)據(jù)丟失)。?NXROBO201825ROSMessages一個(gè)節(jié)點(diǎn)通過向特定話題發(fā)布消息。消息具有一定的類型和數(shù)據(jù)結(jié)構(gòu),包括ROS提供的標(biāo)準(zhǔn)類型和用戶自定義類型。消息的類型標(biāo)準(zhǔn)命名方式進(jìn)行約定:功能包名稱/.msg文件名。最常用的有g(shù)eometry_msgs/Twist包括線速度和角速度Vectors三維向量?NXROBO201826ROSServices1-to-1Service/Client模型:當(dāng)你需要直接與節(jié)點(diǎn)通信并獲得應(yīng)答時(shí),將無法通過話題實(shí)現(xiàn),這時(shí)需要使用服務(wù)。服務(wù)需要由使用者開發(fā),節(jié)點(diǎn)并不提供標(biāo)準(zhǔn)服務(wù)。命令行工具:rossrv查看有關(guān)服務(wù)數(shù)據(jù)結(jié)構(gòu)的信息rosservice列出服務(wù)清單和查詢某個(gè)服務(wù)?NXROBO201827ROSMaster向ROS系統(tǒng)中其他節(jié)點(diǎn)提供命名和注冊(cè)服務(wù)跟蹤和記錄話題的發(fā)布者和訂閱者使ROS節(jié)點(diǎn)之間能夠相互查找。一旦節(jié)點(diǎn)找到了彼此,就能建立一種點(diǎn)對(duì)點(diǎn)的通信方式。提供參數(shù)服務(wù)器?NXROBO201828ParameterServer參數(shù)服務(wù)器是可通過網(wǎng)絡(luò)訪問的共享的多變量字典。節(jié)點(diǎn)使用此服務(wù)器來存儲(chǔ)和檢索運(yùn)行時(shí)的參數(shù)。?NXROBO201829ROSPackages功能包(Package):ROS中軟件組織的基本形式,用于創(chuàng)建ROS程序。它包含源文件、腳本文件、配置文件、可執(zhí)行文件等。本質(zhì)就是一個(gè)特殊的文件夾,此文件夾中的文件和子文件夾按前面所說的文件系統(tǒng)的約定來編排,以方便管理、編譯、使用此功能包。功能包管理:package.xml和CMakelists.txt文件,

其中package.xml用來描述此功能包的基本信息,

包括包名、作者、包之間的依賴等。CMakelists.txt

主要描述如何構(gòu)建、編譯此功能包程序。?NXROBO201830ROSPackageSystem?NXROBO201831核心模塊?NXROBO201832ROS

Package種類?NXROBO201833ROS常用命令工具rostopic(Topics)rosservice(Services)rosnode(Nodes)rosparam(Parameters)rosmsg(Messages)rossrv(Services)roswtf(Generaldebugging)?NXROBO201834ROS常用可視化工具?NXROBO2018353D可視化工具Rviz|ROS常用可視化工具?NXROBO201836集成圖形交互界面rqt|怎樣學(xué)習(xí)ROS??NXROBO201837兩種教學(xué)模式InstructionismVs.Constructionism指導(dǎo)主義(Instructionism):傳統(tǒng)教學(xué)方式:老師講,學(xué)生聽。特點(diǎn):開環(huán),或是死循環(huán)周期過長(zhǎng),等到期末考試或若干年工作后。建造主義(Constructionism):Learningbymaking,closetheloopofunderstandingAstepbystepguide?NXROBO201838學(xué)習(xí)步驟安裝:/ROS/Installation官網(wǎng)教程:/ROS/Tutorials建議初學(xué)者認(rèn)真學(xué)完整個(gè)“初級(jí)”20個(gè)教程!?NXROBO201839學(xué)習(xí)步驟聽到最多的問題之一:?jiǎn)枺豪蠋?,我tutorials做完了,接下來該干什么?答:運(yùn)行真實(shí)的機(jī)器人、解決真實(shí)的問題!問:沒有機(jī)器人怎么辦?答:仿真環(huán)境?NXROBO201840仿真環(huán)境:由易至難Turtlesim一個(gè)QT開發(fā)的2D軌跡顯示接口只能顯示運(yùn)動(dòng)軌跡ArbotiX含有一個(gè)差速驅(qū)動(dòng)機(jī)器人的rviz仿真器機(jī)器人運(yùn)動(dòng)及topic數(shù)據(jù)的3D顯示Gazebo功能齊全的3D物理仿真工具非常重,對(duì)內(nèi)存和顯卡要求高,慎入!?NXROBO201841進(jìn)階部分結(jié)合硬件平臺(tái)和具體應(yīng)用學(xué)習(xí)使用各種packageOpenCV、PCL、MoveIt!、Control、Navigation、SLAM在開發(fā)過程中學(xué)習(xí)使用調(diào)試仿真工具rqt、rviz、Gazebo開發(fā)測(cè)試新的機(jī)器人算法集成各類package構(gòu)建機(jī)器人原型?NXROBO201842ROS版本那么多,該用哪一個(gè)?下載使用統(tǒng)計(jì)Hydroandearlier:0.17%Indigo:14.50%(LongTermSupport)Jade:0.50%Kinetic:62.89%(LongTermSupport)Lunar:2.70%Melodic:6.49%(LongTermSupport)?NXROBO201843版本選擇建議初學(xué)者:KineticLinux程序設(shè)計(jì)能力比較強(qiáng)的:Melodic注意:Ubuntu版本要與ROS版本需匹配ROSIndigo+Ubuntu(14.04.1LTS)ROSKinetic+Ubuntu(16.04LTS)ROSDistributionReleases?NXROBO201844命令行不熟悉怎么辦?有IDE/IDEsEclipseCodeBlocksEmacsVimNetBeansQtCreatorQtCreatorPluginforROSPyCharm(communityedition)kDevelopRoboWareStudio?NXROBO201845不熟悉Linux怎么辦?邊用邊學(xué)+遇到問題要善用搜索教程:http://www.ee.surrey.ac.uk/Teaching/Unix/中文版:LinuxC/C++程序設(shè)計(jì)一站式學(xué)習(xí)/akabook/zh/index.html?NXROBO201846ROS和ROS2.0該學(xué)習(xí)哪個(gè)呢?對(duì)于大眾學(xué)習(xí)者、普通開發(fā)者、機(jī)器人算法開發(fā)者,在2018年仍推薦使用ROS。對(duì)于軟件架構(gòu)的學(xué)習(xí)者、強(qiáng)調(diào)實(shí)時(shí)性的開發(fā)者,建議關(guān)注ROS2.0。?NXROBO201847//ROS學(xué)習(xí)書籍?NXROBO2018482.ROS工作原理及通信機(jī)制課程內(nèi)容智能機(jī)器人工作流程ROS的工作原理及基本概念ROS消息通信機(jī)制ROS服務(wù)通信機(jī)制ROS動(dòng)作通信機(jī)制ROS參數(shù)服務(wù)器通信機(jī)制?NXROBO201850智能機(jī)器人工作流程?NXROBO201851智能機(jī)器人的傳統(tǒng)實(shí)現(xiàn)方式?NXROBO201852mainfun_afun_bfun_cfun_cfun_dfun_efun_ffun_dfun_dROS的工作機(jī)制——ComputationalGraph(計(jì)算圖)?NXROBO201853計(jì)算圖:node為頂點(diǎn),topic/service為邊ROS的工作機(jī)制——ComputationalGraph(計(jì)算圖)?NXROBO201854小烏龜機(jī)器人例子智能機(jī)器人基于ROS的實(shí)現(xiàn)方式?NXROBO201855智能機(jī)器人基于ROS的實(shí)現(xiàn)方式?NXROBO201856ROS通信層術(shù)語–Resource、NamespaceResource:構(gòu)成計(jì)算圖的一切東西都可以稱為資源,比如:node、topic、service、parameter等為了方便使用這些資源,需要對(duì)這些資源進(jìn)行命名,而且要求在系統(tǒng)中具有唯一性Namespace:為了避免名字沖突,ROS提出了一種策略:給同一個(gè)功能模塊的資源名字加上一個(gè)“前綴”,這個(gè)前綴就叫做名字空間(Namespace)。可以對(duì)比C++中的Namespace概念,或文件夾(文件目錄)的概念,Namespace對(duì)于避免名字沖突和提升代碼重用性具有很好的作用。57?NXROBO2022ROS通信層術(shù)語-NodeNode:是一個(gè)數(shù)據(jù)處理或執(zhí)行動(dòng)作的進(jìn)程,是計(jì)算圖中的獨(dú)立個(gè)體,系統(tǒng)中的獨(dú)立功能單元。怎樣設(shè)計(jì)node?密集的通信會(huì)導(dǎo)致系統(tǒng)性能的下降而過于緊密的聚合度會(huì)增加代碼的耦合度58?NXROBO2022ROS通信層術(shù)語–MasterNodeMasternode:計(jì)算圖中的管理通信節(jié)點(diǎn)所有信息的中心節(jié)點(diǎn)(超級(jí)節(jié)點(diǎn))它跟蹤節(jié)點(diǎn)中的publisher與subscriber,service的server與client,記錄其他節(jié)點(diǎn)的位置(uri標(biāo)明,host與port),并將這些信息通知給需要建立鏈接的節(jié)點(diǎn)ROS中無時(shí)間同步?。OStime為當(dāng)前系統(tǒng)時(shí)間!多機(jī)需要同步系統(tǒng)時(shí)間的工具來實(shí)現(xiàn)RPS內(nèi)時(shí)鐘同步。59?NXROBO2022ROS通信層術(shù)語-TopicTopic:ROS中廣為使用的publish-subscribe異步的通信模式。這種方式將信息的產(chǎn)生和使用雙方解耦,首發(fā)雙方的信息都是由masternode進(jìn)行管理。常用于不斷更新的,含有較少邏輯處理的數(shù)據(jù)通信60?NXROBO2022ROS通信層術(shù)語-ServiceService:用于處理ROS通信中的同步通信,采用server/client語義。每個(gè)servicetype擁有request與response兩部分,對(duì)于service中的Server,ROS不會(huì)檢查重名(nameconflict),只有最后注冊(cè)的server會(huì)生效,與client建立連接。常用于資料量較小,但有強(qiáng)邏輯處理的數(shù)據(jù)交換。61?NXROBO2022ROS通信層術(shù)語-ParameterParameter可以看作為ROS系統(tǒng)運(yùn)行時(shí)中定義的全局變量,而Masternode中有Parameterserver來維護(hù)這些變量。這些變量的命名同樣遵循namespace的命名規(guī)則namespace的存在使得parameter擁有非常清晰的層次,有效避免重名而且對(duì)parameter訪問可以單獨(dú)訪問也可以樹狀訪問(層層解析namespace)62?NXROBO2022ROS通信層術(shù)語-URI作用:定位node在分布式系統(tǒng)中的位置格式為:protocol://host:portProtocol一般為http或者rosrpc,host為hostname或者IP地址,port則為端口號(hào)。比如,在多臺(tái)計(jì)算機(jī)上運(yùn)行ROS的時(shí)候,通常需要指定ROSMaster的位置(整個(gè)系統(tǒng)只能有一個(gè))63?NXROBO2022ROS_MASTER_URI=:11311ROS通信層術(shù)語-XML-RPCROS通過遠(yuǎn)程過程調(diào)用來建立節(jié)點(diǎn)之間的連接以及數(shù)據(jù)傳輸,ROS中的遠(yuǎn)程過程調(diào)用通過XML-RPC協(xié)議實(shí)現(xiàn)XML-RPC:ROS通信網(wǎng)路中的基礎(chǔ),一種通用遠(yuǎn)程調(diào)用協(xié)議用于masternode與其他節(jié)點(diǎn)之間的信息交換傳輸文本使用XML支持(支持語言類型多)調(diào)用時(shí)無狀態(tài)(邏輯較為簡(jiǎn)單)ROS中topic/servicep2p傳輸時(shí)的nodename信息交換與parameterserver都是由XML-RPC進(jìn)行支持64?NXROBO2022ROS通信層術(shù)語-XML-RPCParameterserver直接使用XML-RPC的數(shù)據(jù)類型:int

或者i4是32位的有符號(hào)整型,十進(jìn)制表示中,前綴-號(hào)則為負(fù)數(shù)。boolean

只有兩種取值,0和1,用于表示布爾類型。double

實(shí)數(shù)類型,前綴-號(hào)表示負(fù)數(shù)。dataTime.iso8601日期時(shí)間,用iso-8601格式表示。base64

用base64算法編碼的二進(jìn)制字符串。arrayvalues組成的表,在data實(shí)體下一層Struct

又稱為map表示關(guān)系的集合,每一個(gè)struct實(shí)體是由一個(gè)name與value的鍵值對(duì)組成。65?NXROBO2022ROS消息通信機(jī)制?NXROBO202266cameraviewer/imagessensor_msgs::Imagepublishsensor_msgs::ImagesubscribeROS消息通信機(jī)制?NXROBO202267ROS消息通信過程——實(shí)例68?NXROBO2022ROS消息通信過程——實(shí)例69?NXROBO2022ROS消息的數(shù)據(jù)類型70std_msgs/Headerheaderfloat32angle_minfloat32angle_maxfloat32angle_incrementfloat32time_incrementfloat32scan_timefloat32range_minfloat32range_maxfloat32[]rangesfloat32[]intensities系統(tǒng)已有的標(biāo)準(zhǔn)消息類型?NXROBO2022生成自己的自定義類型:在package.xml中在CMakeLists.txt中catkin_make!71<build_depend>message_generation</build_depend><run_depend>message_runtime</run_depend>add_message_files(FILESpoint.msg)ROS消息的數(shù)據(jù)類型point.msg文件?NXROBO2022ROS消息通信機(jī)制——特點(diǎn)72異步“stream-like”通信異步的publish-subscribe通信模式可以有多個(gè)發(fā)布者,可以多個(gè)訂閱者TCP/IP或UDP傳輸協(xié)議強(qiáng)類型消息傳輸非阻塞方式,調(diào)用完馬上返回常用于不斷更新的,含有較少邏輯處理的數(shù)據(jù)通信?NXROBO2022ROS服務(wù)通信機(jī)制73?NXROBO2022ROS服務(wù)通信機(jī)制74?NXROBO2022ROS服務(wù)通信機(jī)制75two_num_addition.srv文件系統(tǒng)已有的標(biāo)準(zhǔn)服務(wù)類型自定義自己的服務(wù)類型?NXROBO2022ROS服務(wù)通信機(jī)制——特點(diǎn)76同步“function-call-like”通信CS-模式只能有一個(gè)服務(wù)器,可以有多個(gè)客戶端TCP/IP或UDP傳輸協(xié)議強(qiáng)類型消息傳輸阻塞方式,一旦調(diào)用,客戶端得等待服務(wù)器端執(zhí)行完才返回,繼續(xù)執(zhí)行下面語句常用于工作量較小的情形,但有強(qiáng)邏輯處理的數(shù)據(jù)交換。?NXROBO2022ROS動(dòng)作通信機(jī)制77?NXROBO2022ROS動(dòng)作通信機(jī)制——特點(diǎn)78形式上與service相同,屬于直接點(diǎn)對(duì)點(diǎn)通信調(diào)用形式與message方式類似,非阻塞方式,調(diào)用后立即返回,可以繼續(xù)執(zhí)行下面的語句提供了一種狀態(tài)查詢及反饋機(jī)制,讓客戶端了解服務(wù)器端的執(zhí)行情況常用于計(jì)算量較大的情形,且有強(qiáng)邏輯處理的數(shù)據(jù)交換。?NXROBO2022ROSParameterServer通信機(jī)制

Parameterserver就設(shè)置在masternode中。79?NXROBO2022DynamicReconfigure給出一種實(shí)時(shí)監(jiān)測(cè)masternode中參數(shù)變化,并對(duì)node中相應(yīng)運(yùn)行參數(shù)進(jìn)行修改的機(jī)制:dynamicreconfigure。原理略過。我們來通過例子來看看這個(gè)機(jī)制的強(qiáng)大。打開ROS中的自主導(dǎo)航+2D仿真器Stage(需已先裝上navigation_stagepackage)80$roslaunchnavigation_stagemove_base_gmapping_5cm.launch?NXROBO2022DynamicReconfigure81?NXROBO2022小結(jié)我們?cè)敿?xì)介紹了ROS的通信機(jī)制的工作原理簡(jiǎn)要介紹通信層的核心概念較為詳細(xì)地講解消息、服務(wù)、動(dòng)作、參數(shù)服務(wù)器四種重要的通信機(jī)制82?NXROBO20223.創(chuàng)建工作空間課程介紹課程目的:理解工作空間及功能包掌握工作空間創(chuàng)建方法掌握功能包創(chuàng)建方法所需基礎(chǔ):具備UbuntuLinux基礎(chǔ)知識(shí)84?NXROBO2022課程內(nèi)容ROS的編譯構(gòu)建系統(tǒng)簡(jiǎn)介ROS編程的一般流程工作空間的創(chuàng)建及其結(jié)構(gòu)介紹多個(gè)工作空間的覆蓋(overlay)功能包的創(chuàng)建及其結(jié)構(gòu)介紹package.xml和Cmakelists.txt文件規(guī)則85?NXROBO2022ROS的編譯構(gòu)建系統(tǒng)Catkin:官方推薦的ROS編譯構(gòu)建系統(tǒng),是原ROS編譯構(gòu)建系統(tǒng)rosbuild的繼承者。catkin通過綜合CMake宏和Python腳本在CMake正常工作流程之前實(shí)現(xiàn)一些功能操作。(Drypackages)Rosbuild:過時(shí)的編譯構(gòu)建系統(tǒng),不建議使用。但目前官方還在支持以保證早期功能包工作。(Wetpackages)86?NXROBO2022回顧:ROS的文件系統(tǒng)(catkin)87?NXROBO2022創(chuàng)建工程空間創(chuàng)建自己的ROS包在包目錄下創(chuàng)建***.cpp或.py源代碼文件若*.cpp,則修改CMakeLists.txt文件編譯ROS編程的一般流程√本課講解√本課講解88?NXROBO2022Catkin工作空間創(chuàng)建設(shè)置環(huán)境變量創(chuàng)建命令構(gòu)建$source/opt/ros/noetic/setup.bash$mkdir-p~/catkin_ws/src

$cd~/catkin_ws/src&catkin_init_workspace$cd~/catkin_ws/

$catkin_make89?NXROBO2022Catkin工作空間結(jié)構(gòu)90?NXROBO2022Catkin工作空間結(jié)構(gòu)源碼空間src存放功能包的所有源碼文件,編譯構(gòu)建時(shí)就從這個(gè)目錄尋找功能包。其CMakeLists.txt檔,鏈接到\opt\ros\distro\catkin\cmake\toplevel.cmake文件。構(gòu)建空間build存放編譯構(gòu)建過程中的中間檔。開發(fā)空間devel存構(gòu)建好的可執(zhí)行程序和運(yùn)行庫,可由CATKIN_DEVEL_PREFIX變量重新設(shè)定,但目錄的選擇要求必須滿足子目錄沒有功能包。安裝空間install是功能包的安裝目錄,可由CATKIN_INSALL_PREFIX變量重新設(shè)定。因?yàn)樾陆üぷ骺臻g,所以默認(rèn)的install目錄并未創(chuàng)建,執(zhí)行以下命令創(chuàng)建。91$catkin_makeinstall?NXROBO2022環(huán)境變量設(shè)置通過setup.xxxshell腳本引入在~/.bashrc文件中添加source命令環(huán)境變量查看$source/opt/ros/noetic/setup.bash$env|grepros92?NXROBO2022工作空間的overlayROS環(huán)境變量93?NXROBO2022Catkin工作空間overlayOverlayROS系統(tǒng)目錄$source/opt/ros/noetic/setup.bash

$env|grepros

$mkdir-p~/catkin_ws/src

$cd~/catkin_ws/src;catkin_init_workspace

$cd~/catkin_ws;catkin_make

$source~/catkin_ws/devel/setup.bash

$env|grepros94?NXROBO2022Catkin工作空間overlay95?NXROBO2022Catkin工作空間overlayCatkin工作區(qū)之間overlay$mkdir-p~/catkin_ws_2/src

$cd~/catkin_ws_2/src;catkin_init_workspace

$cd~/catkin_ws_2;catkin_make

$source~/catkin_ws_2/devel/setup.bash

$env|grepros96?NXROBO2022Catkin工作空間overlay97?NXROBO2022創(chuàng)建ROS功能包c(diǎn)atkin_create_pkg命令行工具創(chuàng)建新的功能包:此命令的格式包括功能包的名稱和依賴項(xiàng);通常依賴項(xiàng)包括std_msgs、rospy和roscpp。功能包命名規(guī)則:只允許使用小寫字母、數(shù)字和底線;首字符必須是小寫字母示例:98$cd~/catkin_ws/src$catkin_create_pkg[package_name][depend1][depend2][depend3]?NXROBO2022$cd~/catkin_ws/src$catkin_create_pkgbeginner_tutorialsstd_msgsrospyroscpp創(chuàng)建Catkin功能包99?NXROBO2022Catkin功能包配置文件package.xml,范本文件:/usr/lib/python3/dist-packages/catkin_pkg/templates/package.xml.inCMakeLists.txt,范本文件:/usr/lib/python3/dist-packages/catkin_pkg/templates/CMakeLists.txt.in100?NXROBO2022package.xml主要內(nèi)容描述性數(shù)據(jù)(如功能包的簡(jiǎn)介、維護(hù)者)功能包的元信息(如作者、網(wǎng)站)打包發(fā)行信息(如功能包版本)依賴的ROS功能包或系統(tǒng)軟件包101?NXROBO2022Package.xml規(guī)則——基本信息標(biāo)簽必填標(biāo)簽:<name>:功能包名;<version>:版本號(hào),以d.d.d的格式,d表示整數(shù);<description>:功能包特性簡(jiǎn)介;<maintainer>:功能包發(fā)布者信息;<license>遵循的版權(quán)協(xié)議名如下??蛇x標(biāo)簽<url>:功能包的網(wǎng)址信息,主要有功能包相關(guān)主頁,開源項(xiàng)目地址等;<author>:功能包的作者信息,可以有多個(gè)。102?NXROBO2022Package.xml規(guī)則——依賴關(guān)系標(biāo)簽編譯構(gòu)建依賴:<build_depend>,指定構(gòu)建此功能包需要的軟件包。構(gòu)建匯出依賴:<build_export_depend>,指定此功能包構(gòu)建庫文件需要的軟件包。執(zhí)行依賴:<exec_depend>,指定此功能包運(yùn)行時(shí)需要的軟件包。測(cè)試依賴:<test_depend>,指定單元測(cè)試需要的附加依賴。構(gòu)建工具依賴:<buildtool_depend>,指定這個(gè)包需要構(gòu)建的工具。文檔工具依賴:<doc_depend>,指定了這個(gè)包生成文檔的需要文檔生成工具。103?NXROBO2022CMakelists樣例104?NXROBO2022Catkin功能包規(guī)則必須包含package.xml文件;必須包含CMakeLists.txt文件;功能包之間不允許嵌套105?NXROBO2022一個(gè)有用的包管理工具:rosdeprosdep安裝rosdep初始化及更新$sudoaptinstallpython3-rosdep$sudorosdepinit

$rosdepupdate106?NXROBO2022rosdep用法rosdepcheck檢查功能包的系統(tǒng)依賴是否安裝rosdepinstall如果系統(tǒng)依賴未安裝則生成bash腳本并執(zhí)行以安裝功能包的系統(tǒng)依賴rosdepkeys列出功能包的系統(tǒng)依賴的key值rosdepresolve根據(jù)key轉(zhuǎn)換出系統(tǒng)依賴rosdep的主要用途是安裝工作空間中ros包的依賴,首先切換到工作空間下,然后運(yùn)行下述命令即可安裝該工作空間的所有依賴,具體命令如下:rosdepinstall--from-pathssrc--ignore-src-r-y107?NXROBO2022小結(jié)ROS的編譯構(gòu)建系統(tǒng)簡(jiǎn)介ROS編程的一般流程工作空間的創(chuàng)建及其結(jié)構(gòu)介紹多個(gè)工作空間的覆蓋(overlay)功能包的創(chuàng)建及其結(jié)構(gòu)介紹package.xml和Cmakelists.txt文件規(guī)則ROS功能包的依賴管理工具rosdep108?NXROBO20224.編寫及編譯ROS程序本課程主要內(nèi)容用C++編寫ROSnodeC++代碼編寫CMakeLists.txt的編寫規(guī)則用python編寫ROSnode?NXROBO2022110主要掌握ROSnode的編程范式,理解ROS通信機(jī)制在程序中的體現(xiàn)。創(chuàng)建工程空間創(chuàng)建自己的ROS包在包目錄下創(chuàng)建***.cpp或.py源代碼文件若*.cpp,則修改CMakeLists.txt文件編譯ROS編程的一般流程111?NXROBO2022√本課講解√本課講解√本課講解編程語言的選擇C++作為編譯類語言,運(yùn)行時(shí)執(zhí)行效率高,適合計(jì)算量較大的算法類程序;C++為ROS原生語言,基于roscpp,功能全面完整Python作為解釋性語言,執(zhí)行效率低,一般不適合大型算法類程序,但其編碼效率較高,修改程序方便,可快速成形和測(cè)試?;趓ospy,ROS有些功能沒有python接口112?NXROBO2022編輯工具選擇至于代碼編輯器或IDE的選擇,建議使用Vim或Eclipse。Vim可以讓你專注編碼,而且有很多插件,實(shí)現(xiàn)代碼補(bǔ)全、語法高亮、文件管理等功能,但如果沒用過,上手需要一段時(shí)間,命令掌握不熟反而效率更低。Eclipse交互界面更為友好,有支持C++版本,使用PyDev插件實(shí)現(xiàn)支持Python。113?NXROBO2022用C++編寫ROSnode實(shí)例代碼ros_tutorials:/ros/ros_tutorialsroscppapi文檔:/kinetic/api/roscpp/html/鼓勵(lì)大家多自己查看文檔,多編程實(shí)踐。ROSnode的基本結(jié)構(gòu)115?NXROBO2022#include<ros.h>voidcallback_func(msg){…...}intmain(){

//1.初始化,向rosmaster注冊(cè)登記

ros::init(...);

//2.啟動(dòng)節(jié)點(diǎn),并定義發(fā)布器、訂閱器、服務(wù)器、客戶端、…

ros::NodeHandlenh; ros::Publisherpub=nh.advertise<message_type>(topic_name,buff_len); ros::Subscribersub=nh.subscribe(topic_name,buff_len,callback_func);

//3.循環(huán)發(fā)布消息或響應(yīng)訂閱到的消息

ros::Rateloop_rate(10); while(ros::ok()){

//3.1構(gòu)建所需要發(fā)布的消息

...

//3.2發(fā)布消息

pub.publish(....);

//3.3調(diào)控節(jié)奏

ros::spinOnce(); loop_rate.sleep(); } return0;}ROS核心函數(shù)和類ros::init()初始化函數(shù)ros::spin()事件循環(huán)函數(shù)ros::spinOnce()單次事件函數(shù)ros::start()啟動(dòng)函數(shù)ros::shutdown()關(guān)閉函數(shù)ros::NodeHandle節(jié)點(diǎn)句柄類ros::Publisher發(fā)布器類ros::Subscriber訂閱器類ros::Rateloop_rate循環(huán)速率類116?NXROBO2022node初始化——ros::init()通過調(diào)用ros::init()函數(shù)來初始化node,目的是向節(jié)點(diǎn)管理器注冊(cè)node信息。此函數(shù)向ROS系統(tǒng)傳遞命令行參數(shù)、定義node名字及其它參數(shù)。

在調(diào)用roscpp其它函數(shù)前必須先調(diào)用ros::init(),其函數(shù)原型為:argc和argv:命令行參數(shù)信息,與普通C/C++語言main函數(shù)的命令行參數(shù)一樣,但ROS參數(shù)映像語法為name:=new_name,如:具體請(qǐng)查閱RemappingArguments/RemappingArguments117$rosrunbeginner_tutorialstestfoo:=/a/foo?NXROBO2022name:定義node的名字,不能帶命名空間,可通過映射參數(shù)覆蓋。在ROS系統(tǒng)中要保證Node名字唯一,如果運(yùn)行同名的node,先運(yùn)行的node會(huì)自動(dòng)關(guān)閉。如果想一個(gè)node能同時(shí)多實(shí)例運(yùn)行,可以通過參數(shù)映射同樣能實(shí)現(xiàn),也可通過設(shè)置option為init_options::AnonymousName實(shí)現(xiàn)。118?NXROBO2022node初始化——ros::init()options:這個(gè)參數(shù)是可選項(xiàng),是一個(gè)位結(jié)構(gòu)體,所以可指定多個(gè)選項(xiàng)值,可設(shè)置的值有:ros::init_options::NoSigintHandler

指定此參數(shù)將不創(chuàng)建SIGINT信號(hào)處理器。如果設(shè)置了此參數(shù),為了使node能被正常關(guān)閉,需要自行創(chuàng)建SIGINT信號(hào)的處理器。SIGINT信號(hào)是UNIX系統(tǒng)用來結(jié)束進(jìn)程的,一般由CTRL+C等方式觸發(fā)。ros::init_options::AnonymousName

指定此參數(shù)將在node名字后追加一個(gè)隨機(jī)數(shù),這樣同一個(gè)node被多次運(yùn)行時(shí),每個(gè)實(shí)例名是唯一的。ros::init_options::NoRosou

指定此參數(shù)將不把ros控制臺(tái)的輸出信息廣播到/rosout這個(gè)topic上。119?NXROBO2022node初始化——ros::init()ros::init()除了上面介紹的初始化函數(shù),還有兩種ros::init()的重載函數(shù):這兩個(gè)重載函數(shù)將argc和argv替換成直接指定映像參數(shù)。120?NXROBO2022node啟動(dòng)——ros::NodeHandlenh通過創(chuàng)建ros::NodeHandle實(shí)例來啟動(dòng)node。這是最通常的做法,此步驟也可通過其他方式完成。第一個(gè)ros::NodeHandle實(shí)例創(chuàng)建后就會(huì)調(diào)用ros::start(),最后一個(gè)ros::NodeHandle實(shí)例銷毀后就會(huì)調(diào)用ros::shutdown()。函數(shù)ros::start()才真正開始執(zhí)行node的內(nèi)部功能,包括運(yùn)轉(zhuǎn)線程、開始網(wǎng)絡(luò)輪詢和xmlrpc循環(huán)、連接內(nèi)部訂閱、運(yùn)行service服務(wù)端等。函數(shù)ros::shutdown()是關(guān)閉node的,主要過程有斷開一切網(wǎng)絡(luò)連接(用于TOPIC和SERVICE)、從節(jié)點(diǎn)管理器(master)注銷。ros::NodeHandle負(fù)責(zé)實(shí)例化與這個(gè)node有關(guān)的publisher/subscriber/server/parameterserver對(duì)象。121?NXROBO2022創(chuàng)建發(fā)布器發(fā)布器由ros::NodeHandle的實(shí)例化對(duì)象創(chuàng)建,將所發(fā)布主題的名稱和對(duì)應(yīng)的消息類型告知節(jié)點(diǎn)管理器發(fā)布器創(chuàng)建方式:topic_name:話題名稱,指定往哪個(gè)話題上發(fā)消息message_type:消息類型,指定該話題(topic)上傳輸什么類型的消息。buff_len:發(fā)送緩沖區(qū)大小122?NXROBO2022ros::Publisherpub=nh.advertise<message_type>(topic_name,buff_len);創(chuàng)建訂閱器訂閱器由ros::NodeHandle的實(shí)例化對(duì)象創(chuàng)建,將所訂閱主題的名稱及對(duì)應(yīng)的消息類型告知節(jié)點(diǎn)管理器訂閱器創(chuàng)建方式:topic_name:話題名稱,指定從哪個(gè)話題上獲取消息buff_len:接收緩沖區(qū)大小callback_func:回調(diào)函數(shù),即話題(topic)上有數(shù)據(jù)的時(shí)候,你要怎么處理這些數(shù)據(jù)。需要程序員明定義此函數(shù)。123?NXROBO2022ros::Subscribersub=nh.subscribe(topic_name,buff_len,callback_func);創(chuàng)建服務(wù)器服務(wù)器由ros::NodeHandle的實(shí)例化對(duì)象創(chuàng)建,將服務(wù)名稱和服務(wù)響應(yīng)函數(shù)告知節(jié)點(diǎn)管理器,對(duì)外廣播所能提供的服務(wù)服務(wù)器創(chuàng)建方式:service_name:服務(wù)名稱,指定能提供哪個(gè)服務(wù)service_func:響應(yīng)服務(wù)請(qǐng)求的處理函數(shù),即有客戶端請(qǐng)求服務(wù)時(shí),你要怎么處理這些請(qǐng)求。需要程序員明定義此函數(shù)。124?NXROBO2022ros::ServiceServerserver=nh.advertiseService(service_name,service_func);創(chuàng)建服務(wù)客戶端服務(wù)客戶端由ros::NodeHandle的實(shí)例化對(duì)象創(chuàng)建,將請(qǐng)求服務(wù)的名稱和服務(wù)類型告知節(jié)點(diǎn)管理器客戶端創(chuàng)建方式:service_name:服務(wù)名稱,指定在哪個(gè)服務(wù)上請(qǐng)求服務(wù)service_type:服務(wù)類型,指定出請(qǐng)求和響應(yīng)的類型。125?NXROBO2022ros::ServiceClientclient=nh.ServiceClient<service_type>(service_name);主循環(huán)循環(huán)條件ros::ok():當(dāng)接受到ctrl+c信號(hào)或者ros::shutdown()調(diào)用時(shí),為false,終止運(yùn)行節(jié)點(diǎn)。主循環(huán)中,使用ros::rate實(shí)現(xiàn)將循環(huán)一次的時(shí)間控制在一個(gè)我們?cè)O(shè)置的一個(gè)周期內(nèi)。126?NXROBO2022或示例:發(fā)布節(jié)點(diǎn)127?NXROBO2022示例:訂閱節(jié)點(diǎn)128?NXROBO2022129?NXROBO2022示例:服務(wù)器節(jié)點(diǎn)130?NXROBO2022示例:客戶端節(jié)點(diǎn)ROSnode總結(jié)從api使用角度來看,通信方式的不同體現(xiàn)在程控流上。topic無同步service有同步publish非阻塞call阻塞。何時(shí)使用topic或service?實(shí)時(shí)更新的數(shù)據(jù)使用topic傳輸。特殊邏輯的小數(shù)據(jù)使用service。topic需要更多精力去處理異步數(shù)據(jù)獲得與主控制流的邏輯關(guān)系。實(shí)現(xiàn)難度上要更高。131?NXROBO2022修改CMakelist.txt文件Cmakelist.txt作用CMakeLists.txt文件CMake構(gòu)建系統(tǒng)的配置文件用于描述代碼如何編譯構(gòu)建以及安裝到何位置等參數(shù)CMake根據(jù)此檔生成makefiles文件,任何兼容CMake的軟件包至少包含一個(gè)CMakeLists.txt文件相比普通的CMake項(xiàng)目,catkin項(xiàng)目中的CMakeLists.txt只是額外多加了幾條約束。133?NXROBO2022Cmakelist.txt樣例134?NXROBO2022Cmakelist.txt規(guī)則CMake最低版本要求

(cmake_minimum_required)規(guī)定CMake的最低版本,catkin構(gòu)建必須以此行開頭,使用cmake_minimum_required宏命令。功能包名(project())通過CMake的project()宏命令定義功能包名稱,cmake腳本中通過${PROJECT_NAME}訪問。創(chuàng)建環(huán)境變量${PROJECT_NAME}_BINARY_DIR和${PROJECT_NAME}_SOURCE_DIR。cmake_minimum_required(VERSION2.8.3)project(beginner_tutorials)135?NXROBO2022Cmakelist.txt規(guī)則構(gòu)建時(shí)需要的其它CMake/Catkin軟件包

構(gòu)建此工程時(shí)需要的其它CMake/Catkin軟件包,而且是構(gòu)建依賴而非運(yùn)行依賴,使用find_package()宏命令格式:catkin是必須要定義:find_package(<name>[[REQUIRED|COMPONENTS][componets...]])find_package(catkinREQUIRED)136?NXROBO2022Cmakelist.txt規(guī)則在CMake會(huì)話,工程依賴的其它包會(huì)自動(dòng)作為catkin的組件(components)加入,如果將其加入到find_package()中則過程則簡(jiǎn)單得多:find_package()宏命令會(huì)創(chuàng)建<NAME>_FOUND、<NAME>_INCLUDE_DIRS或<NAME>_INCLUDES、<NAME>_LIBRARIES或<NAME>_LIBS、<NAME>_DEFINITIONS這幾個(gè)環(huán)境變量,以供CMake腳本調(diào)用,具體情況可在構(gòu)建成功后查看工作空間build目錄下的CMakecache.txt文件137find_package(catkinREQUIREDCOMPONENTSstd_msgsrospyroscpp)?NXROBO2022Cmakelist.txt規(guī)則處理Message/Service/Action文件

Messages(.msg)、services(.srv)和actions(.action)三個(gè)文件需要進(jìn)行預(yù)處理以便于功能包構(gòu)建使用,生成所支持的編程語言需要并識(shí)別的文件:其后加上宏:add_message_files()add_service_files()add_action_files()generate_messages()138?NXROBO2022處理Message/Service/Action文件還需在find_package()宏中添加功能包信息參數(shù),如:而且在package.xml文件中必須添加message_generation、actionlib和actionlib_msgs為構(gòu)建依賴;message_runtime、actionlib和actionlib_msgs為運(yùn)行依賴,如果此功能包依賴的其它功能包中已包含此依賴則不必再次添加。提示:actionlib*在需處理.action檔情況下添加find_package(catkinREQUIREDCOMPONENTSmessage_generation)139?NXROBO2022處理Message/Service/Action文件比較完整的示例,(假設(shè)這些messages依賴std_msgs和sensor_msgs),如:140?NXROBO2022Cmakelist.txt規(guī)則定義功能包構(gòu)建的輸出信息

為構(gòu)建系統(tǒng)提供catkin特有的信息以供系統(tǒng)生成pkg-config和CMake文件,通過catkin構(gòu)建系統(tǒng)的catkin_package()宏實(shí)現(xiàn)。其有5個(gè)可選參數(shù):141INCLUDE_DIRS

此功能包輸出的包含路徑(如用于:cflags)LIBRARIES

功能包輸出的庫CATKIN_DEPENDS

依賴的其它c(diǎn)atkin工程DEPENDS

依賴的非catkin的CMake工程CFG_EXTRAS

其它配置項(xiàng)?NXROBO2022Cmakelist.txt規(guī)則定義構(gòu)建目標(biāo)

構(gòu)建目標(biāo)包括可執(zhí)行程序和庫文件,主要定義內(nèi)容包括:142頭文件路徑庫路徑目標(biāo)構(gòu)建規(guī)則?NXROBO2022定義構(gòu)建目標(biāo)包含路徑

包含路徑通過include_directories()和link_directories()兩個(gè)宏實(shí)現(xiàn),分別表示要包含的頭文件路徑和庫路徑。頭文件路徑可以手動(dòng)指定路徑也可以使用由find_package()宏生成的形如*_INCLUDE_DIRS這樣的CMake變量。庫路徑,無特殊情況,一般都由find_package()自動(dòng)生成添加。143?NXROBO2022定義構(gòu)建目標(biāo)目標(biāo)規(guī)則

目標(biāo)規(guī)則主要指定構(gòu)建的目標(biāo)名稱及其源文件和鏈接需要的庫,由add_executable()和add_library()兩個(gè)宏分別實(shí)現(xiàn)可執(zhí)行程序和庫目標(biāo)定義。語法如下:使用target_link_libraries()宏來定義可執(zhí)行程序鏈接需要的庫:144?NXROBO2022Cmakelist.txt規(guī)則單元測(cè)試

通過catkin的宏catkin_add_gtest()實(shí)現(xiàn):145?NXROBO2022Cmakelist.txt規(guī)則安裝規(guī)則

構(gòu)建完成后,所有構(gòu)建目標(biāo)將會(huì)存放于catkin工作空間的devel目錄,如果想用makeinstall執(zhí)行安裝操作,就必須定義安裝規(guī)則。安裝對(duì)象一般有可執(zhí)行程序或腳本、庫、頭文件、roslaunch文件及其它資源類文件。規(guī)則定義通過install()宏實(shí)現(xiàn),有四種參數(shù):146TARGETS需安裝的對(duì)象ARCHIVEDESTINATION靜態(tài)庫和DLL的清單文件LIBRARYDESTINATION非DLL共享庫和模塊RUNTIMEDESTINATION可執(zhí)行對(duì)象和DLL形式的共享庫?NXROBO2022安裝規(guī)則形式如下:

Python綁定庫必須安裝到特殊的活頁夾以便于其它Python代碼import:147?NXROBO2022安裝規(guī)則頭文件安裝規(guī)則示例如下:148?NXROBO2022安裝規(guī)則roslaunch文件等資源文件的安裝規(guī)則示例如下:對(duì)于Python執(zhí)行代碼,catkin提供catkin_install_python()宏來解決Python代碼的安裝規(guī)則:對(duì)于Python模塊,通過添加*catkin_python_setup()*宏安裝。此宏調(diào)用setup.py,實(shí)現(xiàn)Python模塊的安裝。

其它細(xì)節(jié)問題請(qǐng)查閱catkin文檔和CMake文檔。149?NXROBO2022編譯構(gòu)建功能包編寫好package.xml、CMakelist.txt及功能代碼就可以進(jìn)行編譯構(gòu)建了。編譯構(gòu)建工作在catkin工作空間頂層目錄下進(jìn)行:編譯構(gòu)建部分指定的包:需要安裝的話,就執(zhí)行:$cd~/catkin_ws

$catkin_make$catkin_make-DCATKIN_WHITELIST_PACKAGES=”package1;package2”$catkin_makeinstall150?NXROBO2022用Python編寫ROSnode實(shí)例代碼ros_tutorials:/ros/ros_tutorialsroscppapi文檔:/kinetic/api/rospy/html/鼓勵(lì)大家多自己查看文檔,多編程實(shí)踐。創(chuàng)建工程空間創(chuàng)建自己的ROS包在包目錄下創(chuàng)建***.py源代碼文件無需編譯ROSPython編程基本步驟√本課講解152√本課講解?NXROBO2022ROSnode的基本結(jié)構(gòu)(python)153?NXROBO2022importrospydefcallback(msg):…….if__

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論