機器人操作系統(tǒng)ROS原理及應(yīng)用 課件匯 09 ROS文件系統(tǒng)與包管理工具 -30 可視化與仿真、31-32 復(fù)習(xí)與考試_第1頁
機器人操作系統(tǒng)ROS原理及應(yīng)用 課件匯 09 ROS文件系統(tǒng)與包管理工具 -30 可視化與仿真、31-32 復(fù)習(xí)與考試_第2頁
機器人操作系統(tǒng)ROS原理及應(yīng)用 課件匯 09 ROS文件系統(tǒng)與包管理工具 -30 可視化與仿真、31-32 復(fù)習(xí)與考試_第3頁
機器人操作系統(tǒng)ROS原理及應(yīng)用 課件匯 09 ROS文件系統(tǒng)與包管理工具 -30 可視化與仿真、31-32 復(fù)習(xí)與考試_第4頁
機器人操作系統(tǒng)ROS原理及應(yīng)用 課件匯 09 ROS文件系統(tǒng)與包管理工具 -30 可視化與仿真、31-32 復(fù)習(xí)與考試_第5頁
已閱讀5頁,還剩250頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ROS文件系統(tǒng)與包管理

一、ROS文件系統(tǒng)

二、ROS包管理

三、操作示例2024/11/292ROS文件系統(tǒng)一、ROS文件系統(tǒng)ROS的工程結(jié)構(gòu),也就是ROS的文件系統(tǒng)結(jié)構(gòu),是ROS軟件開發(fā)項目的組織形式2024/11/294ROS文件系統(tǒng)也叫catkin工作空間Catkin工作空間是創(chuàng)建、修改、編譯catkin軟件包的目錄。catkin的工作空間,里面存放著ROS的各種項目工程,便于系統(tǒng)組織管理調(diào)用。在可視化圖形界面里是一個文件夾。build和devel目錄由catkin系統(tǒng)自動生成、管理,我們?nèi)粘5拈_發(fā)一般不會去涉及2024/11/295ROS工作區(qū)/工作區(qū)開發(fā)中主要用到的是src文件夾我們編寫的ROS程序、網(wǎng)上下載的ROS源代碼包都存放在這里。在編譯時,catkin編譯系統(tǒng)會遞歸的查找和編譯src/下的每一個源代碼包因此也可以把幾個源代碼包放到同一個文件夾下2024/11/296ROS工作空間/工作區(qū)mkdir-p~/mycatkin_ws/srccd~/mycatkin_wscatkin_makesource~/mycatkin_ws/devel/setup.bash

第一行代碼直接創(chuàng)建了第二層級的文件夾src,這也是存放ROS軟件包的地方。第二行代碼進入工作空間第三行代碼執(zhí)行catkin_make初始化(編譯軟件包)catkin_make必須在工作空間目錄執(zhí)行,在其他路徑下編譯不會成功

第四行代碼刷新環(huán)境,使得系統(tǒng)能夠找到剛才編譯生成的ROS可執(zhí)行文件一般緊跟著要source刷新環(huán)境,這個細(xì)節(jié)比較容易遺漏,致使后面出現(xiàn)可執(zhí)行文件無法打開等錯誤

2024/11/297創(chuàng)建并初始化ROS工作空間一個軟件包(package)下常見的文件、路徑有:

├──CMakeLists.txt #package的編譯規(guī)則(必須)

├──package.xml #package的描述信息(必須)

├──src/ #源代碼文件

├──include/ #C++頭文件

├──scripts/ #可執(zhí)行腳本

├──msg/ #自定義消息

├──srv/ #自定義服務(wù)

├──models/ #3D模型文件

├──urdf/ #urdf文件

├──launch/ #launch文件2024/11/298軟件包(package)結(jié)構(gòu)一個軟件包(package)下常見的文件、路徑有:

├──CMakeLists.txt #軟件包的編譯規(guī)則(必須)

├──package.xml #軟件包的描述信息(必須)最簡單的包只有這兩個文件

2024/11/299軟件包(package)結(jié)構(gòu)CMakeLists.txt文件規(guī)定了這個軟件包(package)要依賴哪些軟件包(package),要編譯生成哪些目標(biāo),如何編譯等等流程。

CMakeLists.txt非常重要?。?!它指定了由源碼到目標(biāo)文件的規(guī)則,catkin編譯系統(tǒng)在工作時首先會找到每個軟件包(package)下的CMakeLists.txt,然后按照規(guī)則來編譯構(gòu)建。必須掌握CMakeLists.txt基本修改方法!?。⊥ǔ5淖龇ㄊ窃谙到y(tǒng)生成的模板文件上修改2024/11/2910CMakeLists.txt文件cmake_minimum_required() #CMake的版本號

project() #項目名稱

find_package() #找到編譯需要的其他package

catkin_python_setup() #打開catkin的PythonModule的支持

add_message_files() #添加自定義Message文件

add_service_files()

#添加自定義Service文件

add_action_files() #添加自定義Action文件

generate_message() #生成不同語言版本的msg/srv/action接口

catkin_package() #生成當(dāng)前package的cmake配置,供依賴本包的其他

軟件包調(diào)用

add_library() #生成庫

add_executable() #生成可執(zhí)行二進制文件

add_dependencies()

#定義目標(biāo)文件依賴于其他目標(biāo)文件,確保其他目

標(biāo)已被構(gòu)建

target_link_libraries() #鏈接

catkin_add_gtest() #生成測試

install()

#安裝至本機

2024/11/2911CMakeLists.txt寫法package.xml也是一個catkin的package必備文件,它是這個軟件包的描述文件。2024/11/2912package.xmlpacakge.xml包含了package的名稱、版本號、內(nèi)容描述、維護人員、軟件許可、編譯構(gòu)建工具、編譯依賴、運行依賴等信息。

實際上rospackfind、rosdep等命令之所以能快速定位和分析出package的依賴項信息,就是直接讀取了每一個pacakge中的package.xml文件。它為用戶提供了快速了解一個pacakge的渠道。

2024/11/2913package.xml的作用二、ROS包管理命令rospack獲取軟件包的有關(guān)信息。在本教程中,我們只涉及到rospack中find參數(shù)選項,該選項可以turtlesim用法:#rospackfind[包名稱]示例:$rospackfindroscpp返回軟件包的路徑信息2024/11/2915使用rospackroscd進入ros軟件包目錄用法:#roscd

cd[包名稱]示例:$roscdroscpp進入軟件包的路徑2024/11/2916使用roscdrosls列出軟件包的文件信息用法:#rosls[包名稱]示例:$rosls

