《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 勞動(dòng) 項(xiàng)目5-8 話題通信機(jī)制的實(shí)現(xiàn)-機(jī)器人仿真環(huán)境搭建與仿真操作_第1頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 勞動(dòng) 項(xiàng)目5-8 話題通信機(jī)制的實(shí)現(xiàn)-機(jī)器人仿真環(huán)境搭建與仿真操作_第2頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 勞動(dòng) 項(xiàng)目5-8 話題通信機(jī)制的實(shí)現(xiàn)-機(jī)器人仿真環(huán)境搭建與仿真操作_第3頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 勞動(dòng) 項(xiàng)目5-8 話題通信機(jī)制的實(shí)現(xiàn)-機(jī)器人仿真環(huán)境搭建與仿真操作_第4頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 勞動(dòng) 項(xiàng)目5-8 話題通信機(jī)制的實(shí)現(xiàn)-機(jī)器人仿真環(huán)境搭建與仿真操作_第5頁(yè)
已閱讀5頁(yè),還剩156頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

任務(wù)一話題通信機(jī)制基礎(chǔ)概述01任務(wù)二使用話題通信機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)通信02任務(wù)三使用話題通信機(jī)制控制小海龜移動(dòng)031任務(wù)一

話題通信機(jī)制基礎(chǔ)概述21.?掌握話題通信機(jī)制的原理和特點(diǎn)2.?了解話題通信機(jī)制的消息類型3.?了解話題通信機(jī)制在機(jī)器人系統(tǒng)中的應(yīng)用任務(wù)目標(biāo)3一、話題通信機(jī)制的原理和特點(diǎn)項(xiàng)目二任務(wù)三已經(jīng)初步介紹了話題通信機(jī)制的基本原理。話題通信機(jī)制定義了一種發(fā)布/訂閱模式,在這種模式下,一個(gè)節(jié)點(diǎn)可以作為消息的發(fā)布者,將數(shù)據(jù)發(fā)布到特定的話題上;而其他節(jié)點(diǎn)可以作為訂閱者,通過(guò)訂閱相應(yīng)的話題來(lái)接收發(fā)布者發(fā)送的消息?;A(chǔ)知識(shí)45在發(fā)布/訂閱模式中,發(fā)布者和訂閱者之間通過(guò)話題傳遞消息,發(fā)布者節(jié)點(diǎn)負(fù)責(zé)將消息發(fā)布到話題上,而無(wú)須了解訂閱該話題的節(jié)點(diǎn)的存在。這使發(fā)布者與訂閱者之間解耦(一種計(jì)算機(jī)科學(xué)中的設(shè)計(jì)原則,指的是減少模塊、組件或系統(tǒng)之間的依賴性,使它們能夠獨(dú)立地進(jìn)行修改、擴(kuò)展或替換,而不會(huì)對(duì)其他部分產(chǎn)生過(guò)多的影響),并允許節(jié)點(diǎn)之間進(jìn)行松散耦合的通信。由于話題通信機(jī)制為異步通信,因此對(duì)節(jié)點(diǎn)的啟動(dòng)順序沒(méi)有嚴(yán)格的要求。節(jié)點(diǎn)可以按照不同的順序啟動(dòng),而不會(huì)影響消息的傳遞。發(fā)布者和訂閱者之間的通信不需要實(shí)時(shí)連接,消息可以在發(fā)布時(shí)被緩存,直到訂閱者準(zhǔn)備好接收它們,這為節(jié)點(diǎn)之間的數(shù)據(jù)交流提供了靈活性和可靠性。二、話題通信機(jī)制的消息類型話題通信可以支持多種消息類型,包括字符串型、整型、浮點(diǎn)型、數(shù)組型等以及這些類型組合而成的結(jié)構(gòu)體,且ROS允許用戶創(chuàng)建自定義的消息類型。ROS提供了標(biāo)準(zhǔn)消息(std_msgs)以及常用消息類型(包括geometry_msgs、sensor_msgs、nav_msgs等),用戶可以直接調(diào)用這些消息,ROS的消息類型見(jiàn)下表。67ROS的消息類型8ROS的消息類型三、話題通信機(jī)制在機(jī)器人系統(tǒng)中的應(yīng)用話題通信機(jī)制在機(jī)器人系統(tǒng)中有廣泛的應(yīng)用。例如,在自主移動(dòng)機(jī)器人系統(tǒng)中,攝像頭、激光雷達(dá)等感知節(jié)點(diǎn)將感知到的環(huán)境數(shù)據(jù)發(fā)布到相應(yīng)的話題上,導(dǎo)航節(jié)點(diǎn)通過(guò)訂閱這些話題,獲取環(huán)境數(shù)據(jù)并進(jìn)行路徑規(guī)劃、避障等操作。又如,在機(jī)器人控制系統(tǒng)中,機(jī)器人控制節(jié)點(diǎn)可以通過(guò)發(fā)布控制命令的話題,向執(zhí)行器節(jié)點(diǎn)發(fā)送控制指令,實(shí)現(xiàn)機(jī)器人的運(yùn)動(dòng)控制、姿態(tài)調(diào)整等功能。此外,多個(gè)機(jī)器人之間可以通過(guò)話題通信實(shí)現(xiàn)協(xié)作與協(xié)調(diào)。9任務(wù)二

使用話題通信機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)通信101.?掌握節(jié)點(diǎn)發(fā)布話題函數(shù)的用途和使用方法2.?掌握節(jié)點(diǎn)訂閱話題函數(shù)的用途和使用方法3.?能創(chuàng)建節(jié)點(diǎn)文件和節(jié)點(diǎn)程序并編寫相應(yīng)的代碼,實(shí)現(xiàn)節(jié)點(diǎn)話題通信任務(wù)目標(biāo)11一、節(jié)點(diǎn)發(fā)布話題函數(shù)節(jié)點(diǎn)發(fā)布話題的方法非常簡(jiǎn)單,只需使用rospy.publisher()函數(shù)即可創(chuàng)建一個(gè)發(fā)布者。基礎(chǔ)知識(shí)12創(chuàng)建發(fā)布者發(fā)布者創(chuàng)建完成后,使用publish()函數(shù)即可發(fā)布消息到話題中,代碼如圖所示。需要注意的是,發(fā)布的消息類型需要與創(chuàng)建發(fā)布者時(shí)的消息類型一致。創(chuàng)建發(fā)布者“pub”指定的消息類型為字符串型,則使用publish()函數(shù)時(shí)也要用字符串型數(shù)據(jù)。13發(fā)布消息到話題二、節(jié)點(diǎn)訂閱話題函數(shù)訂閱話題時(shí)需要使用rospy.subscriber()函數(shù)創(chuàng)建一個(gè)訂閱者,由于接收到消息后需要處理消息,所以訂閱者應(yīng)有一個(gè)回調(diào)函數(shù)(可以作為參數(shù)傳遞的函數(shù)),當(dāng)訂閱者接收到話題的數(shù)據(jù)時(shí),會(huì)調(diào)用一次回調(diào)函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理。14創(chuàng)建訂閱者當(dāng)指定的話題中輸入消息時(shí),將會(huì)調(diào)用回調(diào)函數(shù)。示例中回調(diào)函數(shù)的作用是獲取消息并將消息輸出到終端中,代碼如圖所示。15回調(diào)函數(shù)rospy.loginfo()函數(shù)可以將括號(hào)內(nèi)的消息作為日志消息輸出,也可以輸出到終端中,訂閱者接收到消息后,可以在終端中查看消息。String類型的消息數(shù)據(jù)在data屬性中,所以若要獲取String類型的消息數(shù)據(jù),需要讀取回調(diào)函數(shù)形參的data屬性,即data.data。16任務(wù)三

使用話題通信機(jī)制控制小海龜移動(dòng)171.?掌握話題消息類型和數(shù)據(jù)結(jié)構(gòu)的查看方法2.?掌握話題消息數(shù)據(jù)的賦值方法3.?能使用話題通信機(jī)制控制小海龜移動(dòng)任務(wù)目標(biāo)18一、話題消息類型和數(shù)據(jù)結(jié)構(gòu)的查看在編寫的節(jié)點(diǎn)與其他節(jié)點(diǎn)進(jìn)行話題通信前,需要明確話題的名稱以及話題的消息類型。以小海龜為例,小海龜節(jié)點(diǎn)訂閱“/turtle1/cmd_vel”話題,并根據(jù)話題中的速度指令進(jìn)行移動(dòng),可以通過(guò)rostopicinfo命令查看該話題的具體消息,命令如下(執(zhí)行命令前需要啟動(dòng)turtlesim_node節(jié)點(diǎn)):$rostopicinfo/turtle1/cmd_vel基礎(chǔ)知識(shí)19運(yùn)行后可以得到以下消息:Type:geometry_msgs/TwistPublishers:NoneSubscribers:由以上信息可知,話題“/turtle1/cmd_vel”的消息類型為geometry_msgs/Twist,使用rosmsgshow命令可以查看這個(gè)消息的具體數(shù)據(jù)結(jié)構(gòu),具體命令如下:$rosmsgshowgeometry_msgs/Twist20運(yùn)行后可以得到以下消息:geometry_msgs/Vector3linearfloat64xfloat64yfloat64z

