理解ROS话题---ROS学习第5篇
文章目錄
- 1. 通過鍵盤控制turtle
- 2. ROS話題
- 2.1 使用rqt_graph
- 2.2 介紹rostopic
- 2.3 使用功能rostopic echo
- 2.4 使用rostopic list
- 3. ROS消息
- 3.1 使用rostopic type
- 4.繼續學習rostopic
- 4.1 使用rostopic pub
- 4.2 使用rostopic hz
- 5. 使用rqt_plot
1. 通過鍵盤控制turtle
(1) 打開一個終端運行roscore
(2) 再打開一個新的終端來打開turtlesim_node節點
kandi@ubuntu:~$ rosrun turtlesim turtlesim_node
彈出一個烏龜的界面
(3) 再打開一個新的終端,通過鍵盤控制turtle
kandi@ubuntu:~$ rosrun turtlesim turtle_teleop_key
現在就可以通過鍵盤上的方向鍵來控制turtle運動了,要確保turtle_teleop_key的終端窗口是在任務最前面,這樣才能獲取方向鍵的輸入,才能看到turtle的移動
2. ROS話題
turtlesim_node節點和turtle_teleop_key節點之間是通過一個ROS話題來相互通信的。turtle_teleop_key在話題上發布鍵盤按下的消息,turtlesim則訂閱該話題以接收消息。我們使用rqt_graph來顯示當前運行的節點和話題。
2.1 使用rqt_graph
打開一個新的終端:
$ rosrun rqt_graph rqt_graph
彈出一個窗口
把鼠標放在/turtle/cmd_vel上方,相應的ROS節點(藍色和綠色)和話題(紅色)就會高亮顯示。其中turtle_teleop_key節點對應藍色的/teleop_turtle,turtlesim_node節點對應綠色的/turtlesim,可以看到,這兩個節點通過一個名為/turtle1/cmd_vel的話題來相互通信。
2.2 介紹rostopic
可通過使用rostopic幫助選項查看可用的rostopic子命令,用法:
$ rostopic -h
rostopic is a command-line tool for printing information about ROS Topics.
Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic or field type
Type rostopic -h for more detailed usage, e.g. ‘rostopic echo -h’
2.3 使用功能rostopic echo
rostopic echo可以顯示在某個話題上發布的數據
用法:
$ rostopic echo [topic]
打開新終端:
rostopic echo /turtle1/cmd_vel
輸入上面命令后剛開始什么信息都看不到,請選中turtle_teleop_key的終端窗口以確保按鍵輸入能夠被捕獲,需要按下鍵盤方向鍵讓turtle_teleop_key節點發布數據。可以看到turtle_teleop_key節點發布的"指令、速度"
現在再來看一下rqt_graph,正如我們所看到的,rostopic echo (這里紅色顯示)現在也訂閱了/turtle1/cmd_vel話題
2.4 使用rostopic list
rostopic list能夠列出當前已被訂閱和發布的所有話題,使用下面命令列出所有發布和訂閱的主題及其類型的詳細信息:
rostopic list -v
3. ROS消息
話題的通信是通過節點間發送ROS消息實現的。為了使發布者(turtle_teleop_key)和訂閱者(turtulesim_node)進行通信,發布者和訂閱者必須發送和接受相同類型的消息。這意味著對話題的類型是由發布在它上面消息的類型決定的。
3.1 使用rostopic type
使用rospotic type命令可以查看發布在話題上的消息的類型,用法:
rostopic type [topic]
運行:
kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
我們可以通過使用rosmsg查看消息的詳細信息:
kandi@ubuntu:~$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
到現在我們已經知道turtlesim節點想要的消息類型,然后可以發布命令給turtle了。
4.繼續學習rostopic
4.1 使用rostopic pub
rostopic pub可以把數據發布到當前某個正在廣播的話題上
用法:
rostopic pub [topic] [msg_type] [args]
示例:
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’
此條命令會發送一條消息給turtlesim,告訴它以2.0大小的線速度和1.8大小的角速度移動。對應移動的距離見下圖:
下面來詳細分析一下其中的每一個參數。
●"rostopic pu"這條命令將消息發布到指定的話題
●"-l"這一選項會讓rostopic只發布一條消息,然后退出
●"/turtle1/cmd_vel"這是要發布到的話題的名稱
●"geometry_msgs/Twist"這是發布到話題時使用的消息的類型
●"–"這兩個破折號用來告訴選項解析器,標明之后的參數都不是選型。如果參數前有破折號(-)比如附屬,那么這是必需的。
●如前所述,一個geometry_msgs/Twist消息有兩個浮點型元素:linear和angular。在本例中,’[2.0, 0.0, 0.0]‘表示linear的值為x=2.0, y=0.0, z=0.0,而’[0.0, 0.0, 1.8]'是說angular的值為x=0.0, y=0.0, z=1.8。這些參數實際上使用的是YAML語法,在YAML命令行文檔中有描述。
運行完"rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’"
后turtle已經停止移動了,如果要保持移動狀態,turtle需要一個穩定的頻率為1Hz的指令流程才能保持移動的狀態。我們可以使用rostopic pub -r命令來發布源源不斷的命令,下面命令以1Hz的速度發布geometry_msgs/Twist 消息到/turtle1/cmd_vel話題中。
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’
我們還可以看一下rqt_graph中的情形,可以看到rostopic pub節點(紅色)正在與rostopic echo節點(綠色)進行通信:
可以看到,turtle正沿著一個圓形軌跡持續運動。我們可以在新終端中通過rostopic echo命令來查看turtlesim所發布的數據
4.2 使用rostopic hz
rostopic hz報告數據發布的頻率,用法:
rostopic hz [topic]
我們看一下turtlesim_node發布/turtle/pose有多快:
現在我們知道了turtlesim正以大概60Hz的頻率發布有關烏龜的數據,我們也可以結合rostopic type和rosmsg show命令來獲取關于某個話題的更深層次信息
kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel | rosmsg show
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
5. 使用rqt_plot
rqt_plot命令可以在滾動時間圖上顯示發布到某個話題上的數據,這里我們使用rqt_plot命令來繪制正被發布到/turtle1/pose話題上的數據,首先,在一個新終端中輸入:
$ rosrun rqt_plot rqt_plot
會彈出一個新窗口,可以在左上角的文本框里面添加任務想要繪制的話題。在里面輸入/turtle1/pose/x后,之前不能按下的加號按鈕將會變亮。按一下該按鈕,并對/turtle1/pose/y重復相同的過程。現在你會在圖中看到turtle的x-y位置
按下減號按鈕會顯示一組菜單可以讓你在圖中隱藏指定的話題。現在隱藏掉你剛才添加的話題并添加/turtle1/pose/theta,你會看到如下所示的圖:
總結
以上是生活随笔為你收集整理的理解ROS话题---ROS学习第5篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS工具篇
- 下一篇: 云迹科技:站在酒店场景服务机器人的风口