turtlesim返回軟件包的路徑信息2024/11/2917使用rosls三、操作示例2024/11/2919示例一創(chuàng)建ROS工作空間如果catkin_ws目錄已經(jīng)存在,先刪除mkdir-p~/mycatkin_ws/srccd~/mycatkin_wscatkin_makesource~/mycatkin_ws/devel/setup.bashecho“source~/mycatkin_ws/devel/setup.bash”>>~/.bashrc2024/11/2920示例二導(dǎo)入ros軟件包1、創(chuàng)建工作空間2、下載軟件包(http://www.yzyfine.top/download/turtlesim.zip)3、放入工作空間的src目錄并解壓4、在工作空間運行catkin_make命令編譯工作空間下的軟件包5、刷新環(huán)境變量source~/mycatkin_ws/devel/setup.bash6、運行()roscorerosrunturtlesimturtlesim_noderosrunturtlesimdraw_square2024/11/2921示例三VScode編寫python測試程序1、進入前面已經(jīng)創(chuàng)建的工作空間mycatkin_wscd~/mycatkin_ws2、啟動vscodecode.3.編寫測試程序操作演示(1)創(chuàng)建包指定包名test,指定依賴roscpprospystd_msgs(2)創(chuàng)建scripts文件夾(存放python文件)2024/11/2922示例三VScode編寫python測試程序3.編寫測試程序操作演示(3)創(chuàng)建python文件#!/usr/bin/envpythonimportrospyif__name__=="__main__":rospy.init_node("mynode")rospy.loginfo("helloworld")2024/11/2923示例三VScode編寫python測試程序3.編寫測試程序操作演示(4)設(shè)置python文件權(quán)限,設(shè)置CMakelists.txt2024/11/2924示例三VScode編寫python測試程序3.編寫測試程序操作演示(5)編譯(shift+ctrl+B)(6)運行(先啟動主節(jié)點master)刷新環(huán)境變量source~/XXX/devel/setup.bashrosrun包名python文件名

2024/11/2925示例三VScode編寫python測試程序ROS包管理1、創(chuàng)建名稱為mycatkin_ws工作空間2、進入工作空間src目錄3、刷新工作空間路徑到ROS環(huán)境echo“source~/mycatkin_ws/devel/setup.bash”>>~/.bashrc4、關(guān)閉當(dāng)前終端窗口后再開一個新終端2024/11/2927任務(wù)一創(chuàng)建ROS工作空間1、下載軟件包(2:8080/file/turtlesim.zip)2、放入工作空間的src目錄并解壓3、在工作空間運行catkin_make命令編譯工作空間下的軟件包4、運行roscorerosrunturtlesimturtlesim_noderosrunturtlesimdraw_square2024/11/2928任務(wù)二導(dǎo)入ROS包1、使用rospacklist統(tǒng)計本機上的軟件包,把軟件包清單存入文件allpack2、統(tǒng)計軟件包數(shù)量追加到allpack3、把turtlesim軟件包的目錄路徑存入文件tj_turtle4、把turtlesim包所包含的文件和目錄列表追加到tj_turtle2024/11/2929任務(wù)三使用ROS包管理工具ROS節(jié)點與話題什么是節(jié)點node在ROS的世界里,最小的進程單元就是節(jié)點(node)。一個軟件包里可以有多個可執(zhí)行文

件,可執(zhí)行文件在運行之后就成了一個進程(process),這個進程在ROS中就叫做節(jié)點。2024/11/2931

ROS節(jié)點(node)什么是節(jié)點node從程序角度來說,node就是一個可執(zhí)行文件(通常為C++編譯生成的可執(zhí)行文件、Python腳本)被執(zhí)行,加載到了內(nèi)存之中;從功能角度來說,通常一個node負(fù)責(zé)機器人的某一個單獨的功能。2024/11/2932

ROS節(jié)點(node)什么是節(jié)點node由于機器人的功能模塊非常復(fù)雜,我們往往不會把所有功能都集中到一個node上。例如在輪式機器人中:一個node來控制底盤輪子的運動,一個node驅(qū)動攝像頭獲取圖像,一個node驅(qū)動激光雷達(dá),一個node根據(jù)傳感器信息進行路徑規(guī)劃……

2024/11/2933

ROS節(jié)點(node)什么是節(jié)點node一個節(jié)點只負(fù)責(zé)單一功能,這樣做可以降低程序發(fā)生崩潰的可能性,如果把所有功能都寫到一個程序中,模塊間的通信、異常處理將會很麻煩。

前面的例子中,小海龜畫面顯示程序(turtlesim_node)、小海龜鍵盤控制程序(turtle_teleop_key)、小海龜畫正方形程序(draw_square)都是節(jié)點2024/11/2934

ROS節(jié)點(node)節(jié)點(Node)執(zhí)行具體任務(wù)的進程、獨立運行的可執(zhí)行文件;不同節(jié)點可使用不同的編程語言,可分布式運行在不同的主機;節(jié)點在系統(tǒng)中的名稱必須是唯一的。2024/11/2935

ROS節(jié)點(node)節(jié)點管理器(master)機器人實際運行時往往會運行眾多的node。為了調(diào)配、管理這些node,ROS提供節(jié)點管理器

master,管理各個節(jié)點node。當(dāng)ROS程序啟動時,第一步首先啟動master,由節(jié)點管理器處理依次啟動node。

2024/11/2936

ROS節(jié)點(node)節(jié)點管理器ROS程序控制中心為節(jié)點node提供命名和注冊服務(wù);跟蹤和記錄話題/服務(wù)通信,輔助節(jié)點相互查找、建立連接;提供參數(shù)服務(wù)器,節(jié)點使用此服務(wù)器存儲和檢索運行時的參數(shù)2024/11/2937

ROS節(jié)點(node)節(jié)點管理器ROS程序啟動時必須先啟動master使用下列ros命令roscore2024/11/2938

ROS節(jié)點(node)1節(jié)點運行命令rosrun

$rosrunpkg_nameprog_name

包名程序名包名和程序名記不太清是可以使用tab鍵補全

2024/11/2939

ROS節(jié)點操作命令2節(jié)點管理命令rosnode

2024/11/2940

ROS節(jié)點操作命令rosnodelist列出當(dāng)前運行的node信息rosnodeinfonode_name顯示node的詳細(xì)信息rosnodekillnode_name結(jié)束某個noderosnodeping測試連接節(jié)點

話題topictopic是ROS中的常用的通信方式。適用于實時性、周期性的消息傳輸。topic是一種點對點的單向通信方式,這里的“點”指的是node,也就是說node之間可以通過topic方式來傳遞信息。

2024/11/2941

ROS話題發(fā)布者與訂閱者話題topic通信中發(fā)送話題數(shù)據(jù)的節(jié)點稱為發(fā)布者(publisher)

接受話題數(shù)據(jù)的節(jié)點稱為訂閱者(

subscriber

2024/11/2942

ROS話題消息(message)話題topic通信的數(shù)據(jù)稱為消息(message)

2024/11/2943

ROS話題話題topic通信的過程topic要經(jīng)歷下面幾步的初始化過程:首先,publisher節(jié)點和subscriber節(jié)點都要到節(jié)點管理器進行注冊,然后publisher會發(fā)布topic,subscriber在master的指揮下會訂閱該主題topic,從而建立起發(fā)布-訂閱(pub-sub)之間的通信。整個過程是單向的,數(shù)據(jù)由發(fā)布者傳遞給訂閱者。2024/11/2944

ROS話題發(fā)布/訂閱模型發(fā)布者可以發(fā)布一個或多個話題發(fā)布者也可以是訂閱者一個發(fā)布者可以有多個訂閱者,一個訂閱者可以訂閱多個話題一個話題topic可以被多個節(jié)點同時發(fā)布,也可以同時被多個節(jié)點接收2024/11/2945

ROS話題理解“異步”概念在發(fā)布者node1每發(fā)布一次消息之后,就會繼續(xù)執(zhí)行下一個動作,至于消息是什么狀態(tài)、被怎樣處理,它不需要了解;對于訂閱者node2,它只管接收和處理某個話題上的消息,至于是誰發(fā)來的,它不會關(guān)心。所以node1、node2兩者都是各司其責(zé),不存在協(xié)同工作,稱這樣的通信方式是異步的

2024/11/2946

ROS話題命令作用rostopiclist

列出當(dāng)前所有的topicrostopicinfotopic_name顯示某個topic的屬性信息rostopicechotopic_name顯示某個topic的內(nèi)容rostopicpubtopic_name...向某個topic發(fā)布內(nèi)容rostopicbwtopic_name查看某個topic的帶寬rostopichztopic_name查看某個topic的頻率rostopicfindtopic_type查找某個類型的topicrostopictypetopic_name查看某個topic的類型(msg)2024/11/2947

ROS話題操作命令

2024/11/2948節(jié)點計算圖概念計算圖(ComputationGraph)是一個由ROS進程組成的點對點網(wǎng)絡(luò),它們能夠共同處理數(shù)據(jù)。ROS的基本計算圖概念有節(jié)點(Nodes)、主節(jié)點(Master)、參數(shù)服務(wù)器(ParameterServer)、消息(Messages)、服務(wù)(Services)、話題(Topics)和包(Bags),它們都以不同的方式向圖(Graph)提供數(shù)據(jù)。節(jié)點(Nodes):節(jié)點是一個可執(zhí)行文件,可以與其他節(jié)點進行通信。消息(Messages):訂閱或發(fā)布話題時所使用的ROS數(shù)據(jù)類型。話題(Topics):節(jié)點可以將消息發(fā)布到話題,或通過訂閱話題來接收消息。主節(jié)點(Master):ROS的命名服務(wù),例如幫助節(jié)點發(fā)現(xiàn)彼此。rosout:在ROS中相當(dāng)于stdout/stderr(標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯誤)。roscore:主節(jié)點+rosout+

參數(shù)服務(wù)器(會在以后介紹)。2024/11/2949使用rqt_grqph查看節(jié)點構(gòu)成的計算圖1、在ROS中啟動小烏龜示例程序$roscore$rosrunturtlesimturtlesim_node$rosrunturtlesimturtle_teleop_key2、使用rosnodelist查看啟動的節(jié)點列表3、使用rosnodeinfo查看具體節(jié)點信息4、使用rqt_graph

查看計算圖理解并掌握節(jié)點運行和管理命令rosrun

、rosnode的基本用法2024/11/2950作業(yè):運行和查看節(jié)點ROS話題與消息在之前建立的turtlesim例子中,鍵盤控制節(jié)點(turtle_teleop_key)和仿真節(jié)點(turtulesim_node)以某種方式進行對話使海龜響應(yīng)按鍵操作。ROS節(jié)點之間進行通信所利用的最重要的機制就是消息傳遞(發(fā)布/訂閱)。2024/11/2952ROS消息在ROS中,消息就是數(shù)據(jù),有組織地存放在話題里。消息傳遞的理念是:當(dāng)一個節(jié)點想要分享信息時,它就會發(fā)布(publish)消息到對應(yīng)的一個或者多個話題;當(dāng)一個節(jié)點想要接收信息時,它就會訂閱(subscribe)它所需要的一個或者多個話題。ROS節(jié)點管理器負(fù)責(zé)確保發(fā)布節(jié)點和訂閱節(jié)點能找到對方;而且消息是直接地從發(fā)布節(jié)點傳遞到訂閱節(jié)點,中間并不經(jīng)過節(jié)點管理器轉(zhuǎn)交。2024/11/2953ROS消息話題的通信是通過節(jié)點間發(fā)送ROS消息實現(xiàn)的。為了使發(fā)布者(turtle_teleop_key)和訂閱者(turtulesim_node)進行通信,發(fā)布者和訂閱者必須發(fā)送和接收相同類型的消息。這意味著話題的類型是由發(fā)布在它上面消息的類型決定的。2024/11/2954ROS消息使用rostopicecho查看話題數(shù)據(jù)(消息)內(nèi)容$rostopicecho/turtle1/cmd_vel

需要按鍵控制烏龜節(jié)點移動才看得到數(shù)據(jù)變化2024/11/2955查看話題數(shù)據(jù)(消息)內(nèi)容使用rostopicecho查看話題數(shù)據(jù)(消息)內(nèi)容$rostopicecho/turtle1/cmd_vel每當(dāng)/teleop_turtle接收到按鍵信息時,將會顯示類似右圖的結(jié)果。輸出中的每一個“---”線表示一個消息的結(jié)束以及另一個消息的起始linear:線速度angular:角速度2024/11/2956查看話題數(shù)據(jù)(消息)內(nèi)容$rostopichz/turtle1/cmd_vel$rostopicbw/turtle1/cmd_vel第一條命令輸出每秒發(fā)布的消息數(shù)量第二條命令輸出每秒發(fā)布消息所占的字節(jié)量這些命令主要用于調(diào)試,它們提供了一種簡單的方法來驗證這些消息確實有規(guī)律地在向這些特定的話題發(fā)布2024/11/2957查看話題發(fā)布頻率、帶寬rostopicinfo/turtle1/cmd_vel輸出了該話題的消息類型。Type在文本輸出中表示數(shù)據(jù)類型。理解消息的類型很重要,因為它決定了消息的內(nèi)容。也就是說,一個話題的消息類型能告訴你該話題中每個消息攜帶了哪些信息,以及這些信息是如何組織的2024/11/2958查看消息類型要想查看某種消息類型的詳情,使用類似下面的命令:rosmsgshow#顯示消息的說明描述rosmsglist#列出所有消息

rosmsgmd5#顯示消息的md5碼rosmsgpackage#列出單個包中的消息rosmsgpackages#列出包含消息的軟件包2024/11/2959rosmsg消息管理命令rosmsgshow消息類型

例如:rosmsgshowturtlesim/Color

其輸出為:

uint8ruint8guint8brosmsgshow可以幫助理解通過話題傳輸?shù)臄?shù)據(jù)類型的具體構(gòu)成,即變量類型及變量名稱(結(jié)構(gòu)體)2024/11/2960使用rosmsgshow查看消息類型(詳情)rosmsgshowturtlesim/Color輸出的格式是域(field)的列表,每行一個元素。每一個域由基本數(shù)據(jù)類型(例如int8、bool、或者string)以及域名稱定義。turtlesim/Color包含三個無符號8位整型變量r,g和b。任何話題的消息只要是turtlesim/Color類型,都由上述三個域的值定義。2024/11/2961使用rosmsgshow查看消息類型(詳情)rosmsgshowgeometry_msgs/Twistgeometry_msgs/Twist