geometry_msgs/Vector3angularfloat64xfloat64yfloat64z21geometry_msgs/Twist消息類型包含兩個(gè)geometry_msgs/Vector3類型的變量:一個(gè)是linear(線速度),另一個(gè)是angular(角速度)。每個(gè)變量都包含三個(gè)?oat64類型的變量,分別是x、y和z,表示在X、Y和Z軸上的線速度以及圍繞X、Y和Z軸旋轉(zhuǎn)的角速度大小。22二、話題消息數(shù)據(jù)的賦值geometry_msgs/Twist是ROS提供的常用消息類型之一,可通過(guò)在Python中使用fromgeometry_msgs.msgimportTwist代碼來(lái)調(diào)用。創(chuàng)建話題發(fā)布者時(shí),可以使用該消息類型來(lái)指定發(fā)布的消息格式,代碼如圖所示。23調(diào)用geometry_msgs/Twist消息類型并指定發(fā)布的消息格式不同的消息類型具有不同的結(jié)構(gòu),可以使用rosmsgshow命令查看消息的數(shù)據(jù)結(jié)構(gòu),并據(jù)此填寫消息終端的數(shù)據(jù)。如圖所示是創(chuàng)建一個(gè)geometry_msgs/Twist類型的變量并對(duì)其賦值的示例,本例中小海龜以2.0m/s的線速度沿X軸移動(dòng),并以2.0rad/s的角速度繞Z軸旋轉(zhuǎn),在窗口中畫圓。24創(chuàng)建變量并為變量賦值完成geometry_msgs/Twist類型的變量賦值后,使用publish()函數(shù)即可將變量的值發(fā)布到話題中,控制小海龜移動(dòng),代碼如圖所示。25將數(shù)據(jù)發(fā)布到話題任務(wù)一服務(wù)通信機(jī)制基礎(chǔ)概述01任務(wù)二創(chuàng)建并編譯自定義服務(wù)數(shù)據(jù)02任務(wù)三使用服務(wù)通信機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)通信0326任務(wù)一

服務(wù)通信機(jī)制基礎(chǔ)概述271.?掌握服務(wù)通信機(jī)制的原理和特點(diǎn)2.?了解服務(wù)數(shù)據(jù)的類型3.?了解服務(wù)通信機(jī)制在機(jī)器人系統(tǒng)中的應(yīng)用任務(wù)目標(biāo)28一、服務(wù)通信機(jī)制的原理和特點(diǎn)服務(wù)通信機(jī)制采用請(qǐng)求—響應(yīng)模型,其中一個(gè)節(jié)點(diǎn)充當(dāng)服務(wù)的提供者,稱為服務(wù)服務(wù)器,而另一個(gè)節(jié)點(diǎn)則充當(dāng)服務(wù)的請(qǐng)求者,稱為服務(wù)客戶端。服務(wù)服務(wù)器負(fù)責(zé)接收和處理來(lái)自服務(wù)客戶端的請(qǐng)求消息。它執(zhí)行特定的任務(wù)或提供特定的功能,并根據(jù)收到的請(qǐng)求消息生成相應(yīng)的響應(yīng)消息,以回應(yīng)服務(wù)客戶端的需求?;A(chǔ)知識(shí)2930服務(wù)客戶端向服務(wù)服務(wù)器發(fā)送請(qǐng)求消息,并等待服務(wù)服務(wù)器的響應(yīng)消息,以獲取特定的服務(wù)或執(zhí)行特定的操作。它通過(guò)發(fā)送請(qǐng)求與服務(wù)服務(wù)器進(jìn)行交互,并根據(jù)收到的響應(yīng)消息做出相應(yīng)的處理,以滿足自己的需求。一般來(lái)說(shuō),服務(wù)通信的流程包括以下步驟:服務(wù)服務(wù)器啟動(dòng)并等待服務(wù)客戶端的請(qǐng)求;服務(wù)客戶端發(fā)送請(qǐng)求消息到指定的服務(wù)服務(wù)器;服務(wù)服務(wù)器接收到請(qǐng)求消息后進(jìn)行處理并生成相應(yīng)的響應(yīng)消息;服務(wù)服務(wù)器將響應(yīng)消息發(fā)送給服務(wù)客戶端;服務(wù)客戶端接收并處理服務(wù)服務(wù)器的響應(yīng)消息。31與話題通信機(jī)制不同,服務(wù)通信機(jī)制是一種同步通信方式。服務(wù)客戶端發(fā)送請(qǐng)求消息后會(huì)等待服務(wù)服務(wù)器的響應(yīng),這種請(qǐng)求和響應(yīng)是一對(duì)一的關(guān)系。服務(wù)客戶端可以等待響應(yīng),也可以設(shè)置超時(shí)時(shí)間來(lái)處理無(wú)響應(yīng)的情況。在程序中使用服務(wù)通信機(jī)制可以得知節(jié)點(diǎn)發(fā)出的數(shù)據(jù)是否被目標(biāo)節(jié)點(diǎn)接收到,從而保證一些復(fù)雜的任務(wù)能夠正確進(jìn)行。通常情況下,話題通信機(jī)制中的消息側(cè)重于狀態(tài)信息(位姿、傳感器數(shù)據(jù)、速度等),而服務(wù)通信機(jī)制中的消息側(cè)重于操作(設(shè)定參數(shù)、設(shè)定模式、創(chuàng)建、清除等)。二、服務(wù)數(shù)據(jù)的類型在ROS中使用服務(wù)通信機(jī)制時(shí),需要定義特定的服務(wù)數(shù)據(jù)類型。服務(wù)數(shù)據(jù)類型定義了服務(wù)請(qǐng)求消息和服務(wù)響應(yīng)消息的結(jié)構(gòu)和內(nèi)容:服務(wù)請(qǐng)求消息是由服務(wù)客戶端發(fā)送給服務(wù)服務(wù)器的消息,它描述了服務(wù)客戶端希望服務(wù)服務(wù)器執(zhí)行的特定任務(wù)或提供的服務(wù);服務(wù)響應(yīng)消息是服務(wù)服務(wù)器對(duì)服務(wù)請(qǐng)求消息的回應(yīng),它包含了服務(wù)服務(wù)器執(zhí)行任務(wù)后產(chǎn)生的結(jié)果或提供的服務(wù)。服務(wù)請(qǐng)求消息和服務(wù)響應(yīng)消息的結(jié)構(gòu)和內(nèi)容均應(yīng)根據(jù)具體的應(yīng)用場(chǎng)景而定,可以包含不同的字段和數(shù)據(jù)類型。3233在ROS中,可以使用服務(wù)描述文件(后綴為“.srv”)來(lái)自定義服務(wù)數(shù)據(jù),服務(wù)描述文件通常放置在功能包的srv文件夾中。服務(wù)數(shù)據(jù)由請(qǐng)求和響應(yīng)兩個(gè)數(shù)據(jù)域組成,請(qǐng)求和響應(yīng)可以包含不同數(shù)量的字段,并且可以指定不同的數(shù)據(jù)類型,這些字段之間用“---”進(jìn)行分隔,如圖所示。在下圖中,服務(wù)請(qǐng)求由兩個(gè)整數(shù)字段“a”和“b”組成,而服務(wù)響應(yīng)由一個(gè)整數(shù)字段“sum”組成。通過(guò)定義服務(wù)數(shù)據(jù),可以明確規(guī)定服務(wù)的輸入和輸出格式,以便在節(jié)點(diǎn)間進(jìn)行準(zhǔn)確的請(qǐng)求和響應(yīng)。34服務(wù)數(shù)據(jù)的結(jié)構(gòu)三、服務(wù)通信機(jī)制在機(jī)器人系統(tǒng)中的應(yīng)用服務(wù)通信機(jī)制在機(jī)器人控制、感知數(shù)據(jù)處理、數(shù)據(jù)查詢與管理、分布式任務(wù)協(xié)作、系統(tǒng)狀態(tài)檢測(cè)與管理等方面都有實(shí)際使用場(chǎng)景。以感知數(shù)據(jù)處理為例,服務(wù)服務(wù)器可以接收來(lái)自服務(wù)客戶端的感知數(shù)據(jù),如圖像或激光掃描數(shù)據(jù),服務(wù)服務(wù)器會(huì)對(duì)接收到的數(shù)據(jù)進(jìn)行分析和處理,并生成響應(yīng)消息以提供處理結(jié)果。35相比于話題通信機(jī)制,服務(wù)通信機(jī)制更適用于需要明確請(qǐng)求和響應(yīng)的場(chǎng)景、需要傳遞參數(shù)和獲取結(jié)果的操作以及需要數(shù)據(jù)交互和函數(shù)調(diào)用的任務(wù)。此外,服務(wù)通信機(jī)制具有同步操作和阻塞等待的能力,能夠確保順序性和依賴關(guān)系,更適合需要同步操作和結(jié)果等待的場(chǎng)景。36任務(wù)二

