《ROS機器人操作系統基礎》 課件 勞動 項目1-4 ROS 機器人操作系統的認知- ROS 節點的啟動_第1頁
《ROS機器人操作系統基礎》 課件 勞動 項目1-4 ROS 機器人操作系統的認知- ROS 節點的啟動_第2頁
《ROS機器人操作系統基礎》 課件 勞動 項目1-4 ROS 機器人操作系統的認知- ROS 節點的啟動_第3頁
《ROS機器人操作系統基礎》 課件 勞動 項目1-4 ROS 機器人操作系統的認知- ROS 節點的啟動_第4頁
《ROS機器人操作系統基礎》 課件 勞動 項目1-4 ROS 機器人操作系統的認知- ROS 節點的啟動_第5頁
已閱讀5頁,還剩140頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

任務一了解ROS機器人操作系統01任務二安裝ROS機器人操作系統021任務一

了解ROS機器人操作系統21.?了解ROS的發展歷程2.?了解ROS的特點3.?掌握根據不同需求下載ROS對應資源的方法任務目標3一、ROS的發展歷程ROS起源于2007年斯坦福大學人工智能實驗室的STAIR項目與機器人技術公司WillowGarage(柳樹車庫機器人技術公司)的個人機器人項目之間的合作,2008年之后由WillowGarage公司接手并繼續研究。ROS1.0于2010年3月發布,ROS的出現極大地提高了機器人軟件的復用率,避免機器人研究者們把大量時間花在重復配置軟件上。基礎知識45著名的個人機器人PR2也在同年誕生,它可以實現開門、疊衣服、找到插頭并給自己充電等復雜的操作,這引發了個人機器人研發的熱潮。但由于PR2價格昂貴,難以推廣,2011年WillowGarage公司開發了一款入門級的機器人平臺——TurtleBot,為機器人愛好者和開發者提供了一個基礎平臺,讓他們可以直接使用TurtleBot自帶的軟、硬件,專注于應用程序的開發。隨著ROS社群的快速壯大,2012年5月,美國明尼蘇達州開展了第一屆ROSCon(機器人操作系統會議),此后ROSCon每年都會舉辦一次,為全世界的ROS開發人員提供了一個交流的機會。6為了保障公司的正常運營,WillowGarage公司成立了非營利性機構——開源機器人基金會(OpenSourceRoboticsFoundation,簡稱OSRF),該基金會接受來自個人、政府和公司的捐款。自2013年起,OSRF負責ROS的開發和維護,并推動機器人仿真平臺Gazebo的發展。在OSRF的推動下,ROS相繼發布了多個版本的軟件,包括Groovy、Hydro、Indigo、KineticKame、Loggerhead、MelodicMorenia、NoeticNinjemys等。這些版本的發布進一步增強了ROS的功能和性能,使其成為廣泛應用于機器人領域的先進開源框架。7ROS最初是為家庭服務機器人和學術研究領域開發的。然而,令人意外的是,ROS被廣泛應用于各種機器人領域,包括工業機械手臂、自動駕駛汽車和飛行器等。隨著應用場景的不斷擴大,出現了一系列新的需求,如多機器人集群、嵌入式平臺機器人和實時系統等。為了滿足這些需求,OSRF在2017年發布了ROS2.0系統,它采用了更先進的分布式架構,具備更高的可靠性,并且提供對實時性和嵌入式設備的全面支持。ROS的發展歷程如圖所示。8ROS的發展歷程二、ROS的特點ROS具有以下特點:點對點設計、支持多種編程語言、架構精簡和集成度高、組件化工具包豐富、免費且開源。1.?點對點設計一個基于ROS的系統可以通過建立一系列節點單元來實現功能。這些節點可以分布在不同的主機上,并通過端到端的拓撲結構進行通信。ROS的點對點設計以及服務和節點管理器機制可以有效地分擔計算機視覺等功能帶來的計算壓力,從而應對多機器人控制所面臨的挑戰。910ROS的點對點設計體現在以下四個方面:(1)節點單元。(2)分布式網絡。(3)RPC+TCP/UDP通信系統。(4)適合多機通信。112.?支持多種編程語言不同開發者會偏向使用不同的編程語言,為了解決這個問題,ROS被設計成語言中立性的框架架構,支持C++、Python、Java、Lisp等不同的編程語言,同時也包含其他語言的接口。3.?架構精簡、集成度高為了實現機器人軟件工程中的可重用驅動和算法在其他領域的應用,OSRF開發者們鼓勵將這些驅動和算法從ROS中提取出來,形成與ROS無依賴性的獨立庫。ROS系統具有模塊化的特點,其中的代碼可以進行單獨編譯。ROS將復雜的代碼封裝在庫中,并通過小型應用程序來展示這些庫的功能。124.?組件化工具包豐富為了管理復雜的軟件架構,ROS利用大量的工具編譯和運行多種多樣的組件。這些工具承擔了各種各樣的任務,如組織源代碼的結構、獲取和設置配置參數、形象化端對端的拓撲連接等,一些常見的ROS組件化工具包如下:(1)3D可視化工具——RViz。(2)物理仿真環境——Gazebo。(3)數據記錄工具——rosbag。(4)圖形化用戶接口框架Qt工具箱——rqt_*。135.?免費且開源ROS的所有源代碼都是公開發布的,這將促進ROS軟件在各層級的調試,有利于不斷改正錯誤。ROS遵循BSD(BerkeleySoftwareDistribution)許可,也就是允許各種商業和非商業的工程進行開發,同時可修改、可復用。三、ROS的社區使用ROS的人越來越多,其中一個原因是它具有良好的社區生態。機器人的學習和開發可以利用ROS開源社區中豐富的資源,通過網絡共享和下載獲取需要的軟件和知識。常見的關于ROS的社區包括ROS官方網站、創客智造、易科機器人實驗室、古月居等。14四、源代碼的下載1.?通過命令下載源代碼下載用Git工具,通常使用以下命令:$gitclone<gitaddress>2.?直接下載可以直接在GitHub相應的“倉庫”中單擊“DownloadZIP”,下載源代碼的壓縮文件,如圖所示。1516直接下載源代碼任務二