是ROS中常用消息類型。該消息類型對應(yīng)/turtle1/cmd_vel話題geometry_msgs/Twist

消息包含六個成員,并且以兩個向量的形式組織,分別為linear

angular(線速度和角速度)。其中每個數(shù)值都是基本數(shù)據(jù)類型float64,即每個數(shù)值都是64位浮點型數(shù)據(jù)2024/11/2962使用rosmsgshow查看消息類型(詳情)線速度值為正時沿相應(yīng)的軸正向移動,值為負(fù)時反向移動角速度值為正時沿相應(yīng)的軸逆時針轉(zhuǎn)動,值為負(fù)時順時針轉(zhuǎn)動2024/11/2963linear和angular(線速度和角速度)ROS復(fù)合域是由簡單的一個或者多個子域組合而成,其中的每一個子域可能是另一個復(fù)合域或者獨立的域,而且它們一般也都由基本數(shù)據(jù)類型組成常見的例子:

geometry_msgs/Twist表示線速度和角速度std_msgs/Header序列號,時間戳以及坐標(biāo)系等信息sensor_msgs/NavSatFix表示單個GPS的定位數(shù)據(jù)sensor_msgs/LaserScan表示激光雷達(dá)數(shù)據(jù)2024/11/2964使用rosmsgshow查看消息類型(詳情)和ROS里其他的程序一樣,每個消息類型都屬于一個特定的包。消息類型名總會包含一個斜杠,斜杠前面的名字是包含它的包turtlesim/Color消息類型按如下方式分解:turtlesim+Color?turtlesim/Color