創(chuàng)建并編譯自定義服務(wù)數(shù)據(jù)371.?掌握自定義服務(wù)數(shù)據(jù)的創(chuàng)建方法2.?掌握自定義服務(wù)數(shù)據(jù)的編譯方法3.?能創(chuàng)建并編譯自定義服務(wù)數(shù)據(jù)任務(wù)目標(biāo)38一、自定義服務(wù)數(shù)據(jù)的創(chuàng)建在使用服務(wù)通信機(jī)制之前,應(yīng)對(duì)程序需要的服務(wù)數(shù)據(jù)進(jìn)行定義。服務(wù)數(shù)據(jù)通常會(huì)被定義在功能包的srv文件夾中,服務(wù)數(shù)據(jù)文件的后綴為“.srv”,名稱可以根據(jù)需求確定,服務(wù)數(shù)據(jù)文件如圖所示?;A(chǔ)知識(shí)39服務(wù)數(shù)據(jù)文件服務(wù)數(shù)據(jù)的請(qǐng)求和響應(yīng)應(yīng)與希望實(shí)現(xiàn)的程序功能相對(duì)應(yīng)。例如,若客戶端節(jié)點(diǎn)發(fā)送兩個(gè)整數(shù)到服務(wù)器端,希望得到這兩個(gè)整數(shù)的累加值,則服務(wù)數(shù)據(jù)中的請(qǐng)求為兩個(gè)整數(shù),響應(yīng)為一個(gè)整數(shù)。將以下內(nèi)容添加到服務(wù)數(shù)據(jù)文件中并保存,即可完成服務(wù)數(shù)據(jù)的創(chuàng)建。int64aint64b---int64sum服務(wù)數(shù)據(jù)文件通過(guò)定義請(qǐng)求消息和響應(yīng)消息的結(jié)構(gòu)、數(shù)據(jù)類型和字段,確保響應(yīng)能夠按照預(yù)期進(jìn)行。40二、自定義服務(wù)數(shù)據(jù)的編譯由于需要在程序中調(diào)用自定義的服務(wù)數(shù)據(jù),所以需要將服務(wù)數(shù)據(jù)的依賴添加到功能包清單中,并將服務(wù)數(shù)據(jù)添加到編譯選項(xiàng)文件中。打開功能包中的package.xml文件,添加以下兩行內(nèi)容:<build_export_depend>message_generation</build_export_depend>#服務(wù)數(shù)據(jù)生成器<exec_depend>message_runtime</exec_depend>41打開功能包中的CMakeLists.txt文件,添加以下內(nèi)容:42添加完成后,編譯功能包時(shí)系統(tǒng)將自動(dòng)根據(jù)創(chuàng)建的服務(wù)數(shù)據(jù)文件生成對(duì)應(yīng)的頭文件(包含代碼聲明的文件,用于在源代碼文件中引入函數(shù)、類、變量等聲明。頭文件通常以“.h”或“.hpp”為擴(kuò)展名,并通過(guò)#include指令在源代碼中引入),這些文件存放在工作空間的devel/include目錄下,如圖所示。43系統(tǒng)生成的頭文件任務(wù)三

使用服務(wù)通信機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)通信441.?掌握服務(wù)器節(jié)點(diǎn)程序相關(guān)函數(shù)2.?掌握客戶端節(jié)點(diǎn)程序相關(guān)函數(shù)3.?能使用服務(wù)通信機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)通信任務(wù)目標(biāo)45一、服務(wù)器節(jié)點(diǎn)程序若要在程序中使用曾定義過(guò)的服務(wù)數(shù)據(jù),需要在程序的開頭添加代碼,用于從頭文件中導(dǎo)入服務(wù)數(shù)據(jù)類型,代碼如圖所示?;A(chǔ)知識(shí)46添加代碼rospy.Service()函數(shù)用于創(chuàng)建服務(wù)器,服務(wù)器有三個(gè)主要參數(shù):服務(wù)名稱、服務(wù)數(shù)據(jù)類型以及處理函數(shù)。例如,創(chuàng)建一個(gè)服務(wù)名稱為“sum_ints”、服務(wù)數(shù)據(jù)類型為“Sum-Ints”、處理函數(shù)為“handle_sum_ints”的服務(wù)器,代碼如圖所示。47創(chuàng)建服務(wù)器服務(wù)通信機(jī)制中的處理函數(shù)與話題通信機(jī)制中訂閱者的回調(diào)函數(shù)的作用相似,當(dāng)接收到數(shù)據(jù)時(shí)會(huì)自動(dòng)執(zhí)行并處理數(shù)據(jù)。另外,處理函數(shù)的返回值就是發(fā)送給客戶端的響應(yīng)消息,需要按照服務(wù)數(shù)據(jù)定義的類型填寫變量。例如,編寫一個(gè)用于計(jì)算從一個(gè)數(shù)累加到另一個(gè)數(shù)的處理函數(shù),如圖所示。48處理函數(shù)二、客戶端節(jié)點(diǎn)程序由于客戶端也需要使用服務(wù)數(shù)據(jù),因此要在程序的開頭導(dǎo)入新建的服務(wù)類型,代碼如圖所示。49導(dǎo)入服務(wù)類型當(dāng)編寫客戶端節(jié)點(diǎn)程序時(shí),只需等待并連接服務(wù)器即可開始工作,無(wú)須創(chuàng)建獨(dú)立的ROS節(jié)點(diǎn)。為了確保所需服務(wù)已注冊(cè)且可用,可以使用rospy.wait_for_service()函數(shù)等待指定的服務(wù),該函數(shù)會(huì)在服務(wù)可用之前一直阻塞程序執(zhí)行。一旦服務(wù)注冊(cè)成功,客戶端可以使用rospy.ServiceProxy()函數(shù)創(chuàng)建一個(gè)服務(wù)代理,用于向服務(wù)器發(fā)送消息并接收響應(yīng)。服務(wù)代理提供了一個(gè)簡(jiǎn)潔的接口,使得與服務(wù)的通信變得簡(jiǎn)單而直觀??蛻舳斯?jié)點(diǎn)程序如圖所示。5051客戶端節(jié)點(diǎn)程序任務(wù)一初識(shí)數(shù)據(jù)可視化01任務(wù)二實(shí)現(xiàn)小海龜速度數(shù)據(jù)的可視化02任務(wù)三查看ROS進(jìn)程網(wǎng)絡(luò)計(jì)算圖03任務(wù)四使用RViz實(shí)現(xiàn)數(shù)據(jù)的可視化04任務(wù)五使用TF坐標(biāo)變換實(shí)現(xiàn)小海龜跟隨運(yùn)動(dòng)0152任務(wù)一

