《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 項(xiàng)目四 ROS 節(jié)點(diǎn)的啟動(dòng)_第1頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 項(xiàng)目四 ROS 節(jié)點(diǎn)的啟動(dòng)_第2頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 項(xiàng)目四 ROS 節(jié)點(diǎn)的啟動(dòng)_第3頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 項(xiàng)目四 ROS 節(jié)點(diǎn)的啟動(dòng)_第4頁(yè)
《ROS機(jī)器人操作系統(tǒng)基礎(chǔ)》 課件 項(xiàng)目四 ROS 節(jié)點(diǎn)的啟動(dòng)_第5頁(yè)
已閱讀5頁(yè),還剩56頁(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ù)一啟動(dòng)節(jié)點(diǎn)和節(jié)點(diǎn)管理器的兩種方式01任務(wù)二創(chuàng)建工作空間和功能包02任務(wù)三使用Python和C++編寫(xiě)節(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)管理器就開(kāi)始按照系統(tǒng)的安排進(jìn)行具體的節(jié)點(diǎn)啟動(dòng)工作。節(jié)點(diǎn)就是一個(gè)進(jìn)程,只不過(guò)它在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中,通常按照以下步驟來(lái)啟動(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)系見(jià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)檢測(cè)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)程,無(wú)須運(yùn)行roscore命令,然后按照l(shuí)aunch文件中定義的規(guī)則執(zhí)行啟動(dòng)過(guò)程。launch文件包含了預(yù)先配置好的啟動(dòng)規(guī)則,roslaunch是一個(gè)啟動(dòng)工具,可以一次性按照配置啟動(dòng)多個(gè)節(jié)點(diǎn),無(wú)須在終端中逐個(gè)輸入命令。91三、roslaunch命令的優(yōu)點(diǎn)ROS中的launch文件可以簡(jiǎn)單理解為一個(gè)集合了多個(gè)節(jié)點(diǎn)和參數(shù)的文件,launch文件的功能是一次性啟動(dòng)多個(gè)節(jié)點(diǎn)。ROS中通常需要同時(shí)運(yùn)行多個(gè)節(jié)點(diǎn),如果每次開(kāi)機(jī)都需要逐個(gè)輸入命令來(lái)啟動(dòng)每個(gè)節(jié)點(diǎn)將會(huì)非常煩瑣。因此,可以將要啟動(dòng)的節(jié)點(diǎn)和相應(yīng)的參數(shù)全部寫(xiě)入launch文件,然后通過(guò)roslaunch命令一次性啟動(dòng)多個(gè)節(jié)點(diǎn)。92相對(duì)于使用rosrun命令來(lái)單獨(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)目?;A(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)建文件,從而簡(jiǎn)化項(xiàng)目構(gòu)建過(guò)程。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)行,而無(wú)須手動(dòng)復(fù)制和配置每個(gè)功能包。5.環(huán)境隔離:用戶可以在不同的工作空間中運(yùn)行不同版本的ROS項(xiàng)目或依賴項(xiàng),這有助于環(huán)境隔離和避免沖突。98二、工作空間的創(chuàng)建在ROS中創(chuàng)建工作空間,本質(zhì)就是將一個(gè)新建的文件夾通過(guò)工具(catkin_make)編譯成ROS中可以搜索的文件路徑,通過(guò)配置環(huán)境變量,使這個(gè)文件夾可以被用戶在終端中使用的過(guò)程。創(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ú)立開(kāi)發(fā)的CMake項(xiàng)目而構(gòu)建的。catkin_make是將cmake與make的編譯方式做了封裝的指令工具,它簡(jiǎn)化了程序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)境變量添加到終端。添加完成后可以通過(guò)以下命令查看環(huán)境變量:$export|grepROS103五、功能包的典型文件結(jié)構(gòu)功能包是程序和資源文件的集合,在ROS中可以自己創(chuàng)建功能包并編寫(xiě)程序,也可以使用已有的功能包來(lái)實(shí)現(xiàn)功能。功能包的典型文件結(jié)構(gòu)如圖所示。104功能包的典型文件結(jié)構(gòu)功能包中各文件夾的作用見(jiàn)下表。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++編寫(xiě)節(jié)點(diǎn)程序1081.?了解Python與C++編程語(yǔ)言的區(qū)別2.?了解Python與C++在實(shí)際開(kāi)發(fā)中的區(qū)別3.?使用Python和C++編寫(xiě)節(jié)點(diǎn)程序任務(wù)目標(biāo)109ROS中的一個(gè)軟件包可以包含多個(gè)可執(zhí)行文件,這些可執(zhí)行文件在運(yùn)行后成為進(jìn)程,最小的進(jìn)程單元就是節(jié)點(diǎn),節(jié)點(diǎn)可以是由C++編寫(xiě)的可執(zhí)行文件或由Python腳本組成的進(jìn)程。一、Python與C++編程語(yǔ)言的對(duì)比Python和C++編程語(yǔ)言主要有以下幾個(gè)方面的區(qū)別:首先,就編程語(yǔ)言的特點(diǎn)而言,Python是一種動(dòng)態(tài)、解釋型語(yǔ)言,語(yǔ)法簡(jiǎn)潔、易于學(xué)習(xí)和理解,適合快速開(kāi)發(fā)和原型驗(yàn)證。C++是一種靜態(tài)、編譯型語(yǔ)言,執(zhí)行效率高,適合對(duì)性能要求較高的任務(wù)和底層開(kāi)發(fā)?;A(chǔ)知識(shí)110其次,就開(kāi)發(fā)效率和執(zhí)行效率而言,Python代碼量少,語(yǔ)法簡(jiǎn)潔,有豐富的庫(kù)和工具支持,適合快速開(kāi)發(fā)和迭代;相比之下,C++需要更多的代碼量和語(yǔ)法結(jié)構(gòu),編寫(xiě)和調(diào)試可能會(huì)更復(fù)雜和耗時(shí)。因此,Python比C++的開(kāi)發(fā)效率更高。但是,C++是一種編譯型語(yǔ)言,代碼在編譯階段轉(zhuǎn)化為機(jī)器碼,執(zhí)行速度快;而Python是解釋型語(yǔ)言,需要在運(yùn)行時(shí)解釋執(zhí)行,執(zhí)行速度相對(duì)較慢。因此,C++比Python的執(zhí)行效率更高。最后,就應(yīng)用場(chǎng)景而言,Python適用于快速原型驗(yàn)證、數(shù)據(jù)處理、腳本編寫(xiě)等場(chǎng)景,如機(jī)器人的高層控制、任務(wù)調(diào)度和算法驗(yàn)證,使用Python可以更快速地實(shí)現(xiàn)這些功能。而C++適用于對(duì)執(zhí)行效率有較高要求的場(chǎng)景,如底層驅(qū)動(dòng)、實(shí)時(shí)控制、計(jì)算密集型任務(wù)等。111二、Python與C++在實(shí)際開(kāi)發(fā)中的區(qū)別1.?編譯Python是一種解釋型語(yǔ)言,而C++是一種編譯型語(yǔ)言。這意味著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í)并不直接參與,而是通過(guò)編譯器生成的可執(zhí)行文件來(lái)運(yùn)行。因此,如果修改了C++源代碼,需要在CMakeLists.txt文件中添加編譯語(yǔ)句,然后運(yùn)行catkin_make來(lái)重新編譯生成可執(zhí)行文件,才能使修改生效。1122.?編寫(xiě)本文將以一個(gè)名為“hello”的節(jié)點(diǎn)為例,分別使用Python和C++兩種編程語(yǔ)言來(lái)編寫(xiě)節(jié)點(diǎn)程序,從而理解兩種節(jié)點(diǎn)程序的區(qū)別。(1)Python程序當(dāng)使用Python編寫(xiě)節(jié)點(diǎn)程序時(shí),需要在程序的開(kāi)頭使用初始化節(jié)點(diǎn)的函數(shù),rospy.init_node()函數(shù)會(huì)告知ROS主系統(tǒng)當(dāng)前編寫(xiě)的程序是一個(gè)ROS節(jié)點(diǎn),并且會(huì)為該節(jié)點(diǎn)提供必要的運(yùn)行環(huán)境。以編寫(xiě)名為“hello”的節(jié)點(diǎn)為例,初始化節(jié)點(diǎn)的命令如下:rospy.init_node("hello",anonymous=True)113rospy.init_node(NAME)函數(shù)用于初始化節(jié)點(diǎn)并開(kāi)始與ROSmaster進(jìn)行通信。這里初始化了一個(gè)名為“hello”的節(jié)點(diǎn),需要注意的是,節(jié)點(diǎn)的名稱不需要以“/”為開(kāi)頭,因?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”來(lái)觸發(fā)程序退出,從而使rospy.is_shutdown()返回True,結(jié)束程序的運(yùn)行。rospy.get_time()函數(shù)用于獲取節(jié)點(diǎn)初始化的時(shí)間和當(dāng)前時(shí)間,計(jì)算它們之間的時(shí)間間隔并打印。這有助于在節(jié)點(diǎn)中測(cè)量和記錄操作的執(zhí)行時(shí)間。116rospy.loginfo(str)函數(shù)用于在終端屏幕輸出調(diào)試信息,同時(shí)將消息寫(xiě)入節(jié)點(diǎn)日志文件和rosout節(jié)點(diǎn)。rate.sleep()是一個(gè)定時(shí)器,該函數(shù)使當(dāng)前線程進(jìn)入休眠狀態(tài),以保持節(jié)點(diǎn)消息發(fā)送頻率的穩(wěn)定。通過(guò)設(shè)置合適的頻率,可以控制節(jié)點(diǎn)的執(zhí)行速率,從而適應(yīng)不同的應(yīng)用場(chǎng)景,避免消息發(fā)送過(guò)于頻繁或不足。117(2)C++程序同樣,當(dāng)使用C++編寫(xiě)節(jié)點(diǎn)程序時(shí),需要在程序的開(kāi)頭使用初始化節(jié)點(diǎn)的函數(shù),即ros::init(argc,argv,“node_name”)。以編寫(xiě)名為“hello”的節(jié)點(diǎn)為例,初始化節(jié)點(diǎn)的命令如下:ros::init(argc,argv,"hello");118ros::init()函數(shù)用于在roscpp節(jié)點(diǎn)中進(jìn)行初始化操作。當(dāng)編寫(xiě)node程序時(shí),需要先調(diào)用ros::init()函數(shù)進(jìn)行節(jié)點(diǎn)的初始化,這樣才能繼續(xù)調(diào)用其他roscpp庫(kù)中的函數(shù)。在初始化過(guò)程中,函數(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è)把手,就像握住門把手一樣,用戶可以輕松地打開(kāi)整扇門,而不需要關(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)聽(tīng)特定話題上的消息、訪問(wèn)和修改參數(shù)等。這一工具提供了一種便捷的方式來(lái)管理和調(diào)用節(jié)點(diǎn)的功能。通過(guò)使用節(jié)點(diǎn)句柄,用戶可以輕松地與ROS進(jìn)行交互,而無(wú)須深入關(guān)注底層的實(shí)現(xiàn)細(xì)節(jié)。120完成節(jié)點(diǎn)句柄的創(chuàng)建后,即可繼續(xù)其他節(jié)點(diǎn)邏輯程序的編寫(xiě),實(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)的判斷語(yǔ)句中,ros::ok()接口被用來(lái)判斷節(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ě)注意事項(xiàng)3.?掌握l(shuí)aunch文件的參數(shù)設(shè)置方法4.?能創(chuàng)建和編寫(xiě)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ù)全部寫(xiě)入launch文件中,然后使用roslaunch命令一次啟動(dòng)多個(gè)節(jié)點(diǎn)。launch文件遵循XML語(yǔ)言(可擴(kuò)展標(biāo)記語(yǔ)言,可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言)規(guī)范。和其他ROS文件相同,每一個(gè)啟動(dòng)文件都應(yīng)該與一個(gè)特定的功能包關(guān)聯(lián)起來(lái),通常以“.launch”作為啟動(dòng)文件名稱的后綴?;A(chǔ)知識(shí)125最簡(jiǎn)單的方法是將啟動(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)簽元素組成的。因此,要理解并且熟練編寫(xiě)launch文件,需要熟悉launch文件中各個(gè)標(biāo)簽的含義及其書(shū)寫(xiě)格式。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)簽的作用見(jiàn)下表。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)簽都要寫(xiě)在<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)┪驳摹?”很重要,編寫(xiě)launch文件時(shí)不要遺漏?!?”表明:這里不會(huì)再有“</node>”出現(xiàn),并且node元素的定義完成。也可以寫(xiě)為顯示關(guān)閉標(biāo)簽的形式:1.<nodepkg="..."type="..."name="...">2.</node>132node元素必需的三個(gè)屬性為pkg、type和name,它們的詳細(xì)說(shuō)明見(jiàn)下表。133node元素必需屬性的說(shuō)明node元素中不僅有pkg、type和name三個(gè)最常用的屬性,在某些情況下,還可能用到其他屬性,具體見(jiàn)下表。134node元素其他屬性的說(shuō)明三、XML文件的編寫(xiě)注意事項(xiàng)編寫(xiě)XML文件時(shí)的注意事項(xiàng)如下:1.所有元素必須有結(jié)束標(biāo)簽。2.XML語(yǔ)法對(duì)大、小寫(xiě)敏感,即大、小寫(xiě)字母應(yīng)區(qū)分對(duì)待。3.嵌套格式必須正確。4.同級(jí)標(biāo)簽要對(duì)齊。5.元素名稱可以包含字母、數(shù)字或其他字符,但是不能以數(shù)字或標(biāo)點(diǎn)符號(hào)開(kāi)始。6.元素名稱中不能包含空格。7.XML屬性值必須加引導(dǎo)符號(hào)。1358.XML文件中字符“<”和“&”是非法的,需要用實(shí)體引用來(lái)代替它們,XML文件中5個(gè)特殊字符的實(shí)體引用見(jiàn)下表。136XML文件中5個(gè)特殊字符的實(shí)體引用9.XML文件的注釋格式為:<!--注釋內(nèi)容-->10.XML文件的聲明語(yǔ)句格式如下,該語(yǔ)句聲明了使用的XML版本以及編寫(xiě)使用的編碼格式,launch文件不要求編寫(xiě)聲明。<?xmlversion="1.0"encoding="UTF-8"?>137四、launch文件的參數(shù)設(shè)置launch文件支持參數(shù)設(shè)置功能,類似于編程語(yǔ)言中的變量聲明。參數(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的縮寫(xiě))。1392.?<arg>argument類似于launch文件內(nèi)部的局部變量,僅限于launch文件使用,作用是便于launch文件的重構(gòu),與ROS節(jié)點(diǎn)內(nèi)部的實(shí)現(xiàn)沒(méi)有關(guān)系,具體用法如下:<argname="arg-name"default="arg-value"/>140任務(wù)五

使用launch文件實(shí)現(xiàn)多節(jié)點(diǎn)啟動(dòng)1411.?掌握多節(jié)點(diǎn)啟動(dòng)launch文件的編寫(xiě)方法2.?能通過(guò)編寫(xiě)launch文件實(shí)現(xiàn)用鍵盤控制兩只小

溫馨提示

  • 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)論