安裝ROS機器人操作系統171.?掌握終端的打開方式2.?掌握通過apt-get方式安裝軟件的方法3.?掌握ROS環境的配置方法4.?能在Ubuntu系統中安裝ROS并進行環境配置和測試任務目標18一、終端的打開方式終端可以通過命令的方式對文件和程序進行操作。在學習ROS的過程中,經常需要自己構建并調整一些簡單的程序,這時需要用終端進行操作。在Ubuntu系統中打開終端的方式有兩種:1.?在空白位置右擊鼠標,打開快捷菜單,單擊“打開終端”,如圖所示。基礎知識19單擊“打開終端”202.?按“Ctrl”+“Alt”+“T”組合鍵直接打開終端窗口,如圖所示。終端窗口二、軟件的安裝在Ubuntu系統中,軟件安裝方法有多種,包括apt-get、dpkg、makeinstall等。其中,apt-get是最常用的一種方法,可以自動安裝軟件所需的依賴包,具體使用方法如下:安裝軟件:$sudoapt-getinstall<軟件名稱>卸載軟件:$sudoapt-getremove<軟件名稱>使用sudo指令時需要輸入本機密碼。21三、環境的配置配置環境的方式有以下兩種:1.臨時配置環境。在終端中輸入以下命令后,可以完成當前終端環境的配置。然而,當再次打開一個新的終端時,新終端將不會自動繼承之前的環境配置,因為每個終端都有獨立的環境。$source*.sh222.持久配置環境。在終端中輸入以下命令后,可以成功配置當前終端的環境,且新建的終端也會自動應用相同的環境配置。這是因為這些命令將環境配置寫入了適當的配置文件,使得每次打開終端時都能加載并應用這些配置,確保環境配置的持久性和全局性。$echo"source/opt/ros/melodic/setup.bash">>~/.bashrc$source~/.bashrc環境配置完畢后,可以輸入以下命令查看配置是否成功,該命令可以查找并顯示所有包含ROS的環境變量:$printenv|grepROS23任務一ROS整體架構的介紹01任務二啟動ROS第一個節點——小海龜仿真02任務三ROS的通信機制在小海龜中的應用0324任務一