初識(shí)數(shù)據(jù)可視化531.?了解數(shù)據(jù)可視化的概念2.?了解數(shù)據(jù)可視化工具rqt和RViz任務(wù)目標(biāo)54一、數(shù)據(jù)可視化的概念數(shù)據(jù)可視化是將數(shù)據(jù)轉(zhuǎn)化為圖形、圖表、圖像或其他可視形式的過(guò)程,旨在幫助用戶更好地理解和分析數(shù)據(jù)。通過(guò)可視化,復(fù)雜的數(shù)據(jù)集可以以直觀、易懂的方式展示,可以清楚地顯示數(shù)據(jù)中的模式、趨勢(shì)和關(guān)聯(lián)關(guān)系。數(shù)據(jù)可視化在各個(gè)領(lǐng)域中都有廣泛應(yīng)用,包括科學(xué)研究、工程分析、商業(yè)智能、市場(chǎng)營(yíng)銷、醫(yī)療健康等,它為人們提供了一種強(qiáng)大的工具來(lái)探索數(shù)據(jù)、發(fā)現(xiàn)信息和傳達(dá)見(jiàn)解?;A(chǔ)知識(shí)55數(shù)據(jù)可視化的目標(biāo)是通過(guò)圖形化手段清晰、有效地傳達(dá)和交流信息,因此美學(xué)形式和功能需要并重,設(shè)計(jì)和表達(dá)需要綜合考慮,以確保信息的準(zhǔn)確性、可理解性和吸引力,使得觀察者能夠從中獲得有意義的洞察和理解。56二、數(shù)據(jù)可視化工具ROS內(nèi)部有豐富多樣的可視化工具,如果考慮ROS用戶個(gè)人發(fā)布的工具,那么ROS的工具數(shù)量將變得非常龐大。本任務(wù)專注介紹GUI(圖形用戶界面)開發(fā)工具(如rqt)和三維可視化工具(如RViz)。571.?GUI開發(fā)工具——rqtROS為機(jī)器人開發(fā)提供了各種GUI工具,包括將每個(gè)節(jié)點(diǎn)的層次結(jié)構(gòu)顯示為圖形且顯示當(dāng)前節(jié)點(diǎn)和話題狀態(tài)的rqt_graph、將消息顯示為二維圖形的rqt_plot等。從ROSFuerte版本開始,這些GUI開發(fā)工具被整合到了一個(gè)名為rqt的工具中,它集成了30多種工具,可以作為一個(gè)綜合的GUI工具來(lái)使用。此外,RViz也被集成到rqt的插件中,這使rqt成為ROS的一個(gè)不可缺少的GUI工具。58rqt是基于Qt開發(fā)的,而Qt是一個(gè)廣泛應(yīng)用于計(jì)算機(jī)編程的跨平臺(tái)框架,用戶可以方便、自由地添加和開發(fā)插件。rqt的部分常用插件及其功能見(jiàn)下表。59節(jié)點(diǎn)管理器與節(jié)點(diǎn)、節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系60節(jié)點(diǎn)管理器與節(jié)點(diǎn)、節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系61節(jié)點(diǎn)管理器與節(jié)點(diǎn)、節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系2.?三維可視化工具——RViz(1)RViz的功能RViz是ROS的三維可視化工具,具有以下兩個(gè)主要功能:1)外部信息的圖形顯示:RViz可以以圖形化的方式顯示外部信息,如機(jī)器人模型、傳感器數(shù)據(jù)、地圖等。通過(guò)RViz,用戶可以直觀地觀察和了解機(jī)器人的位置和姿態(tài)、環(huán)境中的物體等,這對(duì)于機(jī)器人的導(dǎo)航、感知、決策等任務(wù)有非常大的幫助。622)發(fā)布控制消息:除了顯示外部信息,RViz還允許用戶發(fā)布控制消息到ROS系統(tǒng)中。通過(guò)RViz的界面,用戶可以發(fā)送控制指令,如設(shè)置目標(biāo)位置、設(shè)定機(jī)器人的運(yùn)動(dòng)速度等,從而在RViz環(huán)境中直接與機(jī)器人進(jìn)行交互,觀察其行為和效果。63(2)RViz的界面RViz的界面如圖所示,包括工具欄、項(xiàng)目顯示區(qū)、3D視圖顯示區(qū)、觀測(cè)視角設(shè)置區(qū)和時(shí)間顯示區(qū)。64RViz的界面1)工具欄。RViz界面的上部為工具欄,包括視角控制、目標(biāo)設(shè)置、地點(diǎn)發(fā)布等,還可以添加自定義的插件。工具欄中的一些工具可以用來(lái)操縱3D視角,如展示機(jī)器人模型的關(guān)系、調(diào)整機(jī)器人視角、設(shè)置導(dǎo)航目標(biāo)等。2)項(xiàng)目顯示區(qū)。RViz界面的左側(cè)為項(xiàng)目顯示區(qū),顯示項(xiàng)目包含一系列的可視化插件及其屬性,顯示當(dāng)前選擇的插件并能對(duì)插件的屬性進(jìn)行設(shè)置,這些插件的主要功能是查看ROS消息并以可視化的方式顯示出來(lái)。消息可以是傳感器數(shù)據(jù),如拍攝的圖像、3D點(diǎn)云等,也可以是機(jī)器人模型、變換tf等數(shù)據(jù)。653)3D視圖顯示區(qū)。RViz界面的中間部分為3D視圖顯示區(qū),能夠顯示外部信息。4)觀測(cè)視角設(shè)置區(qū)。RViz界面的右側(cè)為觀測(cè)視角設(shè)置區(qū),可以設(shè)置不同的觀測(cè)視角。使用視圖面板可以保存不同的3D視角,并通過(guò)加載保存的設(shè)置信息來(lái)切換不同的視角。5)時(shí)間顯示區(qū)。RViz界面的下部為時(shí)間顯示區(qū),包括系統(tǒng)時(shí)間、ROS時(shí)間等,用戶也可以通過(guò)這個(gè)面板對(duì)RViz進(jìn)行初始化設(shè)置。66任務(wù)二

實(shí)現(xiàn)小海龜速度數(shù)據(jù)的可視化671.?了解rqt_plot命令的使用方法2.?能使用rqt_plot命令實(shí)現(xiàn)小海龜速度數(shù)據(jù)的可視化任務(wù)目標(biāo)68rqt_plot命令的使用rqt_plot命令可以在ROS中繪制數(shù)據(jù)的曲線圖,使用戶能夠更直觀地觀察和分析數(shù)據(jù)的變化趨勢(shì),從而更好地進(jìn)行數(shù)據(jù)處理和決策。例如,當(dāng)開發(fā)過(guò)程中需要查看機(jī)器人的原始數(shù)據(jù)時(shí),使用rqt_plot命令可以將這些原始數(shù)據(jù)以曲線的形式繪制出來(lái),更清晰地展現(xiàn)數(shù)據(jù)的變化情況。在ROS中,可以通過(guò)輸入rqt_plot命令來(lái)打開曲線坐標(biāo)窗口,可以在窗口上方的輸入框中添加或刪除話題?;A(chǔ)知識(shí)6970曲線坐標(biāo)窗口界面打開曲線坐標(biāo)窗口界面的方法有兩種,分別為使用命令行啟動(dòng)和通過(guò)GUI界面選擇。1.使用命令行啟動(dòng),命令如下:$rqt_plot/[topic_name]例如,輸入以下命令,打開小海龜?shù)?turtle1/pose的相關(guān)界面。$rqt_plot/turtle1/pose/x/turtle1/pose/y712.通過(guò)GUI界面選擇,操作步驟如下:(1)輸入以下命令,啟動(dòng)rqt_plot。$rqt_plot(2)在GUI界面“Topic”右側(cè)文本框中輸入話題,然后單擊文本框右側(cè)的加號(hào)即可完成話題的添加,如圖所示。72添加話題若不想顯示某個(gè)話題,可以單擊圖中的減號(hào)按鈕,再選擇相應(yīng)話題以取消顯示即可。73取消顯示某個(gè)話題任務(wù)三

查看ROS進(jìn)程網(wǎng)絡(luò)計(jì)算圖741.?了解計(jì)算圖的概念與作用2.?掌握rqt_graph命令的作用3.?能使用rqt_graph命令查看小海龜仿真器的計(jì)算圖任務(wù)目標(biāo)75一、計(jì)算圖的概念與作用在ROS中,計(jì)算是通過(guò)進(jìn)程網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)的,其中每個(gè)進(jìn)程被稱為一個(gè)ROS節(jié)點(diǎn),這些節(jié)點(diǎn)相互連接形成了一個(gè)計(jì)算圖(graph),它描述了節(jié)點(diǎn)之間的通信和交互關(guān)系。計(jì)算圖中的重要概念包括節(jié)點(diǎn)、節(jié)點(diǎn)管理器、參數(shù)服務(wù)器、消息、話題、服務(wù)和消息記錄包,如圖所示。其中,橢圓形表示一個(gè)運(yùn)行中的ROS節(jié)點(diǎn);矩形表示ROS話題,用于在節(jié)點(diǎn)之間傳遞消息,箭頭表示消息的流向;長(zhǎng)方體表示TF變換關(guān)系?;A(chǔ)知識(shí)7677計(jì)算圖實(shí)例二、rqt_graph命令的作用在ROS系統(tǒng)中,rqt_graph是rqt程序包中的一個(gè)重要工具。它以圖形化的方式顯示整個(gè)通信架構(gòu),清晰地展示當(dāng)前正在運(yùn)行的節(jié)點(diǎn)和話題以及消息在系統(tǒng)中的流向。通過(guò)使用rqt_graph命令可以獲得系統(tǒng)的整體情況和信息流動(dòng)的可視化展示,學(xué)習(xí)者可以了解消息是如何在不同節(jié)點(diǎn)之間進(jìn)行傳遞和處理的,從而更好地理解整個(gè)系統(tǒng)的運(yùn)行原理。此外,rqt_graph還能幫助學(xué)習(xí)者快速發(fā)現(xiàn)和糾正通信方面的問(wèn)題,提高開發(fā)調(diào)試的效率。78任務(wù)四

