ROS2學習——節點話題通信(2)

目錄

一、ROS2節點

1.概念

2.實例

(1)ros2 run

(2)ros2 node list

(3)remapping重映射

(4)ros2 node info

二、話題

(1) ros2 topic list

(2) ros2 topic echo

?(3) ros2 topic info

(4)ros2 inerface show

?(5) ros2 topic pub

(6)ros2 topic hz

三、服務

(1) ros2 service list?

(2)ros2 services type

(3)ros2 service find

?(4)ros2 service call


一、ROS2節點

1.概念

? ? ? ? 在ROS2中,每個節點都負責單一模塊,不比如輪子的電機或者是傳感器的數據等。每個節點都可以接受和發送信息,這些信息通過話題,服務,動作或者是參數服務器進行傳遞。

? ? ? ? ?所有的機器人系統都由許都節點組成。在ROS2中每個可執行文件(C++程序或者python文件)可以保護多個或者單個節點。

2.實例

(1)ros2 run

ros2 run <package_name> <executable_name>

比如我們打開小海龜的功能包:

ros2 run turtlesim turtlesim_node

?其中turtlesim為功能包名稱,可執行程序的名稱為turtlesim_node。

(2)ros2 node list

如果我需要查詢目前運動的節點,可以直接使用該語句進行查找。

在終端中則會顯示:

(3)remapping重映射

? ? ? ? 節點重映射運行修改節點原始的屬性(名字,話題名,服務屬性等)

這里我們測試修改turtle_teleop_key?的屬性。

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

這里將節點名稱修改為了:

/my_turtle

可以使用ros2 node list進行查看。

(4)ros2 node info

將剛剛重映射的話題,查看節點信息:

ros2 node info /my_turtle

有興趣的讀者可以查看一下原始節點的信息發現那里做出了更改。

二、話題

? ? ? ? ROS2將復雜的系統分解為多個模塊的節點,話題則是充當節點之間信息交換的總線。

節點可以將數據發布到任意數量的話題,并同時訂閱任意數量的話題。

使用rqt_graph我們可以清晰的看見節點和話題之間的關系。

打開小海龜和控制小海龜鍵盤的節點:

?/teleop_turtle節點發布數據給/turtle1/cmd_vel話題,這個話題將數據傳遞給/my_turtle節點。對于一個比較復雜的系統可以使用rqt很方便的看清楚程序內部話題節點信息接收關系。

(1) ros2 topic list

? ? ? ? 該語句可現實當前的話題,如果在指令的后面帶上-t選項則可以顯示出話題的類型

(2) ros2 topic echo

如果已知話題的名字,可以使用該語句輸出話題的信息在終端當中。

ros2 topic echo <topic_name>ros2 topic echo /turtle1/cmd_vel

如果此時你移動鍵盤方向鍵:

?(3) ros2 topic info

ros2 topic info /turtle1/cmd_vel

這個語句和node info類似,終端會輸出話題的類型發送和接受者的相關信息。

(4)ros2 inerface show

如果我們需要查詢一個話題使用的類型是有那些信息可以使用該語句,話題的類型可以通過

ros2 topic list -t
ros2 interface show geometry_msgs/msg/Twist

?(5) ros2 topic pub

同時我們也可以在終端中發布和修改話題,該語句的使用格式:

ros2 topic pub <topic_name> <msg_type> '<args>'

我們需呀知道話題的名稱,話題發布信息的類型,args則是按照話題的類型輸入的信息(ROS2中規定要以yaml的格式進行輸入)。

比如我希望小海龜x軸移動2,z軸旋轉1.8弧度。

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

這里--once表示發布出這個信息后就退出。

可以看見小海龜轉動了1/4圈,當然如果你希望它一直旋轉則可以設置發布的頻率:

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

這里需要去除--once選項,并且加上--rate 1表示這個話題以1HZ的形式進行發布,這樣我們可以看見小海龜一直在花圈運動。

當然最后你也可以去rqt_graph中查看話題和節點的變換。

(6)ros2 topic hz

?改語句在終端中輸出需要查詢話題的頻率。

ros2 topic hz /turtle1/pose

三、服務

????????服務通信是是ROS中的另一種通信方式。這種方式不同于發布于訂閱的方式,服務通訊可以理解為呼叫和響應的模型。多個節點使用同一個服務通信,只能是一個進行。

(1) ros2 service list?

運行該語句會再終端中輸出目前運行的服務通信:

可以看出一個節點中帶有6個參數的名字,在ROS2中幾乎大部分的服務都是這樣的結構。

同樣的如果在最后加上-t 則可以顯示出服務的類型

(2)ros2 services type

