版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章機(jī)器人操作系統(tǒng)(ROS)概述目錄contentsUbuntu系統(tǒng)及常用指令ROS發(fā)展與現(xiàn)狀安裝ROS認(rèn)識(shí)ROSROS開(kāi)發(fā)環(huán)境搭建Ubuntu系統(tǒng)及常用指令01CATALOGUEUbuntu系統(tǒng)安裝1.下載軟件安裝包(ubuntu-20.04.4)/ubuntu-releases/20.04/2.下載U盤(pán)系統(tǒng)制作軟件(UltraISO)/3.安裝方法/video/BV1WZ4y167me?p=7注意:分區(qū)(Swap、Logic、Main)Ubuntu系統(tǒng)界面Ubuntu系統(tǒng)使用介紹1.點(diǎn)擊圖標(biāo)進(jìn)行打開(kāi)2.使用按鍵“Ctrl+Alt+T”進(jìn)行打開(kāi)打開(kāi)終端常用指令ls-顯示文件及文件夾cd-修改工作目錄pwd-打印當(dāng)前工作目錄cp-復(fù)制文件或文件夾mv-移動(dòng)文件或文件夾rm-刪除文件或文件夾kill-強(qiáng)制關(guān)閉進(jìn)程mkdir-創(chuàng)建目錄/文件夾touch-創(chuàng)建文件gedit-創(chuàng)建文件(文件已存在,則打開(kāi))sudo-執(zhí)行指令ROS發(fā)展與現(xiàn)狀02CATALOGUEROS發(fā)展與現(xiàn)狀機(jī)器人開(kāi)發(fā)不可或缺的工具,已經(jīng)應(yīng)用于各類(lèi)機(jī)器人開(kāi)發(fā)安裝ROS03CATALOGUEROS安裝步驟ROS官網(wǎng)安裝步驟:/noetic/Installation/Ubuntu一鍵安裝方式:/ROS安裝步驟安裝目錄:/opt/rosROS安裝步驟啟動(dòng)rosmaster節(jié)點(diǎn)ROS安裝步驟啟動(dòng)master啟動(dòng)Turtlesim啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn)$roscore$rosrunturtlesimturtlesim_node$rosrunturtlesimturtle_teleop_key以下哪個(gè)指令可以查看當(dāng)前工作目錄(
)lspwdcdgeditABCD提交單選題1分認(rèn)識(shí)ROS04CATALOGUEROS的定義與核心概念
ROS-RobotOperatingSystem,機(jī)器人操作系統(tǒng)=+++通信機(jī)制開(kāi)發(fā)工具應(yīng)用功能生態(tài)系統(tǒng)ROS的定義與核心概念ROS的定義與核心概念ROS通信機(jī)制介紹話(huà)題(Topic)——異步通信機(jī)制節(jié)點(diǎn)間用來(lái)傳輸數(shù)據(jù)的重要總線(xiàn);使用發(fā)布/訂閱模型,數(shù)據(jù)由發(fā)布者傳輸?shù)接嗛喺?,同一個(gè)話(huà)題的訂閱者或發(fā)布者可以不唯一。消息(Message)——話(huà)題數(shù)據(jù)具有一定的類(lèi)型和數(shù)據(jù)結(jié)構(gòu),包括ROS提供的標(biāo)準(zhǔn)類(lèi)型和用戶(hù)自定義類(lèi)型;使用編程語(yǔ)言無(wú)關(guān)的.msg文件定義,編譯過(guò)程中生成對(duì)應(yīng)的代碼文件。ROS通信機(jī)制介紹服務(wù)(Service)——同步通信機(jī)制使用客戶(hù)端/服務(wù)器(C/S)模型,客戶(hù)端發(fā)送請(qǐng)求數(shù)據(jù),服務(wù)器完成處理后返回應(yīng)答數(shù)據(jù);使用編程語(yǔ)言無(wú)關(guān)的.srv文件定義請(qǐng)求和應(yīng)答數(shù)據(jù)結(jié)構(gòu),編譯過(guò)程中生成對(duì)應(yīng)的代碼文件。ROS通信機(jī)制介紹話(huà)題與服務(wù)的區(qū)別ROS通信機(jī)制介紹參數(shù)(Parameter)——全局共享字典可通過(guò)網(wǎng)絡(luò)訪(fǎng)問(wèn)的共享、多變量字典;節(jié)點(diǎn)使用此服務(wù)器來(lái)存儲(chǔ)和檢索運(yùn)行時(shí)的參數(shù);適合存儲(chǔ)靜態(tài)、非二進(jìn)制的配置參數(shù),不適合存儲(chǔ)動(dòng)態(tài)配置的數(shù)據(jù)。ROS通信機(jī)制介紹功能包(Package)ROS軟件中的基本單元,包含節(jié)點(diǎn)源碼、配置文件、數(shù)據(jù)定義等。功能包清單(Packagemanifest)
記錄功能包的基本信息,保護(hù)作者信息、許可信息、依賴(lài)選項(xiàng)、編譯標(biāo)志等。元功能包(MetaPackage)
組織多個(gè)用于同一目的的功能包。ROS開(kāi)發(fā)環(huán)境搭建05CATALOGUE安裝終端
ROS中需要頻繁使用終端,經(jīng)常需要同時(shí)開(kāi)啟多個(gè)窗口,推薦使用Terminator。在終端中,執(zhí)行如下指令,進(jìn)行Terminator的安裝。$sudoaptinstallterminator終端工具Terminator使用效果安裝VSCodeVSCode的全稱(chēng)是VisualStudioCode,是微軟公司研發(fā)的一款輕量級(jí)代碼編輯器,免費(fèi),但功能強(qiáng)大。VSCode支持Windows、MacOS、Linux等多種平臺(tái)。(1)下載VSCode。下載地址:/docs?start=true(2)安裝VSCode。方式1:雙擊安裝即可(或右擊選擇安裝)。方式2:在所在文件夾下打開(kāi)終端,輸入如下命令進(jìn)行安裝:打開(kāi)VSCode后的界面$sudodpkg-ixxxx.debTHANKS感謝觀(guān)看第2章機(jī)器人操作系統(tǒng)(ROS)架構(gòu)目錄contentsROS架構(gòu)簡(jiǎn)介ROS文件系統(tǒng)ROS計(jì)算圖ROS架構(gòu)簡(jiǎn)介01CATALOGUEROS架構(gòu)簡(jiǎn)介ROS的架構(gòu)可以分為三個(gè)層次:操作系統(tǒng)層、中間層和應(yīng)用層,如圖所示。ROS的架構(gòu)ROS架構(gòu)簡(jiǎn)介1.操作系統(tǒng)層(OS層)ROS并不是一個(gè)傳統(tǒng)意義上的操作系統(tǒng),而只是一個(gè)元操作系統(tǒng),無(wú)法像Windows、Linux一樣直接運(yùn)行在計(jì)算機(jī)硬件之上,而是需要依托真正意義的操作系統(tǒng)。所以在OS層,可以直接使用ROS官方支持度最好的Ubuntu操作系統(tǒng),也可以使用MacOS、Arch、Debian等操作系統(tǒng),Windows也支持ROS2.0的版本。2.中間層
Linux是一個(gè)通用系統(tǒng),并沒(méi)有針對(duì)機(jī)器人開(kāi)發(fā)提供特殊的中間件,所以ROS在中間層做了大量的工作,其中最為重要的就是基于TCPROS/UDPROS的通信系統(tǒng)。ROS的通信系統(tǒng)基于TCP/UDP網(wǎng)絡(luò),在此基礎(chǔ)之上進(jìn)行了二次封裝,也就是TCPROS/UDPROS。通信系統(tǒng)使用發(fā)布/訂閱、客戶(hù)端/服務(wù)器等模式,實(shí)現(xiàn)多種通信機(jī)制的數(shù)據(jù)傳輸。
除了TCPROS/UDPROS的通信機(jī)制外,ROS還提供一種進(jìn)程內(nèi)的通信方法——Nodelet,它可以為多進(jìn)程通信提供一種更優(yōu)化的數(shù)據(jù)傳輸方式,為數(shù)據(jù)的實(shí)時(shí)性傳輸提供支持。ROS架構(gòu)簡(jiǎn)介3.應(yīng)用層
在應(yīng)用層中,ROS需要運(yùn)行一個(gè)管理者——Master,負(fù)責(zé)管理整個(gè)系統(tǒng)的正常運(yùn)行。ROS社區(qū)內(nèi)共享了大量的機(jī)器人應(yīng)用功能包,這些功能包內(nèi)的模塊以節(jié)點(diǎn)為單位運(yùn)行,以ROS標(biāo)準(zhǔn)的輸入輸出作為接口,開(kāi)發(fā)者不需要關(guān)注模塊的內(nèi)部實(shí)現(xiàn)機(jī)制,只需要了解接口規(guī)則即可實(shí)現(xiàn)復(fù)用,極大地提高了代碼開(kāi)發(fā)效率。作為一種“次級(jí)操作系統(tǒng)”,常見(jiàn)的ROS系統(tǒng)架構(gòu)一般有三個(gè)部分:ROS架構(gòu)簡(jiǎn)介
作為一種“次級(jí)操作系統(tǒng)”,常見(jiàn)的ROS系統(tǒng)架構(gòu)一般有三個(gè)部分:(1)文件系統(tǒng)級(jí)——描述了程序文件在硬盤(pán)上是如何組織的,ROS的內(nèi)部結(jié)構(gòu)、文件結(jié)構(gòu)和核心文件都在這一層;(2)計(jì)算圖級(jí)——說(shuō)明了程序的運(yùn)行方式,即進(jìn)程與進(jìn)程,進(jìn)程與系統(tǒng)之間的通信;(3)開(kāi)源社區(qū)級(jí)——描述了開(kāi)發(fā)者之間是如何共享知識(shí),算法和代碼的。從系統(tǒng)實(shí)現(xiàn)角度來(lái)劃分ROS的架構(gòu)ROS文件系統(tǒng)02CATALOGUEROS文件系統(tǒng)ROS文件系統(tǒng)主要包括了功能包集、功能包、功能包清單、消息類(lèi)型、服務(wù)類(lèi)型和代碼等。ROS文件系統(tǒng)示意圖ROS文件系統(tǒng)1)功能包集(Metapackage)2)功能包(Package)
功能包是ROS系統(tǒng)中軟件組織的主要形式,一個(gè)功能包包含了創(chuàng)建ROS程序的最小結(jié)構(gòu)和最小內(nèi)容,如ROS運(yùn)行的進(jìn)程。3)功能包清單(PackageManifest)
功能包清單是一個(gè)package.xml文件,它提供了功能包的相關(guān)信息。4)消息類(lèi)型(Messagetype)
ROS通過(guò)消息進(jìn)行信息傳遞,ROS中提供了大量的標(biāo)準(zhǔn)類(lèi)型,.msg的文件存儲(chǔ)在功能包的msg文件夾下。5)服務(wù)類(lèi)型(Serviectype)
在ROS中,擴(kuò)展名為.srv的服務(wù)描述文件定義了ROS中的請(qǐng)求和回應(yīng)的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)在功能包的srv文件夾下。6)代碼(Code)
功能包的源程序存儲(chǔ)在src文件夾。ROS文件系統(tǒng)一、工作空間
工作空間主要用于存儲(chǔ)ROS功能包工作空間典型結(jié)構(gòu)示意圖ROS文件系統(tǒng)1)源文件空間(默認(rèn)為src文件夾)2)編譯空間(默認(rèn)為build文件夾)3)開(kāi)發(fā)空間(默認(rèn)為devel文件夾)常用的catkin命令如下:catkin_init_workspace:把指定的工作目錄初始化為ROS的工作空間。catkin_create_pkg:創(chuàng)建功能包。catkin_make:編譯功能包。catkin_find:搜索工作目錄。ROS文件系統(tǒng)二、功能包
功能包是ROS軟件的基本組織形式,一個(gè)功能包可以包含多個(gè)可執(zhí)行文件。功能包主要包含以下文件夾和文件:1)include:
此文件夾包含了所需庫(kù)的頭文件2)msg:
此文件夾存儲(chǔ)消息文件3)srv:
此文件夾存儲(chǔ)服務(wù)文件4)src:
此文件夾存儲(chǔ)程序源文件5)scripts:
此文件夾存儲(chǔ)Python可執(zhí)行腳本文件6)CMakeLists.txt:
規(guī)定了catkin編譯的規(guī)則,如catkin的最低版本,編譯時(shí)需要的依賴(lài)項(xiàng)和指定生成庫(kù)文件/可執(zhí)行文件等7)package.xml:
功能包清單,是package不可缺少的成分。主要記錄了該功能包的名稱(chēng)、版本號(hào)、信息描述、作者信息和許可信息。ROS文件系統(tǒng)二、功能包
8)models:
存放機(jī)器人或仿真場(chǎng)景的3D模型(.sda,.stl,.dae等)9)urdf:
存放機(jī)器人的模型描述文件(.urdf或.xacro)10)launch:
存放launch文件(.launch或.xml)ROS文件系統(tǒng)三、功能包集(Metapackage)
功能包集是不含源代碼且只有一個(gè)package.xml文件的特定包,它用于引用其他功能特性類(lèi)似的功能包。在ROS中有各種不同用途的功能包集,如導(dǎo)航包navigation,機(jī)器人功能包集turtlebot等。
與功能包的CMakeLists.txt不同,功能包集的CMakeLists.txt文件加入了catkin_metapackage()宏,用于指定本軟件包為一個(gè)功能包集。同時(shí),功能包集的package.xml文件中也需添加標(biāo)簽聲明是一個(gè)功能包集。Metapackage名稱(chēng)描述鏈接navigation導(dǎo)航相關(guān)的功能包集/ros-planning/navigationmoveit運(yùn)動(dòng)規(guī)劃相關(guān)的(主要是機(jī)械
臂)功能包集/ros-planning/moveitvision_opencvROS與OpenCV交互的功能包集/ros-perception/vision_opencvimage_pipeline圖像獲取、處理相關(guān)的功能包集/ros-perception/image_commonturtlebotTurtlebot機(jī)器人相關(guān)的功能包集/turtlebot/turtlebot..................ROS里常見(jiàn)的MetapackageROS計(jì)算圖03CATALOGUEROS計(jì)算圖
計(jì)算圖是由一些共同處理數(shù)據(jù)的ROS進(jìn)程形成的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),主要描述進(jìn)程和系統(tǒng)之間的通信。計(jì)算圖涉及以下幾個(gè)重要概念:節(jié)點(diǎn)(Node)、主題(Topic)、消息(Message)、服務(wù)(Service)、節(jié)點(diǎn)管理器(Master)、參數(shù)服務(wù)器(ParameterServer)和消息記錄包(Bag),這些概念都以各自的方式向計(jì)算圖提供數(shù)據(jù)。一、節(jié)點(diǎn)
節(jié)點(diǎn)可以通過(guò)主題、服務(wù)、參數(shù)服務(wù)器與其他節(jié)點(diǎn)通信,從而聯(lián)結(jié)成計(jì)算圖。ROS通過(guò)使用節(jié)點(diǎn)簡(jiǎn)化了系統(tǒng),提高了系統(tǒng)容錯(cuò)性和可維護(hù)性。同時(shí),使用節(jié)點(diǎn)可以保證ROS系統(tǒng)能夠在多個(gè)機(jī)器上同時(shí)運(yùn)行。節(jié)點(diǎn)可以使用不同的庫(kù)進(jìn)行編寫(xiě),如roscpp和rospy;其中roscpp基于C++,rospy基于Python。1)rosrun:
運(yùn)行ROS節(jié)點(diǎn)2)rosnode:
顯示ROS節(jié)點(diǎn)的信息ROS計(jì)算圖二、消息
節(jié)點(diǎn)通過(guò)消息實(shí)現(xiàn)彼此之間的通信。消息從本質(zhì)上來(lái)說(shuō),是節(jié)點(diǎn)之間用于交換信息的數(shù)據(jù)結(jié)構(gòu)。ROS提高了多種標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型(如整型,浮點(diǎn)型,布爾型等),用戶(hù)也可以基于標(biāo)準(zhǔn)消息自定義某種類(lèi)型的消息。ROS提供了rosmsg命令行工具用于顯示消息信息。1)rosmsglist:
顯示所有消息2)rosmsgshow:
顯示消息3)rosmsgpackage:
顯示用于指定功能包的所有消息4)rosmsgpackages:
顯示使用消息的所有功能包ROS計(jì)算圖三、主題
主題是用于標(biāo)識(shí)消息內(nèi)容的名稱(chēng),消息可以通過(guò)一種發(fā)布/訂閱的方式傳遞,而節(jié)點(diǎn)可以向一個(gè)指定的主題發(fā)布消息。一個(gè)節(jié)點(diǎn)對(duì)特定類(lèi)型的數(shù)據(jù)感興趣就訂閱相應(yīng)的主題。一個(gè)節(jié)點(diǎn)可以同時(shí)訂閱或者發(fā)布多個(gè)主題的消息,多個(gè)節(jié)點(diǎn)也發(fā)布或者訂閱同一個(gè)主題的消息。發(fā)布者和訂閱者彼此獨(dú)立,不互相影響。實(shí)際上,主題并不關(guān)注哪些節(jié)點(diǎn)發(fā)布或者訂閱消息,它只關(guān)注消息的類(lèi)型是否匹配。需要主要的是:主題的名字必須具有唯一性。ROS提供了rostopic命令行工具用于對(duì)主題進(jìn)行操作:1)rostopiclist:
顯示當(dāng)前正在發(fā)送和接收的所有主題的列表2)rostopicecho:
實(shí)時(shí)顯示主題的消息內(nèi)容3)rostopicfind:
顯示使用指定類(lèi)型的消息的主題4)rostopictype:
顯示指定主題的消息類(lèi)型5)rostopicinfo:顯示指定主題的信息,包括類(lèi)型、發(fā)布者,主題接收者等6)rostopicpub[主題名稱(chēng)][消息類(lèi)型][參數(shù)]:
向指定的主題發(fā)布消息ROS計(jì)算圖四、服務(wù)
當(dāng)節(jié)點(diǎn)之間需要請(qǐng)求/回應(yīng)交互時(shí),主題無(wú)法滿(mǎn)足此需求,但可以通過(guò)服務(wù)來(lái)實(shí)現(xiàn)。ROS中的服務(wù)由一對(duì)消息來(lái)定義:一條消息用于請(qǐng)求(Request),一條消息用于回應(yīng)(Response)。當(dāng)某個(gè)ROS節(jié)點(diǎn)提供服務(wù)時(shí),其他節(jié)點(diǎn)可以通過(guò)發(fā)送請(qǐng)求消息并等待回應(yīng)來(lái)調(diào)用服務(wù)。服務(wù)也必須有唯一的名字。自定義服務(wù)使用功能包中的.srv文件來(lái)定義。1)rosservice:
顯示活動(dòng)的服務(wù)信息2)rossrv:
顯示靜態(tài)的服務(wù)信息ROS計(jì)算圖五、參數(shù)服務(wù)器
節(jié)點(diǎn)在運(yùn)行時(shí)使用參數(shù)服務(wù)器存儲(chǔ)和檢索參數(shù),參數(shù)服務(wù)器是一個(gè)可通過(guò)網(wǎng)絡(luò)API訪(fǎng)問(wèn)的共享多變量字典。參數(shù)服務(wù)器中的配置參數(shù)通常是全局可見(jiàn)的,這便于查看和更改系統(tǒng)的配置狀態(tài)。1)rosparamlist:
列出參數(shù)服務(wù)器中所有的參數(shù)2)rosparamget/[參數(shù)名稱(chēng)]:
獲取參數(shù)值3)rosparamset[參數(shù)名稱(chēng)][參數(shù)值]:
設(shè)置參數(shù)值4)rosparamload[文件名稱(chēng)]:
從文件中加載參數(shù)到參數(shù)服務(wù)器5)rosparamdelete[參數(shù)名稱(chēng)]:
刪除參數(shù)ROS提供了rosparam命令行工具用于對(duì)參數(shù)進(jìn)行操作ROS計(jì)算圖六、消息記錄包
消息記錄包用于保存和回放ROS消息數(shù)據(jù),文件拓展名為.bag。消息記錄包可以獲取并記錄各種傳感器數(shù)據(jù),在沒(méi)有實(shí)際傳感器的情況下,可以通過(guò)回放消息記錄包獲取實(shí)驗(yàn)數(shù)據(jù),極大地方便了算法的開(kāi)發(fā)和測(cè)試。1)rosbagrecord/[主題名稱(chēng)]:
記錄指定主題的消息2)rosbaginfo[bag文件名]:
查看bag文件的信息3)rosbagplay[bag文件名]:
回放bag文件ROS提供了rosbag命令行工具,可以實(shí)現(xiàn)消息記錄包的記錄、播放和壓縮等,具體說(shuō)明如下:ROS計(jì)算圖七、rqt_graphrqt_graph能夠創(chuàng)建一個(gè)顯示當(dāng)前系統(tǒng)運(yùn)行情況的動(dòng)態(tài)圖形。ROS分布式系統(tǒng)中不同進(jìn)程需要進(jìn)行數(shù)據(jù)交互,計(jì)算圖可以以點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式展現(xiàn)數(shù)據(jù)交互過(guò)程。。rqt_graph顯示節(jié)點(diǎn)間的關(guān)系以下哪個(gè)指令可以查看ROS中的參數(shù)(
)rostopicrosparamrosservicerosrunABCD提交單選題1分THANKS感謝觀(guān)看第3章 ROS通信機(jī)制目錄contentsROS通信機(jī)制介紹ROS項(xiàng)目開(kāi)發(fā)流程話(huà)題通信機(jī)制服務(wù)通信機(jī)制參數(shù)服務(wù)器ROS通信機(jī)制介紹01CATALOGUEROS通信機(jī)制介紹話(huà)題(Topic)——異步通信機(jī)制節(jié)點(diǎn)間用來(lái)傳輸數(shù)據(jù)的重要總線(xiàn);使用發(fā)布/訂閱模型,數(shù)據(jù)由發(fā)布者傳輸?shù)接嗛喺?,同一個(gè)話(huà)題的訂閱者或發(fā)布者可以不唯一。消息(Message)——話(huà)題數(shù)據(jù)具有一定的類(lèi)型和數(shù)據(jù)結(jié)構(gòu),包括ROS提供的標(biāo)準(zhǔn)類(lèi)型和用戶(hù)自定義類(lèi)型;使用編程語(yǔ)言無(wú)關(guān)的.msg文件定義,編譯過(guò)程中生成對(duì)應(yīng)的代碼文件。ROS通信機(jī)制介紹服務(wù)(Service)——同步通信機(jī)制使用客戶(hù)端/服務(wù)器(C/S)模型,客戶(hù)端發(fā)送請(qǐng)求數(shù)據(jù),服務(wù)器完成處理后返回應(yīng)答數(shù)據(jù);使用編程語(yǔ)言無(wú)關(guān)的.srv文件定義請(qǐng)求和應(yīng)答數(shù)據(jù)結(jié)構(gòu),編譯過(guò)程中生成對(duì)應(yīng)的代碼文件。ROS通信機(jī)制介紹話(huà)題與服務(wù)的區(qū)別ROS通信機(jī)制介紹參數(shù)(Parameter)——全局共享字典可通過(guò)網(wǎng)絡(luò)訪(fǎng)問(wèn)的共享、多變量字典;節(jié)點(diǎn)使用此服務(wù)器來(lái)存儲(chǔ)和檢索運(yùn)行時(shí)的參數(shù);適合存儲(chǔ)靜態(tài)、非二進(jìn)制的配置參數(shù),不適合存儲(chǔ)動(dòng)態(tài)配置的數(shù)據(jù)。ROS項(xiàng)目開(kāi)發(fā)流程02CATALOGUEROS項(xiàng)目開(kāi)發(fā)流程ROS項(xiàng)目開(kāi)發(fā)過(guò)程,采用如下步驟:ROS項(xiàng)目開(kāi)發(fā)流程工作空間(workspace)是一個(gè)存放工程開(kāi)發(fā)相關(guān)文件的文件夾。src:代碼空間(SourceSpace)build:編譯空間(BuildSpace)devel:開(kāi)發(fā)空間(DevelopmentSpace)install:安裝空間(InstallSpace)ROS項(xiàng)目開(kāi)發(fā)流程創(chuàng)建工作空間編譯工作空間設(shè)置環(huán)境變量$mkdir-p~/catkin_ws/src$cd~/catkin_ws/src$catkin_init_workspace$cd~/catkin_ws/$catkin_make$sourcedevel/setup.bashROS項(xiàng)目開(kāi)發(fā)流程創(chuàng)建功能包編譯功能包$cd~/catkin_ws/src$catkin_create_pkglearning_communicationrospyroscppstd_msgsstd_srvs$cd~/catkin_ws$catkin_make$source~/catkin_ws/devel/setup.bash$catkin_create_pkg<package_name>[depend1][depend2][depend3]同一個(gè)工作空間下,不允許存在同名功能包
不同工作空間下,允許存在同名功能包話(huà)題通信機(jī)制03CATALOGUEROSTopic通信編程話(huà)題模型(發(fā)布者/訂閱者)ROSTopic通信編程分別編寫(xiě)發(fā)布者和訂閱者,實(shí)現(xiàn)發(fā)布方以10HZ(每秒10次)的頻率發(fā)布文本消息(“HelloWorld!”),訂閱方訂閱消息并將該消息內(nèi)容輸出至終端。1.編寫(xiě)發(fā)布者程序首先在前面章節(jié)創(chuàng)建的catkin_ws工作空間下,使用如下命令創(chuàng)建功能包和新建文件:cd~/catkin_ws/srccatkin_create_pkglearning_communicationroscpprospystd_msgsstd_srvscdlearning_communication/srcgeditstring_publisher.cppROSTopic通信編程如何實(shí)現(xiàn)一個(gè)發(fā)布者:1)初始化ROS節(jié)點(diǎn);2)向ROSMaster注冊(cè)節(jié)點(diǎn)信息,包括發(fā)布的話(huà)題名和話(huà)題中的消息類(lèi)型;3)創(chuàng)建消息數(shù)據(jù);4)按照一定頻率循環(huán)發(fā)布消息。ROSTopic通信編程如何實(shí)現(xiàn)一個(gè)訂閱者:1)初始化ROS節(jié)點(diǎn);2)訂閱需要的話(huà)題;3)循環(huán)等待話(huà)題消息,接收到消息后進(jìn)入回調(diào)函數(shù);4)在回調(diào)函數(shù)中完成消息處理。ROSTopic通信編程add_executable(string_publishersrc/string_publisher.cpp)target_link_libraries(string_publisher${catkin_LIBRARIES})add_executable(string_subscribersrc/string_subscriber.cpp)target_link_libraries(string_subscriber${catkin_LIBRARIES)ROSTopic通信編程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationstring_publisherrosrunlearning_communicationstring_subscriber自定義msg話(huà)題通信示例下面通過(guò)創(chuàng)建自定義消息,要求該消息包含人的信息:姓名、身高、年齡等。自定義msg話(huà)題通信示例下面通過(guò)創(chuàng)建自定義消息,要求該消息包含人的信息:姓名、身高、年齡等。1.按照固定格式創(chuàng)建msg文件在功能包下新建msg文件夾,新建文件PersonMsg.msg,并在該文件中寫(xiě)入如下信息:stringnameuint16agefloat64height注:這里使用的基礎(chǔ)數(shù)據(jù)類(lèi)型string、uint16、float64都是與編程語(yǔ)言無(wú)關(guān)的,編譯階段會(huì)變成各種語(yǔ)言對(duì)應(yīng)的數(shù)據(jù)類(lèi)型。自定義msg話(huà)題通信示例下面通過(guò)創(chuàng)建自定義消息,要求該消息包含人的信息:姓名、身高、年齡等。2.修改package.xml和CMakeLists.txt文件內(nèi)容在package.xml中添加功能包依賴(lài)<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>在CMakeLists.txt添加編譯選項(xiàng)find_package(……message_generation)add_message_files(FILESPersonMsg.msg)generate_messages(DEPENDENCIESstd_msgs)catkin_package(……message_runtime)自定義msg話(huà)題通信示例下面通過(guò)創(chuàng)建自定義消息,要求該消息包含人的信息:姓名、身高、年齡等。如何實(shí)現(xiàn)一個(gè)發(fā)布者:1)初始化ROS節(jié)點(diǎn);2)向ROSMaster注冊(cè)節(jié)點(diǎn)信息,包括發(fā)布的話(huà)題名和話(huà)題中的消息類(lèi)型;3)創(chuàng)建消息數(shù)據(jù);4)按照一定頻率循環(huán)發(fā)布消息。自定義msg話(huà)題通信示例下面通過(guò)創(chuàng)建自定義消息,要求該消息包含人的信息:姓名、身高、年齡等。如何實(shí)現(xiàn)一個(gè)訂閱者:1)初始化ROS節(jié)點(diǎn);2)訂閱需要的話(huà)題;3)循環(huán)等待話(huà)題消息,接收到消息后進(jìn)入回調(diào)函數(shù);4)在回調(diào)函數(shù)中完成消息處理。ROSTopic通信編程add_executable(person_publishersrc/person_publisher.cpp)target_link_libraries(person_publisher${catkin_LIBRARIES})add_dependencies(person_publisher${PROJECT_NAME}_gencpp)add_executable(person_subscribersrc/person_subscriber.cpp)target_link_libraries(person_subscriber${catkin_LIBRARIES})add_dependencies(person_subscriber${PROJECT_NAME}_gencpp)ROSTopic通信編程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationperson_publisherrosrunlearning_communicationperson_subscriberROS中自定義msg時(shí),字符串用哪個(gè)(
)定義。uint32stringfloat64uint16ABCD提交單選題1分服務(wù)通信機(jī)制04CATALOGUEROS服務(wù)通信編程服務(wù)模型(服務(wù)端/客戶(hù)端)ROS服務(wù)通信編程分別編寫(xiě)服務(wù)端和客戶(hù)端,實(shí)現(xiàn)文本消息(“HelloROS!”)服務(wù)通信的過(guò)程。1.編寫(xiě)服務(wù)端程序首先在前面章節(jié)創(chuàng)建的catkin_ws工作空間下,使用如下命令創(chuàng)建功能包和新建文件:cd~/catkin_ws/srccatkin_create_pkglearning_communicationroscpprospystd_msgsstd_srvscdlearning_communication/srcgeditstring_server.cppROS服務(wù)通信編程如何實(shí)現(xiàn)一個(gè)服務(wù)器:1)初始化ROS節(jié)點(diǎn);2)創(chuàng)建Server實(shí)例;3)循環(huán)等待服務(wù)請(qǐng)求,進(jìn)入回調(diào)函數(shù);4)在回調(diào)函數(shù)中完成服務(wù)功能的處理,并反饋應(yīng)答數(shù)據(jù)。ROS服務(wù)通信編程如何實(shí)現(xiàn)一個(gè)客戶(hù)端:1)初始化ROS節(jié)點(diǎn);2)創(chuàng)建一個(gè)Client實(shí)例;3)發(fā)布服務(wù)請(qǐng)求數(shù)據(jù);4)等待Server處理之后的應(yīng)答結(jié)果。ROS服務(wù)通信編程add_executable(string_serversrc/string_server.cpp)target_link_libraries(string_server${catkin_LIBRARIES})add_executable(string_clientsrc/string_client.cpp)target_link_libraries(string_client${catkin_LIBRARIES})ROS服務(wù)通信編程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationstring_serverrosrunlearning_communicationstring_client1.按照固定格式創(chuàng)建srv文件在功能包下新建srv文件夾,新建文件AddTwoInts.srv,并在該文件中寫(xiě)入如下信息:#客戶(hù)端請(qǐng)求時(shí)發(fā)送的兩個(gè)數(shù)字int32num1int32num2---#服務(wù)器響應(yīng)發(fā)送的數(shù)據(jù)int32sum自定義srv服務(wù)通信示例自定義srv服務(wù)通信示例本例中,客戶(hù)端提交兩個(gè)整數(shù)至服務(wù)端,服務(wù)端接收請(qǐng)求后完成求和運(yùn)算,并返回結(jié)果到客戶(hù)端。自定義srv服務(wù)通信示例自定義srv服務(wù)通信示例2.修改package.xml和CMakeLists.txt文件內(nèi)容在package.xml中添加功能包依賴(lài)<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>在CMakeLists.txt添加編譯選項(xiàng)find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgsstd_srvsmessage_generation)#需要加入message_generation,必須有std_msgsadd_service_files(FILESAddTwoInts.srv)generate_messages(DEPENDENCIESstd_msgs)3.編譯生成中間文件自定義srv服務(wù)通信示例自定義srv服務(wù)通信示例如何實(shí)現(xiàn)一個(gè)服務(wù)器(AddTwoInts_Server.cpp):1)初始化ROS節(jié)點(diǎn);2)創(chuàng)建Server實(shí)例;3)循環(huán)等待服務(wù)請(qǐng)求,進(jìn)入回調(diào)函數(shù);4)在回調(diào)函數(shù)中完成服務(wù)功能的處理,并反饋應(yīng)答數(shù)據(jù)。自定義srv服務(wù)通信示例自定義srv服務(wù)通信示例如何實(shí)現(xiàn)一個(gè)客戶(hù)端(AddTwoInts_Client.cpp):1)初始化ROS節(jié)點(diǎn);2)創(chuàng)建一個(gè)Client實(shí)例;3)發(fā)布服務(wù)請(qǐng)求數(shù)據(jù);4)等待Server處理之后的應(yīng)答結(jié)果。自定義srv服務(wù)通信示例add_executable(AddTwoInts_Serversrc/AddTwoInts_Server.cpp)target_link_libraries(AddTwoInts_Server${catkin_LIBRARIES})add_dependencies(AddTwoInts_Server${PROJECT_NAME}_gencpp)add_executable(AddTwoInts_Clientsrc/AddTwoInts_Client.cpp)target_link_libraries(AddTwoInts_Client${catkin_LIBRARIES})add_dependencies(AddTwoInts_Client${PROJECT_NAME}_gencpp)CMakeLists.txt配置文件自定義srv服務(wù)通信示例cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationAddTwoInts_Serverrosrunlearning_communicationAddTwoInts_Client12ROS中自定義服務(wù)的文件夾名稱(chēng)為(
)msgsrvlaunchrossrvABCD提交單選題1分參數(shù)服務(wù)器05CATALOGUE參數(shù)服務(wù)器也可以說(shuō)是特殊的“通信方式”。參數(shù)服務(wù)器在ROS中主要用于實(shí)現(xiàn)不同節(jié)點(diǎn)之間的數(shù)據(jù)共享。參數(shù)服務(wù)器的維護(hù)方式非常的簡(jiǎn)單靈活,總的來(lái)講有三種方式:命令行參數(shù)設(shè)置、launch文件內(nèi)讀寫(xiě)和node源碼。參數(shù)服務(wù)器參數(shù)服務(wù)器機(jī)制1.命令行參數(shù)設(shè)置使用命令行來(lái)設(shè)置參數(shù)服務(wù),主要通過(guò)rosparam命令來(lái)進(jìn)行各種操作設(shè)置。rosparam能夠存儲(chǔ)并操作ROS參數(shù)服務(wù)器(ParameterServer)上的數(shù)據(jù)。參數(shù)服務(wù)器能夠存儲(chǔ)整型、浮點(diǎn)、布爾、字符串、字典和列表等數(shù)據(jù)類(lèi)型。參數(shù)服務(wù)器rosparam命令rosparam命令作用rosparamsetparam_keyparam_value設(shè)置參數(shù)rosparamgetparam_key顯示參數(shù)rosparamloadfile_name從文件加載參數(shù)rosparamdumpfile_name保存參數(shù)到文件rosparamdelete刪除參數(shù)rosparamlist列出參數(shù)名稱(chēng)2.launch文件內(nèi)讀寫(xiě)參數(shù)launch文件中有很多標(biāo)簽,而與參數(shù)服務(wù)器相關(guān)的標(biāo)簽只有兩個(gè),一個(gè)是<param>,另一個(gè)是<rosparam>。示例如下:參數(shù)服務(wù)器<!--直接定義參數(shù)并賦值--><paramname="velodyne_frame_id"type="string"value="velodyne"/><!--定義參數(shù)并通過(guò)arg給參數(shù)賦值--><argname="velodyne_frame_id"default="velodyne"/><paramname="velodyne_frame_id"type="string"value="$(argvelodyne_frame_id)"/>3.節(jié)點(diǎn)源碼內(nèi)進(jìn)行讀寫(xiě)參數(shù)除了上述最常用的兩種讀寫(xiě)參數(shù)服務(wù)器的方法,還有一種就是修改ROS的源碼,也就是利用API來(lái)對(duì)參數(shù)服務(wù)器進(jìn)行操作。C++節(jié)點(diǎn)中實(shí)現(xiàn)參數(shù)服務(wù)器的讀寫(xiě)有兩套API系統(tǒng)。參數(shù)服務(wù)器(1)ros::NodeHandle,該方式的示例如下:
//創(chuàng)建ros節(jié)點(diǎn)句柄ros::NodeHandlenh;stringnode_param;std::vector<std::string>param_names;
//新增參數(shù)到參數(shù)服務(wù)器中nh.setParam("param_1",1.0);nh.param<std::string>("param_2",node_param,"hahaha");參數(shù)服務(wù)器(2)ros::param,相關(guān)示例如下:
stringnode_param;std::vector<std::string>param_names;ros::param::set("param_1",1.0);node_param=ros::param::param("param_2","hahaha");//其他功能ros::param::getParamNames(param_names);ros::param::has("param_2");ros::param::search("param_2",node_param);課程作業(yè)使用海龜仿真器,完成以下編程作業(yè):1.創(chuàng)建一個(gè)節(jié)點(diǎn),在其中實(shí)現(xiàn)一個(gè)訂閱者和一個(gè)發(fā)布者,完成以下功能:
發(fā)布者:發(fā)布海龜速度指令,讓海龜圓周運(yùn)動(dòng)
訂閱者:訂閱海龜?shù)奈恢眯畔ⅲ⒃诮K端中周期打印輸出2.創(chuàng)建另外一個(gè)節(jié)點(diǎn),在其中實(shí)現(xiàn)一個(gè)客戶(hù)端,完成以下功能:
客戶(hù)端:請(qǐng)求海龜誕生的服務(wù),在仿真器中產(chǎn)生一只新的海龜THANKS感謝觀(guān)看第4章 ROS運(yùn)行管理目錄contentsROS節(jié)點(diǎn)運(yùn)行管理ROS工作空間覆蓋ROS節(jié)點(diǎn)重名ROS話(huà)題名稱(chēng)設(shè)置ROS參數(shù)名稱(chēng)設(shè)置Launch文件綜合案例ROS節(jié)點(diǎn)運(yùn)行管理01CATALOGUEROS節(jié)點(diǎn)運(yùn)行管理ROS使用多進(jìn)程(節(jié)點(diǎn))的分布式框架,一個(gè)完整的ROS系統(tǒng)可能出現(xiàn)如下情形:
可能包含多臺(tái)主機(jī);每臺(tái)主機(jī)上有多個(gè)工作空間;每個(gè)工作空間中又包含多個(gè)功能包;每個(gè)功能包包含多個(gè)節(jié)點(diǎn),不同的節(jié)點(diǎn)都有自己的節(jié)點(diǎn)名稱(chēng);每個(gè)節(jié)點(diǎn)可能還會(huì)設(shè)置一個(gè)或多個(gè)話(huà)題。ROS節(jié)點(diǎn)運(yùn)行管理—launch文件launch文件是一個(gè)XML格式的文件,可以啟動(dòng)本地和遠(yuǎn)程的多個(gè)節(jié)點(diǎn),還可以在參數(shù)服務(wù)器中設(shè)置參數(shù)。其作用是簡(jiǎn)化節(jié)點(diǎn)的配置與啟動(dòng),提高ROS程序的啟動(dòng)效率。
<launch><nodepkg="learning_communication"type="person_subscriber"name="talker"/><nodepkg="learning_communication"type="person_publisher"name="listener"/></launch>調(diào)用launch文件新建launch文件roslaunchlearning_launchdemo.launch注意:roslaunch命令執(zhí)行l(wèi)aunch文件時(shí),首先會(huì)判斷是否啟動(dòng)了roscore。如果已經(jīng)啟動(dòng),則不再啟動(dòng),否則,會(huì)自動(dòng)調(diào)用roscore。launch文件標(biāo)簽<launch>標(biāo)簽是所有l(wèi)aunch文件的根標(biāo)簽,充當(dāng)其他標(biāo)簽的容器,文件中的其他內(nèi)容都必須放在這個(gè)標(biāo)簽中。<node>標(biāo)簽用于指定ROS節(jié)點(diǎn),是最常見(jiàn)的標(biāo)簽,需要注意的是roslaunch命令不能保證按照node的聲明順序來(lái)啟動(dòng)節(jié)點(diǎn)(節(jié)點(diǎn)的啟動(dòng)是多進(jìn)程的)。1.屬性pkg=“包名”:節(jié)點(diǎn)所在的功能包名稱(chēng)type="nodeType":節(jié)點(diǎn)的可執(zhí)行文件名稱(chēng)name="nodeName":節(jié)點(diǎn)運(yùn)行時(shí)的名稱(chēng)(在ROS網(wǎng)絡(luò)拓?fù)渲泄?jié)點(diǎn)的名稱(chēng))args="xxxxxxxxx"(可選):將參數(shù)傳遞給節(jié)點(diǎn)2.子級(jí)標(biāo)簽env環(huán)境變量設(shè)置remap重映射節(jié)點(diǎn)名稱(chēng)rosparam參數(shù)設(shè)置param參數(shù)設(shè)置launch文件標(biāo)簽<include>標(biāo)簽用于將另一個(gè)xml格式的launch文件導(dǎo)入到當(dāng)前文件中,類(lèi)似C語(yǔ)言中的頭文件包含。1.屬性file="$(find功能包名)/xxx/xxx.launch":要包含的文件路徑ns="xxx"(可選):在指定命名空間導(dǎo)入文件2.子級(jí)標(biāo)簽env環(huán)境變量設(shè)置arg將參數(shù)傳遞給被包含的文件launch文件標(biāo)簽<remap>標(biāo)簽用于重映射ROS計(jì)算圖資源的命名。用戶(hù)不需要修改已有功能包的接口,只需要將接口名稱(chēng)重映射,取一個(gè)別名,這樣系統(tǒng)就能識(shí)別該接口。屬性from="xxx":原命名to="yyy":映射之后的命名比如turtlebot的鍵盤(pán)控制節(jié)點(diǎn)發(fā)布速度指令話(huà)題是/turtlebot/cmd_vel,但是如果當(dāng)前機(jī)器人訂閱的速度控制話(huà)題是/cmd_vel,這時(shí)使用<remap>就可以輕松解決問(wèn)題,實(shí)現(xiàn)代碼如下:<remapfrom="/turtelbot/cmd_vel"to="/cmd_vel"/>launch文件標(biāo)簽<param>標(biāo)簽主要用來(lái)在參數(shù)服務(wù)器上設(shè)置參數(shù),參數(shù)源可以在標(biāo)簽中通過(guò)value指定,也可以通過(guò)外部文件加載,在<node>標(biāo)簽中時(shí),相當(dāng)于私有命名空間。launch文件執(zhí)行后,參數(shù)值就加載到ROS的參數(shù)服務(wù)器上。屬性name="命名空間/參數(shù)名":參數(shù)名稱(chēng),可以包含命名空間value="xxx"(可選):定義參數(shù)值,如果此處省略,必須指定外部文件作為參數(shù)源type="str|int|double|bool|yaml"(可選):指定參數(shù)類(lèi)型,如果未指定,roslaunch會(huì)嘗試確定參數(shù)類(lèi)型launch文件標(biāo)簽<rosparam>標(biāo)簽可以將YAML格式文件中的參數(shù)全部導(dǎo)入到ROS參數(shù)服務(wù)器中,或?qū)?shù)導(dǎo)出到Y(jié)AML文件,也可以用來(lái)刪除參數(shù),<rosparam>標(biāo)簽在<node>標(biāo)簽中時(shí)被視為私有標(biāo)簽。屬性command="load|dump|delete"(可選,默認(rèn)load):加載、導(dǎo)出或刪除參數(shù)file="$(findxxxxx)/xxx/yyy....":加載或?qū)С龅降膟aml文件param="參數(shù)名稱(chēng)"ns="命名空間"(可選)launch文件標(biāo)簽<arg>標(biāo)簽是用于動(dòng)態(tài)傳參,類(lèi)似于函數(shù)的參數(shù),僅限于launch文件使用,便于launch文件的重構(gòu),與ROS節(jié)點(diǎn)內(nèi)部的實(shí)現(xiàn)沒(méi)有關(guān)系。1.屬性name="參數(shù)名稱(chēng)":default="默認(rèn)值"(可選)value="數(shù)值"(可選):不可以與default并存doc="描述":參數(shù)說(shuō)明2.示例設(shè)置argument使用<arg>標(biāo)簽元素,語(yǔ)法如下:<argname="arg-name"default="arg-value"/>launch文件中需要使用argument時(shí),可以使用如下方式調(diào)用:<paramname="foo"value="$(argarg-name)"/><nodename="node"pkg="package"type="type"args="$(argarg-name)"/>ROS工作空間覆蓋02CATALOGUEROS工作空間覆蓋所謂工作空間覆蓋,是指在不同工作空間中,存在同名功能包的情形。(1)新建工作空間A與工作空間B,兩個(gè)工作空間中都創(chuàng)建turtlesim功能包。(2)在~/.bashrc文件下追加當(dāng)前工作空間的bash格式如下:source/home/用戶(hù)/路徑/工作空間A/devel/setup.bashsource/home/用戶(hù)/路徑/工作空間B/devel/setup.bash(3)在終端中輸入命令source.bashrc,加載環(huán)境變量。(4)查看ROS環(huán)境環(huán)境變量echo$ROS_PACKAGE_PATH。結(jié)果:自定義工作空間B:自定義空間A:系統(tǒng)內(nèi)置空間(5)使用命令roscdturtlesim,則此時(shí)會(huì)進(jìn)入自定義工作空間B。出現(xiàn)上述結(jié)果的原因如下:設(shè)置時(shí)需要遵循一定的原則:ROS_PACKAGE_PATH中的值和.bashrc的配置順序相反--->后配置的優(yōu)先級(jí)更高。ROS節(jié)點(diǎn)重名03CATALOGUEROS節(jié)點(diǎn)重名場(chǎng)景:ROS中創(chuàng)建的節(jié)點(diǎn)是有名稱(chēng)的,C++初始化節(jié)點(diǎn)時(shí)通過(guò)API:ros::init(argc,argv,"xxxx")來(lái)定義節(jié)點(diǎn)名稱(chēng),在Python中初始化節(jié)點(diǎn)則通過(guò)rospy.init_node("yyyy")來(lái)定義節(jié)點(diǎn)名稱(chēng)。在ROS的網(wǎng)絡(luò)拓?fù)渲校遣豢梢猿霈F(xiàn)重名的節(jié)點(diǎn)的,在ROS中如果啟動(dòng)重名節(jié)點(diǎn)的話(huà),之前已經(jīng)存在的節(jié)點(diǎn)會(huì)被直接關(guān)閉。[WARN][1578812836.351049332]:Shutdownrequestreceived.[WARN][1578812836.351207362]:Reasongivenforshutdown:[newnoderegisteredwithsamename]rosrun設(shè)置命名空間與重映射1.rosrun設(shè)置命名空間語(yǔ)法:rosrun功能包名
節(jié)點(diǎn)名__ns:=新名稱(chēng)rosrunturtlesimturtlesim_node__ns:=/xxxrosrunturtlesimturtlesim_node__ns:=/yyy這時(shí)會(huì)發(fā)現(xiàn)兩個(gè)節(jié)點(diǎn)都可以正常運(yùn)行。再通過(guò)運(yùn)行rosnodelist查看節(jié)點(diǎn)信息,顯示結(jié)果為:/xxx/turtlesim/yyy/turtlesimrosrun設(shè)置命名空間與重映射3.rosrun命名空間與名稱(chēng)重映射疊加語(yǔ)法:rosrun功能包名
節(jié)點(diǎn)名__ns:=新名稱(chēng)__name:=新名稱(chēng)具體案例如下:rosrunturtlesimturtlesim_node__ns:=/xxx__name:=tn運(yùn)行rosnodelist查看節(jié)點(diǎn)信息,其顯示結(jié)果為:/xxx/tn2.rosrun名稱(chēng)重映射名稱(chēng)重映射即為節(jié)點(diǎn)起別名,其語(yǔ)法格式為:rosrun功能包名
節(jié)點(diǎn)名__name:=新名稱(chēng)具體案例:rosrunturtlesimturtlesim_node__name:=turtle1或rosrunturtlesimturtlesim_node/turtlesim:=turtle1rosrunturtlesimturtlesim_node__name:=turtle2或rosrunturtlesimturtlesim_node/turtlesim:=turtle2同樣兩個(gè)節(jié)點(diǎn)都可以運(yùn)行,使用rosnodelist查看節(jié)點(diǎn)信息,結(jié)果如下:/turtle1/turtle2launch文件設(shè)置命名空間與重映射前面章節(jié)介紹launch文件的使用語(yǔ)法時(shí),在<node>標(biāo)簽中有兩個(gè)屬性:name和ns,二者分別是用于實(shí)現(xiàn)名稱(chēng)重映射與命名空間設(shè)置的。使用launch文件方式來(lái)設(shè)置命名空間與名稱(chēng)重映射相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。下面是launch文件設(shè)置命名空間與名稱(chēng)重映射的示例。<launch><nodepkg="turtlesim"type="turtlesim_node"name="turtle1"/><nodepkg="turtlesim"type="turtlesim_node"name="turtle2"/><nodepkg="turtlesim"type="turtlesim_node"name="turtle1"ns="hello"/></launch>在<node>標(biāo)簽中,name屬性是必須要的,而ns可選。運(yùn)行上述launch文件后,使用rosnodelist命令查看節(jié)點(diǎn)信息,則顯示結(jié)果為:/turtle1/turtle2/turtle1/hello編碼設(shè)置命名空間與重映射如果使用自定義節(jié)點(diǎn)實(shí)現(xiàn)方式,那么可以更靈活地設(shè)置命名空間與重映射。1.C++實(shí)現(xiàn)重映射核心代碼為:ros::init(argc,argv,"zhangsan",ros::init_options::AnonymousName);2.C++實(shí)現(xiàn)命名空間核心代碼如下:std::map<std::string,std::string>map;map["__ns"]="xxxx";ros::init(map,"wangqiang");3.Python實(shí)現(xiàn)重映射核心代碼:rospy.init_node("lisi",anonymous=True)ros話(huà)題名稱(chēng)設(shè)置04CATALOGUEros話(huà)題名稱(chēng)設(shè)置在ROS中節(jié)點(diǎn)名稱(chēng)可能出現(xiàn)相同名字的情況,同理,話(huà)題名稱(chēng)也可能重名。
解決策略與節(jié)點(diǎn)名稱(chēng)重名類(lèi)似,也是使用名稱(chēng)重映射或?yàn)槊Q(chēng)添加前綴。根據(jù)前綴不同,話(huà)題名稱(chēng)可以分為全局、相對(duì)、和私有三種類(lèi)型。全局(參數(shù)名稱(chēng)直接參考ROS系統(tǒng),與節(jié)點(diǎn)命名空間平級(jí))相對(duì)(參數(shù)名稱(chēng)參考的是節(jié)點(diǎn)的命名空間,與節(jié)點(diǎn)名稱(chēng)平級(jí))私有(參數(shù)名稱(chēng)參考節(jié)點(diǎn)名稱(chēng),是節(jié)點(diǎn)名稱(chēng)的子級(jí))名稱(chēng)重映射是為名稱(chēng)起別名,為名稱(chēng)添加前綴,實(shí)現(xiàn)起來(lái)比節(jié)點(diǎn)重名更復(fù)雜一點(diǎn),不單是使用命名空間作為前綴、還可以使用節(jié)點(diǎn)名稱(chēng)做為前綴。兩種策略的實(shí)現(xiàn)有以下三種途徑:1)rosrun命令;2)launch文件;3)編碼實(shí)現(xiàn)。rosrun設(shè)置話(huà)題重映射rosrun名稱(chēng)重映射語(yǔ)法:rorun功能包名
節(jié)點(diǎn)名
話(huà)題名:=新話(huà)題名稱(chēng)實(shí)現(xiàn)teleop_twist_keyboard命令與小海龜顯示節(jié)點(diǎn)通信方案有以下兩種。1.方案一將teleop_twist_keyboard節(jié)點(diǎn)的話(huà)題設(shè)置為/turtle1/cmd_vel啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn):rosrunteleop_twist_keyboardteleop_twist_keyboard.py/cmd_vel:=/turtle1/cmd_vel啟動(dòng)小海龜顯示節(jié)點(diǎn):rosrunturtlesimturtlesim_node則二者可以實(shí)現(xiàn)正常通信。2.方案二將小海龜顯示節(jié)點(diǎn)的話(huà)題設(shè)置為/cmd_vel啟動(dòng)鍵盤(pán)控制節(jié)點(diǎn):rosrunteleop_twist_keyboardteleop_twist_keyboard.py啟動(dòng)小海龜顯示節(jié)點(diǎn):rosrunturtlesimturtlesim_node/turtle1/cmd_vel:=/cmd_vel則二者同樣可以實(shí)現(xiàn)正常通信。launch文件設(shè)置話(huà)題重映射launch文件設(shè)置話(huà)題重映射語(yǔ)法如下:<nodepkg="xxx"type="xxx"name="xxx"><remapfrom="原話(huà)題"to="新話(huà)題"/></node>實(shí)現(xiàn)teleop_twist_keyboard節(jié)點(diǎn)與小海龜顯示節(jié)點(diǎn)通信方案有以下兩種。1.方案一將teleop_twist_keyboard節(jié)點(diǎn)的話(huà)題設(shè)置為/turtle1/cmd_vel<launch><nodepkg="turtlesim"type="turtlesim_node"name="t1"/><nodepkg="teleop_twist_keyboard"type="teleop_twist_keyboard.py"name="key"><remapfrom="/cmd_vel"to="/turtle1/cmd_vel"/></node></launch>這樣可以實(shí)現(xiàn)二者的正常通信。launch文件設(shè)置話(huà)題重映射2.方案二將小海龜顯示節(jié)點(diǎn)的話(huà)題設(shè)置為/cmd_vel<launch><nodepkg="turtlesim"type="turtlesim_node"name="t1"><remapfrom="/turtle1/cmd_vel"to="/cmd_vel"/></node><nodepkg="teleop_twist_keyboard"type="teleop_twist_keyboard.py"name="key"/></launch>同樣可以實(shí)現(xiàn)二者的正常通信。編碼設(shè)置話(huà)題重映射演示準(zhǔn)備:(1)初始化節(jié)點(diǎn),設(shè)置一個(gè)節(jié)點(diǎn)名稱(chēng);ros::init(argc,argv,"hello")(2)設(shè)置不同類(lèi)型的話(huà)題。(3)啟動(dòng)節(jié)點(diǎn)時(shí),傳遞一個(gè)__ns:=xxx。(4)節(jié)點(diǎn)啟動(dòng)后,使用rostopic查看話(huà)題信息。1)全局名稱(chēng)格式:以“/”開(kāi)頭的名稱(chēng),和節(jié)點(diǎn)名稱(chēng)無(wú)關(guān)比如:/xxx/yyy/zzz示例1:ros::Publisherpub=nh.advertise<std_msgs::String>("/chatter",1000);結(jié)果1:/chatter示例2:ros::Publisherpub=nh.advertise<std_msgs::String>("/chatter/money",1000);結(jié)果2:/chatter/money編碼設(shè)置話(huà)題重映射2)相對(duì)名稱(chēng)格式:非“/”開(kāi)頭的名稱(chēng),參考命名空間(與節(jié)點(diǎn)名稱(chēng)平級(jí))來(lái)確定話(huà)題名稱(chēng)示例1:ros::Publisherpub=nh.advertise<std_msgs::String>("chatter",1000);結(jié)果1:xxx/chatter示例2:ros::Publisherpub=nh.advertise<std_msgs::String>("chatter/money",1000);結(jié)果2:xxx/chatter/money編碼設(shè)置話(huà)題重映射3)私有名稱(chēng)格式:以“~”開(kāi)頭的名稱(chēng)示例1:ros::NodeHandlenh("~");ros::Publisherpub=nh.advertise<std_msgs::String>("chatter",1000);結(jié)果1:/xxx/hello/chatter示例2:ros::NodeHandlenh("~");ros::Publisherpub=nh.advertise<std_msgs::String>("chatter/money",1000);結(jié)果2:/xxx/hello/chatter/money注:當(dāng)使用“~”,而話(huà)題名稱(chēng)又以“/”開(kāi)頭時(shí),那么話(huà)題名稱(chēng)是絕對(duì)的ros參數(shù)名稱(chēng)設(shè)置05CATALOGUEros參數(shù)名稱(chēng)設(shè)置
在ROS中的節(jié)點(diǎn)名稱(chēng)、話(huà)題名稱(chēng)可能出現(xiàn)同名的情況,同理,參數(shù)名稱(chēng)也可能重名。
為了避免參數(shù)重名,通常都是采用為參數(shù)名添加前綴的方式,其實(shí)現(xiàn)方式類(lèi)似于話(huà)題名稱(chēng),有全局、相對(duì)和私有三種類(lèi)型。
全局(參數(shù)名稱(chēng)直接參考ROS系統(tǒng),與節(jié)點(diǎn)命名空間平級(jí));
相對(duì)(參數(shù)名稱(chēng)參考的是節(jié)點(diǎn)的命名空間,與節(jié)點(diǎn)名稱(chēng)平級(jí));
私有(參數(shù)名稱(chēng)參考節(jié)點(diǎn)名稱(chēng),是節(jié)點(diǎn)名稱(chēng)的子級(jí))。
設(shè)置參數(shù)的方式同樣有三種方式:rosrun命令、launch文件、編碼實(shí)現(xiàn)。rosrun設(shè)置參數(shù)rosrun在啟動(dòng)節(jié)點(diǎn)時(shí),也可以設(shè)置參數(shù)。語(yǔ)法:rosrun功能包名
節(jié)點(diǎn)名稱(chēng)_參數(shù)名:=參數(shù)值啟動(dòng)小海龜顯示節(jié)點(diǎn),并設(shè)置參數(shù)A=100,語(yǔ)句為:rosrunturtlesimturtlesim_node_A:=100通
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年天津市河西區(qū)衛(wèi)生健康系統(tǒng)公開(kāi)招聘事業(yè)單位工作人員備考題庫(kù)及參考答案詳解一套
- 2026年中色國(guó)際礦業(yè)股份有限公司招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 2026年年廈門(mén)市翔安區(qū)實(shí)驗(yàn)學(xué)校公開(kāi)招聘非在編合同教師補(bǔ)充備考題庫(kù)及答案詳解一套
- 2026年北京石油學(xué)院附屬實(shí)驗(yàn)小學(xué)招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2026年嘉興市海寧中學(xué)代課教師招聘?jìng)淇碱}庫(kù)附答案詳解
- 2026年國(guó)家電投集團(tuán)數(shù)字科技有限公司招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2026年三亞海洋旅游發(fā)展有限公司招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2026年南寧市國(guó)土資源檔案館公開(kāi)招聘編制外工作人員備考題庫(kù)及參考答案詳解1套
- 2026年多崗招人蜀道集團(tuán)直屬子公司招聘→備考題庫(kù)及參考答案詳解
- 2026年寧波市軌道交通物產(chǎn)置業(yè)有限公司下屬項(xiàng)目公司社會(huì)招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 中醫(yī)骨科適宜技術(shù)
- 空間計(jì)算發(fā)展報(bào)告(2024年)-元宇宙標(biāo)準(zhǔn)化工作組
- 2025《混凝土攪拌站勞動(dòng)合同》
- 售樓部裝飾設(shè)計(jì)合同協(xié)議
- 煤礦皮帶輸送機(jī)跑偏原因和處理方法
- 創(chuàng)傷后應(yīng)激障礙的心理護(hù)理
- 血管緊張素轉(zhuǎn)換酶抑制劑在心血管疾病防治中應(yīng)用的專(zhuān)家共識(shí)解讀
- 醫(yī)療項(xiàng)目年度總結(jié)模板
- 2025中級(jí)消防設(shè)施操作員作業(yè)考試題及答案(1000題)
- 人教版小學(xué)科學(xué)六年級(jí)上冊(cè)全冊(cè)教案
- 2024-2025學(xué)年上學(xué)期上海六年級(jí)英語(yǔ)期末復(fù)習(xí)卷3
評(píng)論
0/150
提交評(píng)論