使用RViz實(shí)現(xiàn)數(shù)據(jù)的可視化791.?了解RViz可視化元素菜單中各項(xiàng)目的功能2.?掌握RViz中可視化元素的添加方法3.?能使用RViz實(shí)現(xiàn)數(shù)據(jù)的可視化任務(wù)目標(biāo)80一、RViz可視化元素菜單使用RViz的過(guò)程中經(jīng)常會(huì)用到可視化元素菜單,如圖所示,菜單的調(diào)用方法是單擊顯示屏(Displays)菜單下方的“Add”。該菜單用于控制三維視圖(3DView)中顯示的信息內(nèi)容,各項(xiàng)目的說(shuō)明見(jiàn)下表?;A(chǔ)知識(shí)8182可視化元素菜單(部分)83可視化元素菜單內(nèi)容說(shuō)明84可視化元素菜單內(nèi)容說(shuō)明85可視化元素菜單內(nèi)容說(shuō)明二、RViz中可視化元素的添加方法在RViz中添加可視化元素的方法有兩種,一種是按顯示類型添加,另一種是按話題添加。1.?按顯示類型添加(1)在顯示屏菜單中單擊“Add”,彈出“rviz”對(duì)話框。86單擊“Add”(2)單擊“rviz”對(duì)話框中的“Bydisplaytype”選項(xiàng)卡,選擇想要的顯示類型,如“Map”,選中后單擊“OK”,如圖所示。87按顯示類型添加2.?按話題添加(1)在顯示屏菜單中單擊“Add”,彈出“rviz”對(duì)話框。(2)單擊對(duì)話框中的“Bytopic”選項(xiàng)卡,即可顯示所有的話題選項(xiàng),選擇需要的話題,最后單擊“OK”,如圖所示。88按話題添加任務(wù)五

使用TF坐標(biāo)變換實(shí)現(xiàn)小海龜跟隨運(yùn)動(dòng)891.?了解TF坐標(biāo)變換的基礎(chǔ)知識(shí)2.?掌握TF坐標(biāo)變換功能包的作用和使用方法3.?掌握常用的TF工具4.?能使用TF坐標(biāo)變換實(shí)現(xiàn)小海龜跟隨運(yùn)動(dòng)任務(wù)目標(biāo)90一、TF坐標(biāo)變換坐標(biāo)變換是機(jī)器人學(xué)中一個(gè)非常基礎(chǔ)且重要的概念。機(jī)器人本體和機(jī)器人的工作環(huán)境中存在大量的組件元素,這些組件元素所處的相對(duì)位置和姿態(tài)各有不同,而在機(jī)器人的設(shè)計(jì)和應(yīng)用中都會(huì)涉及不同組件位置變換的計(jì)算,這就需要引入坐標(biāo)系以及坐標(biāo)變換的概念。基礎(chǔ)知識(shí)91ROS中的坐標(biāo)變換系統(tǒng)由TF功能包維護(hù)。在許多ROS功能包(如SLAM建圖和機(jī)器人導(dǎo)航)中,TF功能包用于發(fā)布三維空間中各個(gè)坐標(biāo)系之間的變換關(guān)系,下圖顯示了世界坐標(biāo)系、激光雷達(dá)坐標(biāo)系和機(jī)器人坐標(biāo)系之間的變換關(guān)系,這種變換關(guān)系在機(jī)器人感知和導(dǎo)航中至關(guān)重要。通常情況下,三維坐標(biāo)系的+X方向用紅色坐標(biāo)軸表示,+Y方向用綠色坐標(biāo)軸表示,+Z方向用藍(lán)色坐標(biāo)軸表示。9293坐標(biāo)變換二、TF坐標(biāo)變換功能包的作用一個(gè)完整的機(jī)器人系統(tǒng)通常有很多三維坐標(biāo)系,如圖所示是PR2機(jī)器人的所有三維坐標(biāo)系,如世界坐標(biāo)系(worldframe)、機(jī)器人中心坐標(biāo)系(baseframe)、機(jī)械夾爪坐標(biāo)系(gripperframe)、機(jī)器人頭部坐標(biāo)系(headframe)等,這些坐標(biāo)系都會(huì)隨著時(shí)間的推移發(fā)生變化。9495PR2機(jī)器人的所有三維坐標(biāo)系TF坐標(biāo)變換功能包的作用是根據(jù)時(shí)間緩沖維護(hù)多個(gè)坐標(biāo)系之間的坐標(biāo)變換關(guān)系,它可以在任何時(shí)間跟蹤多個(gè)坐標(biāo)系。它使用樹型數(shù)據(jù)結(jié)構(gòu),可以幫助開發(fā)者方便、快捷地完成點(diǎn)、向量等坐標(biāo)的變換。通過(guò)TF坐標(biāo)變換功能包,開發(fā)者可以請(qǐng)求以下類型的數(shù)據(jù):1.坐標(biāo)系之間的變換關(guān)系:TF坐標(biāo)變換功能包允許開發(fā)者查詢不同坐標(biāo)系之間的變換關(guān)系,如一個(gè)坐標(biāo)系相對(duì)于另一個(gè)坐標(biāo)系的平移和旋轉(zhuǎn)關(guān)系。962.時(shí)刻的坐標(biāo)變換:TF坐標(biāo)變換功能包能夠記錄并提供坐標(biāo)系在不同時(shí)間點(diǎn)的變換關(guān)系。開發(fā)者可以查詢過(guò)去或未來(lái)的特定時(shí)間點(diǎn)的坐標(biāo)變換數(shù)據(jù),以便對(duì)歷史或預(yù)測(cè)的位置、姿態(tài)進(jìn)行分析或規(guī)劃。3.運(yùn)動(dòng)中的坐標(biāo)變換:對(duì)于運(yùn)動(dòng)中的物體或機(jī)器人,TF坐標(biāo)變換功能包能夠提供動(dòng)態(tài)的坐標(biāo)變換數(shù)據(jù)。開發(fā)者可以獲取物體或機(jī)器人在不同時(shí)間點(diǎn)的位置和姿態(tài)信息,以便進(jìn)行實(shí)時(shí)的控制和反饋。97三、TF坐標(biāo)變換功能包的使用TF坐標(biāo)變換功能包的使用包括訂閱TF變換和發(fā)布TF變換兩個(gè)方面。1.?訂閱TF變換通過(guò)訂閱TF變換,開發(fā)者可以接收并監(jiān)聽來(lái)自TF坐標(biāo)變換系統(tǒng)的變換消息,獲取兩個(gè)坐標(biāo)系之間的變換關(guān)系,并將其應(yīng)用于機(jī)器人的導(dǎo)航、感知或其他相關(guān)任務(wù)中,進(jìn)行相應(yīng)的處理和決策。982.?發(fā)布TF變換通過(guò)發(fā)布TF變換,開發(fā)者可以向系統(tǒng)發(fā)布坐標(biāo)系之間的變換關(guān)系。ROS系統(tǒng)中可能存在多個(gè)不同的部分同時(shí)發(fā)布TF變換,每個(gè)部分都可以通過(guò)發(fā)布TF變換消息將坐標(biāo)變換關(guān)系直接插入TF樹中。這種方式無(wú)須另外的同步設(shè)置,各個(gè)部分可以獨(dú)立地向TF樹中添加坐標(biāo)變換關(guān)系。通過(guò)這種方式,開發(fā)者可以方便地管理和維護(hù)坐標(biāo)變換關(guān)系,確保系統(tǒng)中各個(gè)部分的數(shù)據(jù)在時(shí)間和空間上保持同步。99四、TF工具TF提供了豐富的終端工具來(lái)幫助開發(fā)者調(diào)試和創(chuàng)建TF變換。1.?tf_monitortf_monitor工具的功能是打印TF樹中所有坐標(biāo)系的發(fā)布狀態(tài),命令的格式如下,可以通過(guò)輸入?yún)?shù)來(lái)查看指定坐標(biāo)系的發(fā)布狀態(tài),程序運(yùn)行結(jié)果如圖所示。$rosruntftf_monitor100101查看坐標(biāo)系的發(fā)布狀態(tài)2.?tf_echotf_echo工具的功能是查看指定坐標(biāo)系之間的變換關(guān)系,命令的格式如下。以小海龜為例,程序運(yùn)行結(jié)果如圖所示。$rosruntftf_echo<source_frame><target_frame>102查看坐標(biāo)系之間的變換關(guān)系3.?static_transform_publisherstatic_transform_publisher工具的功能是定義兩個(gè)坐標(biāo)系之間的靜態(tài)坐標(biāo)變換,該工具在標(biāo)定機(jī)器人傳感器的位姿時(shí)應(yīng)用較多,命令的格式如下:$static_transform_publisherxyzyawpitchrollframe_idchild_frame_idperiod_in_ms$static_transform_publisherxyzqxqyqzqwframe_idchild_frame_idperiod_in_ms以上兩種命令需要設(shè)置坐標(biāo)的偏移和旋轉(zhuǎn)參數(shù)。103偏移參數(shù)使用相對(duì)于X、Y、Z三軸的坐標(biāo)位移。旋轉(zhuǎn)參數(shù)的表示方法有兩種,一種是以弧度為單位表示yaw/pitch/roll角度,另一種是使用四元數(shù)表達(dá)旋轉(zhuǎn)角度。發(fā)布頻率以ms為單位。該命令不僅可以在終端中使用,還可以在launch文件中使用,命令格式如下:<launch><nodepkg="tf"type="static_transform_publisher"name="link1_broadcaster"args="1000001link1_parentlink1100"/></launch>1044.?view_framesview_frames是可視化的調(diào)試工具,可以生成pdf文件,顯示整棵TF樹的信息,以查看整個(gè)機(jī)器人系統(tǒng)的坐標(biāo)系層次結(jié)構(gòu)。該命令的格式如下,程序運(yùn)行結(jié)果如圖所示,然后使用pdf閱讀器查看生成的pdf文件,TF樹如圖所示。$rosruntfview_frames105可視化調(diào)試106TF樹任務(wù)一機(jī)器人仿真概述01任務(wù)二搭建仿真場(chǎng)景02任務(wù)三在仿真環(huán)境中實(shí)現(xiàn)SLAM建圖03任務(wù)四在仿真環(huán)境中實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)導(dǎo)航04107任務(wù)一

