版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ROS概述汽車計算機基礎(chǔ)一、課程導(dǎo)入近年來機器人領(lǐng)域持續(xù)升溫,涌現(xiàn)出了一大批機器人產(chǎn)品,像機器狗、無人機、無人車、各式各樣的服務(wù)機器人、聊天機器人。在許多機器人背后都用到了一個共同的軟件平臺,那就是機器人操作系統(tǒng)(RobotOperatingSystem,ROS)。ROS好比機器人的中樞神經(jīng)系統(tǒng),這個系統(tǒng)把原本松散的功能模塊耦合在了一起,為他們提供了通信架構(gòu)。這樣機器人的各個零部件就可以協(xié)同工作,完成更為復(fù)雜的任務(wù)了。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)一、課程導(dǎo)入ROS是什么?為什么使用ROS?ROS節(jié)點之間是如何相互通信的呢?ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)二、ROS簡介2.1ROS的誕生與發(fā)展(1)ROS誕生背景機器人是一種高度復(fù)雜的系統(tǒng)性實現(xiàn),機器人設(shè)計包含了機械加工、機械結(jié)構(gòu)設(shè)計、硬件設(shè)計、嵌入式軟件設(shè)計、上層軟件設(shè)計....是各種硬件與軟件集成,甚至可以說機器人系統(tǒng)是當今工業(yè)體系的集大成者。機器人體系是相當龐大的,其復(fù)雜度之高,以至于沒有任何個人、組織甚至公司能夠獨立完成系統(tǒng)性的機器人研發(fā)工作。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)二、ROS簡介2.1ROS的誕生與發(fā)展(1)ROS誕生背景在此大背景下,于2007年,一家名為柳樹車庫(WillowGarage)的機器人公司發(fā)布了ROS(機器人操作系統(tǒng)),ROS是一套機器人通用軟件框架,可以提升功能模塊的復(fù)用性,并且隨著該系統(tǒng)的不斷迭代與完善,如今ROS已經(jīng)成為機器人領(lǐng)域的事實標準。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)二、ROS簡介2.1ROS的誕生與發(fā)展(2)ROS的發(fā)展歷程ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)二、ROS簡介2.2ROS的概念ROS全稱RobotOperatingSystem(機器人操作系統(tǒng))。ROS是適用于機器人的開源元操作系統(tǒng)。ROS集成了大量的工具,庫,協(xié)議,提供類似OS所提供的功能,簡化對機器人的控制。還提供了用于在多臺計算機上獲取,構(gòu)建,編寫和運行代碼的工具和庫,ROS在某些方面類似于“機器人框架”。ROS設(shè)計者將ROS表述為“ROS=Plumbing+Tools+Capabilities+Ecosystem”,即ROS是通訊機制、工具軟件包、機器人高層技能以及機器人生態(tài)系統(tǒng)的集合體。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)二、ROS簡介2.3ROS的設(shè)計目標機器人開發(fā)的分工思想,實現(xiàn)了不同研發(fā)團隊間的共享和協(xié)作,提升了機器人的研發(fā)效率,為了服務(wù)“分工”,ROS主要設(shè)計了如下目標:代碼復(fù)用分布式松耦合精簡語言獨立性易于測試大型應(yīng)用豐富的組件化工具包、免費且開源ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗3.1ROS的安裝我們使用的是ROS版本是Noetic,那么可以在ubuntu20.04、Mac或windows10系統(tǒng)上安裝,雖然一般用戶平時使用的操作系統(tǒng)以windows居多,但是ROS之前的版本基本都不支持windows,所以當前我們選用的操作系統(tǒng)是ubuntu,以方便向歷史版本過渡。ubuntu安裝常用方式有兩種:實體機安裝ubuntu,可以保證性能,且不需要考慮硬件兼容性問題,但是和windows系統(tǒng)交互不便。虛擬機安裝ubuntu,可以方便的實現(xiàn)windows與ubuntu交互,不過性能稍差,且與硬件交互不便。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗3.1ROS的安裝如果采用虛擬機安裝ubuntu,再安裝ROS的話,大致流程如下:①安裝虛擬機軟件(比如:virtualbox或VMware);②使用虛擬機軟件虛擬一臺主機;③在虛擬主機上安裝ubuntu20.04;④在ubuntu上安裝ROS;⑤測試ROS環(huán)境是否可以正常運行。虛擬機軟件選擇上,對于我們學(xué)習(xí)而言virtualbox和VMware都可以滿足需求。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗3.2ROS體驗ROS中涉及的編程語言以C++和Python為主,ROS中的大多數(shù)程序兩者都可以實現(xiàn),在本課程中,案例使用C++的方案演示。ROS中的程序即便使用不同的編程語言,實現(xiàn)流程也大致類似,以當前HelloWorld程序為例,實現(xiàn)流程大致如下:(1)創(chuàng)建工作空間并初始化上述命令,首先會創(chuàng)建一個工作空間以及一個src子目錄,然后再進入工作空間調(diào)用catkin_make命令編譯。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗(2)進入src創(chuàng)建ros包并添加依賴上述命令,會在工作空間下生成一個功能包,該功能包依賴于roscpp、rospy與std_msgs,其中roscpp是使用C++實現(xiàn)的庫,而rospy則是使用python實現(xiàn)的庫,std_msgs是標準消息庫,創(chuàng)建ROS功能包時,一般都會依賴這三個庫實現(xiàn)。3.2ROS體驗ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗(3)進入ros包的src目錄編輯源文件C++源碼實現(xiàn)(文件名自定義)3.2ROS體驗ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)三、ROS的安裝與體驗(4)編輯ros包下的Cmakelist.txt文件3.2ROS體驗ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)(5)進入工作空間目錄并編譯生成builddevel....三、ROS的安裝與體驗3.2ROS體驗ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)(6)執(zhí)行先啟動命令行1:再啟動命令行2:命令行輸出:HelloWorld!三、ROS的安裝與體驗3.2ROS體驗ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)按照官方的說法,可以分別從計算圖、文件系統(tǒng)和開源社區(qū)視角來理解ROS架構(gòu)。四、ROS的架構(gòu)ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.1從計算圖視角理解ROS架構(gòu)ROS中可執(zhí)行程序的基本單位叫節(jié)點(node),節(jié)點之間通過消息機制進行通信,這樣就組成了一張網(wǎng)狀圖,也叫計算圖,如圖所示。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.1從計算圖視角理解ROS架構(gòu)(1)節(jié)點節(jié)點是可執(zhí)行程序,通常也叫進程。ROS功能包中創(chuàng)建的每個可執(zhí)行程序在被啟動加載到系統(tǒng)進程中后,就是一個ROS節(jié)點,如圖1-3中的節(jié)點1、節(jié)點2、節(jié)點3等。節(jié)點之間通過收發(fā)消息進行通信,消息收發(fā)機制分為話題(topic)、服務(wù)(service)和動作(action)三種,如圖1-3中的節(jié)點2與節(jié)點3、節(jié)點2與節(jié)點5采用話題通信,節(jié)點2與節(jié)點4采用服務(wù)通信,節(jié)點1與節(jié)點2采用動作通信。計算圖中的節(jié)點、話題、服務(wù)、動作都要有唯一名稱作為標識。ROS利用節(jié)點將代碼和功能解耦,提高了系統(tǒng)的容錯性和可維護性。所以最好讓每個節(jié)點都具有特定的單一功能,而不是創(chuàng)建一個包羅萬象的龐大節(jié)點。如果用C++編寫節(jié)點,需要用到ROS提供的roscpp庫;如果用Python編寫節(jié)點,需要用到ROS提供的rospy庫。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.1從計算圖視角理解ROS架構(gòu)(2)消息消息是構(gòu)成計算圖的關(guān)鍵,包括消息機制和消息類型兩部分。消息機制有話題、服務(wù)和動作三種,每種消息機制中傳遞的數(shù)據(jù)都具有特定的數(shù)據(jù)類型(即消息類型),消息類型可分為話題消息類型、服務(wù)消息類型和動作消息類型。(3)數(shù)據(jù)包數(shù)據(jù)包(rosbag)是ROS中專門用來保存和回放話題中數(shù)據(jù)的文件,可以將一些難以收集的傳感器數(shù)據(jù)用數(shù)據(jù)包錄制下來,然后反復(fù)回放來進行算法性能調(diào)試。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.1從計算圖視角理解ROS架構(gòu)(4)參數(shù)參數(shù)服務(wù)器能夠為整個ROS網(wǎng)絡(luò)中的節(jié)點提供便于修改的參數(shù)。參數(shù)可以認為是節(jié)點中可供外部修改的全局變量,有靜態(tài)參數(shù)和動態(tài)參數(shù)。靜態(tài)參數(shù)一般用于在節(jié)點啟動時設(shè)置節(jié)點工作模式;動態(tài)參數(shù)可以用于在節(jié)點運行時動態(tài)配置節(jié)點或改變節(jié)點工作狀態(tài),比如電機控制節(jié)點里的PID控制參數(shù)。主節(jié)點負責(zé)各個節(jié)點之間通信過程的調(diào)度管理。因此主節(jié)點必須要最先啟動,可以通過roscore命令啟動。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.2從文件系統(tǒng)視角理解ROS架構(gòu)ROS程序的不同組件要放在不同的文件夾中,這些文件夾根據(jù)不同的功能對文件進行組織,這就是ROS的文件系統(tǒng)結(jié)構(gòu),如圖1-4所示。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.2從文件系統(tǒng)視角理解ROS架構(gòu)ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)四、ROS的架構(gòu)4.3從開源社區(qū)視角理解ROS架構(gòu)ROS是開源軟件,各個獨立的網(wǎng)絡(luò)社區(qū)分享和貢獻軟件及教程,形成了強大的ROS開源社區(qū),如圖1-5所示。ROS的發(fā)展依賴于開源和共享的軟件,這些代碼由不同的機構(gòu)共享和發(fā)布,比如GitHub源碼共享、Ubuntu軟件倉庫發(fā)布、第三方庫等。ROS的官方wiki是重要的文檔討論社區(qū),在里面可以很方便地發(fā)布與修改相應(yīng)的文檔頁面。ROS的answer主頁里有大量ROS開發(fā)者的提問和回答,對ROS開發(fā)中遇到的各種問題的討論很活躍ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)五、ROS的應(yīng)用5.1ROS應(yīng)用領(lǐng)域ROS是全球范圍內(nèi)智能機器人領(lǐng)域最為前沿的開源操作系統(tǒng)。ROS作為機器人的大腦,廣泛應(yīng)用與工廠AGV作業(yè)機器人、智能立體倉庫、送餐及快遞等服務(wù)機器人、自動駕駛、機械手智能控制等新興智能機器人領(lǐng)域。例如:機器人控制器中的大佬人物KEBA,他們的控制器已經(jīng)支持ROS,美國NASA基于ROS開發(fā)的Robonaut2已經(jīng)在國際空間站里干活了,百度apollo無人車的底層是基于ROS開發(fā)的,ROS-I最近正準備和微軟、寶馬合作,開發(fā)一套自動化解決方案。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)五、ROS的應(yīng)用5.2ROS在自動駕駛上的應(yīng)用想要制造無人駕駛汽車,有很多關(guān)鍵問題需要解決。例如怎么在車內(nèi)搭建可靠的網(wǎng)絡(luò),如何管理內(nèi)存、存儲數(shù)據(jù)和日志記錄,如何使傳感器和計算機能夠同時相互通信,以及如何確保它們都很穩(wěn)定且安全。機器人操作系統(tǒng)ROS為許多問題提供了開源解決方案。要保證一個復(fù)雜的系統(tǒng)穩(wěn)定、高效地運行,每個模塊都能發(fā)揮出最大的潛能,需要一個成熟有效的管理機制。的資源管理及隔離。ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)1.RobotOperatingSystem(機器人操作系統(tǒng))適用于機器人的開源元操作系統(tǒng),集成了大量的工具,庫,協(xié)議,提供類似OS所提供的功能,簡化對機器人的控制。2.ROS設(shè)計思想是“分工合作”,ROS的設(shè)計目標:代碼復(fù)用、分布式、松耦合、精簡、語言獨立性、易于測試、大型應(yīng)用、豐富的組件化工具包、免費且開源。3.ROS的發(fā)行版本指ROS軟件包的版本,按照英文字母順序命名,ROS目前已經(jīng)發(fā)布了ROS1的終極版本:noetic。4.按照官方的說法,可以分別從計算圖、文件系統(tǒng)和開源社區(qū)視角來理解ROS架構(gòu)。5.文件系統(tǒng):ROS文件系統(tǒng)級指的是在硬盤上面查看的ROS源代碼的組織形式。6.計算圖:ROS分布式系統(tǒng)中不同進程需要進行數(shù)據(jù)交互,計算圖可以以點對點的網(wǎng)絡(luò)形式表現(xiàn)數(shù)據(jù)交互過程,計算圖中的重要概念:節(jié)點(Node)、消息(message)、通信機制_主題(topic)、通信機制_服務(wù)(service)。7.開源社區(qū):ROS的社區(qū)級概念是ROS網(wǎng)絡(luò)上進行代碼發(fā)布的一種表現(xiàn)形式。六、總結(jié)ROS的架構(gòu)課程導(dǎo)入ROS的安裝與體驗ROS簡介ROS的應(yīng)用總結(jié)ROS通信機制汽車計算機基礎(chǔ)一、課程導(dǎo)入機器人是一種高度復(fù)雜的系統(tǒng)性實現(xiàn),在機器人上可能集成各種傳感器(雷達、攝像頭、GPS...)以及運動控制實現(xiàn),為了解耦合,在ROS中每一個功能點都是一個單獨的進程,每一個進程都是獨立運行的。更確切的講,ROS是進程(也稱為Nodes)的分布式框架。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)一、課程導(dǎo)入不同的進程是如何通信的?也即不同進程間如何實現(xiàn)數(shù)據(jù)交換的??參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.1話題通信概念及應(yīng)用場景(1)概念話題通信是ROS中使用頻率最高的一種通信模式,話題通信是以發(fā)布訂閱的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式,也即:一個節(jié)點發(fā)布消息,另一個節(jié)點訂閱該消息。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.1話題通信概念及應(yīng)用場景(2)話題通信應(yīng)用場景話題通信用于不斷更新的、少邏輯處理的數(shù)據(jù)傳輸場景。應(yīng)用場景極其廣泛,比如:機器人在執(zhí)行導(dǎo)航功能,使用的傳感器是激光雷達,機器人會采集激光雷達感知到的信息并計算,然后生成運動控制信息驅(qū)動機器人底盤運動。以激光雷達信息的采集處理為例,在ROS中有一個節(jié)點需要時時的發(fā)布當前雷達采集到的數(shù)據(jù),導(dǎo)航模塊中也有節(jié)點會訂閱并解析雷達數(shù)據(jù)。再以運動消息的發(fā)布為例,導(dǎo)航模塊會根據(jù)傳感器采集的數(shù)據(jù)時時的計算出運動控制信息并發(fā)布給底盤,底盤也可以有一個節(jié)點訂閱運動信息并最終轉(zhuǎn)換成控制電機的脈沖信號。傳感器數(shù)據(jù)采集雷達攝像頭GPS參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.2話題通信模型話題通信實現(xiàn)模型是比較復(fù)雜的,該模型如下圖所示。該模型中涉及到三個角色:ROSMaster(管理者)、Talker(發(fā)布者)、Listener(訂閱者)。ROSMaster負責(zé)保管Talker和Listener注冊的信息,并匹配話題相同的Talker與Listener,幫助Talker與Listener建立連接,連接建立后,Talker可以發(fā)布消息,且發(fā)布的消息會被Listener訂閱。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.2話題通信模型整個流程由以下步驟實現(xiàn):注意事項:上述實現(xiàn)流程中,前五步使用的RPC協(xié)議,最后兩步使用的是TCP協(xié)議。Talker與Listener的啟動無先后順序要求Talker與Listener都可以有多個Talker與Listener連接建立后,不再需要ROSMaster。也即,即便關(guān)閉ROSMaster,Talker與Listern照常通信。Talker注冊Listener注冊ROSMaster實現(xiàn)信息匹配Listener向Talker發(fā)送請求Talker確認請求Listener與Talker建立連接Talker向Listener發(fā)送消息參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.3話題通信基本操作(C++)需求:編寫發(fā)布訂閱實現(xiàn),要求發(fā)布方以10HZ(每秒10次)的頻率發(fā)布文本消息,訂閱方訂閱消息并將消息內(nèi)容打印輸出。分析:在模型實現(xiàn)中,ROSmaster不需要實現(xiàn),而連接的建立也已經(jīng)被封裝了。流程:編寫發(fā)布方實現(xiàn)編寫訂閱方實現(xiàn)編輯配置文件編譯并執(zhí)行關(guān)鍵點發(fā)布方接受方數(shù)據(jù)(普通文本)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.3話題通信基本操作(C++)(1)發(fā)布方參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.3話題通信基本操作(C++)(2)訂閱方參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.3話題通信基本操作(C++)(3)配置CMakeLists.txt參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.3話題通信基本操作(C++)(4)執(zhí)行啟動roscore啟動發(fā)布節(jié)點啟動訂閱節(jié)點參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg在ROS通信協(xié)議中,數(shù)據(jù)載體是一個較為重要組成部分,ROS中通過std_msgs封裝了一些原生的數(shù)據(jù)類型,比如:String、Int32、Int64、Char、Bool、Empty等。但是,這些數(shù)據(jù)一般只包含一個data字段,結(jié)構(gòu)的單一意味著功能上的局限性,當傳輸一些復(fù)雜的數(shù)據(jù),比如:激光雷達的信息...std_msgs由于描述性較差而顯得力不從心,這種場景下可以使用自定義的消息類型。msgs只是簡單的文本文件,每行具有字段類型和字段名稱,可以使用的字段類型有:字段類型int8,int16,int32,int64float32,float64
stringtime,durationothermsgfilesvariable-lengtharray[]andfixed-lengtharray[C]Header參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg需求:創(chuàng)建自定義消息,該消息包含人的信息,姓名、身高、年齡等。流程:按照固定格式創(chuàng)建msg文件編輯配置文件編譯生成可以被Python或C++調(diào)用的中間文件參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg(1)定義msg文件功能包下新建msg目錄,添加文件Person.msg。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg(2)編輯配置文件①package.xml中添加編譯依賴與執(zhí)行依賴。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg(2)編輯配置文件②CMakeLists.txt編輯msg相關(guān)配置。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg(2)編輯配置文件②CMakeLists.txt編輯msg相關(guān)配置。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.4通信自定義msg(3)編譯編譯后的中間文件查看:C++需要調(diào)用的中間文件(.../工作空間/devel/include/包名/xxx.h)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用需求:編寫發(fā)布訂閱實現(xiàn),要求發(fā)布方以10HZ(每秒10次)的頻率發(fā)布文本消息,訂閱方訂閱消息并將消息內(nèi)容打印輸出。分析:在模型實現(xiàn)中,ROSmaster不需要實現(xiàn),而連接的建立也已經(jīng)被封裝了。流程:編寫發(fā)布方實現(xiàn)編寫訂閱方實現(xiàn)編輯配置文件編譯并執(zhí)行關(guān)鍵點發(fā)布方接受方數(shù)據(jù)(普通文本)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用(1)vscode配置為了方便代碼提示以及避免誤拋異常,需要先配置vscode,將前面生成的head文件路徑配置進c_cpp_properties.json的includepath屬性:參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用(2)發(fā)布方參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用(3)訂閱方參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用(4)配置CMakeLists.txt需要添加add_dependencies用以設(shè)置所依賴的消息相關(guān)的中間文件。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)二、話題通信2.5話題通信自定義msg調(diào)用(5)執(zhí)行啟動roscore啟動發(fā)布節(jié)點啟動訂閱節(jié)點參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.1服務(wù)通信概念及應(yīng)用場景(1)概念服務(wù)通信也是ROS中一種極其常用的通信模式,以請求響應(yīng)的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式,是一種應(yīng)答機制。也即:一個節(jié)點A向另一個節(jié)點B發(fā)送請求,B接收處理請求并產(chǎn)生響應(yīng)結(jié)果返回給A。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.1服務(wù)通信概念及應(yīng)用場景(2)服務(wù)通信應(yīng)用場景服務(wù)通信更適用于對時時性有要求、具有一定邏輯處理的應(yīng)用場景。比如:機器人巡邏過程中,控制系統(tǒng)分析傳感器數(shù)據(jù)發(fā)現(xiàn)可疑物體或人...此時需要拍攝照片并留存。在上述場景中,就使用到了服務(wù)通信。一個節(jié)點需要向相機節(jié)點發(fā)送拍照請求,相機節(jié)點處理請求,并返回處理結(jié)果。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.2服務(wù)通信理論模型服務(wù)通信較之于話題通信更簡單些,理論模型如下圖所示,該模型中涉及到三個角色:ROSmaster(管理者)、Server(服務(wù)端)、Client(客戶端)。ROSMaster負責(zé)保管Server和Client注冊的信息,并匹配話題相同的Server與Client,幫助Server與Client建立連接,連接建立后,Client發(fā)送請求信息,Server返回響應(yīng)信息。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv需求:服務(wù)通信中,客戶端提交兩個整數(shù)至服務(wù)端,服務(wù)端求和并響應(yīng)結(jié)果到客戶端,請創(chuàng)建服務(wù)器與客戶端通信的數(shù)據(jù)載體。流程:srv文件內(nèi)的可用數(shù)據(jù)類型與msg文件一致,且定義srv實現(xiàn)流程與自定義msg實現(xiàn)流程類似。按照固定格式創(chuàng)建msg文件編輯配置文件編譯生成可以被Python或C++調(diào)用的中間文件參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv(1)定義srv文件服務(wù)通信中,數(shù)據(jù)分成兩部分,請求與響應(yīng),在srv文件中請求和響應(yīng)使用---分割,具體實現(xiàn)如下:功能包下新建srv目錄,添加xxx.srv文件,內(nèi)容:參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv(2)編輯配置文件package.xml中添加編譯依賴與執(zhí)行依賴。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv(2)編輯配置文件CMakeLists.txt編輯srv相關(guān)配置。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv(2)編輯配置文件CMakeLists.txt編輯srv相關(guān)配置。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.3服務(wù)通信自定義srv(3)編譯編譯后的中間文件查看:C++需要調(diào)用的中間文件(.../工作空間/devel/include/包名/xxx.h)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用需求:編寫服務(wù)通信,客戶端提交兩個整數(shù)至服務(wù)端,服務(wù)端求和并響應(yīng)結(jié)果到客戶端。分析:在模型實現(xiàn)中,ROSmaster不需要實現(xiàn),而連接的建立也已經(jīng)被封裝了。流程:關(guān)鍵點服務(wù)端客戶端數(shù)據(jù)編寫服務(wù)端實現(xiàn)編寫客戶端實現(xiàn)編輯配置文件編譯并執(zhí)行參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用(1)vscode配置參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用(2)服務(wù)端參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用(3)客戶端參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用(4)配置CMakeLists.txt參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)三、服務(wù)通信2.4服務(wù)通信自定義srv調(diào)用(5)執(zhí)行流程:需要先啟動服務(wù):rosrun包名服務(wù)然后再調(diào)用客戶端:rosrun包名客戶端參數(shù)1參數(shù)2結(jié)果:會根據(jù)提交的數(shù)據(jù)響應(yīng)相加后的結(jié)果。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)四、參數(shù)服務(wù)器4.1參數(shù)服務(wù)器的概念及應(yīng)用場景(1)參數(shù)服務(wù)器的概念參數(shù)服務(wù)器是以共享的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式。在ROS中主要用于實現(xiàn)不同節(jié)點之間的數(shù)據(jù)共享。參數(shù)服務(wù)器相當于是獨立于所有節(jié)點的一個公共容器,可以將數(shù)據(jù)存儲在該容器中,被不同的節(jié)點調(diào)用,當然不同的節(jié)點也可以往其中存儲數(shù)據(jù)。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)四、參數(shù)服務(wù)器4.1參數(shù)服務(wù)器的概念及應(yīng)用場景(2)參數(shù)服務(wù)器應(yīng)用場景關(guān)于參數(shù)服務(wù)器的典型應(yīng)用場景如下:導(dǎo)航實現(xiàn)時,會進行路徑規(guī)劃,比如:全局路徑規(guī)劃,設(shè)計一個從出發(fā)點到目標點的大致路徑。本地路徑規(guī)劃,會根據(jù)當前路況生成時時的行進路徑上述場景中,全局路徑規(guī)劃和本地路徑規(guī)劃時,就會使用到參數(shù)服務(wù)器:路徑規(guī)劃時,需要參考小車的尺寸,我們可以將這些尺寸信息存儲到參數(shù)服務(wù)器,全局路徑規(guī)劃節(jié)點與本地路徑規(guī)劃節(jié)點都可以從參數(shù)服務(wù)器中調(diào)用這些參數(shù)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)四、參數(shù)服務(wù)器4.2參數(shù)服務(wù)器理論模型參數(shù)服務(wù)器實現(xiàn)是最為簡單的,該模型如下圖所示。該模型中涉及到三個角色:ROSMaster(管理者)、Talker(參數(shù)設(shè)置者)、Listener(參數(shù)調(diào)用者)。ROSMaster作為一個公共容器保存參數(shù),Talker可以向容器中設(shè)置參數(shù),Listener可以獲取參數(shù)。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)四、參數(shù)服務(wù)器4.2參數(shù)服務(wù)器理論模型整個流程由以下步驟實現(xiàn):Talker設(shè)置參數(shù)Listener獲取參數(shù)ROSMaster向Listener發(fā)送參數(shù)值參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)四、參數(shù)服務(wù)器4.3參數(shù)操作需求:實現(xiàn)參數(shù)服務(wù)器參數(shù)的增刪改查操作。在C++中實現(xiàn)參數(shù)服務(wù)器數(shù)據(jù)的增刪改查,可以通過兩套API實現(xiàn):ros::NodeHandle、ros::param。例:參數(shù)服務(wù)器刪除參數(shù)。參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.1rosnode:操作節(jié)點rosnode是用于獲取節(jié)點信息的命令。命令說明rosnodeping測試到節(jié)點的連接狀態(tài)rosnodelist列出活動節(jié)點rosnodeinfo打印節(jié)點信息rosnodemachine列出指定設(shè)備上節(jié)點rosnodekill殺死某個節(jié)點rosnodecleanup清除不可連接的節(jié)點參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.2rostopic:操作話題rostopic包含rostopic命令行工具,用于顯示有關(guān)ROS主題的調(diào)試信息,包括發(fā)布者,訂閱者,發(fā)布頻率和ROS消息。它還包含一個實驗性Python庫,用于動態(tài)獲取有關(guān)主題的信息并與之交互。命令說明rostopicbw顯示主題使用的帶寬rostopicdelay顯示帶有header的主題延遲rostopicecho打印消息到屏幕rostopicfind根據(jù)類型查找主題rostopichz顯示主題的發(fā)布頻率rostopicinfo顯示主題相關(guān)信息rostopiclist顯示所有活動狀態(tài)下的主題rostopicpub將數(shù)據(jù)發(fā)布到主題rostopictype打印主題類型參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.3rosmsg:操作msg消息rosmsg是用于顯示有關(guān)ROS消息類型的信息的命令行工具。命令說明rosmsgshow顯示消息描述rosmsginfo顯示消息信息rosmsglist列出所有消息rosmsgmd5顯示md5加密后的消息rosmsgpackage顯示某個功能包下的所有消息rosmsgpackages列出包含消息的功能包參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.4rosservice:操作服務(wù)rosservice包含用于列出和查詢ROSServices的rosservice命令行工具。調(diào)用部分服務(wù)時,如果對相關(guān)工作空間沒有配置path,需要進入工作空間調(diào)用source./devel/setup.bash。命令說明rosserviceargs打印服務(wù)參數(shù)rosservicecall使用提供的參數(shù)調(diào)用服務(wù)rosservicefind按照服務(wù)類型查找服務(wù)rosserviceinfo打印有關(guān)服務(wù)的信息rosservicelist列出所有活動的服務(wù)rosservicetype打印服務(wù)類型rosserviceuri打印服務(wù)的ROSRPCuri參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.5rossrv:操作srv消息rossrv是用于顯示有關(guān)ROS服務(wù)類型的信息的命令行工具,與rosmsg使用語法高度雷同。命令說明rossrvshow顯示服務(wù)消息詳情rossrvinfo顯示服務(wù)消息相關(guān)信息rossrvlist列出所有服務(wù)信息rossrvmd5顯示md5加密后的服務(wù)消息rossrvpackage顯示某個包下所有服務(wù)消息rossrvpackages顯示包含服務(wù)消息的所有包參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)五、常用命令5.6rosparam:操作參數(shù)rosparam包含rosparam命令行工具,用于使用YAML編碼文件在參數(shù)服務(wù)器上獲取和設(shè)置ROS參數(shù)。命令說明rosparamset設(shè)置參數(shù)rosparamget獲取參數(shù)rosparamload從外部文件加載參數(shù)rosparamdump將參數(shù)寫出到外部文件rosparamdelete刪除參數(shù)rosparamlist列出所有參數(shù)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)六、通信機制比較三種通信機制中,參數(shù)服務(wù)器是一種數(shù)據(jù)共享機制,可以在不同的節(jié)點之間共享數(shù)據(jù),話題通信與服務(wù)通信是在不同的節(jié)點之間傳遞數(shù)據(jù)的,三者是ROS中最基礎(chǔ)也是應(yīng)用最為廣泛的通信機制。這其中,話題通信和服務(wù)通信有一定的相似性也有本質(zhì)上的差異,在此將二者做一下簡單比較:二者的實現(xiàn)流程是比較相似的,都是涉及到四個要素:可以概括為:兩個節(jié)點通過話題關(guān)聯(lián)到一起,并使用某種類型的數(shù)據(jù)載體實現(xiàn)數(shù)據(jù)傳輸。6.1相似性四要素消息的發(fā)布方/客戶端(Publisher/Client)消息的訂閱方/服務(wù)端(Subscriber/Server)話題名稱(Topic/Service)數(shù)據(jù)載體(msg/srv)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)六、通信機制比較6.2區(qū)別
Topic(話題)Service(服務(wù))通信模式發(fā)布/訂閱請求/響應(yīng)同步性異步同步底層協(xié)議ROSTCP/ROSUDPROSTCP/ROSUDP緩沖區(qū)有無時時性弱強節(jié)點關(guān)系多對多一對多(一個Server)通信數(shù)據(jù)msgsrv使用場景連續(xù)高頻的數(shù)據(jù)發(fā)布與接收:雷達、里程計偶爾調(diào)用或執(zhí)行某一項特定功能:拍照、語音識別參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)1.ROS中基本通信機制主要有如下三種實現(xiàn)策略:話題通信(發(fā)布訂閱模式)、服務(wù)通信(請求響應(yīng)模式)、參數(shù)服務(wù)器(參數(shù)共享模式)。2.話題通信:以發(fā)布訂閱的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式,用于不斷更新的、少邏輯處理的數(shù)據(jù)傳輸場景。該模型三大角色:ROSMaster(管理者)、Talker(發(fā)布者)、Listener(訂閱者)。3.服務(wù)通信:以請求響應(yīng)的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式,用于對時時性有要求、具有一定邏輯處理的應(yīng)用場景,該模型三大角色:ROSmaster(管理者)、Server(服務(wù)端)、Client(客戶端)。4.參數(shù)服務(wù)器:以共享的方式實現(xiàn)不同節(jié)點之間數(shù)據(jù)交互的通信模式,用于實現(xiàn)不同節(jié)點之間的數(shù)據(jù)共享。該模型三大角色:ROSMaster(管理者)、Talker(參數(shù)設(shè)置者)、Listener(參數(shù)調(diào)用者)。七、總結(jié)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)5.ROS常用命令:(1)rosnode命令:操作節(jié)點(2)rostopic命令:操作話題(3)rosservice命令:操作服務(wù)(4)rosmsg命令:操作msg消息(5)rossrv命令:操作srv消息(6)rosparam命令:操作參數(shù)七、總結(jié)參數(shù)服務(wù)器課程導(dǎo)入服務(wù)通信話題通信常用命令通信機制比較總結(jié)ROS通信機制進階汽車計算機基礎(chǔ)一、課程導(dǎo)入上一個任務(wù)主要介紹了ROS通信的實現(xiàn),內(nèi)容偏向于粗粒度的通信框架的講解,沒有詳細介紹涉及的API,也沒有封裝代碼。總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API一、課程導(dǎo)入ROS有哪些常用API?總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.1初始化(1)ROS初始化函數(shù)ROS初始化函數(shù)可以解析并使用節(jié)點啟動時傳入的參數(shù)(通過參數(shù)設(shè)置節(jié)點名稱、命名空間...)。該函數(shù)有多個重載版本,如果使用NodeHandle建議調(diào)用該版本。函數(shù)原型:(2)函數(shù)參數(shù)參數(shù)說明paramargc參數(shù)個數(shù)paramargv參數(shù)列表paramname節(jié)點名稱,需要保證其唯一性,不允許包含命名空間paramoptions節(jié)點啟動選項,被封裝進了ros::init_options總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.2話題與服務(wù)相關(guān)對象(1)發(fā)布對象話題發(fā)布對象是ROS的話題通信中的發(fā)布方,也就是發(fā)出信息的一方。在獲取該對象時,會通過RPC在ROSMaster中注冊自身信息,其中包含所發(fā)布消息的話題名稱話題發(fā)布者對象為ros命名空間下的Publisher類,通過NodeHandle類中的advertise函數(shù)初始化。①函數(shù)說明根據(jù)話題生成發(fā)布對象,在ROSmaster注冊并返回一個發(fā)布者對象,該對象可以發(fā)布消息。②函數(shù)原型總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.2話題與服務(wù)相關(guān)對象(1)發(fā)布對象③函數(shù)參數(shù)d.函數(shù)返回值return調(diào)用成功時,會返回一個發(fā)布對象。參數(shù)說明paramtopic發(fā)布消息使用的話題paramqueue_size等待發(fā)送給訂閱者的最大消息數(shù)量paramlatch(optional)如果為true,該話題發(fā)布的最后一條消息將被保存,并且后期當有訂閱者連接時會將該消息發(fā)送給訂閱者總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.2話題與服務(wù)相關(guān)對象(1)發(fā)布對象④Publisher對象發(fā)布消息函數(shù)該函數(shù)將數(shù)據(jù)message發(fā)送到已連接的訂閱者,message類型可以為任意類型??偨Y(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.3回旋函數(shù)回旋函數(shù)是ROS中非常常用的功能函數(shù),作用是處理程序中的所有可用的回調(diào)函數(shù),當函數(shù)執(zhí)行條件觸發(fā)時,就去執(zhí)行函數(shù)。(1)單次回旋函數(shù)spinOnce()用于處理一輪回調(diào),一般應(yīng)用在循環(huán)體內(nèi),處理所有可用的回調(diào)函數(shù),函數(shù)格式:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.3回旋函數(shù)(2)spin()無限回旋函數(shù)進入循環(huán)處理回調(diào),一般格式為:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.3回旋函數(shù)(3)二者比較相同點:二者都用于處理回調(diào)函數(shù);不同點:ros::spin()是進入了循環(huán)執(zhí)行回調(diào)函數(shù),而ros::spinOnce()只會執(zhí)行一次回調(diào)函數(shù)(沒有循環(huán)),在ros::spin()后的語句不會執(zhí)行到,而ros::spinOnce()后的語句可以執(zhí)行??偨Y(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(1)時刻獲取時刻,或是設(shè)置指定時刻:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(2)持續(xù)時間設(shè)置一個時間區(qū)間(間隔):總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(3)持續(xù)時間與時刻運算為了方便使用,ROS中提供了時間與時刻的運算:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(4)設(shè)置運行頻率總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(5)定時器①函數(shù)說明ROS中內(nèi)置了專門的定時器,定時器相當于一個鬧鐘,隔一段時間響一次(執(zhí)行回調(diào)函數(shù)),成功返回一個定時器對象。②函數(shù)原型總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.4時間(5)定時器③函數(shù)參數(shù)參數(shù)說明period時間間隔(Duration類型)callback回調(diào)函數(shù)(函數(shù)指針)oneshot如果設(shè)置為true,只執(zhí)行一次回調(diào)函數(shù),設(shè)置為false,就循環(huán)執(zhí)行autostart如果為true,返回已經(jīng)啟動的定時器,設(shè)置為false,需要手動啟動總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.5其他函數(shù)(1)節(jié)點關(guān)閉函數(shù)總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.5其他函數(shù)(2)節(jié)點狀態(tài)判斷函數(shù)總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API二、常用API2.5其他函數(shù)(3)日志函數(shù)總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.1自定義頭文件調(diào)用(1)頭文件在功能包下的include/功能包名目錄下新建頭文件:hello.h,示例內(nèi)容如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.1自定義頭文件調(diào)用(2)可執(zhí)行文件在src目錄下新建文件:hello.cpp,示例內(nèi)容如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.1自定義頭文件調(diào)用(3)配置文件①配置CMakeLists.txt文件,頭文件相關(guān)配置如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.1自定義頭文件調(diào)用(3)配置文件②可執(zhí)行配置文件配置方式與之前一致:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.1自定義頭文件調(diào)用(3)配置文件②可執(zhí)行配置文件配置方式與之前一致:最后,編譯并執(zhí)行,控制臺可以輸出自定義的文本信息。總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.2自定義源文件調(diào)用(1)頭文件頭文件設(shè)置與前面類似,在功能包下的include/功能包名目錄下新建頭文件:haha.h,示例內(nèi)容如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.2自定義源文件調(diào)用(2)源文件在src目錄下新建文件:haha.cpp,示例內(nèi)容如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.2自定義源文件調(diào)用(3)可執(zhí)行文件在src目錄下新建文件:use_head.cpp,示例內(nèi)容如下:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.2自定義源文件調(diào)用(4)配置文件①頭文件與源文件相關(guān)配置:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API三、ROS中的頭文件與源文件3.2自定義源文件調(diào)用(4)配置文件②可執(zhí)行文件配置:總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用API1.ROS常用API有:ROS節(jié)點的初始化相關(guān)API、NodeHandle的基本使用相關(guān)API、話題的發(fā)布方,訂閱方對象相關(guān)API、服務(wù)的服務(wù)端,客戶端對象相關(guān)API、回旋函數(shù)相關(guān)API、時間相關(guān)API。2.ROS初始化函數(shù):可以解析并使用節(jié)點啟動時傳入的參數(shù)。3.在roscpp中,話題和服務(wù)的相關(guān)對象一般由NodeHandle創(chuàng)建。4.在ROS程序中,通常使用ros::spin()和ros::spinOnce()兩個回旋函數(shù)處理回調(diào)函數(shù)。5.ROS中時間相關(guān)的API是極其常用,比如:獲取當前時刻、持續(xù)時間的設(shè)置、執(zhí)行頻率、休眠、定時器等。四、總結(jié)總結(jié)課程導(dǎo)入ROS中的頭文件與源文件常用APIROS運行管理汽車計算機基礎(chǔ)一、課程導(dǎo)入ROS是多進程(節(jié)點)的分布式框架,一個完整的ROS系統(tǒng)可能包含多臺主機;每臺主機上又有多個工作空間;每個的工作空間中又包含多個功能包;每個功能包又包含多個節(jié)點,不同的節(jié)點都有自己的節(jié)點名稱;每個節(jié)點可能還會設(shè)置一個或多個話題。ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)一、課程導(dǎo)入在多級層深的ROS系統(tǒng)中,其實現(xiàn)與維護可能會出現(xiàn)一些問題,比如,如何關(guān)聯(lián)不同的功能包,繁多的ROS節(jié)點應(yīng)該如何啟動?功能包、節(jié)點、話題、參數(shù)重名時應(yīng)該如何處理?不同主機上的節(jié)點如何通信?ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)二、ROS元功能包2.1概念完成ROS中一個系統(tǒng)性的功能,可能涉及到多個功能包,比如實現(xiàn)了機器人導(dǎo)航模塊,該模塊下有地圖、定位、路徑規(guī)劃...等不同的子級功能包。那么調(diào)用者安裝該模塊時,需要逐一的安裝每一個功能包嗎?顯而易見的,逐一安裝功能包的效率低下,在ROS中,提供了一種方式可以將不同的功能包打包成一個功能包,當安裝某個功能模塊時,直接調(diào)用打包后的功能包即可,該包又稱之為元功能包(metapackage)。ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)二、ROS元功能包2.1概念MetaPackage是Linux的一個文件管理系統(tǒng)的概念。是ROS中的一個虛包,里面沒有實質(zhì)性的內(nèi)容,但是它依賴了其他的軟件包,通過這種方法可以把其他包組合起來,我們可以認為它是一本書的目錄索引,告訴我們這個包集合中有哪些子包,并且該去哪里下載。例如:sudoaptinstallros-noetic-desktop-full命令安裝ros時就使用了元功能包,該元功能包依賴于ROS中的其他一些功能包,安裝該包時會一并安裝依賴。還有一些常見的MetaPackage:navigationmoveit!turtlebot3....元功能包的作用是方便用戶的安裝,我們只需要這一個包就可以把其他相關(guān)的軟件包組織到起安裝了。ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)二、ROS元功能包2.2實現(xiàn)(1)首先新建一個功能包(2)然后修改package.xml,內(nèi)容如下:ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)二、ROS元功能包2.2實現(xiàn)(3)最后修改CMakeLists.txt,內(nèi)容如下:ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.1概念launch文件是一個XML格式的文件,可以啟動本地和遠程的多個節(jié)點,還可以在參數(shù)服務(wù)器中設(shè)置參數(shù)。起到簡化節(jié)點的配置與啟動,提高ROS程序的啟動效率的作用。launch文件是通過roslaunch功能包運行的,命令行格式如下:ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.2launch標簽<launch>標簽是所有l(wèi)aunch文件的根標簽,充當其他標簽的容器。(1)屬性deprecated="棄用聲明"告知用戶當前l(fā)aunch文件已經(jīng)棄用。(2)子級標簽所有其它標簽都是launch的子級ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.3node標簽<node>標簽用于指定ROS節(jié)點,是最常見的標簽,需要注意的是:roslaunch命令不能保證按照node的聲明順序來啟動節(jié)點(節(jié)點的啟動是多進程的)。(1)屬性屬性說明pkg="包名"節(jié)點所屬的包type="nodeType"節(jié)點類型(與之相同名稱的可執(zhí)行文件)name="nodeName"節(jié)點名稱(在ROS網(wǎng)絡(luò)拓撲中節(jié)點的名稱)args="xxxxxxxxx"(可選)將參數(shù)傳遞給節(jié)點machine="機器名"在指定機器上啟動節(jié)點respawn="true|false"(可選)如果節(jié)點退出,是否自動重啟respawn_delay="N"(可選)如果respawn為true,那么延遲N秒后啟動節(jié)點required="true|false"(可選)該節(jié)點是否必須,如果為true,那么如果該節(jié)點退出,將殺死整個roslaunchns="xxx"(可選)在指定命名空間xxx中啟動節(jié)點clear_params="true|false“(可選)在啟動前,刪除節(jié)點的私有空間的所有參數(shù)output="log|screen"(可選)日志發(fā)送目標,可以設(shè)置為log日志文件,或screen屏幕,默認是logROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.3node標簽(2)子級標簽env環(huán)境變量設(shè)置remap重映射節(jié)點名稱rosparam參數(shù)設(shè)置param參數(shù)設(shè)置ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.4include標簽include標簽用于將另一個xml格式的launch文件導(dǎo)入到當前文件。(1)屬性(2)子級標簽env環(huán)境變量設(shè)置arg將參數(shù)傳遞給被包含的文件屬性說明file="$(find包名)/xxx/xxx.launch"要包含的文件路徑ns="xxx"(可選)在指定命名空間導(dǎo)入文件ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.5remap標簽remap標簽用于話題重命名。(1)屬性屬性說明from="xxx"原始話題名稱to="yyy"目標名稱ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.6param標簽<param>標簽主要用于在參數(shù)服務(wù)器上設(shè)置參數(shù),參數(shù)源可以在標簽中通過value指定,也可以通過外部文件加載,在<node>標簽中時,相當于私有命名空間。(1)屬性屬性說明name="命名空間/參數(shù)名"參數(shù)名稱,可以包含命名空間value="xxx"(可選)定義參數(shù)值,如果此處省略,必須指定外部文件作為參數(shù)源type="str|int|double|bool|yaml"(可選)
指定參數(shù)類型,如果未指定,roslaunch會嘗試確定參數(shù)類型,規(guī)則如下:如果包含'.'的數(shù)字解析未浮點型,否則為整型"true"和"false"是bool值(不區(qū)分大小寫)其他是字符串ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.7rosparam標簽<rosparam>標簽可以從YAML文件導(dǎo)入?yún)?shù),或?qū)?shù)導(dǎo)出到Y(jié)AML文件,也可以用來刪除參數(shù),<rosparam>標簽在<node>標簽中時被視為私有。(1)屬性屬性說明command="load|dump|delete“(可選,默認load)加載、導(dǎo)出或刪除參數(shù)file="$(findxxxxx)/xxx/yyy...."加載或?qū)С龅降膟aml文件param="參數(shù)名稱"
ns="命名空間"(可選)
ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.8group標簽<group>標簽可以對節(jié)點分組,具有ns屬性,可以讓節(jié)點歸屬某個命名空間。(1)屬性(2)子級標簽除了launch標簽外的其他標簽。屬性說明ns="名稱空間"(可選)
clear_params="true|false“(可選)啟動前,是否刪除組名稱空間的所有參數(shù)(慎用....此功能危險)ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.8arg標簽<arg>標簽是用于動態(tài)傳參,類似于函數(shù)的參數(shù),可以增強launch文件的靈活性。(1)屬性name="參數(shù)名稱"default="默認值"(可選)value="數(shù)值"(可選):不可以與default并存doc="描述":參數(shù)說明ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)三、ROS節(jié)點運行管理launch文件3.8arg標簽(2)示例launch文件傳參語法實現(xiàn),hello.lcaunch命令行調(diào)用launch傳參ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)四、ROS工作空間覆蓋4.1概念所謂工作空間覆蓋,是指不同工作空間中,存在重名的功能包的情形。ROS開發(fā)中,會自定義工作空間且自定義工作空間可以同時存在多個,可能會出現(xiàn)一種情況:雖然特定工作空間內(nèi)的功能包不能重名,但是自定義工作空間的功能包與內(nèi)置的功能包可以重名或者不同的自定義的工作空間中也可以出現(xiàn)重名的功能包,那么調(diào)用該名稱功能包時,會調(diào)用哪一個呢?比如:自定義工作空間A存在功能包turtlesim,自定義工作空間B也存在功能包turtlesim,當然系統(tǒng)內(nèi)置空間也存在turtlesim,如果調(diào)用turtlesim包,會調(diào)用哪個工作空間中的呢?ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)四、ROS工作空間覆蓋4.2實現(xiàn)(1)新建工作空間A與工作空間B,兩個工作空間中都創(chuàng)建功能包:turtlesim。(2)在~/.bashrc文件下追加當前工作空間的bash格式如下:(3)新開命令行:加載環(huán)境變量ROS會解析.bashrc文件,并生成ROS_PACKAGE_PATHROS包路徑,該變量中按照.bashrc中配置設(shè)置工作空間優(yōu)先級,在設(shè)置時需要遵循一定的原則:ROS_PACKAGE_PATH中的值,和.bashrc的配置順序相反--->后配置的優(yōu)先級更高,如果更改自定義空間A與自定義空間B的source順序,那么調(diào)用時,將進入工作空間A。因此,功能包重名時,會按照ROS_PACKAGE_PATH查找,配置在前的會優(yōu)先執(zhí)行。ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)五、ROS節(jié)點名稱重名ROS中創(chuàng)建的節(jié)點是有名稱的,C++初始化節(jié)點時通API:ros::init(argc,argv,"xxxx");來定義節(jié)點名稱。在ROS的網(wǎng)絡(luò)拓撲中,是不可以出現(xiàn)重名的節(jié)點的,因為假設(shè)可以重名存在,那么調(diào)用時會產(chǎn)生混淆,這也就意味著,不可以啟動重名節(jié)點或者同一個節(jié)點啟動多次,的確,在ROS中如果啟動重名節(jié)點的話,之前已經(jīng)存在的節(jié)點會被直接關(guān)閉,但是如果有這種需求的話,怎么優(yōu)化呢?解決策略命名空間(前綴)名稱重映射(起別名)實現(xiàn)途徑rosrun命令launch文件編碼實現(xiàn)ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.1rosrun設(shè)置命名空間與重映射(1)rosrun設(shè)置命名空間①設(shè)置命名空間演示語法:兩個節(jié)點都可以正常運行。運行結(jié)果rosnodelist查看節(jié)點信息,顯示結(jié)果:五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.1rosrun設(shè)置命名空間與重映射(2)rosrun名稱重映射①為節(jié)點起別名語法:兩個節(jié)點都可以正常運行。運行結(jié)果rosnodelist查看節(jié)點信息,顯示結(jié)果:五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.1rosrun設(shè)置命名空間與重映射(3)rosrun命名空間與名稱重映射疊加①設(shè)置命名空間同時名稱重映射語法:b.運行結(jié)果rosnodelist查看節(jié)點信息,顯示結(jié)果:五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.2launch文件設(shè)置命名空間與重映射介紹launch文件的使用語法時,在node標簽中有兩個屬性:name和ns,二者分別是用于實現(xiàn)名稱重映射與命名空間設(shè)置的。使用launch文件設(shè)置命名空間與名稱重映射也比較簡單。語法:(1)launch文件在node標簽中,name屬性是必須的,ns可選。五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.2launch文件設(shè)置命名空間與重映射(2)運行rosnodelist查看節(jié)點信息,顯示結(jié)果:五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)入ROS節(jié)點運行管理launch文件ROS元功能包ROS節(jié)點名稱重名ROS參數(shù)名稱設(shè)置ROS話題名稱設(shè)置ROS分布式通信總結(jié)5.3編碼設(shè)置命名空間與重映射如果自定義節(jié)點實現(xiàn),那么可以更靈活的設(shè)置命名空間與重映射實現(xiàn)。(1)C++實現(xiàn)重映射①名稱別名設(shè)置核心代碼:②執(zhí)行會在名稱后面添加時間戳。五、ROS節(jié)點名稱重名ROS工作空間覆蓋課程導(dǎo)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年項目融資顧問服務(wù)協(xié)議模板版B版
- 2024建筑工程設(shè)計、施工與材料供應(yīng)合同
- 2025年度倉儲物流中心場地租賃管理服務(wù)協(xié)議2篇
- 福建省南平市五夫中學(xué)2020-2021學(xué)年高一物理模擬試卷含解析
- 福建省南平市太平中學(xué)2021年高二英語聯(lián)考試題含解析
- 2025年度產(chǎn)業(yè)園區(qū)廠房租賃及配套設(shè)施管理協(xié)議3篇
- 2024年度高端商場專用擋煙垂壁施工合同3篇
- 增加項目合同(2篇)
- 2024無錫江陰跨境電商合作合同
- 2024植保服務(wù)與土壤改良結(jié)合合同范本3篇
- 森林報測試題
- 刑法涉及安全生產(chǎn)的16宗罪解讀
- 北京高考化學(xué)方程式知識點總結(jié)
- 銅精礦加工費簡析
- 機電拆除專項施工方案
- 平鍵鍵槽的尺寸與公差
- 8S目視化管理實施計劃表(放大)
- 分式混合運算專項練習(xí)158題(有答案)26頁
- 地鐵日常保潔程序及應(yīng)急預(yù)案
- 牛津譯林版四年級英語上冊專項訓(xùn)練排序
- 畢業(yè)設(shè)計(論文)-多軸自動螺栓擰緊機的設(shè)計
評論
0/150
提交評論