天天看點

ROS機器人程式設計(原書第2版)3.7 繪制标量資料圖

<b>3.7 繪制标量資料圖</b>

我們可以使用ros中現有的一些通用工具輕松地繪制标量資料圖。當然非标量資料也可以繪制,但是要分别在不同的标量域裡進行。我們之是以在此僅讨論标量資料,是因為對于大多數非标量資料,有專門的工具能夠更好地對其進行表示,我們會在後面進行部分介紹,例如圖形、位姿、方向和角度等。

用rqt_plot畫出時間趨勢曲線

在ros系統中,标量資料可以根據消息中提供的時間戳作為時間序列繪制。然後,我們就能夠在y軸上使用rqt_plot工具繪制标量資料。rqt_plot工具有一套功能強大的參數文法,允許我們在結構化消息中指定多個字段(當然使用了相當簡明的方式),也可以在gui中手動添加或删除主題和字段。

為了能夠實際展示rqt_plot工具,我們使用example4節點,它在兩個不同的主題中分别釋出一個标量和一個矢量(非标量),這兩個主題分别是溫度(temp)和加速度(accel)。在這些消息中的值是随機生成的,是以它們沒有實際意義,僅用于示範曲線繪制。那麼首先以下面的指令運作節點:

為了能夠畫出消息,我們必須知道具體的格式;如果你不知道具體格式則使用rosmg show?&lt;msg type&gt;擷取。對于标量資料,我們通常使用data作為字段名來表示實際的值。是以,對于temp主題,資料格式為int32,運作下面指令:

隻要節點正常運作,我們就能看到曲線圖随輸入消息一直變化。如下圖顯示。

在示例節點提供的accel主題裡,我們看到一個vector3的消息(你可以通過rostopic type/accel來檢視),我們可以在一個plot圖中分别繪制三個字段的曲線。vector3消息包含三個字段x、y和z。我們可以使用逗号(,)來區分字段或者像下面一樣使用更加簡潔的方式:

繪制的曲線圖如下:

我們還可以将每個字段分開繪制。由于rqt_plot不直接支援這個功能,是以我們需要使用rqt_gui将三個圖表手動分開,如下圖所示:

rqt_plot的gui支援三種繪圖前端。在ros hydro之前,隻有matplotlib支援。現在,我們可以使用更快的qt前端,同時它支援更多的時間序列。可以點選配置(configuration)按鈕選擇(如右圖所示):

繼續閱讀