ROS整體架構的介紹251.?了解ROS的架構設計2.?掌握ROS的節點、話題、服務等相關概念3.?掌握ROS文件系統的組成任務目標26一、ROS的架構設計ROS的架構可以分為三個層次:操作系統層、中間層和應用層,如圖所示。基礎知識27ROS的架構281.?操作系統層ROS與傳統操作系統不同,它不是直接在機器硬件上運行的操作系統,而是需要依賴Linux系統才能正常工作。因此,可以選擇在ROS官方支持的桌面型Linux系統上運行ROS(建議優先考慮ROS官方支持的桌面型Linux系統,特別是Ubuntu操作系統,因為它們具有更好的兼容性和穩定性)。此外,也可以在其他使用Linux內核的操作系統上運行ROS,如Arch、Debian等。這種依賴于Linux系統的設計使得ROS能夠充分利用Linux的穩定性和強大的功能來支持機器人應用。ROS在Linux系統上與操作系統內核和硬件之間建立了聯系,提供了豐富的機器人開發和控制功能。292.?中間層Linux是一個通用的操作系統,沒有專門為ROS開發設計的特殊中間件。因此,ROS在中間層面承擔了很多工作,以銜接網絡上的應用系統和不同部分,實現資源和功能的共享。其中,ROS基于TCP/UDP進行網絡封裝,并設計了一套基于TCPROS/UDPROS的通信系統。這個通信系統采用了發布/訂閱和客戶端/服務器等通信模型,實現了多種機制的數據傳輸。除了TCPROS/UDPROS通信系統,ROS還提供了一種進程內的通信方式,即Nodelet。Nodelet是為了優化多進程通信而提供的數據傳輸方式,它能夠提高數據通信的實時性。303.?應用層在應用層,ROS的正常運行需要一個管理器——ROSmaster。ROSmaster即節點管理器,負責管理整個系統的正常運行。ROS社區中分享了豐富的機器人應用功能包,這些功能包內的模塊以節點為基本單元運行,依照ROS標準的輸入、輸出接口進行通信。開發者使用這些功能包時,無須深入關注模塊內部的細節,只需熟悉接口規范即可輕松實現功能復用,有效提高了開發效率。二、ROS的相關概念ROS的功能模塊是以節點為單位單獨運行的,可以分布在多個主機里,當系統運行時通過端對端的拓撲結構進行連接。ROS的相關概念如下:1.節點(node):節點是ROS中最小的進程單元,一個軟件包中可以有多個可執行文件(可以由操作系統進行加載、執行的文件),可執行文件在運行后就成為一個進程,這個進程在ROS中稱為節點。2.消息(message):消息是一種數據結構,支持多種數據類型(整型、浮點型、布爾型、字符串型、數組型等),同時也支持消息的嵌套定義。31323.話題(topic):也稱為主題,是消息的載體。節點之間通過發布和訂閱話題來傳遞消息。4.服務(service):服務是應答模式的信息交互方式,它基于客戶端/服務器模型。與話題的主要不同之處是,當服務端接收到客戶端的請求時,會對請求做出響應。5.節點管理器:節點管理器是ROS運行的核心,其主要功能是登記注冊節點、服務和話題的名稱。三、ROS的文件系統類似于操作系統,ROS將所有文件按照一定的規則進行組織,不同功能的文件被放置在不同文件夾下,工作空間(存放工程開發相關文件的文件夾)如圖所示。33工作空間34ROS系統通過工作空間為不同的項目配置獨立的環境和代碼。當有多個項目時,可以為每個項目建立專屬的工作空間,使用時只需要切換工作空間即可調用不同項目的功能包和程序。ROS默認使用Catkin編譯系統,編譯產生的工作空間文件結構如下:1.src(代碼空間):儲存所有ROS功能包的源代碼。2.build(編譯空間):儲存工作空間編譯過程中產生的緩存信息和中間文件。3.devel(開發空間):儲存編譯生成的可執行文件。4.功能包:功能包是ROS的基本單元,包含ROS節點、庫、配置文件等。355.功能包清單:一個名為“package.xml”的功能包清單文件,用“xml”的標簽語言格式記錄了功能包的基本信息,如編譯標志、依賴關系等,主要作用是使用戶和系統更容易地安裝和分發功能包。6.消息類型:消息是ROS中一個節點發布/訂閱到其他節點的通信信息,消息類型是消息的數據結構。7.服務類型:服務是ROS中一個節點請求/響應到其他節點的通信過程,服務類型定義了其通信的數據類型。8.代碼:儲存功能包節點代碼的文件夾,包括C++程序、Python腳本等。任務二

啟動ROS第一個節點——小海龜仿真361.?通過小海龜仿真例程,初步了解ROS基礎知識2.?了解ROS中的節點控制原理3.?能啟動小海龜仿真節點并用鍵盤控制小海龜的運動任務目標37一、小海龜仿真ROS提供了一個自帶的基礎教學功能包,名為turtlesim(小海龜仿真),可以通過該功能包的實例完成ROS相關基礎知識的學習,包括節點、話題、服務、參數設置等。各版本ROS中turtlesim的圖標見下表。基礎知識3839各版本ROS的turtlesim圖標40各版本ROS的turtlesim圖標二、節點控制原理可以通過鍵盤來控制小海龜的運動,使用節點控制的計算圖如圖所示。鍵盤控制節點/teleop_turtle通過話題與小海龜節點/turtlesim連接。當按下鍵盤的指定按鍵時,鍵盤控制節點向/turtle1/cmd_vel話題發布一個速度消息。小海龜節點獲取/turtle1/cmd_vel中的速度消息進行移動。41計算圖(節點控制)任務三