機(jī)器人仿真概述1081.?了解仿真的概念、內(nèi)容和模型2.?了解仿真軟件Gazebo的功能和特點(diǎn)3.?掌握Gazebo仿真的步驟任務(wù)目標(biāo)109一、仿真簡(jiǎn)介仿真通過(guò)使用模型復(fù)現(xiàn)實(shí)際系統(tǒng)中的關(guān)鍵過(guò)程,通過(guò)對(duì)系統(tǒng)模型進(jìn)行試驗(yàn)來(lái)研究系統(tǒng)的性質(zhì)和行為。仿真也稱為模擬,它涵蓋了物理、數(shù)學(xué)、靜態(tài)、動(dòng)態(tài)、連續(xù)、離散等多種模型類型,不僅適用于電氣、機(jī)械、化工、水力、熱力等各類系統(tǒng),還可應(yīng)用于社會(huì)、經(jīng)濟(jì)、生態(tài)、管理等領(lǐng)域。當(dāng)研究對(duì)象的成本高昂、操作風(fēng)險(xiǎn)高或需要長(zhǎng)時(shí)間才能了解參數(shù)變化的情況時(shí),仿真是一種特別有效的研究手段?;A(chǔ)知識(shí)110仿真的過(guò)程包括兩個(gè)主要步驟:建立仿真模型和進(jìn)行仿真實(shí)驗(yàn)。建立仿真模型涉及對(duì)系統(tǒng)的結(jié)構(gòu)、行為和關(guān)系進(jìn)行建模以及選擇適當(dāng)?shù)姆抡婀ぞ吆图夹g(shù)。進(jìn)行仿真實(shí)驗(yàn)時(shí),應(yīng)根據(jù)模型設(shè)定初始條件和參數(shù),運(yùn)行仿真程序并收集仿真數(shù)據(jù),以評(píng)估系統(tǒng)的性能和響應(yīng)。通過(guò)反復(fù)調(diào)整模型參數(shù),仿真可以幫助學(xué)習(xí)者深入理解系統(tǒng)的特性、優(yōu)化設(shè)計(jì)和解決問(wèn)題,是一種安全、經(jīng)濟(jì)、高效的手段。111在機(jī)器人領(lǐng)域,仿真對(duì)于驗(yàn)證機(jī)器人行為、測(cè)試算法、設(shè)計(jì)控制策略等方面具有重要意義。通過(guò)在仿真環(huán)境中模擬機(jī)器人的運(yùn)動(dòng)、感知和交互,可以減少機(jī)器人的開發(fā)和測(cè)試成本,提高開發(fā)效率。同時(shí),仿真還可以提供可視化展示、數(shù)據(jù)分析和結(jié)果驗(yàn)證等功能,幫助學(xué)習(xí)者更好地理解機(jī)器人系統(tǒng)的運(yùn)行和行為。因此,掌握仿真技術(shù)對(duì)于機(jī)器人工程師和研究人員而言是非常重要的技能之一。1121.?仿真內(nèi)容機(jī)器人仿真涵蓋了物性數(shù)據(jù)庫(kù)、單元操作模型庫(kù)、模型求解算法庫(kù)、仿真環(huán)境及其輸入輸出,這些部分共同構(gòu)建了一個(gè)完整的機(jī)器人仿真系統(tǒng)。(1)物性數(shù)據(jù)庫(kù):提供模塊運(yùn)行所需的基礎(chǔ)物性數(shù)據(jù)和物性計(jì)算,包括溫度、壓力、密度等參數(shù)。(2)單元操作模型庫(kù):包括各種模塊,每個(gè)模塊由物料平衡、能量平衡、相平衡、反應(yīng)速率等方程組成的數(shù)學(xué)模型構(gòu)成。這些模型描述了單元操作的行為,如反應(yīng)器、蒸餾塔、傳熱設(shè)備等。113(3)模型求解算法庫(kù):提供各種數(shù)值求解算法,用于解決仿真模型中的線性方程組、非線性方程組、參數(shù)擬合、最優(yōu)化問(wèn)題等。這些算法能夠?qū)δP瓦M(jìn)行求解和優(yōu)化,得到模擬結(jié)果。(4)仿真環(huán)境及其輸入輸出:仿真環(huán)境是管理仿真運(yùn)行的機(jī)構(gòu),它控制著仿真的進(jìn)行程度和參數(shù)設(shè)置。同時(shí),仿真環(huán)境還負(fù)責(zé)處理輸入數(shù)據(jù)(如模型參數(shù)、初始條件)并生成輸出結(jié)果(如模擬過(guò)程的變量值、曲線圖、動(dòng)畫)。1142.?仿真模型仿真模型是用于對(duì)被仿真對(duì)象進(jìn)行模擬和研究的相似物或其結(jié)構(gòu)形式。它可以是物理模型或數(shù)學(xué)模型,但并不是所有對(duì)象都能夠建立物理模型。在某些情況下,為了研究復(fù)雜系統(tǒng)的行為,只能通過(guò)計(jì)算機(jī)來(lái)進(jìn)行仿真。115建立仿真模型,首先需要將被仿真對(duì)象的行為和特性轉(zhuǎn)化為數(shù)學(xué)模型,這涉及描述對(duì)象動(dòng)力學(xué)特性的方程、參數(shù)、約束等。通過(guò)對(duì)仿真對(duì)象進(jìn)行觀察、測(cè)量等,可以獲取必要的數(shù)據(jù)來(lái)支持模型的建立。數(shù)學(xué)模型建立完成后,需要將其轉(zhuǎn)換成適合計(jì)算機(jī)處理的形式,即生成仿真模型。對(duì)于模擬計(jì)算機(jī),這意味著將數(shù)學(xué)模型轉(zhuǎn)換成模擬排列圖,以便通過(guò)模擬的方式進(jìn)行仿真;而對(duì)于數(shù)字計(jì)算機(jī),則需要將數(shù)學(xué)模型轉(zhuǎn)換成計(jì)算機(jī)可執(zhí)行的源代碼,以便進(jìn)行數(shù)值計(jì)算和仿真實(shí)驗(yàn)。116二、仿真軟件Gazebo1.?Gazebo的功能Gazebo是一個(gè)免費(fèi)的開源機(jī)器人模擬環(huán)境,由WillowGarage開發(fā),其啟動(dòng)界面如圖所示。117Gazebo啟動(dòng)界面作為一個(gè)為機(jī)器人開發(fā)人員提供多種支持的工具軟件,Gazebo具有以下功能:(1)機(jī)器人模型設(shè)計(jì)。(2)快速原型構(gòu)建與算法測(cè)試。(3)使用真空?qǐng)鼍斑M(jìn)行回歸測(cè)試。(4)室內(nèi)/室外環(huán)境模擬。(5)傳感器數(shù)據(jù)模擬。支持的傳感器包括激光測(cè)距儀、2D/3D相機(jī)、Kinect類傳感器、接觸式傳感器、力—扭矩傳感器等。(6)采用面向?qū)ο蟮膱D形渲染引擎(OGRE)進(jìn)行高級(jí)3D對(duì)象和環(huán)境建模。1182.?Gazebo的特點(diǎn)Gazebo的特點(diǎn)如下:(1)動(dòng)力學(xué)仿真:支持多種高性能的物理引擎,如ODE、Bullet、SimBody、DART等。(2)三維可視化環(huán)境:支持顯示三維環(huán)境,包括光線、紋理、影子等。(3)傳感器仿真:支持傳感器數(shù)據(jù)的仿真,同時(shí)可以仿真?zhèn)鞲衅髟肼?。?)可擴(kuò)展插件:用戶可以定制開發(fā)插件,擴(kuò)展Gazebo的功能,滿足個(gè)性化需求。119(5)多種機(jī)器人模型:官方提供PR2、Pioneer2DX、TurtleBot等機(jī)器人模型,用戶也可以自己創(chuàng)建機(jī)器人模型。(6)TCP/IP傳輸:可以通過(guò)網(wǎng)絡(luò)通信實(shí)現(xiàn)遠(yuǎn)程仿真,即在后臺(tái)進(jìn)行仿真計(jì)算,然后將仿真結(jié)果傳輸?shù)角芭_(tái)顯示。(7)云仿真:仿真可以在Amazon、Softlayer等云端運(yùn)行,也可以在自己搭建的云服務(wù)器上運(yùn)行。(8)終端控制:用戶可以使用Gazebo提供的命令行工具在終端實(shí)現(xiàn)仿真控制。1203.?Gazebo仿真的步驟使用Gazebo軟件進(jìn)行仿真通常包括以下三個(gè)步驟:(1)創(chuàng)建仿真環(huán)境。首先需要?jiǎng)?chuàng)建一個(gè)仿真環(huán)境,該環(huán)境可以是室內(nèi)或室外的場(chǎng)景,包括地面、墻壁、障礙物等??梢酝ㄟ^(guò)Gazebo提供的圖形界面或配置文件,添加和調(diào)整環(huán)境中的各種元素,以滿足仿真需求。這樣的仿真環(huán)境能夠?yàn)闄C(jī)器人提供合適的場(chǎng)景和條件,使仿真更加真實(shí)和準(zhǔn)確。121(2)配置機(jī)器人模型。需要在仿真環(huán)境中為機(jī)器人創(chuàng)建相應(yīng)的模型,包括機(jī)器人的外觀、物理屬性、傳感器等。通過(guò)Gazebo提供的建模工具或?qū)氍F(xiàn)有的機(jī)器人模型,可以對(duì)機(jī)器人進(jìn)行詳細(xì)配置和設(shè)置,包括機(jī)器人的幾何結(jié)構(gòu)、質(zhì)量、關(guān)節(jié)、運(yùn)動(dòng)控制等方面的定義。配置機(jī)器人模型時(shí),還可以添加傳感器模型,如攝像頭、激光雷達(dá)等,以使仿真更加逼真和全面。122(3)正式啟動(dòng)仿真。仿真環(huán)境和機(jī)器人模型配置完成后,即可正式啟動(dòng)仿真。通過(guò)Gazebo的控制界面,可以啟動(dòng)仿真并觀察機(jī)器人在仿真環(huán)境中的運(yùn)動(dòng)和行為,可以通過(guò)調(diào)整仿真參數(shù)、設(shè)置機(jī)器人的目標(biāo)和任務(wù)等來(lái)探索不同的場(chǎng)景和情境。同時(shí),Gazebo還提供了豐富的工具和功能,如實(shí)時(shí)調(diào)試、數(shù)據(jù)記錄、可視化分析等,以支持仿真的監(jiān)控和評(píng)估。123任務(wù)二

