ROS信息命令用於識別話題、服務、節點和參數等信息。尤其是rostopic、 rosservice、rosnode和rosparam經常被使用,並且rosbag是ROS的主要特徵之一,它 具有記錄數據和回放功能。
運行節點
我們將使用下面的命令,利用ROS提供的turtlesim來了解相關的節點、話題和服 務。在使用ROS信息命令進行測試之前,需要做好以下準備工作。
運行roscore
爲確保順利進行,關閉所有以前運行的終端。然後打開一個新的終端並運行以下命令。
$ roscore
爲了運行turtlesim功能包中的turtlesim_node節點,打開一個新的終端並運行以下命 令。這將從turtlesim功能包運行turtlesim_node。用戶會在一個藍色的屏幕上看到烏龜。
$ rosrun turtlesim turtlesim_node
運行turtlesim功能包中的turtle_teleop_key節點
打開一個新的終端並運行以下命令。這將在turtlesim功能包中運行turtle_teleop_ key。一旦執行,可以在該終端窗口上,用鍵盤上的方向鍵控制烏龜。當按下方向鍵時,屏幕上的烏龜會移動,這是一個簡單的仿真,但這是將驅動機器人所需的 移動速度(m/s)和旋轉速度(rad/s)用消息傳送的。
$ rosrun turtlesim turtle_teleop_key
一.rosnode:ROS節點
首先,我們需要了解節點(node),所以先看一些術語。
1.rosnode list:列出正在運行中的所有節點
這是列出連接到roscore的所有節點的命令。如果已經運行了roscore和之前準備 好的節點(turtlesim_node,turtle_teleop_key),則可以看到終端中列出了用於在 roscore進行日誌記錄的rosout,以及teleop_turtle和turtlesim節點。
2.rosnode ping [節點名稱]:與指定的節點進行連接測試
以下是測試turtlesim節點是否確實連接到當前使用的計算機。如果已連接,它將從 節點收到XMLRPC響應,如下所示。
如果在該節點運行出現問題或通信中斷,則顯示以下錯誤消息。
3.rosnode info [節點名稱]:檢查指定節點的信息
使用rosnode info命令可以查看指定節點的信息。基本上,用戶可以檢查發佈者、訂 閱者和服務等。此外,還可以檢查關於節點運行URI和話題輸入/輸出的信息。由於會顯 示大量信息,因此省略了內容,所以請務必親自運行。
4.rosnode機器[PC名稱或IP]:查看此PC上運行的所有節點
可以看到指定設備(PC或終端)上運行的所有節點。
5.rosnode kill [節點名稱]:終止指定節點的運行
這是一個終止正在運行的節點的命令。您可以在運行節點的終端窗口中使用[Ctrl+c] 直接終止節點,但也可以指定要結束的的節點,如下所示。
如果使用該命令終止了節點,則會在運行該節點的終端窗口上顯示如下警告消息,並 關閉該節點。
6.rosnode cleanup:刪除無法驗證連接信息的虛擬節點的註冊信息
刪除連接信息未被確認的虛擬節點的註冊信息。當節點由於意外事件而異常終止時, 該命令將從節點目錄中刪除連接中斷的節點。這個命令很少使用,但是它非常有用,因爲 用戶不需要重新運行roscore。
二.rostopic: ROS話題
首先,讓我們參考第4.1節“ROS術語”,因爲我們需要了解話題。
在運行ROS話題示例之前,請先關閉所有節點。通過在不同的終端窗口中分別運行以 下命令來運行turtlesim_node和turtle_teleop_key。
1.rostopic list:列出活動話題
rostopic list命令顯示當前正在發送和接收的所有話題的列表。
通過將“-v”選項添加到rostopic list命令,可以分開發布話題和訂閱話題,並將每 個話題的消息類型一起顯示。
2.rostopic echo [話題名稱]:實時顯示指定話題的消息內容
以下示例實時顯示組成/turtle1/pose話題的x、y、theta、linear_velocity和 angular_velocity的數據。
3.rostopic find [類型名稱]:顯示使用指定類型的消息的話題
rostopic type [話題名稱]:顯示指定話題的消息類型
4.rostopic bw [話題名稱]:顯示指定話題的消息數據帶寬(bandwidth)
在以下示例中,用於/turtle1/pose話題的數據帶寬平均爲每秒1.27 KB。
5.rostopic hz [話題名稱]:顯示指定話題的消息數據發佈週期
在以下示例中,用戶可以檢查/turtle1/pose數據的發佈週期。從結果可以看出,該消 息以大約62.5Hz(0.016秒= 16毫秒)的頻率被髮布。
6.rostopic info [話題名稱]:顯示指定話題的信息
在以下示例中,用戶可以看到/turtle1/pose話題使用turtlesim/Pose消息類型,發佈 到/turtlesim節點,並且沒有實際訂閱的話題。
7.rostopic pub [話題名稱] [消息類型] [參數]:使用指定的話題名稱發佈消息
以下是使用/turtle1/cmd_vel話題名稱發佈類型爲geometry_msgs/Twist的消息的 示例。
每個選項的描述如下。
■ -1只發布一次消息(實際上只運行一次,但會像以前的結果一樣運行3秒)。
■ /turtle1/cmd_vel 指定的話題名稱
■ geometry_msgs/Twist 要發佈的消息類型名稱
■ -- ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ 在x軸座標上以每秒2.0 m的速度移動,以z軸爲中心,每秒旋轉 1.8rad
三.rosservice:ROS服務
在運行ROS服務相關例子之前先關閉所有節點。通過在不同的終端窗口中運行以下命 令來運行turtlesim_node和turtle_teleop_key。
1.rosservice list:顯示活動的服務信息
顯示活動中的服務的信息。會顯示在同一網絡中使用的所有服務。
2.rosservice info [服務名稱]:顯示指定服務的信息
以下是使用rosservice的info選項查看/turtle1/set_pen服務的節點名稱、URI、類型 和參數的示例。
3.rosservice type [服務名稱]:顯示服務類型
在以下示例中,可以看到/turtle1/set_pen服務是turtlesim/SetPen類型。
rosservice find [服務類型]:查找指定服務類型的服務
以下示例搜索turtlesim/SetPen類型的服務。因此,可以看到搜索出/turtle1/ set_pen。
rosservice uri [服務名稱]:顯示ROSRPC
uri服務 用戶也可以使用rosservice的uri選項來檢查/turtle1/set_pen服務的ROSRPC URI, 如下所示:
rosservice args [服務名稱]:服務參數輸出
我們來看看/turtle1/set_pen服務的每個參數,如下例所示,該命令顯示在/turtle1/ set_pen服務中使用r、g、b、width和off參數。
rosservice call [服務名稱] [參數]:用輸入的參數服務請求
以下示例是請求/turtle1/set_pen服務的命令。所使用的“255 0 0 5 0”是對應於用 於/turtle1/set_pen服務的參數(r,g,b,width,off)的值。紅色的r的最大值是255, 因爲g和b都是0,所以筆的顏色是紅色的。width設置爲5,off爲0(假)。rosservice call是一個非常有用的命令,通常用於測試服務。
通過使用前面的命令,發送了服務請求,更改了turtlesim中使用的筆的屬性,並且 從turtle_teleop_key中下達了下移命令。作爲結果,可以從下面圖中看到原來是白色的 筆色顯示爲紅色。
四.rosparam:ROS參數
在運行ROS參數相關示例之前先關閉所有節點。通過在不同的終端窗口中運行以下命 令來運行turtlesim_node和turtle_teleop_key。
1.rosparam list:查看參數列表
顯示在同一網絡中使用的參數列表。
2.rosparam get [參數名稱]:獲取參數值
如果要查看特定參數的值,可以將該參數名稱指定爲rosparam get命令的選項。
如果要檢查所有參數的值,而不是某一特定的參數,可以使用“/”作爲選項來顯示所 有參數的值,如下所示。
3.rosparam dump [文件名]:將參數保存到指定的文件
以下示例將當前參數值保存到parameters.yaml文件中。因爲它保存了每次使用的參 數值,並且可以在下次執行時使用(“~/”表示用戶的home目錄),所以很方便。
4.rosparam set [參數名稱]:設置參數值
這是設置參數值的命令。在以下示例中,將turtlesim節點的background_b參數 (與背景色相關的參數)設置爲0。
RGB從255,86,69變爲0,86,69,所以變成深綠色,如圖5-4右圖所示。但是,由於 turtlesim節點並不是每次讀取參數,因此需要使用“rosparam set background_b 0” 命令修改參數之後,用“rosservice call clear”命令刷新屏幕。參數的反映結果決於節 點的運行方式。
5.rosparam load [文件名稱]:將參數保存到指定的文件
此命令與rosparam dump相反,是讀取parameters.yaml文件並將其用作當前參數 值。如下例所示,運行“rosservice call clear”命令,參數值將會變爲所加載的文件的 參數值,並且在執行dump命令時,圖5-4中變爲綠色的背景將變爲藍色背景。rosparam load是一個非常有用的命令,會經常使用,讀者需要掌握。
6.rosparam delete [參數名稱]:刪除參數
該命令刪除指定的參數。
五.rosmsg: ROS消息信息
在運行ROS消息信息示例之前,先關閉所有節點。通過在不同的終端窗口中運行以下 命令來運行turtlesim_node和turtle_teleop_key。
1.rosmsg list:顯示所有消息
該命令顯示當前ROS中安裝的功能包的所有消息。根據當前ROS中包含的功能包,顯 示結果可能會有所不同。
2.rosmsg show [消息名稱]:顯示指定的消息信息
顯示指定的消息信息。以下是顯示turtlesim/Pose消息信息的例子。float32是一個 浮點變量,可以確認它是一個包含5條信息(x、y、theta、linear_velocity和angular_ velocity)的消息。
3.rosmsg md5 [消息名稱]:顯示md5sum
以下是查看turtlesim/Pose消息的md5信息的示例。有時如果在消息通信期間遇到 MD5問題,則需要檢查md5sum。這時會用到該命令,一般不常用。
4.rosmsg package [功能包名稱]:顯示用於指定功能包的所有消息
可以看到特定功能包中使用的消息。
5.rosmsg packages:顯示使用消息的所有功能包
六.rossrv:ROS服務信息
在運行ROS服務信息相關示例之前,先關閉所有節點。通過在不同的終端窗口中運行 以下命令來運行turtlesim_node和turtle_teleop_key。
1.rossrv list:顯示所有服務
該命令顯示了ROS上當前安裝的功能包的所有服務。根據目前包含在ROS中的功能 包,顯示結果可能會有所不同。
2.rossrv show [服務名稱]:顯示指定服務的信息
以下示例顯示turtlesim/SetPen服務信息。可以確認uint8是包含r、g、b、width 和off等5種信息的服務。請注意,“---”在服務文件中用作請求和響應的分隔符。對於 turtlesim/SetPen,用戶可以看到只有請求,沒有任何響應。
3.rossrv md5 [服務名稱]:顯示md5sum
在以下示例中,使用該命令來查看turtlesim/SetPen服務的md5信息。有時如果在 服務請求和響應期間遇到MD5問題,則需要檢查md5sum。這時會用到該命令,一般不 常用。
4.rossrv package [功能包名稱]:顯示用於指定功能包的所有服務
可以看到指定功能包中用到的服務。