該語句的作用是查看服務的類型。服務的類型類似于話題。服務有兩個部分組成:

信息的請求+響應

ros2 service type <service_name>
ros2 service type /clear

?Empty類型表示的是這個服務沒有發送任何請求和響應。

?

(3)ros2 service find

如果你知道服務使用的類型,想找到服務的名字則可以使用:

ros2 service find std_srvs/srv/Empty

?(4)ros2 service call

如果你知道服務的名字和類型,則可以調用這個服務:

#ros2 service call <service_name> <service_type> <arguments>
ros2 service call /clear std_srvs/srv/Empty

?如果你打開了小海龜的節點,并且使用鍵盤控制運行了一段軌跡。啟動這個服務會發現小海龜走的路徑都被清除了。

同時我們可以再對/spawn進行操作

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"

?我們再次調用/spawn這個服務,并且在小海龜串口中再生成一只,同時指定了小海龜的位姿。

服務的小總結:

對比話題:話題可以一對多,一個發布者多個訂閱者。服務式一種請求/響應模式,客戶端提出請求,服務段生成響應。是只能單獨進行的。


未完待更新...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14539.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

頭歌openGauss-存儲過程第1關:創建存儲過程

編程要求 1、創建第1個存儲過程&#xff0c;并調用&#xff1b; 1&#xff09;創建存儲過程&#xff0c;查詢emp表數據&#xff1b; 2&#xff09;調用存儲過程&#xff1b; --創建存儲過程&#xff0c;獲得計算機&#xff08;cs&#xff09;系學生選課情況并將結果寫入臨時表t…

人臉識別:基于卷積神經網絡(CNN)分類思想的人臉識別系統

本文來自公眾號 “AI大道理” —————— 項目配套視頻課程&#xff1a; 平臺&#xff1a;荔枝微課 鏈接&#xff1a;十方教育 項目地址&#xff1a;https://github.com/AIBigTruth/CNN_faces_recognition 之前很多人來詢問這個項目怎么做&#xff0c;代碼跑不起來&#…

數據庫讀寫分離

實現 MySQL 的讀寫分離主要可以通過以下幾種方式&#xff1a; 一主多從架構&#xff1a; 設置一個主數據庫&#xff08;Master&#xff09;來處理寫操作&#xff08;如 INSERT、UPDATE、DELETE&#xff09;。 設置多個從數據庫&#xff08;Slave&#xff09;來處理讀操作&…

USB數據恢復軟件:輕松找回U盤重要數據!

USB數據丟失的原因 USB數據丟失有一些常見原因&#xff0c;了解這些原因有利于恢復數據。 文件意外刪除病毒攻擊軟件錯誤未安全彈出USB設備格式化USB設備 順便一提&#xff0c;如果你通過快捷鍵“Ctrl D”刪除了數據&#xff0c;那你可以從回收站中還原它們。如果你永久刪除…

Isaac Sim仿真平臺學習(1)認識Isaac Sim

0.前言 上一個教程中我們下載好了Isaac Sim&#xff0c;這一章我們將來簡單了解一下Isaac Sim平臺。 isaac Sim仿真平臺安裝-CSDN博客 1.Isaac Sim是啥&#xff1f; What Is Isaac Sim? — Omniverse IsaacSim latest documentation Isaac Sim是NVDIA Omniverse平臺的機器…

【編譯原理復習筆記】屬性文法

屬性文法 也稱為屬性翻譯文法&#xff0c;由 Knuth 提出&#xff0c;以上下文無關文法為基礎 &#xff08;1&#xff09;為每個文法符號&#xff08;終結符與非終結符&#xff09;配備相關的屬性&#xff0c;代表與該文法符號相關的信息 &#xff08;2&#xff09;屬性文法對于…

【LSTM】基于Matlab的LSTM模型建模(代碼)

訓練目標&#xff1a;用LSTM訓練數據 數據&#xff1a;隨時間遞增&#xff0c;患者患病的概率&#xff08;橫坐標1個單位代表1個時間單位&#xff09; 以下代碼可直接運行 clc clear close all warning off % 關閉報警信息 %% 1.數據操作 % 1.1.導入數據&#x…

數據鏈路層協議——以太網協議

1. 數據鏈路層 網絡層用于將數據從一臺主機發送到另一臺主機。傳輸層用于將數據可靠的從一臺主機發送到另一臺主機。&#xff08;網絡層沒有保證可靠性的策略&#xff0c;傳輸過程中可能會出現各種意外&#xff0c;例如&#xff1a;丟包&#xff0c;網絡擁塞等。通過傳輸層可以…

跨域問題的4種解決方案