功能包名類型名稱消息類型2024/11/2965理解消息類型的命名rostopicpub可以把數(shù)據(jù)發(fā)布到當(dāng)前某個正在廣播的話題上$rostopicpub-1

/turtle1/cmd_velgeometry_msgs/Twist--'[2.0,0.0,0.0]''[0.0,0.0,1.8]‘

rostopicpub

參數(shù)

話題消息類型消息值以上命令會發(fā)送一條消息給turtlesim,告訴它以2.0大小的線速度沿x軸正向移動和1.8大小的角速度繞z軸逆時針轉(zhuǎn)動。

該命令執(zhí)行一次,畫一段圓弧2024/11/2966使用rostopicpub發(fā)布消息空格$rostopicpub-r1/turtle1/cmd_velgeometry_msgs/Twist--'[2.0,0.0,0.0]''[0.0,0.0,1.8]'

r表示重復(fù)執(zhí)行消息發(fā)布1次(只能是1)

以上命令會發(fā)送消息給turtlesim,告訴它以2.0大小的線速度沿x軸正向移動和1.8大小的角速度繞z軸逆時針轉(zhuǎn)動。該命令重復(fù)執(zhí)行,每秒執(zhí)行一次,畫一個圓平面圖形中,geometry_msgs/Twist類型的數(shù)據(jù)線速度只有x,y軸有效,角速度只有z軸有效2024/11/2967使用rostopicpub發(fā)布消息rostopicpub另一種用法:輸入

rostopicpub-r1/turtle1/cmd_vel后按tab補全消息類型然后再按一次tab補全消息格式然后移動光標(biāo)修改線速度的x分量、角速度的z分量2024/11/2968使用rostopicpub發(fā)布消息重復(fù)執(zhí)行,頻率為1赫茲執(zhí)行一次2024/11/2969使用rostopicpub發(fā)布消息2024/11/2970rostopicpub常用的角速度值弧度角度值

180°3.14159263/4135°2.356194492/3120°2.0943951/290°1.570796326/360°1.04719755/445°0.78539816/630°0.5235987/1215°0.2617993873/2270°4.71238898畫半圓rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[3,0,0]''[0,0,-3.1415926]'逆時針旋轉(zhuǎn)90°

rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[0,0,0]''[0,0,1.5707963]'畫圓弧rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[3,0,0]''[0,0,-3.1415926]'走直線rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[1,0,0]''[0,0,0]'2024/11/2971使用rostopicpub發(fā)布消息示例重置:rosservicecall/reset2024/11/2972作業(yè):用rostopicpub繪制幾何圖形rostopic發(fā)布消息示例控制turtle繪制圖形1如何繪制心型75

vωr1如何繪制心型分析:繪制心型步驟如下:1、①

繪制半圓2、②

繪制圓弧3、在③號點旋轉(zhuǎn)偏轉(zhuǎn)角q4、③

繪制圓弧5、④

繪制半圓兩個半圓的線速度和角速度容易確定,兩段圓弧的線速度和角速度以及兩段圓弧之間的偏轉(zhuǎn)角需要計算,為了簡化問題,只考慮大圓弧的圓心位于兩個小圓弧的圓心所在直線上2024/11/29761如何繪制心型br2r1v1v2aqh

qr2o

2024/11/2977br2r1v1v2aqhqr2o1如何繪制心型

2024/11/2978br2r1v1v2aqhqor21如何繪制心型2024/11/2979br2r1hv1v2aqqr2o1如何繪制心型2024/11/2980br2r1hv1v2a

qr2o1如何繪制心型控制turtle繪制圖形2如何繪制月型

2024/11/2982br2r1sv1Tav2Tw2如何繪制月型

2024/11/2983br2r1sv1Tav2Tw2

如何繪制月型控制turtle繪制圖形3如何繪制環(huán)型