搭建仿真場(chǎng)景1241.?了解Gazebo主界面的組成及各部分的功能2.?能使用Gazebo搭建仿真場(chǎng)景任務(wù)目標(biāo)125Gazebo主界面介紹Gazebo的主界面如圖所示,與RViz的界面非常相似。中央窗口顯示的是Gazebo的3D環(huán)境模型,窗口中的柵格表示環(huán)境模型的地平面,所有的環(huán)境元素都位于地平面之上。與RViz類似,Gazebo使用米或千米作為標(biāo)準(zhǔn)的距離計(jì)量單位。Gazebo還具備與RViz相同的光標(biāo)/鼠標(biāo)控制功能?;A(chǔ)知識(shí)126127Gazebo主界面1.?菜單欄菜單欄位于主界面的頂部,提供了Gazebo的基本控制和配置選項(xiàng),使用戶能夠在仿真環(huán)境中進(jìn)行各種操作。2.?3D視圖區(qū)3D視圖區(qū)是Gazebo主界面的核心區(qū)域,用于顯示仿真環(huán)境的三維模型。用戶可以通過(guò)該區(qū)域觀察和控制仿真過(guò)程,包括機(jī)器人的運(yùn)動(dòng)、物體的交互等。1283.?工具欄工具欄位于主界面上方,如圖所示。工具欄提供一系列常用的控制仿真過(guò)程的工具,例如,用戶可以在工具欄中選擇不同的工具(如選擇、移動(dòng)、旋轉(zhuǎn))來(lái)操作模型。129Gazebo工具欄選擇模式:在場(chǎng)景中做標(biāo)注。移動(dòng)模式:選擇要移動(dòng)的模型,可以沿X軸、Y軸、Z軸或任意方向移動(dòng)模型。旋轉(zhuǎn)模式:選擇要旋轉(zhuǎn)的模型,可以沿X軸、Y軸、Z軸或任意方向旋轉(zhuǎn)模型??s放模式:選擇要縮放的模型,可以沿X軸、Y軸、Z軸或任意方向縮放模型。撤銷/重做:在場(chǎng)景中撤銷/重做動(dòng)作。130基礎(chǔ)形狀:將簡(jiǎn)單的形狀插入場(chǎng)景中。照明燈光:將燈光添加到場(chǎng)景中。復(fù)制/粘貼:在場(chǎng)景中復(fù)制/粘貼模型。對(duì)齊:將模型對(duì)齊。捕捉:將一個(gè)模型捕捉到另一個(gè)模型。切換視圖:從多種角度查看場(chǎng)景。屏幕截圖:將屏幕畫面截圖保存。保存日志:保存Gazebo的運(yùn)行日志。1314.?模型列表模型列表位于主界面的左側(cè),顯示了當(dāng)前仿真環(huán)境中可用的模型。用戶可以從列表中選擇需要添加或操作的模型,如機(jī)器人、傳感器、物體等。通過(guò)拖拽模型到3D視圖區(qū),用戶可以將其放置到指定位置進(jìn)行仿真。模型列表中有三個(gè)選項(xiàng)卡:World(世界):該選項(xiàng)卡顯示當(dāng)前場(chǎng)景中的模型并允許用戶查看和修改模型的參數(shù),用戶還可以展開“GUI”選項(xiàng)并調(diào)整相機(jī)的姿態(tài)以改變視角。132Insert(插入):該選項(xiàng)卡用于為仿真場(chǎng)景添加新的對(duì)象(模型)。用戶需要單擊該選項(xiàng)卡以查看模型列表,然后選中目標(biāo)模型,在場(chǎng)景中單擊鼠標(biāo)左鍵即可將其添加到場(chǎng)景中。Layers(圖層):該選項(xiàng)卡用于組織并顯示仿真場(chǎng)景中可用的不同可視化組(若有)。每個(gè)圖層可以包含一個(gè)或多個(gè)模型,通過(guò)打開或關(guān)閉圖層,用戶可以顯示或隱藏該圖層中的模型。1335.?模型屬性項(xiàng)模型屬性項(xiàng)位于主界面的左側(cè)或右側(cè),顯示當(dāng)前選定模型的屬性和參數(shù)。用戶可以通過(guò)修改屬性項(xiàng)中的數(shù)值或選項(xiàng)來(lái)調(diào)整模型的屬性,如位置、大小、質(zhì)量等。這些屬性的調(diào)整將影響仿真過(guò)程中模型的行為和相互作用。1346.?時(shí)間顯示區(qū)時(shí)間顯示區(qū)位于主界面底部,如圖所示。用戶可以通過(guò)時(shí)間顯示區(qū)來(lái)監(jiān)控仿真的進(jìn)程,以便進(jìn)行時(shí)間的調(diào)整和觀察仿真過(guò)程的變化。135Gazebo時(shí)間顯示區(qū)模擬時(shí)間(仿真時(shí)間)是指仿真環(huán)境中的時(shí)間,它用于模擬系統(tǒng)中各種事件的發(fā)生和演化。在仿真過(guò)程中,可以根據(jù)需要對(duì)模擬時(shí)間進(jìn)行加速或減速,這取決于仿真所需的計(jì)算量和精度。與模擬時(shí)間相對(duì)應(yīng)的是實(shí)時(shí)時(shí)間(真實(shí)時(shí)間),它是指仿真器經(jīng)歷的實(shí)際時(shí)間。模擬時(shí)間與實(shí)時(shí)時(shí)間的比值稱為實(shí)時(shí)因子(RTF),實(shí)時(shí)因子可以用來(lái)衡量仿真運(yùn)行的快慢程度。當(dāng)實(shí)時(shí)因子為1時(shí),表示模擬時(shí)間與實(shí)時(shí)時(shí)間一致。當(dāng)實(shí)時(shí)因子小于1時(shí),表示模擬時(shí)間比實(shí)時(shí)時(shí)間快,即仿真加速;當(dāng)實(shí)時(shí)因子大于1時(shí),表示模擬時(shí)間比實(shí)時(shí)時(shí)間慢,即仿真減速。136實(shí)時(shí)因子的調(diào)整可以根據(jù)仿真的需求和計(jì)算資源的限制進(jìn)行,通過(guò)控制實(shí)時(shí)因子,可以使仿真在合理的時(shí)間內(nèi)完成,同時(shí)確保仿真的準(zhǔn)確性和可靠性,實(shí)時(shí)因子的設(shè)定對(duì)于仿真過(guò)程的控制和結(jié)果的分析都具有重要意義。迭代次數(shù)隨著世界狀態(tài)的迭代而更新,用戶可以在時(shí)間顯示區(qū)的右側(cè)查看迭代次數(shù)。每次迭代都會(huì)將仿真推進(jìn)一個(gè)固定的秒數(shù),稱為步長(zhǎng)。默認(rèn)情況下,步長(zhǎng)為1ms。用戶可以單擊暫停按鈕暫停模擬,并通過(guò)步進(jìn)按鈕一次性步進(jìn)多步。137任務(wù)三