ROS的通信機制在小海龜中的應用421.?了解ROS的話題通信機制2.?了解ROS的服務通信機制3.?了解ROS的參數管理機制4.?能使用話題通信機制和服務通信機制控制小海龜的運動并修改其參數任務目標43ROS的通信機制ROS的通信機制是其核心,它基于分布式通信技術,ROS的所有功能和工具都構建在這種分布式通信機制的基礎上。因此,ROS的通信機制可以被視為最基礎、最核心的技術。ROS的通信機制主要分為三大類:話題通信機制、服務通信機制和參數管理機制。這些機制使得ROS中的節點能夠相互交流和共享數據,實現高效的協作和信息傳遞。基礎知識441.?話題通信機制話題通信機制是ROS中使用最為頻繁的通信機制,ROS中的話題以發布/訂閱的方式傳輸數據。一個節點可以在特定的主題上發布消息,而另一個節點可以訂閱某個特定的主題類型的數據,可以同時有多個節點發布或訂閱同一個主題的消息。話題通信機制為異步通信,發布者和訂閱者的節點啟動順序沒有強制要求。如圖所示為話題通信機制的通信模型。4546話題通信機制的通信模型本任務將使用turtlesim功能包,啟動turtlesim_node節點創建一個小海龜實例,小海龜節點相關的話題見下表。47turtlesim_node相關話題可以通過為小海龜訂閱的話題發布消息的方式來控制小海龜的運動,對應的節點計算圖如圖所示。48節點計算圖(直接發布話題消息)2.?服務通信機制服務通信機制是基于C/S(客戶端/服務器)模式的雙向數據傳輸,是一種同步通信機制,它要求發送方接收到應答后才能繼續進行通信。在這種通信模式中,客戶端向服務器發送請求,并等待服務器的響應。基于C/S模式的雙向數據傳輸意味著客戶端和服務器之間可以進行雙向的數據交互,客戶端發送請求,服務器進行處理并返回相應的應答,這種通信模式常用于需要實時響應和數據交互的場景。4950服務通信機制的通信模型3.?參數管理機制ROS提供了參數管理機制用于節點的配置和參數的調整。參數管理機制允許節點之間共享和修改參數值,這使得節點的行為和配置更加靈活。在ROS中,參數值可以被存儲在參數服務器上。參數服務器是一個全局的參數存儲系統,允許節點讀取和寫入參數值。參數服務器可以在ROS網絡中的任何節點上運行,節點可以連接到參數服務器以獲取或設置參數值,也可以通過ROS客戶端庫(如rospy或roscpp)與參數服務器進行交互。51參數管理機制的優勢在于它可以提供一個集中的區域來管理和共享節點的配置參數,多個節點可以共享相同的參數值,從而實現節點之間的一致性和協作。參數管理機制還使得節點的配置更加靈活,可以根據不同的運行環境或需求進行動態調整,提高了系統的可定制性和適應性。如圖所示為參數管理機制的通信模型,參數類似于ROS中的全局變量,由ROSmaster進行管理,其通信機制較為簡單,不涉及TCP/UDP的通信。5253參數管理機制的通信模型任務一初識命令行工具01任務二使用rosnode命令管理節點02任務三使用rostopic命令管理話題消息03任務四使用rosservice命令管理服務消息04任務五使用rosbag命令記錄運行數據0154任務六使用rosparam命令修改參數01任務七使用rosmsg命令查看消息0255任務一

初識命令行工具561.?了解ROS常用的命令行工具2.?掌握使用ROS?的命令行工具實現相關功能的方法任務目標57一、ROSshell命令ROSshell命令可以快速地定位、查看并編輯功能包中的文件,ROSshell命令的釋義及詳細說明見下表。基礎知識58ROSshell命令的釋義及詳細說明二、ROS執行命令ROS執行命令是最常用的命令類型,用于啟動ROS節點管理器以及日志的檢查或刪除等。ROS執行命令的釋義及詳細說明見下表。59ROS執行命令的釋義及詳細說明三、ROS消息命令ROS消息命令用于獲取ROS系統中的數據,包括節點、話題、服務、參數等,而且可以通過ROS消息命令對數據進行儲存并回放。ROS消息命令的釋義及詳細說明見下表。60ROS消息命令的釋義及詳細說明四、ROScatkin命令catkin是開發者為了高效編譯和整合項目而開發的工具,ROScatkin命令可以很方便地生成功能包并快速完成功能包的編譯。ROScatkin命令的詳細說明見下表。61ROScatkin命令的詳細說明五、ROS功能包命令ROS功能包命令用于查看與功能包相關的消息和依賴性文件。ROS功能包命令的釋義及詳細說明見下表。62ROS功能包命令的釋義及詳細說明任務二

使用rosnode命令管理節點631.?熟悉并掌握rosnode命令的使用方法2.?能通過運行rosnode命令控制小海龜任務目標64rosnode命令的使用rosnode是用于顯示ROS節點調試消息的命令行工具,包括發布、訂閱、連接等。rosnode主要命令的作用見下表。基礎知識6566rosnode主要命令的作用任務三