2024/11/2985r1r2v1Tv2Tv3T3如何繪制環(huán)型1、在ROS中啟動小烏龜示例程序$roscore$rosrunturtlesimturtlesim_node2、創(chuàng)建命令腳本文件,運行后繪制以下圖形2024/11/2986作業(yè)4使用rostopicpub發(fā)布消息abcdefghkmn習(xí)題課1、建立以“班級號+學(xué)生序號”命名的文件夾,并設(shè)置文件夾的權(quán)限為:宿主用戶:rwx組用戶:r-x其它用戶:---然后通過使用重定向命令把設(shè)置好權(quán)限后“l(fā)s-l”命令顯示的結(jié)果放到文件A01中。2、下載science.txt文件,把其中含有單詞“and”的行放到文件A02中,然后用wc統(tǒng)計A02文件并把統(tǒng)計結(jié)果追加到A02文件。(wgethttp://www.ee.surrey.ac.uk/Teaching/Unix/science.txt)3、把本機歷史命令放到A03文件中,篩選其中使用了ls命令的內(nèi)容存放到ls.txt文件中、使用了cd命令的內(nèi)容存放到cd.txt文件。4、確定上述的三個文件都放在已建立的文件夾中,然后把文件夾壓縮為zip格式的壓縮文件。2024/11/2988作業(yè)1安裝ROS集成開發(fā)環(huán)境主要包括以下部分:1、使用vmware虛擬機軟件安裝ubuntu20.042、在ubuntu20.04虛擬機中安裝ROS(noetic)3、在已安裝好ROS的ubuntu虛擬機中安裝vscode(包括必要插件)把安裝過程的截圖存放到word文檔中上傳,截圖必須是電腦屏幕的全屏截圖。2024/11/2989作業(yè)21、創(chuàng)建名稱為mycatkin_ws工作空間2、進入工作空間src目錄3、刷新工作空間路徑到ROS環(huán)境echo“source~/mycatkin_ws/devel/setup.bash”>>~/.bashrc4、關(guān)閉當(dāng)前終端窗口后再開一個新終端2024/11/2990作業(yè)3.1創(chuàng)建ROS工作空間1、下載軟件包(2:8080/file/turtlesim.zip)2、放入工作空間的src目錄并解壓3、在工作空間運行catkin_make命令編譯工作空間下的軟件包4、運行roscorerosrunturtlesimturtlesim_noderosrunturtlesimdraw_square2024/11/2991作業(yè)3.2導(dǎo)入ROS包1、使用rospacklist統(tǒng)計本機上的軟件包,把軟件包清單存入文件allpack2、統(tǒng)計軟件包數(shù)量追加到allpack3、把turtlesim軟件包的目錄路徑存入文件tj_turtle4、把turtlesim包所包含的文件和目錄列表追加到tj_turtle2024/11/2992作業(yè)3.3使用ROS包管理工具重置:rosservicecall/reset1、在ROS中啟動小烏龜示例程序$roscore$rosrunturtlesimturtlesim_node2、創(chuàng)建命令腳本文件,運行后繪制以下圖形2024/11/2993作業(yè)4使用rostopicpub發(fā)布消息繪制圖形abcdefghkmn編寫簡單ROS程序1.建立ROS工作區(qū)(可選)2.創(chuàng)建ROS軟件包package(常用依賴roscpprospystd_msgs)catkin_create_pkg包名依賴3.創(chuàng)建存放python文件的文件夾(目錄一般為scripts)4.創(chuàng)建python文件,輸入代碼(導(dǎo)入需要的包

)5.修改CMakeLists.txt6.修改python文件權(quán)限(文件所在目錄下運行chmod+x*.py)7.編譯(在工作區(qū)目錄下運行catkin_make命令vscode快捷鍵ctrl+shift+B)8.運行(刷新環(huán)境變量source~/catkin_ws/devel/setup.bash)

編寫簡單ROS程序的步驟

常規(guī)python程序ROS程序(python)ROS程序的結(jié)構(gòu)

編寫python程序常用技巧

1.輸入使用input()函數(shù)輸入的是字符串,可根據(jù)需要轉(zhuǎn)換x=int(input('請輸入一個整數(shù)'))y=float(input('請輸入一個浮點數(shù)'))s=str(input('請輸入一個字符串'))2.輸出常規(guī)輸出(1)輸出數(shù)值型變量num=100print(num)(2)輸出字符串str='helloworld'print(str)(3)輸出列表list=[1,2,3]print(list)(4)輸出元組tuple=(1,2,'a')print(tuple)(5)輸出字典dict={'a':1,'b':2}print(dict)編寫python程序常用技巧

例1:(使用格式控制符%s%d)s='HelloWorld'x=len(s)print('字符串:%s的長度是%d'%(s,x))例2:(指定寬度和精度)PI=3.1415926print('%8.3f'%PI)%s字符串采用str()的顯示%x十六進制整數(shù)%c單個字符%b二進制整數(shù)%f,%F浮點數(shù)%d十進制整數(shù)%o八進制整數(shù)編寫python程序常用技巧

2.輸出換行與防止換行例1:(默認(rèn)換行,輸出5行

)forxinrange(0,5):print(x)例2:(在一行上輸出,用空格分開

)forxinrange(0,5):print(x,

end='')例3:(在一行上輸出,用逗號,分開

)forxinrange(0,5):print(x,

end=',')編寫python程序常用技巧

3.分支結(jié)構(gòu)例:a=2ifa>3:print('大于3')elifa<3:

print('a小于3')else:

print('a等于3')編寫python程序常用技巧

4.循環(huán)結(jié)構(gòu)for循環(huán)例1:forxinrange(0,5):print(x)range函數(shù)range(5)默認(rèn)從0開始,0-5,前閉后開例2:輸出斐波那契數(shù)列a,b=0,1forindexinrange(10):print(b)(a,b)=(b,a+b)編寫python程序常用技巧

4.循環(huán)結(jié)構(gòu)while循環(huán)例3:a=Trueindex=0whilea:index=index+1print(index)ifindexis10:break編寫python程序常用技巧

1.編寫小海龜繪制心型、月型、環(huán)型的參數(shù)計算程序2.輸出1-100的累計求和值3.輸出n的階乘(n<10)4.輸出1-100間的素數(shù)

作業(yè)5 編寫ROS消息發(fā)布程序

畫圓

rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[4,0,0]''[0,0,6.28]'

發(fā)送消息控制仿真烏龜繪圖

畫三角形

①直線行走③直線行走④逆時針旋轉(zhuǎn)⑤直線行走②逆時針旋轉(zhuǎn)120度①直線行走②逆時針旋轉(zhuǎn)③直線行走⑤直線行走④逆時針旋轉(zhuǎn)120度發(fā)送消息控制仿真烏龜繪圖

ROS程序必須導(dǎo)入此包指定python解釋器定義并初始化“發(fā)布者”變量初始化節(jié)點,節(jié)點名為“circle”導(dǎo)入Twist消息定義Twist消息變量填充Twist消息變量定義并設(shè)定消息發(fā)布頻率發(fā)表消息延時(避免消息發(fā)太快)了解ROS程序基本結(jié)構(gòu)—畫圓

ROS程序必須導(dǎo)入此包指定python解釋器定義并初始化“發(fā)布者”變量初始化節(jié)點,節(jié)點名為“triangel”導(dǎo)入Twist消息定義Twist消息變量填充消息(畫一條邊)發(fā)布消息填充消息(旋轉(zhuǎn)120°)定義并設(shè)定消息發(fā)布頻率發(fā)布消息延時(避免消息發(fā)太快)了解ROS程序基本結(jié)構(gòu)—畫三角形

ROS程序必須導(dǎo)入此包指定python解釋器定義并初始化“發(fā)布者”變量初始化節(jié)點,節(jié)點名為“triangel”導(dǎo)入Twist消息定義Twist消息變量節(jié)點未關(guān)閉時運行循環(huán)填充消息(畫一條邊)發(fā)布消息睡眠,等待下一次發(fā)布消息定義并設(shè)定消息發(fā)布頻率了解ROS程序基本結(jié)構(gòu)—畫三角形-循環(huán)

1.導(dǎo)入包rospy2.導(dǎo)入相應(yīng)消息fromgeometry_msgs.msgimportTwist3.在主入口中初始化節(jié)點,指定節(jié)點4.定義發(fā)布ros消息的對象,并實例化(明確話題名、消息類型,消息隊列長度)5.定義ros消息變量(用于發(fā)布消息)6.設(shè)置消息發(fā)送的頻率7.封裝消息(填充數(shù)據(jù))8.發(fā)送消息(調(diào)用第4步定義的對象的方法)9.睡眠,等待下一次發(fā)送消息

編寫ROS消息發(fā)布程序步驟

了解要發(fā)布的消息的類型

