




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
機器人操作系統(ROS2)入門與實踐機器人操作系統(ROS2)入門與實踐第1章LinuxUbuntu入門基礎第2章ROS2安裝與系統架構第3章ROS2編程基礎第4章ROS2機器人運動控制第5章激光雷達在ROS2中的使用第6章IMU在ROS2中的使用第7章ROS2中的SLAM環境建圖第8章ROS2中的NAV2自主導航第9章ROS2中的圖像視覺應用第10章ROS2的三維視覺應用第11章ROS2的機械臂應用第12章基于ROS2的綜合應用第3章3.3面向對象的節點Node實現
第3章ROS2編程基礎3.2話題Topic和消息Message3.1節點Node和軟件包Package3.4Launch文件3.5本章小結
節點Node和軟件包Package是ROS2的程序的組織形式。其中節點Node相當于一個ROS2的程序文件。當我們運行一個ROS2程序的時候,實際上運行的就是一個或者多個節點文件。軟件包Package是節點文件的容器,通常是一個包含了一系列配置文件的目錄。而節點源碼文件,就放在軟件包目錄的某個子文件夾中(一般是src文件夾)。3.1節點Node和軟件包Package創建軟件包Package和節點Node的詳細操作步驟:見教材P56-P66頁cd~/ros2_ws/srcros2pkgcreatemy_pkg3.1.1創建軟件包Package
命名新建文件為“my_node.cpp”。1、編寫節點代碼3.1節點Node和軟件包Package3.1.2編寫節點Node#include"rclcpp/rclcpp.hpp"
intmain(intargc,char*argv[]){rclcpp::init(argc,argv);
autonode=std::make_shared<rclcpp::Node>("my_node");
RCLCPP_INFO(node->get_logger(),"Helloworld!");while(rclcpp::ok()){;}
rclcpp::shutdown();
return0;}
3.1節點Node和軟件包Package2、設置編譯規則3.1節點Node和軟件包Packagefind_package(rclcppREQUIRED)add_executable(my_nodesrc/my_node.cpp)ament_target_dependencies(my_node"rclcpp")install(TARGETSmy_nodeDESTINATIONlib/${PROJECT_NAME})
3、修改軟件包信息<depend>rclcpp</depend>4、編譯軟件包cd~/ros2_wscolconbuild3.1節點Node和軟件包Package3.1.3運行節點Noderos2runmy_pkgmy_nodesourceinstall/setup.bash
3.2話題Topic和消息Message
在ROS2中,節點Node之間的通訊最常用的方式是話題Topic和消息Message。其中話題Topic可以理解為一個網絡聊天室。在這個話題聊天室里發言的節點,可以稱為發布者Publisher。而聊天室中所有看到發言內容的節點,可以稱為訂閱者Subscriber。
在話題聊天室中傳送的發言內容,就是消息Message。所以上述通訊機制可以概括為:1)發布者Publisher將要發生的數據打包成消息Message,然后發送到話題Topic中。2)訂閱者Subscriber訂閱一個話題Topic,從話題中獲取消息Message。然后把消息中的數據解析出來,進行后續的計算和使用。
編寫話題發布者Publisher、話題訂閱者Subscriber的詳細操作步驟:見教材P67-P85頁cd~/ros2_ws/srcros2pkgcreatetopic_pkg1、創建軟件包
命名新建文件為“publisher_node.cpp”。2、編寫節點代碼3.2話題Topic和消息Message3.2.1編寫話題發布者Publisher#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"
intmain(intargc,char*argv[]){rclcpp::init(argc,argv);
autonode=std::make_shared<rclcpp::Node>("publisher_node");
autopublisher=node->create_publisher<std_msgs::msg::String>("/my_topic",10);
std_msgs::msg::Stringmessage;message.data="HelloWorld!";
rclcpp::Rateloop_rate(1);
while(rclcpp::ok()){publisher->publish(message);loop_rate.sleep();}rclcpp::shutdown();
return0;}3.2話題Topic和消息Message3、設置編譯規則4、修改軟件包信息5、編譯軟件包cd~/ros2_wscolconbuild3.2話題Topic和消息Messagefind_package(rclcppREQUIRED)find_package(std_msgsREQUIRED)add_executable(publisher_nodesrc/publisher_node.cpp)ament_target_dependencies(publisher_node"rclcpp""std_msgs")install(TARGETSpublisher_nodeDESTINATIONlib/${PROJECT_NAME})6、
運行節點Node3.2話題Topic和消息Messagesourceinstall/setup.bashros2runtopic_pkgpublisher_node
在Terminator終端中,按下三個鍵盤組合鍵[Ctrl+Shift+O],會將終端分為上下兩個子窗口。其中上面的窗口仍然保持publisher_node運行,下面的窗口可以輸入新的指令并運行。ros2topiclistros2topicecho/my_topic
命名新建文件為“subscriber_node.cpp”。3.2話題Topic和消息Message3.2.2編寫話題訂閱者Subscriber在上一節中,創建一個名為topic_pkg的軟件包,并在這個軟件包中實現了一個發布者節點。這一節中,將會在這個topic_pkg軟件包中添加一個訂閱者節點。1、添加節點代碼文件3.2話題Topic和消息Message2、編寫節點代碼#include"rclcpp/rclcpp.hpp"#include"std_msgs/msg/string.hpp"
std::shared_ptr<rclcpp::Node>node;
voidCallback(conststd_msgs::msg::String::SharedPtrmsg){RCLCPP_INFO(node->get_logger(),"Receive:%s",msg->data.c_str());}
intmain(intargc,char*argv[]){rclcpp::init(argc,argv);
node=std::make_shared<rclcpp::Node>("subscriber_node");
autosubscriber=node->create_subscription<std_msgs::msg::String>("/my_topic",10,&Callback);
rclcpp::spin(node);rclcpp::shutdown();
return0;}3、設置編譯規則4、編譯軟件包cd~/ros2_wscolconbuild3.2話題Topic和消息Messageadd_executable(subscriber_nodesrc/subscriber_node.cpp)ament_target_dependencies(subscriber_node"rclcpp""std_msgs")install(TARGETSpublisher_nodesubscriber_nodeDESTINATIONlib/${PROJECT_NAME})5、
運行節點sourceinstall/setup.bashros2runtopic_pkgpublisher_noderos2runtopic_pkgsubscriber_node打開第2個子窗口:3.2話題Topic和消息Message上圖是訂閱者節點subscriber_node接收到發布者節點publisher_node發送來的消息內容。說明訂閱者subscriber_node和發布者publisher_node這兩個節點,通過話題“/my_topic”建立起了數據通訊。使用std_msgs::msg::String類型的消息包在兩個節點間傳遞數據。
3.3面向對象的節點Node實現
在前面的實驗里,使用的都是過程式編程,可以很清晰的展示節點的運行過程。但是在大量的開源項目中,最流行的是面向對象的編程方式。也就是將節點Node封裝成類Class。
話題發布者Publisher的類封裝、話題訂閱者Subscriber的類封裝的詳細操作步驟:見教材P85-P91頁鑒于該部分內容屬于進階性質的學習材料,故推薦采取自主學習的方式進行掌握。
3.4Launch文件
在ROS2中,可以通過Launch文件一次啟動多個節點,省去了逐個節點輸入指令啟動的繁瑣。在ROS2中,支持用三種語音來編寫Launch文件,分別是XML、YAML和Python。其中XML的語法和ROS1的Launch文件格式類似;YAML格式的Launch文件使用比較少;而在ROS2的開源社區中,則以Python語言的Launch文件最為流行。
分別使用XML、YAML和Python這三種語言構建Launch文件的詳細操作步驟:見教材P91-P104頁3.4.1XML格式的Launch文件3.4Launch文件1、在VSCode中找到前面實驗構建的topic_pkg軟件包。新建文件夾,命名為“launch”。2、在[launch]文件夾中,新建的文件,命名為“pub_sub.launch.xml”。3.4.1XML格式的Launch文件3.4Launch文件3、為這個pub_sub.launch.xml編寫內容:<launch>
<nodepkg="topic_pkg"exec="publisher_node"name="publisher_node"/>
<nodepkg="topic_pkg"exec="subscriber_node"name="subscriber_node"/></launch>4、在VSCode中打開[topic_pkg]軟件包的[CMakeLists.txt]文件。在文件中添加如下安裝規則:install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})3.4.1XML格式的Launch文件3.4Launch文件5、編譯軟件包cd~/ros2_wscolconbuild6、
運行Launch文件sourceinstall/setup.bashros2launchtopic_pkgpub_sub.launch.xml可以看到,發布者和接收者節點通過這個XML格式的launch文件全都運行起來了。3.4.2YAML格式的Launch文件3.4Launch文件1、在VSCode中找到前面實驗構建的topic_pkg軟件包。用鼠標右鍵單擊其中的[launch]文件夾,在彈出的[菜單]對話框中選擇[新建文件…],命名為“pub_sub.launch.xml”。3.4.2YAML格式的Launch文件3.4Launch文件2、為這個pub_sub.launch.yaml編寫內容:launch:-node:pkg:"topic_pkg"exec:"publisher_node"name:"publisher_node"-node:pkg:"topic_pkg"exec:"subscriber_node"name:"subscriber_node"3、在VSCode中打開[topic_pkg]軟件包的[CMakeLists.txt]文件。添加安裝規則:install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})3.4.2YAML格式的Launch文件3.4Launch文件4、編譯軟件包cd~/ros2_wscolconbuild5、
運行Launch文件sourceinstall/setup.bashros2launchtopic_pkgpub_sub.launch.yaml可以看到,發布者和接收者節點通過這個YAML格式的launch文件全都運行起來了。3.4.3Python格式的Launch文件3.4Launch文件1、在VSCode中找到前面實驗構建的topic_pkg軟件包。用鼠標右鍵單擊其中的[launch]文件夾,在彈出的[菜單]對話框中選擇[新建文件…],命名為“pub_sub.launch.py”。3.4Launch文件2、為這個pub_sub.launch.py編寫內容:fromlaunch_ros.actionsimportNodefromlaunchimportLaunchDescription
defgenerate_launch_description():
publisher_cmd=Node(package='topic_pkg',executable='publisher_node',name='publisher_node')
subscriber_cmd=Node(package='topic_pkg',executable='subscriber_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京汽車指標租賃協議書
- 朋友相約出游免責協議書
- 拆遷后財產歸戶主協議書
- 出租交給托管公司協議書
- 廠家轉讓鋰電設備協議書
- 兩所學校對口幫扶協議書
- 合伙協議入伙退伙協議書
- 蘭花種植合同合作協議書
- 地產經濟行業招商協議書
- 小區水務管道分包協議書
- (五調)武漢市2025屆高三年級五月模擬訓練生物試卷(含答案)
- 安全生產月活動查找身邊安全隱患人人講安全個個會應急課件
- 社會主義發展簡史智慧樹知到課后章節答案2023年下北方工業大學
- 生產良率系統統計表
- 用TOC理論提高生產制造的競爭力課件
- SketchUp (草圖大師) 基礎培訓PPT課件
- 生命線安裝方案
- 代理機構服務質量考核評價表
- 電廠保安人員管理制度
- 2018年瀘州市生物中考試題含答案
- ge核磁共振機房專用精密空調機技術要求
評論
0/150
提交評論