使用rostopic命令管理話題消息671.?熟悉并掌握rostopic命令的使用方法2.?能通過運行rostopic命令控制小海龜任務目標68rostopic命令的使用rostopic主要命令的作用見下表。基礎知識69rostopic主要命令的作用70rostopic主要命令的作用任務四

使用rosservice命令管理服務消息711.?熟悉并掌握rosservice命令的使用方法2.?能通過運行rosservice命令控制小海龜任務目標72rosservice命令的使用rosservice主要命令的作用見下表。基礎知識73rosservice主要命令的作用任務五

使用rosbag命令記錄運行數據741.?熟悉并掌握rosbag命令的使用方法2.?能通過運行rosbag命令控制小海龜任務目標75rosbag命令的使用rosbag主要命令的作用見下表。基礎知識76rosbag主要命令的作用任務六

使用rosparam命令修改參數771.?熟悉并掌握rosparam命令的使用方法2.?能通過運行rosparam命令控制小海龜任務目標78一、rosparam命令的使用rosparam主要命令的作用見下表。基礎知識79rosparam主要命令的作用二、RGB值RGB色彩模式是工業領域的顏色標準,它通過調整紅(R)、綠(G)、藍(B)三個顏色通道以及它們的疊加來生成各種顏色。RGB色彩模式涵蓋了人類視覺所能感知的幾乎所有顏色,因此被廣泛應用于各個領域。RGB函數成功執行后會返回一個長整數,用于表示由指定數值確定的顏色。該函數的語法為:RGB(RedAsInteger,GreenAsInteger,BlueAsInteger),具體的參數描述見下表。8081RGB函數參數描述需要注意的是,如果其中一個參數的值超過了255,不會顯示任何錯誤,但該參數會被視為255處理。這是為了確保顏色數值在合理范圍內,避免超出可表示的顏色范圍。任務七

使用rosmsg命令查看消息821.?熟悉并掌握rosmsg命令的使用方法2.?能通過運行rosmsg命令控制小海龜任務目標83rosmsg命令的使用rosmsg主要命令的作用見下表。基礎知識84rosmsg主要命令的作用任務一啟動節點和節點管理器的兩種方式01任務二創建工作空間和功能包02任務三使用Python和C++編寫節點程序03任務四使用launch文件實現節點啟動和參數設置04任務五使用launch文件實現多節點啟動0185任務一

啟動節點和節點管理器的兩種方式861.?掌握rosrun?命令的使用方法2.?掌握roslaunch命令的使用方法3.?理解roslaunch命令的優點任務目標87一、rosrun命令的使用若要啟動ROS節點,首先輸入以下命令:$roscore命令執行后ROSmaster啟動,同時啟動的還有rosout和parameterserver,其中rosout是負責日志輸出的節點,其作用是告知用戶當前系統的狀態,包括輸出系統的錯誤、警告等,并將log記錄于日志文件中;parameterserver是參數服務器,它并不是一個節點,而是存儲參數配置的服務器。基礎知識88啟動節點管理器之后,節點管理器就開始按照系統的安排進行具體的節點啟動工作。節點就是一個進程,只不過它在ROS中被賦予了專用的名字——node。package中存放著可執行文件,可執行文件是靜態的,當系統運行這些可執行文件時,這些文件被加載到內存中,就成為了動態的node。啟動節點的命令是:$rosrun[package_name][node_name]在ROS中,通常按照以下步驟來啟動系統:首先啟動節點管理器,然后啟動各個節點。當系統中的節點數量增多時,可以選擇使用launch文件進行批量啟動。節點管理器與節點、節點與節點之間的關系見下圖。8990節點管理器與節點、節點與節點之間的關系二、roslaunch命令的使用輸入以下命令,啟動ROS節點和節點管理器。$roslaunch[package_name][launch_file_name]roslaunch命令會自動檢測ROS系統的roscore進程是否在運行,以確定節點管理器是否處于運行狀態。如果roscore未啟動,roslaunch會首先啟動roscore進程,無須運行roscore命令,然后按照launch文件中定義的規則執行啟動過程。launch文件包含了預先配置好的啟動規則,roslaunch是一個啟動工具,可以一次性按照配置啟動多個節點,無須在終端中逐個輸入命令。91三、roslaunch命令的優點ROS中的launch文件可以簡單理解為一個集合了多個節點和參數的文件,launch文件的功能是一次性啟動多個節點。ROS中通常需要同時運行多個節點,如果每次開機都需要逐個輸入命令來啟動每個節點將會非常煩瑣。因此,可以將要啟動的節點和相應的參數全部寫入launch文件,然后通過roslaunch命令一次性啟動多個節點。92相對于使用rosrun命令來單獨運行程序,roslaunch命令有兩個主要優點:1.roslaunch命令可以向程序傳遞參數,以便在啟動時動態地配置節點的行為。2.roslaunch命令可以同時運行多個節點,提供了更方便的節點啟動方式。93任務二