在vscode中編寫ROS程序繪制下列幾何圖形(python)

作業(yè)6

編寫ROS消息發(fā)布程序編寫ROS訂閱者程序步驟

1.導(dǎo)入必要的包(rospy

)2.從消息文件中導(dǎo)入要接收的消息類型(本例為turtlesim/Pose)

3.初始化節(jié)點4.初始化接收消息的變量(調(diào)用消息接收函數(shù)初始化該變量,指定消息的話題,消息類型,回調(diào)函數(shù))5.定義回調(diào)函數(shù)

(當(dāng)收到消息時要做的操作)6.啟動自循環(huán)

示例1:訂閱海龜位姿信息程序功能:接收消息,顯示烏龜x,y坐標(biāo)、朝向、線速度、角速度準(zhǔn)備工作:訂閱話題:/turtle1/pose話題/turtle1/pose對應(yīng)的數(shù)據(jù)類型:turtlesim/Pose使用rostopiclist查看話題列表使用rostopicinfo查看話題/turtle1/pose的數(shù)據(jù)類型turtlesim/Pose使用rosmsgshow查看turtlesim/Pose類型的具體定義示例1:訂閱者程序get_pose.py定義回調(diào)函數(shù),用于收到消息時執(zhí)行。當(dāng)收到消息時,消息存到data變量中啟動自循環(huán),盡快調(diào)用回調(diào)函數(shù)調(diào)用接收話題消息的函數(shù)初始sub變量話題名稱,必須與發(fā)布者程序中的話題相同回調(diào)函數(shù)名,接收到消息就會調(diào)用該函數(shù)初始化節(jié)點接收的消息類型示例1:訂閱者程序get_pose.py訂閱者程序要點:1.創(chuàng)建訂閱者對象當(dāng)新的消息到達(dá)時,它們會被保存在一個隊列中,然后自動執(zhí)行回調(diào)函數(shù),對消息的處理都是在回調(diào)函數(shù)中進行的。注意:不要在函數(shù)名后面添加括號()

回調(diào)函數(shù)接收的消息類型話題名創(chuàng)建訂閱者函數(shù)示例1:訂閱者程序get_pose.py訂閱者程序要點:2.編寫回調(diào)函數(shù)

訂閱消息時,訂閱者節(jié)點無法知道消息什么時候到達(dá)。為了應(yīng)對這一情況,必須把響應(yīng)收到消息事件的代碼放到回調(diào)函數(shù)里,ROS每接收到一個新的消息將調(diào)用一次這個函數(shù)。訂閱者的回調(diào)函數(shù)類似于:

本例程中,回調(diào)函數(shù)接收類型為turtlesim/Pose的消息,所以必須從定義該消息的文件導(dǎo)入Pose類型

回調(diào)函數(shù)中簡單輸出消息數(shù)據(jù),包括x、y和theta數(shù)據(jù)成員。

回調(diào)函數(shù)名收到的消息位于data變量中消息處理:把坐標(biāo)轉(zhuǎn)換為字符串示例1:訂閱者程序get_pose.py訂閱者程序要點:3.給ROS控制權(quán)

這行代碼不會讓當(dāng)前節(jié)點退出,除非當(dāng)前節(jié)點被明確的關(guān)閉。有的資料中稱為“阻塞”,或“自循環(huán)”示例1:訂閱者程序get_pose.pyROS中的spin和spinOnce的區(qū)別spin函數(shù)spin函數(shù)會持續(xù)地檢查并處理訂閱緩沖區(qū)中的回調(diào)函數(shù),直到隊列為空。一旦進入spin函數(shù),它就會進入一個循環(huán),不斷地檢查回調(diào)函數(shù)隊列。如果隊列中有回調(diào)函數(shù),spin會立即執(zhí)行它。如果隊列為空,spin會等待,直到有新的回調(diào)函數(shù)被放入隊列。在這個過程中,spin會阻塞,不會占用CPU資源。因此,當(dāng)使用spin時,節(jié)點會一直等待并處理回調(diào)函數(shù),不會執(zhí)行spin之后的代碼。示例1:訂閱者程序get_pose.pyROS中的spin和spinOnce的區(qū)別spinOnce函數(shù)與spin不同,spinOnce函數(shù)只處理一次回調(diào)函數(shù),然后繼續(xù)執(zhí)行后續(xù)的代碼。這意味著spinOnce不會阻塞,它會檢查回調(diào)函數(shù)隊列,執(zhí)行一個回調(diào)函數(shù)(如果隊列中有的話),然后立即返回。spinOnce通常與ros::Rate對象一起使用,在while循環(huán)中調(diào)用,以控制節(jié)點處理回調(diào)函數(shù)的頻率。作業(yè)7:編寫訂閱者程序1、啟動海龜示例節(jié)點2、仿照示例1,編寫運行程序,實現(xiàn)訂閱海龜坐標(biāo)信息并輸出3、編寫訂閱者程序,訂閱話題/turtle1/color_sensor,然后輸出顏色數(shù)據(jù)編寫發(fā)布/訂閱程序程序功能:發(fā)布者程序每秒發(fā)送消息(字符串),訂閱者程序接收消息實現(xiàn)過程:一、發(fā)布者程序:1、導(dǎo)包2、初始化節(jié)點3、定義發(fā)布者變量并調(diào)用rospy.Publisher()函數(shù)初始化,設(shè)定參數(shù)(指定自定義話題,消息類型,隊列長度)4、定義并設(shè)定消息發(fā)布頻率5、定義消息變量并設(shè)置消息值6、發(fā)送消息(循環(huán))

示例1:編寫簡單的發(fā)布者/訂閱者程序程序功能:發(fā)布者程序每秒發(fā)送消息(字符串),訂閱者程序接收消息實現(xiàn)過程:二、訂閱者程序:1、導(dǎo)包2、初始化節(jié)點3、定義訂閱者變量并調(diào)用rospy.Subscriber()函數(shù)初始化,設(shè)定參數(shù)(使用自定義話題,消息類型,回調(diào)函數(shù))4、定義并編寫回調(diào)函數(shù)處理消息

示例1:編寫簡單的發(fā)布者/訂閱者程序發(fā)布者程序:訂閱者程序:

示例1:編寫簡單的發(fā)布者/訂閱者程序發(fā)布者和訂閱者程序中的話題名必須相同發(fā)布者和訂閱者程序中的話題名必須相同運行程序

示例1:編寫簡單的發(fā)布者/訂閱者程序節(jié)點列表與話題列表

示例1:編寫簡單的發(fā)布者/訂閱者程序訂閱者/發(fā)布者程序程序功能:繪制放大版圓繪制過程:1、發(fā)布者程序節(jié)點發(fā)出繪制圓的消息(線速度,角速度),因為話題名

mycircle

與仿真烏龜節(jié)點/turtlesim的話題/turtle1/cmd_vel名不同,烏龜節(jié)點/turtlesim不接收該消息。2、訂閱者程序節(jié)點接收發(fā)布者節(jié)點發(fā)出的geometry_msgs::Twist消息(兩個節(jié)點有共同話題),處理后(線速度*2,角速度不變)轉(zhuǎn)發(fā)給/turtle1/cmd_vel話題3、烏龜節(jié)點/turtlesim接收到消息后繪制圖形