在仿真環(huán)境中實(shí)現(xiàn)SLAM建圖1381.?了解ROS中的地圖2.?了解SLAM建圖3.?了解Gmapping算法4.?能在仿真中實(shí)現(xiàn)SLAM建圖任務(wù)目標(biāo)139一、ROS中的地圖為了使機(jī)器人順利到達(dá)目的地,機(jī)器人需要描述環(huán)境并對(duì)其進(jìn)行認(rèn)知,這主要依賴于地圖。機(jī)器人利用環(huán)境地圖來(lái)描述當(dāng)前環(huán)境信息,根據(jù)使用的算法和傳感器的不同,地圖的表示形式也會(huì)有所差異。在機(jī)器人學(xué)中,地圖主要包括柵格地圖、特征地圖、直接表征法地圖和拓?fù)涞貓D。其中,柵格地圖是目前機(jī)器人領(lǐng)域中最常用的。它類似于人們所熟悉的地圖,本質(zhì)上是一張位置圖像,但每個(gè)像素點(diǎn)表示了實(shí)際環(huán)境中障礙物的概率分布?;A(chǔ)知識(shí)140在ROS中,地圖通常指的是柵格地圖,它可以被理解為一張常見(jiàn)的灰度圖像。圖像中黑色像素表示障礙物所在區(qū)域,白色像素表示可行區(qū)域,而灰色像素則表示尚未被探索的區(qū)域,如圖所示。141ROS中的地圖地圖在機(jī)器人領(lǐng)域扮演著重要的角色,它是機(jī)器人導(dǎo)航和定位的基礎(chǔ),機(jī)器人可以借助地圖來(lái)感知和理解周圍環(huán)境。利用地圖,機(jī)器人可以規(guī)劃路徑,避開障礙物,實(shí)現(xiàn)自主導(dǎo)航。地圖的生成通常需要借助激光雷達(dá)、攝像頭或其他傳感器來(lái)進(jìn)行環(huán)境探測(cè),然后根據(jù)探測(cè)到的信息生成灰度圖像。這樣的地圖表示方式簡(jiǎn)單直觀,方便機(jī)器人系統(tǒng)進(jìn)行處理和導(dǎo)航?jīng)Q策。142二、SLAM建圖SLAM(simultaneouslocalizationandmapping)也稱為CML(concurrentmappingandlocalization),意為即時(shí)定位與地圖構(gòu)建,是一種解決機(jī)器人在未知環(huán)境中進(jìn)行自主定位和建圖問(wèn)題的技術(shù)。簡(jiǎn)單來(lái)說(shuō),SLAM建圖就是讓機(jī)器人在未知環(huán)境中,通過(guò)不斷移動(dòng)和觀測(cè),逐步確定自身位置,并構(gòu)建出包含環(huán)境中所有可到達(dá)角落的完整地圖。143SLAM建圖的關(guān)鍵在于準(zhǔn)確地確定機(jī)器人的位置,并將觀測(cè)到的地圖信息與機(jī)器人位置進(jìn)行有效關(guān)聯(lián)。為了實(shí)現(xiàn)SLAM建圖,機(jī)器人通常會(huì)借助多種傳感器,如激光雷達(dá)、攝像頭、里程計(jì)等,以獲取環(huán)境信息和機(jī)器人移動(dòng)數(shù)據(jù)。通過(guò)融合這些傳感器的數(shù)據(jù)并對(duì)其進(jìn)行處理,可以實(shí)現(xiàn)機(jī)器人位置和地圖的估計(jì)與更新。SLAM技術(shù)在機(jī)器人領(lǐng)域具有廣泛應(yīng)用,如無(wú)人車、無(wú)人機(jī)、自主導(dǎo)航機(jī)器人等。它為機(jī)器人在未知環(huán)境中的自主定位和導(dǎo)航提供了關(guān)鍵的解決方案,使機(jī)器人能夠在復(fù)雜和動(dòng)態(tài)的環(huán)境中進(jìn)行準(zhǔn)確的定位和建圖,從而實(shí)現(xiàn)各種任務(wù)的完成和路徑規(guī)劃的優(yōu)化。144三、Gmapping算法ROS提供了多種基于2D激光的SLAM算法,包括HectorSLAM、Gmapping、KartoSLAM、CoreSLAM和LagoSLAM。此外,經(jīng)典算法cartographer也被改編為基于ROS的版本cartographer_ros。本任務(wù)將重點(diǎn)介紹Gmapping算法。145Gmapping是一種高效的Rao-Blackwellized粒子濾波器,用于根據(jù)激光雷達(dá)的測(cè)量數(shù)據(jù)生成2D柵格地圖。它能夠?qū)崟r(shí)構(gòu)建室內(nèi)地圖,當(dāng)構(gòu)建小型場(chǎng)景地圖時(shí)計(jì)算量較小且具有較高的精度。Gmapping算法的核心思想是通過(guò)粒子濾波器對(duì)機(jī)器人的位姿進(jìn)行估計(jì),并使用最大似然法來(lái)更新地圖。算法通過(guò)建模和匹配激光雷達(dá)的掃描數(shù)據(jù),利用自適應(yīng)的粒子采樣和權(quán)重更新機(jī)制,實(shí)現(xiàn)對(duì)機(jī)器人位置和地圖的聯(lián)合估計(jì)。Gmapping算法在實(shí)際應(yīng)用中已經(jīng)被廣泛驗(yàn)證,并且具有較好的性能。146在ROS中進(jìn)行SLAM建圖時(shí),使用Gmapping算法構(gòu)建地圖是第一步,也是非常重要的一步,需要配置適當(dāng)?shù)膮?shù),如地圖分辨率、粒子數(shù)量等,以滿足不同場(chǎng)景的需求。通過(guò)運(yùn)行Gmapping節(jié)點(diǎn),機(jī)器人可以在實(shí)時(shí)更新的地圖中進(jìn)行定位和導(dǎo)航,為后續(xù)的路徑規(guī)劃和自主導(dǎo)航提供準(zhǔn)確的環(huán)境信息。Gmapping

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論