創建工作空間和功能包941.?了解工作空間的作用2.?掌握ROS工作空間的創建、編譯和環境配置方法3.?了解ROS功能包的典型文件結構4.?掌握ROS功能包的創建方法5.?能創建一個工作空間并在此基礎上創建一個功能包任務目標95一、工作空間的作用在ROS中,創建工作空間有助于組織和管理ROS項目的功能包、編譯、依賴項等,創建工作空間的作用有以下幾點:1.模塊化組織:工作空間允許用戶將ROS項目模塊化組織。ROS項目通常包含多個功能包,每個功能包可能包含節點、主題、服務、消息定義等。工作空間是用戶創建的一個目錄結構,用戶可以在工作空間中創建和組織這些功能包。這種模塊化結構有助于更好地組織和管理項目。基礎知識962.方便編譯和構建:ROS項目需要進行編譯,將源代碼轉化為可執行文件,同時需要生成構建文件,如CMakeLists.txt和package.xml。工作空間允許用戶在其中進行編譯,并自動生成構建文件,從而簡化項目構建過程。3.依賴項管理:工作空間有助于管理項目所依賴的其他功能包。ROS中的功能包通常會依賴其他功能包,這些依賴項需要正確配置和安裝。工作空間提供了一個依賴項管理系統,可以更輕松地跟蹤和安裝依賴項。974.可移植性:工作空間使ROS項目更具可移植性。用戶可以輕松地將整個工作空間復制到其他計算機上并進行編譯和運行,而無須手動復制和配置每個功能包。5.環境隔離:用戶可以在不同的工作空間中運行不同版本的ROS項目或依賴項,這有助于環境隔離和避免沖突。98二、工作空間的創建在ROS中創建工作空間,本質就是將一個新建的文件夾通過工具(catkin_make)編譯成ROS中可以搜索的文件路徑,通過配置環境變量,使這個文件夾可以被用戶在終端中使用的過程。創建工作空間需要創建一個文件夾,工作空間的名稱可以自行設定,如catkin_ws、myProject_ws等,但要注意工作空間中應包含一個src文件夾,該文件夾用于存放ROS功能包,若不創建該文件夾會導致編譯環節出現錯誤。創建工作空間和src文件夾的命令如下:$mkdir-p<workspace_name>/src99三、工作空間的編譯catkin元構建系統是為了高效構建眾多相互依賴但獨立開發的CMake項目而構建的。catkin_make是將cmake與make的編譯方式做了封裝的指令工具,它簡化了程序cmake編譯的標準工作流程,用法如下:$cd<workspace_name>#終端路徑進入工作空間$catkin_make

#使用catkin_make創建工作空間100以上兩行命令等效于以下多行命令,這是使用cmake方式編譯項目的標準流程示例:$cd<workspace_name>/src#終端路徑進入工作空間$catkin_init_workspace$cd..$mkdirbuild$cdbuild101$cmake../src-DCMAKE_INSTALL_PREFIX=../install-DCATKIN_DEVEL_PREFIX=../devel$make$makeinstall#(該步驟是可選的)編譯完成后,工作空間中應該有三個文件夾:devel、build、src。工作空間的編譯是必不可少的,它可以看作是普通文件與ROS關聯的橋梁。102四、工作空間的環境配置工作空間編譯完成后,需要將工作空間的地址告知ROS,即進行工作空間的環境配置,以便ROS能夠找到并使用新建的工作空間。配置工作空間環境的命令如下:$echo"source~/<workspace_name>/devel/setup.bash">>~/.bashrc$source~/.bashrc命令執行后,將工作空間的環境變量執行文件添加到了終端的啟動腳本中,每次新建終端時都會自動地將工作空間的環境變量添加到終端。添加完成后可以通過以下命令查看環境變量:$export|grepROS103五、功能包的典型文件結構功能包是程序和資源文件的集合,在ROS中可以自己創建功能包并編寫程序,也可以使用已有的功能包來實現功能。功能包的典型文件結構如圖所示。104功能包的典型文件結構功能包中各文件夾的作用見下表。105功能包中各文件夾的作用六、功能包的創建catkin_create_pkg命令可以創建一個新功能包,用法如下:$cd~/<workspace>/src$catkin_create_pkg<package_name>[depend1][depend2][depend3]其中,<package_name>為功能包的名稱,[depend1][depend2][depend3]分別為每個依賴的名稱。執行該命令后會生成一個功能包,如圖所示。功能包創建完成后,需要重新編譯工作空間才能使用。106107生成的功能包任務三