示例2:訂閱者/發(fā)布者程序

示例2:發(fā)布者程序my_pub.py自定義的話題名稱,仿真烏龜收不到該話題消息示例2:訂閱者程序my_sub.py定義回調(diào)函數(shù),用于接收自定義話題消息,處理后轉(zhuǎn)發(fā)自定義的話題名稱,必須與發(fā)布者程序中的話題相同課堂練習(xí):在自己電腦上編寫并運行示例1、示例21、創(chuàng)建包,包名為姓名拼音首字母或拼音全名2、編寫發(fā)布訂閱程序控制仿真烏龜繪制圖形,要求:(1)發(fā)布者程序運行后接收鍵盤輸入數(shù)字或字母,然后通過自定義話題把該數(shù)字或字母從發(fā)送給訂閱者查詢;(自定義消息的類型可設(shè)置為:“std_msgs/String”或“std_msgs/Int8”)(2)編寫訂閱者程序,接收(1)步中的消息,然后在話題“/turtle1/cmd_vel”上發(fā)送geometry_msgs/Twist消息,仿真烏龜收到消息后繪制出圖形。(3)發(fā)布者程序循環(huán)運行,直到被終止。

2024/11/29134作業(yè)8:編寫發(fā)布者訂閱者程序服務(wù)(service)Service通信

topic是ROS中的一種單向的異步通信方式。有些時候單向的通信滿足不了通信要求這種情況下,就需要有另外一種請求-響應(yīng)式的通信模型——service(服務(wù))

service方式在通信模型上與topic不同。Service通信是雙向的,它不僅可以發(fā)送消息,同時還會有反饋。所以service包括兩部分,一部分是請求方(Clinet)[客戶],另一部分是應(yīng)答方/服務(wù)提供方(Server)。通信時,客戶(Client)發(fā)送一個request(請求),要等待server處理,然后反饋回一個reply/response(回復(fù)/應(yīng)答),這樣通過“請求-應(yīng)答”的機制完成整個服務(wù)通信

Service工作原理

service是同步通信方式,所謂同步就是節(jié)點A(請求方)發(fā)布請求后會在原地等待響應(yīng),直到節(jié)點B(服務(wù)方)處理完了請求并且完成了響應(yīng),節(jié)點A才會繼續(xù)執(zhí)行。節(jié)點A在等待響應(yīng)的過程中是處于阻塞狀態(tài)。這樣的通信模型沒有頻繁的消息傳遞,沒有沖突與高系統(tǒng)資源的占用,只有接受請求才執(zhí)行服務(wù),簡單高效

Service工作原理

Service與topic異同遠(yuǎn)程過程調(diào)用(RemoteProcedureCall,RPC),可以簡單通俗的理解為在一個進程里調(diào)用另一個進程的函數(shù)Service工作原理

1、使用命令rosservice2、編寫client/server程序server

rosservice命令作用rosservicelist列出所有服務(wù)rosserviceinfo[服務(wù)名]查看一個服務(wù)的數(shù)據(jù)類型rosservicecall[服務(wù)名]

[參數(shù)]命令行調(diào)用服務(wù)rosservice相關(guān)命令作用rossrvshow[服務(wù)數(shù)據(jù)類型]查看服務(wù)的數(shù)據(jù)類型構(gòu)成rosnodeinfo[節(jié)點名]查看特點節(jié)點提供的服務(wù)、話題等信息Service的使用方式

查看烏龜節(jié)點服務(wù)、話題信息

rosnodeinfo/turtlesim

發(fā)布了3個topic訂閱1個topic提供的服務(wù)了解海龜?shù)墓?jié)點信息

rosservicelist列出所有服務(wù)(包含仿真海龜提供的服務(wù))

清除仿真烏龜軌跡殺烏龜復(fù)位/重置烏龜生成一個新烏龜設(shè)置軌跡的顏色、寬度移動烏龜?shù)街付ㄗ鴺?biāo)和朝向通過設(shè)置線速度和角度移動烏龜了解海龜節(jié)點提供的Service rosserviceinfo[服務(wù)名]提供服務(wù)的節(jié)點服務(wù)的數(shù)據(jù)類型調(diào)用該服務(wù)需要的參數(shù)查看服務(wù)信息(數(shù)據(jù)類型與參數(shù))

rossrvshow[類型名]查看服務(wù)的數(shù)據(jù)類型定義

調(diào)用服務(wù)(無參數(shù))1、清除軌跡rosservicecall

/clear

調(diào)用服務(wù)示例1 調(diào)用服務(wù)(無參數(shù))2、重置復(fù)位rosservicecall

/reset

調(diào)用服務(wù)示例2

調(diào)用服務(wù)(有參數(shù))3、生成新烏龜rosservicecall

/spawn550turtle2

先輸命令rosservicecall/spawn然后按TAB自動補全參數(shù)格式然后移動光標(biāo)輸入?yún)?shù)值

移動光標(biāo),輸入服務(wù)調(diào)用命令的各個參數(shù)值調(diào)用服務(wù)生成新烏龜,坐標(biāo)為(5,5),朝向0,烏龜名稱為“turtle2”

注意:冒號后有空格方法一:直接輸入命令方法二:使用TAB鍵補全調(diào)用服務(wù)示例3

調(diào)用服務(wù)(有參數(shù))4、殺烏龜rosservicecall

/killturtle1

先輸命令rosservicecall/kill然后按TAB自動補全參數(shù)格式

移動光標(biāo),輸入要殺掉的烏龜命令的名稱turtle1冒號后有空格方法一:直接輸入命令方法二:使用TAB鍵補全調(diào)用服務(wù)示例4

調(diào)用服務(wù)(有參數(shù))5、設(shè)置軌跡的顏色、寬度rosservicecall/turtle1/set_pen{255,0,0,5,0}先輸命令rosservicecall/kill然后按TAB自動補全參數(shù)格式

移動光標(biāo),輸入要設(shè)置的顏色和寬度冒號后有空格方法二:使用TAB鍵補全調(diào)用服務(wù)設(shè)置軌跡線顏色為紅色、寬度為5方法一:直接輸入命令,參數(shù)用花括號包含,逗號分隔調(diào)用服務(wù)示例5

調(diào)用服務(wù)(有參數(shù))6、移動烏龜?shù)街付ㄗ鴺?biāo)和朝向

rosservicecall/turtle1/teleport_absolute{10,10,1.57}移動光標(biāo),輸入要設(shè)置的坐標(biāo)和朝向冒號后有空格方法二:使用TAB鍵補全調(diào)用服務(wù)移動烏龜?shù)剑?0,10),朝向為90°方法一:直接輸入命令,參數(shù)用花括號包含,逗號分隔調(diào)用服務(wù)示例6

調(diào)用服務(wù)(有參數(shù))7、設(shè)置線速度、角度移動烏龜rosservicecall/turtle1/teleport_relative{5,1.57}移動光標(biāo),輸入要設(shè)置的線速度和角度冒號后有空格技巧:使用TAB鍵補全方法一:直接輸入命令,參數(shù)用花括號包含,逗號分隔調(diào)用服務(wù)示例7

