版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
任務(wù)一初識(shí)命令行工具01任務(wù)二使用rosnode命令管理節(jié)點(diǎn)02任務(wù)三使用rostopic命令管理話題消息03任務(wù)四使用rosservice命令管理服務(wù)消息04任務(wù)五使用rosbag命令記錄運(yùn)行數(shù)據(jù)0154任務(wù)六使用rosparam命令修改參數(shù)01任務(wù)七使用rosmsg命令查看消息0255任務(wù)一
初識(shí)命令行工具561.?了解ROS常用的命令行工具2.?掌握使用ROS?的命令行工具實(shí)現(xiàn)相關(guān)功能的方法任務(wù)目標(biāo)57一、ROSshell命令ROSshell命令可以快速地定位、查看并編輯功能包中的文件,ROSshell命令的釋義及詳細(xì)說明見下表?;A(chǔ)知識(shí)58ROSshell命令的釋義及詳細(xì)說明二、ROS執(zhí)行命令ROS執(zhí)行命令是最常用的命令類型,用于啟動(dòng)ROS節(jié)點(diǎn)管理器以及日志的檢查或刪除等。ROS執(zhí)行命令的釋義及詳細(xì)說明見下表。59ROS執(zhí)行命令的釋義及詳細(xì)說明三、ROS消息命令ROS消息命令用于獲取ROS系統(tǒng)中的數(shù)據(jù),包括節(jié)點(diǎn)、話題、服務(wù)、參數(shù)等,而且可以通過ROS消息命令對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存并回放。ROS消息命令的釋義及詳細(xì)說明見下表。60ROS消息命令的釋義及詳細(xì)說明四、ROScatkin命令catkin是開發(fā)者為了高效編譯和整合項(xiàng)目而開發(fā)的工具,ROScatkin命令可以很方便地生成功能包并快速完成功能包的編譯。ROScatkin命令的詳細(xì)說明見下表。61ROScatkin命令的詳細(xì)說明五、ROS功能包命令ROS功能包命令用于查看與功能包相關(guān)的消息和依賴性文件。ROS功能包命令的釋義及詳細(xì)說明見下表。62ROS功能包命令的釋義及詳細(xì)說明任務(wù)二
使用rosnode命令管理節(jié)點(diǎn)631.?熟悉并掌握rosnode命令的使用方法2.?能通過運(yùn)行rosnode命令控制小海龜任務(wù)目標(biāo)64rosnode命令的使用rosnode是用于顯示ROS節(jié)點(diǎn)調(diào)試消息的命令行工具,包括發(fā)布、訂閱、連接等。rosnode主要命令的作用見下表。基礎(chǔ)知識(shí)6566rosnode主要命令的作用任務(wù)三
使用rostopic命令管理話題消息671.?熟悉并掌握rostopic命令的使用方法2.?能通過運(yùn)行rostopic命令控制小海龜任務(wù)目標(biāo)68rostopic命令的使用rostopic主要命令的作用見下表?;A(chǔ)知識(shí)69rostopic主要命令的作用70rostopic主要命令的作用任務(wù)四
使用rosservice命令管理服務(wù)消息711.?熟悉并掌握rosservice命令的使用方法2.?能通過運(yùn)行rosservice命令控制小海龜任務(wù)目標(biāo)72rosservice命令的使用rosservice主要命令的作用見下表?;A(chǔ)知識(shí)73rosservice主要命令的作用任務(wù)五
使用rosbag命令記錄運(yùn)行數(shù)據(jù)741.?熟悉并掌握rosbag命令的使用方法2.?能通過運(yùn)行rosbag命令控制小海龜任務(wù)目標(biāo)75rosbag命令的使用rosbag主要命令的作用見下表?;A(chǔ)知識(shí)76rosbag主要命令的作用任務(wù)六
使用rosparam命令修改參數(shù)771.?熟悉并掌握rosparam命令的使用方法2.?能通過運(yùn)行rosparam命令控制小海龜任務(wù)目標(biāo)78一、rosparam命令的使用rosparam主要命令的作用見下表?;A(chǔ)知識(shí)79rosparam主要命令的作用二、RGB值RGB色彩模式是工業(yè)領(lǐng)域的顏色標(biāo)準(zhǔn),它通過調(diào)整紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道以及它們的疊加來生成各種顏色。RGB色彩模式涵蓋了人類視覺所能感知的幾乎所有顏色,因此被廣泛應(yīng)用于各個(gè)領(lǐng)域。RGB函數(shù)成功執(zhí)行后會(huì)返回一個(gè)長整數(shù),用于表示由指定數(shù)值確定的顏色。該函數(shù)的語法為:RGB(RedAsInteger,GreenAsInteger,BlueAsInteger),具體的參數(shù)描述見下表。8081RGB函數(shù)參數(shù)描述需要注意的是,如果其中一個(gè)參數(shù)的值超過了255,不會(huì)顯示任何錯(cuò)誤,但該參數(shù)會(huì)被視為255處理。這是為了確保顏色數(shù)值在合理范圍內(nèi),避免超出可表示的顏色范圍。任務(wù)七
使用rosmsg命令查看消息821.?熟悉并掌握rosmsg命令的使用方法2.?能通過運(yùn)行rosmsg命令控制小海龜任務(wù)目標(biāo)83rosmsg命令的使用rosmsg主要命令的作用見下表?;A(chǔ)知識(shí)84rosmsg主要命令的作用任務(wù)一啟動(dòng)節(jié)點(diǎn)和節(jié)點(diǎn)管理器的兩種方式01任務(wù)二創(chuàng)建工作空間和功能包02任務(wù)三使用Python和C++編寫節(jié)點(diǎn)程序03任務(wù)四使用launch文件實(shí)現(xiàn)節(jié)點(diǎn)啟動(dòng)和參數(shù)設(shè)置04任務(wù)五使用launch文件實(shí)現(xiàn)多節(jié)點(diǎn)啟動(dòng)0185任務(wù)一
啟動(dòng)節(jié)點(diǎn)和節(jié)點(diǎn)管理器的兩種方式861.?掌握rosrun?命令的使用方法2.?掌握roslaunch命令的使用方法3.?理解roslaunch命令的優(yōu)點(diǎn)任務(wù)目標(biāo)87一、rosrun命令的使用若要啟動(dòng)ROS節(jié)點(diǎn),首先輸入以下命令:$roscore命令執(zhí)行后ROSmaster啟動(dòng),同時(shí)啟動(dòng)的還有rosout和parameterserver,其中rosout是負(fù)責(zé)日志輸出的節(jié)點(diǎn),其作用是告知用戶當(dāng)前系統(tǒng)的狀態(tài),包括輸出系統(tǒng)的錯(cuò)誤、警告等,并將log記錄于日志文件中;parameterserver是參數(shù)服務(wù)器,它并不是一個(gè)節(jié)點(diǎn),而是存儲(chǔ)參數(shù)配置的服務(wù)器?;A(chǔ)知識(shí)88啟動(dòng)節(jié)點(diǎn)管理器之后,節(jié)點(diǎn)管理器就開始按照系統(tǒng)的安排進(jìn)行具體的節(jié)點(diǎn)啟動(dòng)工作。節(jié)點(diǎn)就是一個(gè)進(jìn)程,只不過它在ROS中被賦予了專用的名字——node。package中存放著可執(zhí)行文件,可執(zhí)行文件是靜態(tài)的,當(dāng)系統(tǒng)運(yùn)行這些可執(zhí)行文件時(shí),這些文件被加載到內(nèi)存中,就成為了動(dòng)態(tài)的node。啟動(dòng)節(jié)點(diǎn)的命令是:$rosrun[package_name][node_name]在ROS中,通常按照以下步驟來啟動(dòng)系統(tǒng):首先啟動(dòng)節(jié)點(diǎn)管理器,然后啟動(dòng)各個(gè)節(jié)點(diǎn)。當(dāng)系統(tǒng)中的節(jié)點(diǎn)數(shù)量增多時(shí),可以選擇使用launch文件進(jìn)行批量啟動(dòng)。節(jié)點(diǎn)管理器與節(jié)點(diǎn)、節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系見下圖。8990節(jié)點(diǎn)管理器與節(jié)點(diǎn)、節(jié)點(diǎn)與節(jié)點(diǎn)之間的關(guān)系二、roslaunch命令的使用輸入以下命令,啟動(dòng)ROS節(jié)點(diǎn)和節(jié)點(diǎn)管理器。$roslaunch[package_name][launch_file_name]roslaunch命令會(huì)自動(dòng)檢測ROS系統(tǒng)的roscore進(jìn)程是否在運(yùn)行,以確定節(jié)點(diǎn)管理器是否處于運(yùn)行狀態(tài)。如果roscore未啟動(dòng),roslaunch會(huì)首先啟動(dòng)roscore進(jìn)程,無須運(yùn)行roscore命令,然后按照launch文件中定義的規(guī)則執(zhí)行啟動(dòng)過程。launch文件包含了預(yù)先配置好的啟動(dòng)規(guī)則,roslaunch是一個(gè)啟動(dòng)工具,可以一次性按照配置啟動(dòng)多個(gè)節(jié)點(diǎn),無須在終端中逐個(gè)輸入命令。91三、roslaunch命令的優(yōu)點(diǎn)ROS中的launch文件可以簡單理解為一個(gè)集合了多個(gè)節(jié)點(diǎn)和參數(shù)的文件,launch文件的功能是一次性啟動(dòng)多個(gè)節(jié)點(diǎn)。ROS中通常需要同時(shí)運(yùn)行多個(gè)節(jié)點(diǎn),如果每次開機(jī)都需要逐個(gè)輸入命令來啟動(dòng)每個(gè)節(jié)點(diǎn)將會(huì)非常煩瑣。因此,可以將要啟動(dòng)的節(jié)點(diǎn)和相應(yīng)的參數(shù)全部寫入launch文件,然后通過roslaunch命令一次性啟動(dòng)多個(gè)節(jié)點(diǎn)。92相對(duì)于使用rosrun命令來單獨(dú)運(yùn)行程序,roslaunch命令有兩個(gè)主要優(yōu)點(diǎn):1.roslaunch命令可以向程序傳遞參數(shù),以便在啟動(dòng)時(shí)動(dòng)態(tài)地配置節(jié)點(diǎn)的行為。2.roslaunch命令可以同時(shí)運(yùn)行多個(gè)節(jié)點(diǎn),提供了更方便的節(jié)點(diǎn)啟動(dòng)方式。93任務(wù)二
創(chuàng)建工作空間和功能包941.?了解工作空間的作用2.?掌握ROS工作空間的創(chuàng)建、編譯和環(huán)境配置方法3.?了解ROS功能包的典型文件結(jié)構(gòu)4.?掌握ROS功能包的創(chuàng)建方法5.?能創(chuàng)建一個(gè)工作空間并在此基礎(chǔ)上創(chuàng)建一個(gè)功能包任務(wù)目標(biāo)95一、工作空間的作用在ROS中,創(chuàng)建工作空間有助于組織和管理ROS項(xiàng)目的功能包、編譯、依賴項(xiàng)等,創(chuàng)建工作空間的作用有以下幾點(diǎn):1.模塊化組織:工作空間允許用戶將ROS項(xiàng)目模塊化組織。ROS項(xiàng)目通常包含多個(gè)功能包,每個(gè)功能包可能包含節(jié)點(diǎn)、主題、服務(wù)、消息定義等。工作空間是用戶創(chuàng)建的一個(gè)目錄結(jié)構(gòu),用戶可以在工作空間中創(chuàng)建和組織這些功能包。這種模塊化結(jié)構(gòu)有助于更好地組織和管理項(xiàng)目。基礎(chǔ)知識(shí)962.方便編譯和構(gòu)建:ROS項(xiàng)目需要進(jìn)行編譯,將源代碼轉(zhuǎn)化為可執(zhí)行文件,同時(shí)需要生成構(gòu)建文件,如CMakeLists.txt和package.xml。工作空間允許用戶在其中進(jìn)行編譯,并自動(dòng)生成構(gòu)建文件,從而簡化項(xiàng)目構(gòu)建過程。3.依賴項(xiàng)管理:工作空間有助于管理項(xiàng)目所依賴的其他功能包。ROS中的功能包通常會(huì)依賴其他功能包,這些依賴項(xiàng)需要正確配置和安裝。工作空間提供了一個(gè)依賴項(xiàng)管理系統(tǒng),可以更輕松地跟蹤和安裝依賴項(xiàng)。974.可移植性:工作空間使ROS項(xiàng)目更具可移植性。用戶可以輕松地將整個(gè)工作空間復(fù)制到其他計(jì)算機(jī)上并進(jìn)行編譯和運(yùn)行,而無須手動(dòng)復(fù)制和配置每個(gè)功能包。5.環(huán)境隔離:用戶可以在不同的工作空間中運(yùn)行不同版本的ROS項(xiàng)目或依賴項(xiàng),這有助于環(huán)境隔離和避免沖突。98二、工作空間的創(chuàng)建在ROS中創(chuàng)建工作空間,本質(zhì)就是將一個(gè)新建的文件夾通過工具(catkin_make)編譯成ROS中可以搜索的文件路徑,通過配置環(huán)境變量,使這個(gè)文件夾可以被用戶在終端中使用的過程。創(chuàng)建工作空間需要?jiǎng)?chuàng)建一個(gè)文件夾,工作空間的名稱可以自行設(shè)定,如catkin_ws、myProject_ws等,但要注意工作空間中應(yīng)包含一個(gè)src文件夾,該文件夾用于存放ROS功能包,若不創(chuàng)建該文件夾會(huì)導(dǎo)致編譯環(huán)節(jié)出現(xiàn)錯(cuò)誤。創(chuàng)建工作空間和src文件夾的命令如下:$mkdir-p<workspace_name>/src99三、工作空間的編譯catkin元構(gòu)建系統(tǒng)是為了高效構(gòu)建眾多相互依賴但獨(dú)立開發(fā)的CMake項(xiàng)目而構(gòu)建的。catkin_make是將cmake與make的編譯方式做了封裝的指令工具,它簡化了程序cmake編譯的標(biāo)準(zhǔn)工作流程,用法如下:$cd<workspace_name>#終端路徑進(jìn)入工作空間$catkin_make
#使用catkin_make創(chuàng)建工作空間100以上兩行命令等效于以下多行命令,這是使用cmake方式編譯項(xiàng)目的標(biāo)準(zhǔn)流程示例:$cd<workspace_name>/src#終端路徑進(jìn)入工作空間$catkin_init_workspace$cd..$mkdirbuild$cdbuild101$cmake../src-DCMAKE_INSTALL_PREFIX=../install-DCATKIN_DEVEL_PREFIX=../devel$make$makeinstall#(該步驟是可選的)編譯完成后,工作空間中應(yīng)該有三個(gè)文件夾:devel、build、src。工作空間的編譯是必不可少的,它可以看作是普通文件與ROS關(guān)聯(lián)的橋梁。102四、工作空間的環(huán)境配置工作空間編譯完成后,需要將工作空間的地址告知ROS,即進(jìn)行工作空間的環(huán)境配置,以便ROS能夠找到并使用新建的工作空間。配置工作空間環(huán)境的命令如下:$echo"source~/<workspace_name>/devel/setup.bash">>~/.bashrc$source~/.bashrc命令執(zhí)行后,將工作空間的環(huán)境變量執(zhí)行文件添加到了終端的啟動(dòng)腳本中,每次新建終端時(shí)都會(huì)自動(dòng)地將工作空間的環(huán)境變量添加到終端。添加完成后可以通過以下命令查看環(huán)境變量:$export|grepROS103五、功能包的典型文件結(jié)構(gòu)功能包是程序和資源文件的集合,在ROS中可以自己創(chuàng)建功能包并編寫程序,也可以使用已有的功能包來實(shí)現(xiàn)功能。功能包的典型文件結(jié)構(gòu)如圖所示。104功能包的典型文件結(jié)構(gòu)功能包中各文件夾的作用見下表。105功能包中各文件夾的作用六、功能包的創(chuàng)建catkin_create_pkg命令可以創(chuàng)建一個(gè)新功能包,用法如下:$cd~/<workspace>/src$catkin_create_pkg<package_name>[depend1][depend2][depend3]其中,<package_name>為功能包的名稱,[depend1][depend2][depend3]分別為每個(gè)依賴的名稱。執(zhí)行該命令后會(huì)生成一個(gè)功能包,如圖所示。功能包創(chuàng)建完成后,需要重新編譯工作空間才能使用。106107生成的功能包任務(wù)三
使用Python和C++編寫節(jié)點(diǎn)程序1081.?了解Python與C++編程語言的區(qū)別2.?了解Python與C++在實(shí)際開發(fā)中的區(qū)別3.?使用Python和C++編寫節(jié)點(diǎn)程序任務(wù)目標(biāo)109ROS中的一個(gè)軟件包可以包含多個(gè)可執(zhí)行文件,這些可執(zhí)行文件在運(yùn)行后成為進(jìn)程,最小的進(jìn)程單元就是節(jié)點(diǎn),節(jié)點(diǎn)可以是由C++編寫的可執(zhí)行文件或由Python腳本組成的進(jìn)程。一、Python與C++編程語言的對(duì)比Python和C++編程語言主要有以下幾個(gè)方面的區(qū)別:首先,就編程語言的特點(diǎn)而言,Python是一種動(dòng)態(tài)、解釋型語言,語法簡潔、易于學(xué)習(xí)和理解,適合快速開發(fā)和原型驗(yàn)證。C++是一種靜態(tài)、編譯型語言,執(zhí)行效率高,適合對(duì)性能要求較高的任務(wù)和底層開發(fā)?;A(chǔ)知識(shí)110其次,就開發(fā)效率和執(zhí)行效率而言,Python代碼量少,語法簡潔,有豐富的庫和工具支持,適合快速開發(fā)和迭代;相比之下,C++需要更多的代碼量和語法結(jié)構(gòu),編寫和調(diào)試可能會(huì)更復(fù)雜和耗時(shí)。因此,Python比C++的開發(fā)效率更高。但是,C++是一種編譯型語言,代碼在編譯階段轉(zhuǎn)化為機(jī)器碼,執(zhí)行速度快;而Python是解釋型語言,需要在運(yùn)行時(shí)解釋執(zhí)行,執(zhí)行速度相對(duì)較慢。因此,C++比Python的執(zhí)行效率更高。最后,就應(yīng)用場景而言,Python適用于快速原型驗(yàn)證、數(shù)據(jù)處理、腳本編寫等場景,如機(jī)器人的高層控制、任務(wù)調(diào)度和算法驗(yàn)證,使用Python可以更快速地實(shí)現(xiàn)這些功能。而C++適用于對(duì)執(zhí)行效率有較高要求的場景,如底層驅(qū)動(dòng)、實(shí)時(shí)控制、計(jì)算密集型任務(wù)等。111二、Python與C++在實(shí)際開發(fā)中的區(qū)別1.?編譯Python是一種解釋型語言,而C++是一種編譯型語言。這意味著Python腳本(后綴為“.py”的文件)在運(yùn)行之前不需要進(jìn)行編譯,可以直接修改腳本后運(yùn)行。在ROS中,Python節(jié)點(diǎn)程序通常存放在/scripts目錄下。而C++節(jié)點(diǎn)程序需要先編譯成可執(zhí)行文件,然后才能運(yùn)行。C++節(jié)點(diǎn)程序的源代碼(后綴為“.cpp”的文件)在運(yùn)行時(shí)并不直接參與,而是通過編譯器生成的可執(zhí)行文件來運(yùn)行。因此,如果修改了C++源代碼,需要在CMakeLists.txt文件中添加編譯語句,然后運(yùn)行catkin_make來重新編譯生成可執(zhí)行文件,才能使修改生效。1122.?編寫本文將以一個(gè)名為“hello”的節(jié)點(diǎn)為例,分別使用Python和C++兩種編程語言來編寫節(jié)點(diǎn)程序,從而理解兩種節(jié)點(diǎn)程序的區(qū)別。(1)Python程序當(dāng)使用Python編寫節(jié)點(diǎn)程序時(shí),需要在程序的開頭使用初始化節(jié)點(diǎn)的函數(shù),rospy.init_node()函數(shù)會(huì)告知ROS主系統(tǒng)當(dāng)前編寫的程序是一個(gè)ROS節(jié)點(diǎn),并且會(huì)為該節(jié)點(diǎn)提供必要的運(yùn)行環(huán)境。以編寫名為“hello”的節(jié)點(diǎn)為例,初始化節(jié)點(diǎn)的命令如下:rospy.init_node("hello",anonymous=True)113rospy.init_node(NAME)函數(shù)用于初始化節(jié)點(diǎn)并開始與ROSmaster進(jìn)行通信。這里初始化了一個(gè)名為“hello”的節(jié)點(diǎn),需要注意的是,節(jié)點(diǎn)的名稱不需要以“/”為開頭,因?yàn)樵诿钪羞\(yùn)行節(jié)點(diǎn)時(shí),系統(tǒng)會(huì)自動(dòng)在節(jié)點(diǎn)名稱前添加“/”。當(dāng)參數(shù)“anonymous”設(shè)置為True時(shí),系統(tǒng)會(huì)在節(jié)點(diǎn)名稱的末尾添加一串隨機(jī)數(shù),以確??梢酝瑫r(shí)運(yùn)行多個(gè)具有相同名稱的節(jié)點(diǎn)。如果設(shè)置為False,則只能運(yùn)行一個(gè)具有該名稱的節(jié)點(diǎn)。114這樣的設(shè)置使得節(jié)點(diǎn)可以靈活地在系統(tǒng)中創(chuàng)建并進(jìn)行通信。1.
whilenotrospy.is_shutdown():2.
hello_str="HelloWorld%s"%rospy.get_time()3.
rospy.loginfo(hello_str)4.
rate.sleep()(注:縮進(jìn)為4個(gè)空格)115循環(huán)是rospy的常用結(jié)構(gòu),rospy.is_shutdown()是一個(gè)用于檢查程序是否應(yīng)該退出循環(huán)的函數(shù)。當(dāng)該函數(shù)返回False時(shí),程序會(huì)繼續(xù)執(zhí)行;當(dāng)返回True時(shí),程序會(huì)退出。一般情況下,可以使用組合鍵“Ctrl+C”來觸發(fā)程序退出,從而使rospy.is_shutdown()返回True,結(jié)束程序的運(yùn)行。rospy.get_time()函數(shù)用于獲取節(jié)點(diǎn)初始化的時(shí)間和當(dāng)前時(shí)間,計(jì)算它們之間的時(shí)間間隔并打印。這有助于在節(jié)點(diǎn)中測量和記錄操作的執(zhí)行時(shí)間。116rospy.loginfo(str)函數(shù)用于在終端屏幕輸出調(diào)試信息,同時(shí)將消息寫入節(jié)點(diǎn)日志文件和rosout節(jié)點(diǎn)。rate.sleep()是一個(gè)定時(shí)器,該函數(shù)使當(dāng)前線程進(jìn)入休眠狀態(tài),以保持節(jié)點(diǎn)消息發(fā)送頻率的穩(wěn)定。通過設(shè)置合適的頻率,可以控制節(jié)點(diǎn)的執(zhí)行速率,從而適應(yīng)不同的應(yīng)用場景,避免消息發(fā)送過于頻繁或不足。117(2)C++程序同樣,當(dāng)使用C++編寫節(jié)點(diǎn)程序時(shí),需要在程序的開頭使用初始化節(jié)點(diǎn)的函數(shù),即ros::init(argc,argv,“node_name”)。以編寫名為“hello”的節(jié)點(diǎn)為例,初始化節(jié)點(diǎn)的命令如下:ros::init(argc,argv,"hello");118ros::init()函數(shù)用于在roscpp節(jié)點(diǎn)中進(jìn)行初始化操作。當(dāng)編寫node程序時(shí),需要先調(diào)用ros::init()函數(shù)進(jìn)行節(jié)點(diǎn)的初始化,這樣才能繼續(xù)調(diào)用其他roscpp庫中的函數(shù)。在初始化過程中,函數(shù)會(huì)解析命令行中傳入的參數(shù),包括argc和argv。在示例代碼中,“hello”表示節(jié)點(diǎn)的名稱。ROS系統(tǒng)中的節(jié)點(diǎn)名稱必須是唯一的,如果有重名的節(jié)點(diǎn)正在運(yùn)行,之前運(yùn)行的節(jié)點(diǎn)會(huì)被自動(dòng)關(guān)閉以確保節(jié)點(diǎn)名稱的唯一性。119完成節(jié)點(diǎn)的初始化后,需要使用ros::NodeHandle函數(shù)創(chuàng)建節(jié)點(diǎn)句柄(句柄可以理解為一個(gè)把手,就像握住門把手一樣,用戶可以輕松地打開整扇門,而不需要關(guān)心門的細(xì)節(jié)),用于進(jìn)行節(jié)點(diǎn)的其他操作,命令如下:ros::NodeHandlen;上述命令的目的是創(chuàng)建ROS節(jié)點(diǎn)句柄。在ROS中,節(jié)點(diǎn)句柄用于描述節(jié)點(diǎn)的資源。節(jié)點(diǎn)句柄的引入使用戶能夠方便地對(duì)節(jié)點(diǎn)進(jìn)行各種操作,包括但不限于為程序提供服務(wù)、監(jiān)聽特定話題上的消息、訪問和修改參數(shù)等。這一工具提供了一種便捷的方式來管理和調(diào)用節(jié)點(diǎn)的功能。通過使用節(jié)點(diǎn)句柄,用戶可以輕松地與ROS進(jìn)行交互,而無須深入關(guān)注底層的實(shí)現(xiàn)細(xì)節(jié)。120完成節(jié)點(diǎn)句柄的創(chuàng)建后,即可繼續(xù)其他節(jié)點(diǎn)邏輯程序的編寫,實(shí)例代碼如下:1.while(ros::ok())
//當(dāng)節(jié)點(diǎn)關(guān)閉時(shí)退出循環(huán)2.{3.
ROS_INFO("HelloWorld");
//輸出到終端4.
loop_rate.sleep();5.}在while循環(huán)的判斷語句中,ros::ok()接口被用來判斷節(jié)點(diǎn)是否仍在運(yùn)行。如果ros::ok()返回False,則表示節(jié)點(diǎn)已經(jīng)關(guān)閉,while循環(huán)將結(jié)束。1213.?運(yùn)行(1)使用rosrun命令啟動(dòng)Python腳本的格式如下:$rosrun[package_name][file_name](2)使用rosrun命令啟動(dòng)C++節(jié)點(diǎn)程序編譯成的可執(zhí)行文件的格式如下:$rosrun[package_name][node_name]122任務(wù)四
使用launch文件實(shí)現(xiàn)節(jié)點(diǎn)啟動(dòng)和參數(shù)設(shè)置1231.?了解launch文件和launch文件的標(biāo)簽2.?掌握XML文件的編寫注意事項(xiàng)3.?掌握launch文件的參數(shù)設(shè)置方法4.?能創(chuàng)建和編寫launch文件,并且用roslaunch命令啟動(dòng)launch文件任務(wù)目標(biāo)124一、launch文件launch文件是多個(gè)節(jié)點(diǎn)和參數(shù)的集合文件,可以將要啟動(dòng)的節(jié)點(diǎn)和對(duì)應(yīng)的參數(shù)全部寫入launch文件中,然后使用roslaunch命令一次啟動(dòng)多個(gè)節(jié)點(diǎn)。launch文件遵循XML語言(可擴(kuò)展標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義的源語言)規(guī)范。和其他ROS文件相同,每一個(gè)啟動(dòng)文件都應(yīng)該與一個(gè)特定的功能包關(guān)聯(lián)起來,通常以“.launch”作為啟動(dòng)文件名稱的后綴?;A(chǔ)知識(shí)125最簡單的方法是將啟動(dòng)文件直接存放在功能包的根目錄中。當(dāng)查找啟動(dòng)文件時(shí),roslaunch工具會(huì)同時(shí)搜索每個(gè)功能包目錄的子目錄。包括ROS核心包在內(nèi)的許多功能包都是利用這一特性,將所有啟動(dòng)文件統(tǒng)一存放在一個(gè)子目錄中,該子目錄通常命名為“l(fā)aunch”。126二、launch文件的標(biāo)簽launch文件是XML格式,它是由各種標(biāo)簽元素組成的。因此,要理解并且熟練編寫launch文件,需要熟悉launch文件中各個(gè)標(biāo)簽的含義及其書寫格式。launch文件的結(jié)構(gòu)參考如下:1.<launch>2.
<!--第1個(gè)節(jié)點(diǎn)-->3.
<nodepkg="包名"type="包內(nèi)可執(zhí)行程序名字"name="節(jié)點(diǎn)名">4.
<!--注釋內(nèi)容-->5.
<paraname="程序中的數(shù)值或布爾參數(shù)"value=""/>1276.
<paraname="程序中的字符串參數(shù)"value=""type="str"/>7....8.</node>9.
<!--第n個(gè)節(jié)點(diǎn)-->10.
<nodepkg="包名"type="包內(nèi)可執(zhí)行程序名字"name="節(jié)點(diǎn)名">11....12.</node>13.</launch>128launch文件中各標(biāo)簽的作用見下表。129launch文件中各標(biāo)簽的作用130launch文件中各標(biāo)簽的作用1.<launch><launch>是ROSlaunch文件的根元素,它是XML文檔的最頂層元素。每個(gè)ROSlaunch文件必須包含且僅包含一個(gè)根元素,它由一對(duì)<launch>標(biāo)簽定義。1.<launch>2....3.</launch>其他的所有元素標(biāo)簽都要寫在<launch>與</launch>標(biāo)簽之間。1312.<node><node>標(biāo)簽的作用是啟動(dòng)節(jié)點(diǎn)。每個(gè)launch文件的核心是節(jié)點(diǎn)的集合。每個(gè)節(jié)點(diǎn)都必須具有唯一的名稱,node元素的格式如下:<nodepkg="..."type="..."name="..."/>注意:<node>標(biāo)簽?zāi)┪驳摹?”很重要,編寫launch文件時(shí)不要遺漏?!?”表明:這里不會(huì)再有“</node>”出現(xiàn),并且node元素的定義完成。也可以寫為顯示關(guān)閉標(biāo)簽的形式:1.<nodepkg="..."type="..."name="...">2.</node>132node元素必需的三個(gè)屬性為pkg、type和name,它們的詳細(xì)說明見下表。133node元素必需屬性的說明node元素中不僅有pkg、type和name三個(gè)最常用的屬性,在某些情況下,還可能用到其他屬性,具體見下表。134node元素其他屬性的說明三、XML文件的編寫注意事項(xiàng)編寫XML文件時(shí)的注意事項(xiàng)如下:1.所有元素必須有結(jié)束標(biāo)簽。2.XML語法對(duì)大、小寫敏感,即大、小寫字母應(yīng)區(qū)分對(duì)待。3.嵌套格式必須正確。4.同級(jí)標(biāo)簽要對(duì)齊。5.元素名稱可以包含字母、數(shù)字或其他字符,但是不能以數(shù)字或標(biāo)點(diǎn)符號(hào)開始。6.元素名稱中不能包含空格。7.XML屬性值必須加引導(dǎo)符號(hào)。1358.XML文件中字符“<”和“&”是非法的,需要用實(shí)體引用來代替它們,XML文件中5個(gè)特殊字符的實(shí)體引用見下表。136XML文件中5個(gè)特殊字符的實(shí)體引用9.XML文件的注釋格式為:<!--注釋內(nèi)容-->10.XML文件的聲明語句格式如下,該語句聲明了使用的XML版本以及編寫使用的編碼格式,launch文件不要求編寫聲明。<?xmlversion="1.0"encoding="UTF-8"?>137四、launch文件的參數(shù)設(shè)置launch文件支持參數(shù)設(shè)置功能,類似于編程語言中的變量聲明。參數(shù)設(shè)置的標(biāo)簽元素為<param>和<arg>,其中<param>代表parameter,<arg>則代表argument。這兩個(gè)標(biāo)簽元素的含義都是參數(shù),但是它們的意義完全不同,具體區(qū)別如下:1.?<param>使用方法如下:<paramname="..."value="..."/>138一些復(fù)雜系統(tǒng)中的參數(shù)數(shù)量很多,如果一個(gè)一個(gè)地設(shè)置會(huì)非常麻煩,因此ROS提供了另外一種類似的參數(shù)加載方式——<rosparam>,具體用法如下:<rosparamfile="$(find...)/.../xxx.yaml"command="load"ns="..."/><rosparam>可以將一個(gè)yaml格式的文件中的參數(shù)全部加載到ROS參數(shù)服務(wù)器中,需要設(shè)置command屬性為“l(fā)oad”,還可以選擇設(shè)置命名空間(ns,即namespace的縮寫)。1392.?<arg>argument類似于laun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 包裝加工工程安裝施工承包合同
- 電力工程委托策劃合同模板
- 家具制造招投標(biāo)注意事項(xiàng)
- 2025版能源行業(yè)勞動(dòng)合同安全生產(chǎn)與應(yīng)急管理合同3篇
- 2024年物流園區(qū)停車場運(yùn)營管理承包合同范本3篇
- 2024年牙科醫(yī)療器械公司與制造商關(guān)于義齒加工的合同
- 2025年P(guān)OS機(jī)租賃與移動(dòng)支付技術(shù)支持合同
- 2024年版離婚雙方平等協(xié)商合同范本版B版
- 2025版昆明房產(chǎn)買賣稅費(fèi)承擔(dān)及過戶合同3篇
- 2024年裝修包清工合同范本:裝修工程款結(jié)算后的法律效力確認(rèn)
- 跨國公司財(cái)務(wù)管理課后習(xí)題答案
- 公園對(duì)地價(jià)和環(huán)境的影響
- 人教版(2019)高一物理必修第三冊(cè) 13.5能量量子化 課件(共18張PPT)
- 新會(huì)計(jì)準(zhǔn)則財(cái)務(wù)報(bào)表模板(帶公式)
- 溝槽管件尺寸對(duì)照表
- 建模案例—飛行管理問題
- 美術(shù)教案雄偉的塔教學(xué)反思
- (完整版)復(fù)變函數(shù)與積分變換公式
- 境外匯款申請(qǐng)書(模板)
- JTG-G10-2016)公路工程施工監(jiān)理規(guī)范
- 學(xué)習(xí)解讀《生豬屠宰管理?xiàng)l例》專題講授PPT課件
評(píng)論
0/150
提交評(píng)論