文章導讀 前言 跨域問題指的是在Web開發中&#xff0c;由于瀏覽器的同源策略限制&#xff0c;當一個網頁嘗試訪問與它不同源&#xff08;協議、域名或端口不同&#xff09;的資源時&#xff0c;可能會遇到安全限制導致無法正常訪問的問題。這種策略旨在防止惡意網站讀取或修改其…

yarn的基本命令和用法

Yarn通過并行安裝、離線模式、確定性安裝以及更好的依賴解析算法&#xff0c;為開發者提供了更快、更穩定、更安全的包管理體驗。它保留了npm的大部分功能&#xff0c;并在此基礎上做了大量優化&#xff0c;下面我們就來詳述Yarn的核心命令和實用技巧。&#x1f4da; 安裝Yarn…

【MySQL精通之路】InnoDB(7)-鎖和事務模型(2)-事務模型

主博客&#xff1a; 【MySQL精通之路】InnoDB(7)-鎖和事務模型-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(7)-鎖和事務模型(1)-鎖-CSDN博客 下一篇&#xff1a; 目錄 1.事務隔離級別 2.1 可重復讀 2.2 讀已提交 2.3 讀取未提交 2.4 序列化讀 2.自動提交、…

訂餐系統總結、

應用層&#xff1a; SpringBoot:快速構建Spring項目&#xff0c;采用“約定大于配置”的思想&#xff0c;簡化Spring項目的配置開發。 SpringMvc&#xff1a;Spring框架的一個模塊&#xff0c;springmvc和spring無需通過中間整合層進行整合&#xff0c;可以無縫集成。 Sprin…

完整的數據可視化方法集

在當前的大數據時代&#xff0c;了解如何可視化數據是UI/UX設計師技能的重要組成部分。如今&#xff0c;幾乎所有的公司都需要良好的數據可視化作為確定業務方向和決策的參考。數據的可視化結果越好&#xff0c;用戶的決策就越科學。 1、什么是數據可視化 數據可視化是將信息…

張量 t-product 積(matlab代碼)

參考文獻&#xff1a;Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3節中 t-product 的定義&#xff1a; 塊循環矩陣&#xff1a; 參考知乎博主的例子及代碼&#xff1a;&#xff08;t-product與t-QR分解&#xff0c;另一篇傅里葉對…

HTML5 設備訪問及輸入輸出設備交互

目錄 設備訪問輸入設備交互輸出設備交互設備訪問 設備信息訪問 navigator.userAgent:獲取瀏覽器的用戶代理字符串,從中可以解析出設備類型、操作系統、瀏覽器版本等信息。 const userAgent = navigator.userAgent; console.log(userAgent); // 輸出類似 "Mozilla/5.0…

算法(Algorithm)

算法&#xff08;Algorithm&#xff09;是指解題方案的準確而完整的描述&#xff0c;是一系列解決問題的清晰指令&#xff0c;代表著用系統的方法描述解決問題的策略機制。也就是說&#xff0c;算法能夠對一定規范的輸入&#xff0c;在有限時間內獲得所要求的輸出。算法應該具有…

【python004】miniforge可行替代方案實戰總結(最近更新中)

1.熟悉、梳理、總結項目研發實戰中的miniforge日常使用中的問題。隨著版本更新&#xff0c;做了一些變動&#xff0c;如商業化限制&#xff0c;取消一些語法等。 2.歡迎點贊、關注、批評、指正&#xff0c;互三走起來&#xff0c;小手動起來&#xff01;

vue通過for循環生成input框后雙向綁定失效問題

有些時候頁面上有太多的表單元素&#xff0c;一個個的寫太過繁瑣&#xff0c;拿 input 框舉例&#xff0c;眾多的 input 框&#xff0c;無非就是輸入框前的說明和 input 框的 name 屬性不一樣 <el-form :inline"true" :model"formInline" size"mi…

01-05.Vue自定義過濾器

目錄 前言過濾器的概念過濾器的基本使用給過濾器添加多個參數 前言 我們接著上一篇文章01-04.Vue的使用示例&#xff1a;列表功能 來講。 下一篇文章 02-Vue實例的生命周期函數 過濾器的概念 概念&#xff1a;Vue.js 允許我們自定義過濾器&#xff0c;可被用作一些常見的文本…

軟件模塊的耦合

軟件模塊的耦合 耦合是指軟件模塊之間的依賴程度&#xff0c;耦合越低&#xff0c;模塊之間的獨立性越高&#xff0c;軟件的可維護性、可重用性也越高。下面是幾種常見的耦合類型的概念&#xff1a; 數據耦合&#xff08;Data Coupling&#xff09;&#xff1a; 當一個模塊通…