使用rostopic、rosservice命令繪制以下圖形

調(diào)用服務(wù)示例8:繪制笑臉

使用rostopic命令繪制以下圖形分析:整個圖形由不連續(xù)的幾段圖形構(gòu)成,需要控制烏龜分別繪制。繪制完成其中一段后,殺掉烏龜,然后在下一段需要繪制圖形的坐標(biāo)點生成一只新的烏龜繪制相應(yīng)的圖形,直至全部圖形繪制完成。A(5,5)O(5,7)B(4,8)C(6,8)D(4,6)E(6,6)調(diào)用服務(wù)示例8:繪制笑臉

使用rostopic命令繪制調(diào)用服務(wù)示例8:繪制笑臉

1、參考課件,在自己電腦上練習(xí)示例1-82、使用rostopic繪制下列圖形

2024/11/29155作業(yè)9編寫服務(wù)請求程序1、導(dǎo)包rospy2、導(dǎo)入服務(wù)類型(根據(jù)要調(diào)用的服務(wù)導(dǎo)入相應(yīng)的類型)使用rosserviceinfo服務(wù)了解該服務(wù)使用的數(shù)據(jù)類型使用rossrvshow類型了解該服務(wù)數(shù)據(jù)類型的詳細(xì)定義,方便在程序中使用

編寫服務(wù)請求(client)程序的步驟服務(wù)名類型參數(shù)/clearstd_srvs/Empty無/killturtlesim/Killname/resetstd_srvs/Empty無/spawnturtlesim/Spawnxythetaname/turtle1/set_penturtlesim/SetPenrgbwidthoff/turtle1/teleport_absoluteturtlesim/TeleportAbsolutexytheta/turtle1/teleport_relativeturtlesim/TeleportRelativelinearangular2、導(dǎo)入服務(wù)類型對于每個定義好的服務(wù)類,系統(tǒng)會自動生成Request和Response類型,用于發(fā)送調(diào)用服務(wù)的參數(shù)和接收響應(yīng)數(shù)據(jù)例如:Spawn類自動生成SpawnRequest、SpawnResponse類型,SpawnRequest用于調(diào)用服務(wù)時傳送創(chuàng)建烏龜?shù)淖鴺?biāo)等參數(shù)SpawnResponse用于接收創(chuàng)建成功后的響應(yīng)數(shù)據(jù)(在對應(yīng)的服務(wù)名后面加上Request、Response構(gòu)成請求、響應(yīng)的數(shù)據(jù)類型)

編寫服務(wù)請求(client)程序的步驟2、導(dǎo)入服務(wù)類型服務(wù)數(shù)據(jù)類型的詳細(xì)定義:用---把數(shù)據(jù)分為請求(client)和響應(yīng)(server)兩部分(1)無請求數(shù)據(jù),無響應(yīng)數(shù)據(jù)(2)有請求數(shù)據(jù),有響應(yīng)數(shù)據(jù)(3)有請求數(shù)據(jù),無響應(yīng)數(shù)據(jù)

編寫服務(wù)請求(client)程序的步驟3、初始化節(jié)點4、定義client變量并調(diào)用rospy.ServiceProxy()函數(shù)初始化,設(shè)定參數(shù)(指定服務(wù)名,服務(wù)類型)5、等待服務(wù)端啟動(阻塞)6、定義請求變量并填充參數(shù)(調(diào)用無參數(shù)的服務(wù)不需要這一步)7、調(diào)用服務(wù)并接收響應(yīng)

編寫服務(wù)請求(client)程序的步驟程序功能:程序調(diào)用turtlesim節(jié)點的/spawn服務(wù),在指定的坐標(biāo)生成海龜

示例1:編寫服務(wù)請求程序(有參數(shù))導(dǎo)入服務(wù)類型,SpawnRequest、SpawnResponse是系統(tǒng)自動生成的類型定義SpawnRequest類型變量用于設(shè)置參數(shù)阻塞調(diào)用進程,等待服務(wù)響應(yīng)定義服務(wù)調(diào)用的客戶端并初始化調(diào)用服務(wù),把響應(yīng)結(jié)果存變量response中定義SpawnResponse類型變量用于處理響應(yīng)程序功能:程序調(diào)用turtlesim節(jié)點的/clear服務(wù),清除軌跡

示例2:編寫服務(wù)請求程序(無參數(shù))定義服務(wù)調(diào)用的客戶端并初始化導(dǎo)入服務(wù)類型1、參考課件示例,編寫并運行示例1、示例22、編寫服務(wù)調(diào)用程序1,運行后重置海龜3、編寫服務(wù)調(diào)用程序2,運行后殺掉一個海龜4、編寫服務(wù)調(diào)用程序3,運行后改變海龜運行軌跡的顏色和寬度5、編寫服務(wù)調(diào)用程序4,運行后移動海龜?shù)街付ㄗ鴺?biāo)(本次作業(yè)課堂檢查,不提交程序文件)

2024/11/29163作業(yè)10:編寫服務(wù)調(diào)用程序編寫服務(wù)請求程序改進示例1(在指定位置生成烏龜),編寫程序,隨機生成烏龜思路:在生成烏龜?shù)某绦蚧A(chǔ)上,使用隨機函數(shù)生成烏龜?shù)淖鴺?biāo)和朝向補充:在python中用于生成隨機數(shù)的模塊是random,在使用前需要import導(dǎo)入random.random()用于生成一個0到1的隨機符點數(shù):0<=n<1.0

random.randint(a,b)用于生成一個指定范圍內(nèi)的整數(shù)。其中參數(shù)a是下限,參數(shù)b是上限,生成的隨機數(shù)n:a<=n<=b,

示例3:隨機生成烏龜改進示例3,編寫程序,隨機生成10個烏龜

改進示例3:隨機生成烏龜編寫程序,繪制圖形

示例4:繪制圖形

編寫程序,繪制圖形

示例4:繪制圖形

1、編寫程序,繪制下列圖形

2、編寫程序,繪制下列圖形之一

課堂作業(yè):繪制圖形abcdef

g

h

習(xí)題課作業(yè)5 1.編寫小海龜繪制心型、月型、環(huán)型的參數(shù)計算程序2.輸出1-100的累計求和值3.輸出n的階乘(n<10)4.輸出1-100間的素數(shù)

作業(yè)6 在vscode中編寫ROS程序繪制下列幾何圖形(python)

作業(yè)7:編寫訂閱者程序1、啟動海龜示例節(jié)點2、仿照示例1,編寫運行程序,實現(xiàn)訂閱海龜坐標(biāo)信息并輸出3、編寫訂閱者程序,訂閱話題/turtle1/color_sensor,然后輸出顏色數(shù)據(jù)1、創(chuàng)建包,包名為姓名拼音首字母或拼音全名2、編寫發(fā)布訂閱程序控制仿真烏龜繪制圖形,要求:(1)發(fā)布者程序運行后接收鍵盤輸入數(shù)字或字

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論