理解ros話題--6


理解ROS話題(原創博文,轉載請標明出處--周學偉http://www.cnblogs.com/zxouxuewei/

Description: 本教程介紹ROS話題(topics)以及如何使用rostopicrxplot 命令行工具。目錄如下:

  1.開始

  1.1.首先確保roscore已經運行, 打開一個新的終端:

root@zxwubuntu-Aspire-V3-572G:/usr# roscore

 

 如果你沒有退出在上一篇教程中運行的roscore,那么你可能會看到下面的錯誤信息: 這是正常的,因為只需要有一個roscore在運行就夠了。

roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching

 

  1.2.turtlesim

  在本教程中我們也會使用到turtlesim,請在一個新的終端中運行:

root@zxwubuntu-Aspire-V3-572G:/usr# rosrun turtlesim turtlesim_node

 

 

  1.3.通過鍵盤遠程控制turtle

   我們也需要通過鍵盤來控制turtle的運動,請在一個新的終端中運行:

root@zxwubuntu-Aspire-V3-572G:/usr# rosrun turtlesim turtle_teleop_key

 

 

現在你可以使用鍵盤上的方向鍵來控制turtle運動了。如果不能控制,請選中turtle_teleop_key所在的終端窗口以確保你的按鍵輸入能夠被捕獲。

 現在你可以控制turtle運動了,下面我們一起來看看這背后發生的事。

 2.ROS Topics

turtlesim_node節點和turtle_teleop_key節點之間是通過一個ROS話題來互相通信的。turtle_teleop_key在一個話題上發布按鍵輸入消息,而turtlesim訂閱該話題以接收該消息。下面讓我們使用rqt_graph來顯示當前運行的節點和話題。

注意:如果你使用的是electric或更早期的版本,那么rqt是不可用的,請使用rxgraph代替。

   2.1.使用 rqt_graph

   rqt_graph能夠創建一個顯示當前系統運行情況的動態圖形。rqt_graph是rqt程序包中的一部分。如果你沒有安裝,請通過以下命令來安裝:

root@zxwubuntu-Aspire-V3-572G:/usr# sudo apt-get install ros-<distro>-rqt
root@zxwubuntu-Aspire-V3-572G:/usr# sudo apt-get install ros-<distro>-rqt-common-plugins

 

 請使用你的ROS版本名稱(比如fuerte、groovy、hydr。indigo等)來替換掉<distro>。

 在一個新終端中運行:你會看到類似下圖所示的圖形:

root@zxwubuntu-Aspire-V3-572G:/usr# rosrun rqt_graph rqt_graph

 

 

 如果你將鼠標放在/turtle1/command_velocity上方,相應的ROS節點(藍色和綠色)和話題(紅色)就會高亮顯示。正如你所看到的,turtlesim_nodeturtle_teleop_key節點正通過一個名為 /turtle1/command_velocity的話題來互相通信。

    2.2.rostopic介紹

rostopic命令工具能讓你獲取有關ROS話題的信息。

你可以使用幫助選項查看rostopic的子命令:

root@zxwubuntu-Aspire-V3-572G:/usr# rostopic -h

 

root@zxwubuntu-Aspire-V3-572G:~# rostopic -h
rostopic is a command-line tool for printing information about ROS Topics.

Commands:
    rostopic bw    display bandwidth used by topic
    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 type

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

root@zxwubuntu-Aspire-V3-572G:~# 

 

接下來我們將使用其中的一些子命令來查看turtlesim。

    2.3.使用 rostopic echo

rostopic echo可以顯示在某個話題上發布的數據。 用法: rostopic echo [topic]

讓我們在一個新終端中看一下turtle_teleop_key節點在/turtle1/command_velocity話題(非hydro版)上發布的數據。

root@zxwubuntu-Aspire-V3-572G:~#  rostopic echo /turtle1/command_velocity

 

如果你是用ROS Hydro 及其之后的版本(下同),請運行:

root@zxwubuntu-Aspire-V3-572G:~#  rostopic echo /turtle1/cmd_vel

 

你可能看不到任何東西因為現在還沒有數據發布到該話題上。接下來我們通過按下方向鍵使turtle_teleop_key節點發布數據。記住如果turtle沒有動起來的話就需要你重新選中turtle_teleop_key節點運行時所在的終端窗口。

現在讓我們再看一下rqt_graph(你可能需要刷新一下ROS graph)。正如你所看到的,rostopic echo(紅色顯示部分)現在也訂閱turtle1/command_velocity話題。

    2.4.使用 rostopic list

rostopic list能夠列出所有當前訂閱和發布的話題。

讓我們查看一下list子命令需要的參數,在一個新終端中運行:

root@zxwubuntu-Aspire-V3-572G:~# rostopic list -h

 

rostopic list中使用verbose選項:

root@zxwubuntu-Aspire-V3-572G:~# rostopic list -v

 

這會顯示出有關所發布和訂閱的話題及其類型的詳細信息。

  3.ROS Messages

  話題之間的通信是通過在節點之間發送ROS消息實現的。對於發布器(turtle_teleop_key)和訂閱器(turtulesim_node)之間的通信,發布器和訂閱器之間必須發送和接收相同類型的消息。這意味着話題的類型是由發布在它上面的消息類型決定的。使用rostopic type命令可以查看發布在某個話題上的消息類型

    3.1.使用 rostopic type

  rostopic type 命令用來查看所發布話題的消息類型。用法: rostopic type [topic]

  運行(非hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/command_velocity
你應該會看到:

turtlesim/Velocity

 

  hydro版請運行:

root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/cmd_vel
你應該會看到:
geometry_msgs/Twist

 

  我們可以使用rosmsg命令來查看消息的詳細情況(非hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rosmsg show turtlesim/Velocity
你應該會看到:
    float32 linear
    float32 angular

 

  hydro版:

root@zxwubuntu-Aspire-V3-572G:~# 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

  現在我們已經了解了什么是ROS的消息,接下來我們開始結合消息來使用rostopic。

    4.1.使用 rostopic pub

  rostopic pub可以把數據發布到當前某個正在廣播的話題上。用法: rostopic pub [topic] [msg_type] [args]  

  示例(非hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

 

  示例(hydro版):

root@zxwubuntu-Aspire-V3-572G:~# 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 pub   這條命令將會發布消息到某個給定的話題。

     -1           (單個破折號)這個參數選項使rostopic發布一條消息后馬上退出。

    /turtle1/command_velocity    這是消息所發布到的話題名稱。

    turtlesim/Velocity           這是所發布消息的類型。

    --   (雙破折號)這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數里面包含有破折號-(比如負號)時是必須要添加的。

    2.0 1.8   正如之前提到的,在一個turtlesim/Velocity消息里面包含有兩個浮點型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。這些參數其實是按照YAML語法格式編寫的,這在YAML文檔中有更多的描述。

 

你可能已經注意到turtle已經停止移動了。這是因為turtle需要一個穩定的頻率為1Hz的命令流來保持移動狀態。我們可以使用rostopic pub -r命令來發布一個穩定的命令流

(非hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

 

(hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
這條命令以1Hz的頻率發布速度命令到速度話題上。

 

我們也可以看一下rqt_graph中的情形,可以看到rostopic發布器節點(紅色)正在與rostopic echo節點(綠色)進行通信:

正如你所看到的,turtle正沿着一個圓形軌跡連續運動。我們可以在一個新終端中通過rostopic echo命令來查看turtlesim所發布的數據。

    4.2.使用 rostopic hz

  rostopic hz命令可以用來查看數據發布的頻率。 用法: rostopic hz [topic]

  我們看一下turtlesim_node發布/turtle/pose時有多快:

root@zxwubuntu-Aspire-V3-572G:~# rostopic hz /turtle1/pose

 

現在我們可以知道了turtlesim正以大約60Hz的頻率發布數據給turtle。我們也可以結合rostopic typerosmsg show命令來獲取關於某個話題的更深層次的信息

(非hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/command_velocity | rosmsg show

 

(hydro版):

root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/cmd_vel | rosmsg show

 

到此我們已經完成了通過rostopic來查看話題相關情況的過程,接下來我將使用另一個工具來查看turtlesim發布的數據。

 5.使用 rqt_plot

注意:如果你使用的是electric或更早期的ROS版本,那么rqt命令是不可用的,請使用rxplot命令來代替。

rqt_plot命令可以實時顯示一個發布到某個話題上的數據變化圖形。這里我們將使用rqt_plot命令來繪制正在發布到/turtle1/pose話題上的數據變化圖形。首先,在一個新終端中運行rqt_plot命令:

root@zxwubuntu-Aspire-V3-572G:~# rosrun rqt_plot rqt_plot

 

這會彈出一個新窗口,在窗口左上角的一個文本框里面你可以添加需要繪制的話題。在里面輸入/turtle1/pose/x后之前處於禁用狀態的加號按鈕將會被使能變亮。按一下該按鈕,並對/turtle1/pose/y重復相同的過程。現在你會在圖形中看到turtle的x-y位置坐標圖。

按下減號按鈕會顯示一組菜單讓你隱藏圖形中指定的話題。本部分教程到此為止,請使用Ctrl-C退出rostopic命令,但要保持turtlesim繼續運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM