01-ROS入門- 錄制與回放數據

參見wiki教程
Description: 本教程將教你如何將ROS系統(tǒng)運行過程中的數據錄制到一個.bag文件中套才,然后通過回放數據來重現(xiàn)相似的運行過程。
Keywords: data, rosbag, record, play, info, bag
Tutorial Level: BEGINNER

本小節(jié)將教你如何記錄ROS系統(tǒng)運行時的話題數據,記錄的話題數據將會累積保存到bag文件中胞皱。
首先祠够,執(zhí)行以下命令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

以上操作將會啟動兩個節(jié)點——一個turtlesim可視化節(jié)點和一個turtlesim鍵盤控制節(jié)點。在運行turtlesim鍵盤控制節(jié)點的終端窗口中你應該會看到如下類似信息:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

這時按下鍵盤上的方向鍵應該會讓turtle運動起來牵囤。需要注意的是要想控制turtle運動你必須先選中啟動turtlesim鍵盤控制節(jié)點時所在的終端窗口而不是顯示虛擬turtle所在的窗口。

錄制所有發(fā)布的話題

首先讓我們來檢查看當前系統(tǒng)中發(fā)布的所有話題娶牌。要完成此操作請打開一個新終端并執(zhí)行:

rostopic list -v

這應該會生成以下輸出:

Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
* /rosout [roslib/Log] 2 publishers
* /rosout_agg [roslib/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1
publisherSubscribed topics:
* /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
* /rosout [roslib/Log] 1 subscriber

上面所發(fā)布話題部分列出的話題消息是唯一可以被錄制保存到文件中的的話題消息奔浅,因為只有消息已經發(fā)布了才可以被錄制。/turtle1/command_velocity話題是teleop_turtle節(jié)點所發(fā)布的命令消息并作為turtlesim節(jié)點的輸入诗良。而/turtle1/color_sensor和/turtle1/pose是turtlesim節(jié)點發(fā)布出來的話題消息汹桦。
現(xiàn)在我們開始錄制。打開一個新的終端窗口鉴裹,在終端中執(zhí)行以下命令:

mkdir ~/bagfilescd ~/bagfilesrosbag record -a

在這里我們先建立一個用于錄制的臨時目錄舞骆,然后在該目錄下運行rosbag record命令,并附加-a選項径荔,該選項表示將當前發(fā)布的所有話題數據都錄制保存到一個bag文件中督禽。
然后回turtle_teleop節(jié)點所在的終端窗口并控制turtle隨處移動10秒鐘左右。
在運行rosbag record命令的窗口中按Ctrl-C退出該命令∽艽Γ現(xiàn)在檢查看~/bagfiles目錄中的內容狈惫,你應該會看到一個以年份、日期和時間命名并以.bag作為后綴的文件鹦马。這個就是bag文件胧谈,它包含rosbag record運行期間所有節(jié)點發(fā)布的話題。

檢查并回放bag文件

現(xiàn)在我們已經使用rosbag record命令錄制了一個bag文件荸频,接下來我們可以使用rosbag info檢查看它的內容菱肖,使用rosbag play命令回放出來。接下來我們首先會看到在bag文件中都錄制了哪些東西旭从。我們可以使用info命令稳强,該命令可以檢查看bag文件中的內容而無需回放出來。在bag文件所在的目錄下執(zhí)行以下命令:
rosbag info <your bagfile>
你應該會看到如下類似信息:

bag: 2009-12-04-15-02-56.bag
version: 1.2
start_time: 1259967777871383000
end_time: 1259967797238692999
length: 19367309999
topics:

  • name: /rosout
    count: 2 datatype: roslib/Log
    md5sum: acffd30cd6b6de30f120938c17c593fb
  • name: /turtle1/color_sensor
    count: 1122 datatype: turtlesim/Color
    md5sum: 353891e354491c51aabe32df673fb446
  • name: /turtle1/command_velocity
    count: 23 datatype: turtlesim/Velocity
    md5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13
  • name: /turtle1/pose
    count: 1121 datatype: turtlesim/Pose
    md5sum: 863b248d5016ca62ea2e895ae5265cf9

這些信息告訴你bag文件中所包含話題的名稱和悦、類型和消息數量退疫。我們可以看到,在之前使用rostopic命令查看到的五個已公告的話題中鸽素,其實只有其中的四個在我們錄制過程中發(fā)布了消息蹄咖。因為我們帶-a參數選項運行rosbag record命令時系統(tǒng)會錄制下所有節(jié)點發(fā)布的所有消息。
下一步是回放bag文件以再現(xiàn)系統(tǒng)運行過程付鹿。首先在turtle_teleop_key節(jié)點運行時所在的終端窗口中按Ctrl+C退出該節(jié)點澜汤。讓turtlesim節(jié)點繼續(xù)運行。在終端中bag文件所在目錄下運行以下命令:

rosbag play <your bagfile>

在這個窗口中你應該會立即看到如下類似信息:

Hit space to pause.
[ INFO] 1260210510.566003000: Sleeping 0.200 seconds after advertising /rosout...
[ INFO] 1260210510.766582000: Done sleeping.
[ INFO] 1260210510.872197000: Sleeping 0.200 seconds after advertising /turtle1/pose...
[ INFO] 1260210511.072384000: Done sleeping.
[ INFO] 1260210511.277391000: Sleeping 0.200 seconds after advertising /turtle1/color_sensor...
[ INFO] 1260210511.477525000: Done sleeping.

默認模式下舵匾,rosbag play命令在公告每條消息后會等待一小段時間(0.2秒)后才真正開始發(fā)布bag文件中的內容俊抵。等待一段時間的過程可以通知消息訂閱器消息已經公告了消息數據可能會馬上到來。如果rosbag play在公告消息后立即發(fā)布坐梯,訂閱器可能會接收不到幾條最先發(fā)布的消息徽诲。等待時間可以通過-d選項來指定。
最終/turtle1/command_velocity話題將會被發(fā)布吵血,同時在turtuelsim虛擬畫面中turtle應該會像之前你通過turtle_teleop_key節(jié)點控制它一樣開始移動谎替。從運行rosbag play到turtle開始移動時所經歷時間應該近似等于之前在本教程開始部分運行rosbag record后到開始按下鍵盤發(fā)出控制命令時所經歷時間。你可以通過-s參數選項讓rosbag play命令等待一段時間跳過bag文件初始部分后再真正開始回放蹋辅。最后一個可能比較有趣的參數選項是-r選項钱贯,它允許你通過設定一個參數來改變消息發(fā)布速率。如果你執(zhí)行:

rosbag play -r 2 <your bagfile>

你應該會看到turtle的運動軌跡有點不同了侦另,這時的軌跡應該是相當于當你以兩倍的速度通過按鍵發(fā)布控制命令時產生的軌跡秩命。

錄制數據子集

當運行一個復雜的系統(tǒng)時,比如PR2軟件系統(tǒng)褒傅,會有幾百個話題被發(fā)布弃锐,有些話題會發(fā)布大量數據(比如包含攝像頭圖像流的話題)。在這種系統(tǒng)中殿托,要想把所有話題都錄制保存到硬盤上的單個bag文件中是不切實際的霹菊。rosbag record命令支持只錄制某些特別指定的話題到單個bag文件中,這樣就允許用戶只錄制他們感興趣的話題支竹。
如果還有turtlesim節(jié)點在運行旋廷,先退出他們,然后重新啟動(relaunch)鍵盤控制節(jié)點相關的啟動文件(launch file):

rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key

在bag文件所在目錄下執(zhí)行以下命令:

rosbag record -O subset /turtle1/command_velocity /turtle1/pose

上述命令中的-O參數告訴rosbag record將數據記錄保存到名為subset.bag的文件中唾戚,同時后面的話題參數告訴rosbag record只能錄制這兩個指定的話題柳洋。然后通過鍵盤控制turtle隨處移動幾秒鐘,最后按Ctrl+C退出rosbag record命令叹坦。
現(xiàn)在檢查看bag文件中的內容(rosbag info subset.bag)熊镣。你應該會看到如下類似信息,里面只包含錄制時指定的話題:

bag: subset.bag
version: 1.2
start_time: 3196900000000
end_time: 3215400000000
length: 18500000000
topics:

  • name: /turtle1/command_velocity
    count: 8
    datatype: turtlesim/Velocity
    md5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13
  • name: /turtle1/pose
    count: 1068
    datatype: turtlesim/Pose
    md5sum: 863b248d5016ca62ea2e895ae5265cf9

rosbag record/play 命令的局限性

在前述部分中你可能已經注意到了turtle的路徑可能并沒有完全地映射到原先通過鍵盤控制時產生的路徑上——整體形狀應該是差不多的募书,但沒有完全一樣绪囱。造成該問題的原因是turtlesim的移動路徑對系統(tǒng)定時精度的變化非常敏感。rosbag受制于其本身的性能無法完全復制錄制時的系統(tǒng)運行行為莹捡,rosplay也一樣鬼吵。對于像turtlesim這樣的節(jié)點,當處理消息的過程中系統(tǒng)定時發(fā)生極小變化時也會使其行為發(fā)生微妙變化篮赢,用戶不應該期望能夠完美的模仿系統(tǒng)行為

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末齿椅,一起剝皮案震驚了整個濱河市琉挖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涣脚,老刑警劉巖示辈,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遣蚀,居然都是意外死亡矾麻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門芭梯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來险耀,“玉大人,你說我怎么就攤上這事玖喘∷ξ” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵芒涡,是天一觀的道長柴灯。 經常有香客問我,道長费尽,這世上最難降的妖魔是什么赠群? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮旱幼,結果婚禮上查描,老公的妹妹穿的比我還像新娘。我一直安慰自己柏卤,他們只是感情好冬三,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缘缚,像睡著了一般勾笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桥滨,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天窝爪,我揣著相機與錄音,去河邊找鬼齐媒。 笑死蒲每,一個胖子當著我的面吹牛,可吹牛的內容都是我干的喻括。 我是一名探鬼主播邀杏,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唬血!你這毒婦竟也來了望蜡?” 一聲冷哼從身側響起唤崭,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泣特,沒想到半個月后浩姥,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡状您,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兜挨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏孟。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拌汇,靈堂內的尸體忽然破棺而出柒桑,到底是詐尸還是另有隱情,我是刑警寧澤噪舀,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布魁淳,位于F島的核電站,受9級特大地震影響与倡,放射性物質發(fā)生泄漏界逛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一纺座、第九天 我趴在偏房一處隱蔽的房頂上張望息拜。 院中可真熱鬧,春花似錦净响、人聲如沸少欺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赞别。三九已至,卻和暖如春配乓,著一層夾襖步出監(jiān)牢的瞬間仿滔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工扰付, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堤撵,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓羽莺,卻偏偏與公主長得像实昨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盐固,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容