使用Python和C++編寫節點程序1081.?了解Python與C++編程語言的區別2.?了解Python與C++在實際開發中的區別3.?使用Python和C++編寫節點程序任務目標109ROS中的一個軟件包可以包含多個可執行文件,這些可執行文件在運行后成為進程,最小的進程單元就是節點,節點可以是由C++編寫的可執行文件或由Python腳本組成的進程。一、Python與C++編程語言的對比Python和C++編程語言主要有以下幾個方面的區別:首先,就編程語言的特點而言,Python是一種動態、解釋型語言,語法簡潔、易于學習和理解,適合快速開發和原型驗證。C++是一種靜態、編譯型語言,執行效率高,適合對性能要求較高的任務和底層開發。基礎知識110其次,就開發效率和執行效率而言,Python代碼量少,語法簡潔,有豐富的庫和工具支持,適合快速開發和迭代;相比之下,C++需要更多的代碼量和語法結構,編寫和調試可能會更復雜和耗時。因此,Python比C++的開發效率更高。但是,C++是一種編譯型語言,代碼在編譯階段轉化為機器碼,執行速度快;而Python是解釋型語言,需要在運行時解釋執行,執行速度相對較慢。因此,C++比Python的執行效率更高。最后,就應用場景而言,Python適用于快速原型驗證、數據處理、腳本編寫等場景,如機器人的高層控制、任務調度和算法驗證,使用Python可以更快速地實現這些功能。而C++適用于對執行效率有較高要求的場景,如底層驅動、實時控制、計算密集型任務等。111二、Python與C++在實際開發中的區別1.?編譯Python是一種解釋型語言,而C++是一種編譯型語言。這意味著Python腳本(后綴為“.py”的文件)在運行之前不需要進行編譯,可以直接修改腳本后運行。在ROS中,Python節點程序通常存放在/scripts目錄下。而C++節點程序需要先編譯成可執行文件,然后才能運行。C++節點程序的源代碼(后綴為“.cpp”的文件)在運行時并不直接參與,而是通過編譯器生成的可執行文件來運行。因此,如果修改了C++源代碼,需要在CMakeLists.txt文件中添加編譯語句,然后運行catkin_make來重新編譯生成可執行文件,才能使修改生效。1122.?編寫本文將以一個名為“hello”的節點為例,分別使用Python和C++兩種編程語言來編寫節點程序,從而理解兩種節點程序的區別。(1)Python程序當使用Python編寫節點程序時,需要在程序的開頭使用初始化節點的函數,rospy.init_node()函數會告知ROS主系統當前編寫的程序是一個ROS節點,并且會為該節點提供必要的運行環境。以編寫名為“hello”的節點為例,初始化節點的命令如下:rospy.init_node("hello",anonymous=True)113rospy.init_node(NAME)函數用于初始化節點并開始與ROSmaster進行通信。這里初始化了一個名為“hello”的節點,需要注意的是,節點的名稱不需要以“/”為開頭,因為在命令中運行節點時,系統會自動在節點名稱前添加“/”。當參數“anonymous”設置為True時,系統會在節點名稱的末尾添加一串隨機數,以確保可以同時運行多個具有相同名稱的節點。如果設置為False,則只能運行一個具有該名稱的節點。114這樣的設置使得節點可以靈活地在系統中創建并進行通信。1.

whilenotrospy.is_shutdown():2.

hello_str="HelloWorld%s"%rospy.get_time()3.

rospy.loginfo(hello_str)4.

rate.sleep()(注:縮進為4個空格)115循環是rospy的常用結構,rospy.is_shutdown()是一個用于檢查程序是否應該退出循環的函數。當該函數返回False時,程序會繼續執行;當返回True時,程序會退出。一般情況下,可以使用組合鍵“Ctrl+C”來觸發程序退出,從而使rospy.is_shutdown()返回True,結束程序的運行。rospy.get_time()函數用于獲取節點初始化的時間和當前時間,計算它們之間的時間間隔并打印。這有助于在節點中測量和記錄操作的執行時間。116rospy.loginfo(str)函數用于在終端屏幕輸出調試信息,同時將消息寫入節點日志文件和rosout節點。rate.sleep()是一個定時器,該函數使當前線程進入休眠狀態,以保持節點消息發送頻率的穩定。通過設置合適的頻率,可以控制節點的執行速率,從而適應不同的應用場景,避免消息發送過于頻繁或不足。117(2)C++程序同樣,當使用C++編寫節點程序時,需要在程序的開頭使用初始化節點的函數,即ros::init(argc,argv,“node_name”)。以編寫名為“hello”的節點為例,初始化節點的命令如下:ros::init(argc,argv,"hello");118ros::init()函數用于在roscpp節點中進行初始化操作。當編寫node程序時,需要先調用ros::init()函數進行節點的初始化,這樣才能繼續調用其他roscpp庫中的函數。在初始化過程中,函數會解析命令行中傳入的參數,包括argc和argv。在示例代碼中,“hello”表示節點的名稱。ROS系統中的節點名稱必須是唯一的,如果有重名的節點正在運行,之前運行的節點會被自動關閉以確保節點名稱的唯一性。119完成節點的初始化后,需要使用ros::NodeHandle函數創建節點句柄(句柄可以理解為一個把手,就像握住門把手一樣,用戶可以輕松地打開整扇門,而不需要關心門的細節),用于進行節點的其他操作,命令如下:ros::NodeHandlen;上述命令的目的是創建ROS節點句柄。在ROS中,節點句柄用于描述節點的資源。節點句柄的引入使用戶能夠方便地對節點進行各種操作,包括但不限于為程序提供服務、監聽特定話題上的消息、訪問和修改參數等。這一工具提供了一種便捷的方式來管理和調用節點的功能。通過使用節點句柄,用戶可以輕松地與ROS進行交互,而無須深入關注底層的實現細節。120完成節點句柄的創建后,即可繼續其他節點邏輯程序的編寫,實例代碼如下:1.while(ros::ok())

