機器人操作系統(tǒng)(ROS2)入門與實踐 課件 第3章 ROS2編程基礎_第1頁
機器人操作系統(tǒng)(ROS2)入門與實踐 課件 第3章 ROS2編程基礎_第2頁
機器人操作系統(tǒng)(ROS2)入門與實踐 課件 第3章 ROS2編程基礎_第3頁
機器人操作系統(tǒng)(ROS2)入門與實踐 課件 第3章 ROS2編程基礎_第4頁
機器人操作系統(tǒng)(ROS2)入門與實踐 課件 第3章 ROS2編程基礎_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

機器人操作系統(tǒng)(ROS2)入門與實踐機器人操作系統(tǒng)(ROS2)入門與實踐第1章LinuxUbuntu入門基礎第2章ROS2安裝與系統(tǒng)架構第3章ROS2編程基礎第4章ROS2機器人運動控制第5章激光雷達在ROS2中的使用第6章IMU在ROS2中的使用第7章ROS2中的SLAM環(huán)境建圖第8章ROS2中的NAV2自主導航第9章ROS2中的圖像視覺應用第10章ROS2的三維視覺應用第11章ROS2的機械臂應用第12章基于ROS2的綜合應用第3章3.3面向?qū)ο蟮墓?jié)點Node實現(xiàn)

第3章ROS2編程基礎3.2話題Topic和消息Message3.1節(jié)點Node和軟件包Package3.4Launch文件3.5本章小結(jié)

節(jié)點Node和軟件包Package是ROS2的程序的組織形式。其中節(jié)點Node相當于一個ROS2的程序文件。當我們運行一個ROS2程序的時候,實際上運行的就是一個或者多個節(jié)點文件。軟件包Package是節(jié)點文件的容器,通常是一個包含了一系列配置文件的目錄。而節(jié)點源碼文件,就放在軟件包目錄的某個子文件夾中(一般是src文件夾)。3.1節(jié)點Node和軟件包Package創(chuàng)建軟件包Package和節(jié)點Node的詳細操作步驟:見教材P56-P66頁cd~/ros2_ws/srcros2pkgcreatemy_pkg3.1.1創(chuàng)建軟件包Package

命名新建文件為“my_node.cpp”。1、編寫節(jié)點代碼3.1節(jié)點Node和軟件包Package3.1.2編寫節(jié)點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節(jié)點Node和軟件包Package2、設置編譯規(guī)則3.1節(jié)點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節(jié)點Node和軟件包Package3.1.3運行節(jié)點Noderos2runmy_pkgmy_nodesourceinstall/setup.bash

3.2話題Topic和消息Message

在ROS2中,節(jié)點Node之間的通訊最常用的方式是話題Topic和消息Message。其中話題Topic可以理解為一個網(wǎng)絡聊天室。在這個話題聊天室里發(fā)言的節(jié)點,可以稱為發(fā)布者Publisher。而聊天室中所有看到發(fā)言內(nèi)容的節(jié)點,可以稱為訂閱者Subscriber。

在話題聊天室中傳送的發(fā)言內(nèi)容,就是消息Message。所以上述通訊機制可以概括為:1)發(fā)布者Publisher將要發(fā)生的數(shù)據(jù)打包成消息Message,然后發(fā)送到話題Topic中。2)訂閱者Subscriber訂閱一個話題Topic,從話題中獲取消息Message。然后把消息中的數(shù)據(jù)解析出來,進行后續(xù)的計算和使用。

編寫話題發(fā)布者Publisher、話題訂閱者Subscriber的詳細操作步驟:見教材P67-P85頁cd~/ros2_ws/srcros2pkgcreatetopic_pkg1、創(chuàng)建軟件包

命名新建文件為“publisher_node.cpp”。2、編寫節(jié)點代碼3.2話題Topic和消息Message3.2.1編寫話題發(fā)布者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、設置編譯規(guī)則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、

運行節(jié)點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在上一節(jié)中,創(chuàng)建一個名為topic_pkg的軟件包,并在這個軟件包中實現(xiàn)了一個發(fā)布者節(jié)點。這一節(jié)中,將會在這個topic_pkg軟件包中添加一個訂閱者節(jié)點。1、添加節(jié)點代碼文件3.2話題Topic和消息Message2、編寫節(jié)點代碼#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、設置編譯規(guī)則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、

運行節(jié)點sourceinstall/setup.bashros2runtopic_pkgpublisher_noderos2runtopic_pkgsubscriber_node打開第2個子窗口:3.2話題Topic和消息Message上圖是訂閱者節(jié)點subscriber_node接收到發(fā)布者節(jié)點publisher_node發(fā)送來的消息內(nèi)容。說明訂閱者subscriber_node和發(fā)布者publisher_node這兩個節(jié)點,通過話題“/my_topic”建立起了數(shù)據(jù)通訊。使用std_msgs::msg::String類型的消息包在兩個節(jié)點間傳遞數(shù)據(jù)。

3.3面向?qū)ο蟮墓?jié)點Node實現(xiàn)

在前面的實驗里,使用的都是過程式編程,可以很清晰的展示節(jié)點的運行過程。但是在大量的開源項目中,最流行的是面向?qū)ο蟮木幊谭绞?。也就是將?jié)點Node封裝成類Class。

話題發(fā)布者Publisher的類封裝、話題訂閱者Subscriber的類封裝的詳細操作步驟:見教材P85-P91頁鑒于該部分內(nèi)容屬于進階性質(zhì)的學習材料,故推薦采取自主學習的方式進行掌握。

3.4Launch文件

在ROS2中,可以通過Launch文件一次啟動多個節(jié)點,省去了逐個節(jié)點輸入指令啟動的繁瑣。在ROS2中,支持用三種語音來編寫Launch文件,分別是XML、YAML和Python。其中XML的語法和ROS1的Launch文件格式類似;YAML格式的Launch文件使用比較少;而在ROS2的開源社區(qū)中,則以Python語言的Launch文件最為流行。

分別使用XML、YAML和Python這三種語言構建Launch文件的詳細操作步驟:見教材P91-P104頁3.4.1XML格式的Launch文件3.4Launch文件1、在VSCode中找到前面實驗構建的topic_pkg軟件包。新建文件夾,命名為“l(fā)aunch”。2、在[launch]文件夾中,新建的文件,命名為“pub_sub.launch.xml”。3.4.1XML格式的Launch文件3.4Launch文件3、為這個pub_sub.launch.xml編寫內(nèi)容:<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]文件。在文件中添加如下安裝規(guī)則:install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})3.4.1XML格式的Launch文件3.4Launch文件5、編譯軟件包cd~/ros2_wscolconbuild6、

運行Launch文件sourceinstall/setup.bashros2launchtopic_pkgpub_sub.launch.xml可以看到,發(fā)布者和接收者節(jié)點通過這個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編寫內(nèi)容: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]文件。添加安裝規(guī)則:install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})3.4.2YAML格式的Launch文件3.4Launch文件4、編譯軟件包cd~/ros2_wscolconbuild5、

運行Launch文件sourceinstall/setup.bashros2launchtopic_pkgpub_sub.launch.yaml可以看到,發(fā)布者和接收者節(jié)點通過這個YAML格式的launch文件全都運行起來了。3.4.3Python格式的Launch文件3.4Launch文件1、在VSCode中找到前面實驗構建的topic_pkg軟件包。用鼠標右鍵單擊其中的[launch]文件夾,在彈出的[菜單]對話框中選擇[新建文件…],命名為“pub_sub.launch.py”。3.4Launch文件2、為這個pub_sub.launch.py編寫內(nèi)容: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論