????????大家好,我是虎哥,從今天開(kāi)始,我將花一段時(shí)間,開(kāi)始將自己從ROS1切換到ROS2,在上一篇中,我們一起了解ROS 2中節(jié)點(diǎn)的功能以及與之交互的工具, 這一篇,我們主要會(huì)圍繞ROS中另外一個(gè)重要的概念“Topic ”,詳細(xì)其具體的操作指令。
目錄
一、ROS2中話題(Topic in ROS 2)
1 、啟動(dòng)模擬節(jié)點(diǎn)
2、 rqt_graph
3、 ros2 topic list
4 、ros2 topic echo
5、 ros2 topic info
6 、ros2 interface show
7 、ros2 topic pub
8 、ros2 topic hz
9、總結(jié)
一、ROS2中話題(Topic in ROS 2)
ROS 2將復(fù)雜系統(tǒng)分解為許多模塊化節(jié)點(diǎn)?!癟opic ”是ROS圖的一個(gè)重要元素,充當(dāng)節(jié)點(diǎn)交換消息的總線。
?節(jié)點(diǎn)可以向任意數(shù)量的主題發(fā)布數(shù)據(jù),并同時(shí)訂閱任意數(shù)量的話題“Topic ”。
?主題“Topic ”是數(shù)據(jù)在節(jié)點(diǎn)之間移動(dòng)的重要方式之一,因此在系統(tǒng)的不同部分之間移動(dòng)。
1 、啟動(dòng)模擬節(jié)點(diǎn)
到現(xiàn)在,你應(yīng)該可以輕松地啟動(dòng)turtlesim。打開(kāi)一個(gè)終端,執(zhí)行如下命令:
ros2 run turtlesim turtlesim_node
打開(kāi)一個(gè)新的終端,啟動(dòng)遙控節(jié)點(diǎn):
ros2 run turtlesim turtle_teleop_key
2、 rqt_graph
在本教程中,我們將使用rqt_graph來(lái)可視化不斷變化的節(jié)點(diǎn)和主題,以及它們之間的連接。Turtlesim教程告訴您如何安裝rqt及其所有插件,包括rqt_graph。
sudo apt update
sudo apt install ros-eloquent-rqt*
啟動(dòng)
rqt_graph
?你還可以打開(kāi) rqt_graph 通過(guò)打開(kāi)rqt 選擇 Plugins > Introspection > Nodes Graph.
?????????您應(yīng)該看到上面的節(jié)點(diǎn)和主題,以及圍繞圖形外圍的兩個(gè)操作(現(xiàn)在讓我們忽略它們)。如果將鼠標(biāo)懸停在中心的主題上,您將看到如上圖所示的顏色高亮顯示。
????????該圖描述了/turtlesim節(jié)點(diǎn)和/teolep_turtle節(jié)點(diǎn)如何在主題上相互通信。/teolep_turtle節(jié)點(diǎn)正在向/turtle1/cmd_vel主題發(fā)布數(shù)據(jù)(您輸入的鍵擊以移動(dòng)海龜),/turtlesim節(jié)點(diǎn)訂閱該主題以接收數(shù)據(jù)。
?????????rqt_graph的突出顯示功能在檢查具有以多種不同方式連接的多個(gè)節(jié)點(diǎn)和主題的更復(fù)雜系統(tǒng)時(shí)非常有用。rqt_graph是一個(gè)圖形化的工具?,F(xiàn)在我們來(lái)看一些用于主題的命令行工具。
3、 ros2 topic list
在新終端中運(yùn)行ros2 topic list命令將返回系統(tǒng)中當(dāng)前活動(dòng)的所有主題的列表:
ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
ros2 topic list -t將返回相同的主題列表,這一次主題類型附加在每個(gè)主題后面的括號(hào)中:
ros2 topic list -t
nvidia@ubuntu:~$ ros2 topic list -t
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]
主題"Topic"有名稱和類型。這些屬性,特別是類型,是節(jié)點(diǎn)在主題上移動(dòng)時(shí)如何知道自己在談?wù)撓嗤男畔⒌摹?/p>
如果您想知道所有這些主題在rqt_graph中的位置,可以取消選中下面的所有框
?不過(guò),目前暫時(shí),請(qǐng)選中這些選項(xiàng)以避免混淆。
4 、ros2 topic echo
要查看主題上發(fā)布的數(shù)據(jù),請(qǐng)使用:
ros2 topic echo <topic_name>
由于我們知道/teolep_turtle通過(guò)/turtle1/cmd_vel主題向/turtlesim發(fā)布數(shù)據(jù),因此讓我們使用echo來(lái)反思該主題:
ros2 topic echo /turtle1/cmd_vel
?現(xiàn)在,回到 rqt_graph and 取消選擇 the Debug box.
?/_ros2cll_29047是由我們剛剛運(yùn)行的echo創(chuàng)建的節(jié)點(diǎn)(數(shù)字會(huì)改變)?,F(xiàn)在,您可以看到發(fā)布者正在通過(guò)cmd_vel主題發(fā)布數(shù)據(jù),并且訂閱了兩個(gè)訂閱者。
5、 ros2 topic info
主題不一定只有點(diǎn)對(duì)點(diǎn)的交流;它可以是一對(duì)多、多對(duì)一或多對(duì)多。另一種方法是運(yùn)行:
ros2 topic info /turtle1/cmd_vel
會(huì)回復(fù)如下信息:
nvidia@ubuntu:~$ ros2 topic info /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscriber count: 1
6 、ros2 interface show
節(jié)點(diǎn)使用消息通過(guò)主題發(fā)送數(shù)據(jù)。發(fā)布者和訂閱者必須發(fā)送和接收相同類型的消息才能進(jìn)行通信。在運(yùn)行ros2主題列表之后,我們前面看到的主題類型-t讓我們知道每個(gè)主題可以發(fā)送什么類型的消息。
ros2 topic list -t
會(huì)回復(fù)帶類型的話題:
nvidia@ubuntu:~$ ros2 topic list -t
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]
cmd_vel主題的類型:
geometry_msgs/msg/Twist
這意味著在geometry_msgs包中有一個(gè)名為Twist的msg。
現(xiàn)在,我們可以在該類型上運(yùn)行ros2 interface show<type>.msg,以了解其詳細(xì)信息,特別是消息所需的數(shù)據(jù)結(jié)構(gòu)。
ros2 interface show geometry_msgs/msg/Twist
會(huì)得到如下回復(fù):
nvidia@ubuntu:~$ ros2 interface show geometry_msgs/msg/Twist
# This expresses velocity in free space broken into its linear and angular parts.
?
Vector3 linear
Vector3 angular
回憶一下,之前我們的ECHO話題:
nvidia@ubuntu:~$ ros2 topic echo /turtle1/cmd_vel
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 2.0
---
linear 和angular 都是一個(gè)數(shù)組,每個(gè)數(shù)組有3個(gè)元素。
7 、ros2 topic pub
現(xiàn)在已經(jīng)有了消息結(jié)構(gòu),可以使用以下命令行直接將數(shù)據(jù)發(fā)布到主題上:
ros2 topic pub <topic_name> <msg_type> '<args>'
“<args>”參數(shù)是您將傳遞給主題的實(shí)際數(shù)據(jù),在上一節(jié)中剛剛發(fā)現(xiàn)的結(jié)構(gòu)中。需要注意的是,這個(gè)參數(shù)需要以YAML語(yǔ)法輸入。按如下方式輸入完整命令:
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}}"
這個(gè)比起之前ROS1上還是直管了很多。
--once是可選參數(shù),表示“發(fā)布一條消息然后退出”。
?回復(fù)內(nèi)容為:
publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))
Turtlesim(以及通常用來(lái)模仿的真實(shí)機(jī)器人)需要穩(wěn)定的命令流來(lái)連續(xù)操作。所以,為了讓烏龜繼續(xù)移動(dòng),你可以跑:
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}}"
?小烏龜會(huì)一直繞圈圈。這里的區(qū)別是刪除了--once選項(xiàng),添加了--rate 1選項(xiàng),該選項(xiàng)告訴ros2主題pub以1Hz的穩(wěn)定流發(fā)布命令。
您可以刷新rqt_graph,以圖形方式查看正在發(fā)生的情況。你會(huì)看到ros 2主題PUB。。。節(jié)點(diǎn)(/ros2cli_29722)正在/turtle1/cmd_vel主題上發(fā)布,并由ros2主題echo接收。。。節(jié)點(diǎn)(/ros2cli_29884)和/turtlesim節(jié)點(diǎn)。
?最后,您可以對(duì)姿勢(shì)主題運(yùn)行echo并重新檢查rqt_graph:
ros2 topic echo /turtle1/pose
?在這種情況下,/turtlesim現(xiàn)在發(fā)布到pose主題,并訂閱了一個(gè)新的echo節(jié)點(diǎn)。
8 、ros2 topic hz
在此過(guò)程中的最后可以使用以下方法報(bào)告數(shù)據(jù)發(fā)布的速度:
ros2 topic hz /turtle1/pose
它將返回/turtlesim節(jié)點(diǎn)向pose主題發(fā)布數(shù)據(jù)的速率數(shù)據(jù)。
average rate: 56.477
min: 0.004s max: 0.135s std dev: 0.01506s window: 65
可以再看看turtle1/cmd_vel
ros2 topic hz turtle1/cmd_vel
和我們之前寫(xiě)的一致,1HZ。
9、總結(jié)
????????結(jié)束前,此時(shí),將有許多節(jié)點(diǎn)正在運(yùn)行。不要忘記通過(guò)關(guān)閉終端窗口或在每個(gè)終端中輸入“Ctrl+C”來(lái)停止它們。節(jié)點(diǎn)通過(guò)主題發(fā)布信息,這允許任何數(shù)量的其他節(jié)點(diǎn)訂閱和訪問(wèn)該信息。在本教程中,您使用rqt_graph和命令行工具檢查了主題上多個(gè)節(jié)點(diǎn)之間的連接?,F(xiàn)在,您應(yīng)該對(duì)ROS 2系統(tǒng)中的數(shù)據(jù)如何移動(dòng)有了很好的了解。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-400455.html
以上就是我今天要分享的內(nèi)容。糾錯(cuò),疑問(wèn),交流: 911946883@qq.com文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400455.html
到了這里,關(guān)于【ROS2入門】理解 ROS 2 Topics 話題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!