//當節點關閉時退出循環2.{3.

ROS_INFO("HelloWorld");

//輸出到終端4.

loop_rate.sleep();5.}在while循環的判斷語句中,ros::ok()接口被用來判斷節點是否仍在運行。如果ros::ok()返回False,則表示節點已經關閉,while循環將結束。1213.?運行(1)使用rosrun命令啟動Python腳本的格式如下:$rosrun[package_name][file_name](2)使用rosrun命令啟動C++節點程序編譯成的可執行文件的格式如下:$rosrun[package_name][node_name]122任務四

使用launch文件實現節點啟動和參數設置1231.?了解launch文件和launch文件的標簽2.?掌握XML文件的編寫注意事項3.?掌握launch文件的參數設置方法4.?能創建和編寫launch文件,并且用roslaunch命令啟動launch文件任務目標124一、launch文件launch文件是多個節點和參數的集合文件,可以將要啟動的節點和對應的參數全部寫入launch文件中,然后使用roslaunch命令一次啟動多個節點。launch文件遵循XML語言(可擴展標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言)規范。和其他ROS文件相同,每一個啟動文件都應該與一個特定的功能包關聯起來,通常以“.launch”作為啟動文件名稱的后綴。基礎知識125最簡單的方法是將啟動文件直接存放在功能包的根目錄中。當查找啟動文件時,roslaunch工具會同時搜索每個功能包目錄的子目錄。包括ROS核心包在內的許多功能包都是利用這一特性,將所有啟動文件統一存放在一個子目錄中,該子目錄通常命名為“launch”。126二、launch文件的標簽launch文件是XML格式,它是由各種標簽元素組成的。因此,要理解并且熟練編寫launch文件,需要熟悉launch文件中各個標簽的含義及其書寫格式。launch文件的結構參考如下:1.<launch>2.

<!--第1個節點-->3.

<nodepkg="包名"type="包內可執行程序名字"name="節點名">4.

<!--注釋內容-->5.

<paraname="程序中的數值或布爾參數"value=""/>1276.

<paraname="程序中的字符串參數"value=""type="str"/>7....8.</node>9.

<!--第n個節點-->10.

<nodepkg="包名"type="包內可執行程序名字"name="節點名">11....12.</node>13.</launch>128launch文件中各標簽的作用見下表。129launch文件中各標簽的作用130launch文件中各標簽的作用1.<launch><launch>是ROSlaunch文件的根元素,它是XML文檔的最頂層元素。每個ROSlaunch文件必須包含且僅包含一個根元素,它由一對<launch>標簽定義。1.<launch>2....3.</launch>其他的所有元素標簽都要寫在<launch>與</launch>標簽之間。1312.<node><node>標簽的作用是啟動節點。每個launch文件的核心是節點的集合。每個節點都必須具有唯一的名稱,node元素的格式如下:<nodepkg="..."type="..."name="..."/>注意:<node>標簽末尾的“/”很重要,編寫launch文件時不要遺漏。“/”表明:這里不會再有“</node>”出現,并且node元素的定義完成。也可以寫為顯示關閉標簽的形式:1.<nodepkg="..."type="..."name="...">2.</node>132node元素必需的三個屬性為pkg、type和name,它們的詳細說明見下表。133node元素必需屬性的說明node元素中不僅有pkg、type和name三個最常用的屬性,在某些情況下,還可能用到其他屬性,具體見下表。134node元素其他屬性的說明三、XML文件的編寫注意事項編寫XML文件時的注意事項如下:1.所有元素必須有結束標簽。2.XML語法對大、小寫敏感,即大、小寫字母應區分對待。3.嵌套格式必須正確。4.同級標簽要對齊。5.元素名稱可以包含字母、數字或其他字符,但是不能以數字或標點符號開始。6.元素名稱中不能包含空格。7.XML屬性值必須加引導符號。1358.XML文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論