1. 程式人生 > >ROS bag包資料的回放,提取任意話題資料,並轉化為txt檔案

ROS bag包資料的回放,提取任意話題資料,並轉化為txt檔案

一、通過bag檔案記錄話題訊息

當釋出話題的節點執行後,可以通過rostopic list 列出當前執行的話題,然後記錄:

mkdir bagfile
cd bagfile
rosbag record -a  #記錄所有的話題

當訊息記錄完成後,結束ctrl+c終止record的命令列,在新建的bagfile檔案中會生成年-月-日-時-分-秒.bag檔案。

二、資料重現

我們使用rosbag命令將資料記錄在bag檔案之後,還可以利用裡面的資料重現我們節點的執行狀態。

cd bagfile
rosbag info <file_name>

會顯示此bag檔案的一些詳細資訊(如下圖):

[email protected]:~/bag$ rosbag info MERGED_cv_lanekeeping_2018-04-25-16-14-52.bag 
path:        MERGED_cv_lanekeeping_2018-04-25-16-14-52.bag
version:     2.0
duration:    1:59s (119s)
start:       Apr 26 2018 04:14:52.51 (1524687292.51)
end:         Apr 26 2018 04:16:51.76 (1524687411.76)
size:        14.4 GB
messages:    621967
compression: none [13485/13485 chunks]
types:       can_msgs/Frame                                         [64ae5cebf967dc6aae4e78f5683a5b25]
             dbw_mkz_msgs/BrakeCmd                                  [c0d20e1056976680942e85ab0959826c]
             dbw_mkz_msgs/BrakeInfoReport                           [fc88af128b5b3213ea25ab325a9b3bbb]
             dbw_mkz_msgs/BrakeReport                               [5716c7ce378fb5a251e0ff30ac24500e]
             dbw_mkz_msgs/FuelLevelReport                           [f5ec1964dbda02fda82785b8035744e4]
             dbw_mkz_msgs/GearReport                                [785b94d5bfee677e7f0da982153f2711]
             dbw_mkz_msgs/Misc1Report                               [c5c1e0d6ba52586919873bf9b0355143]
             dbw_mkz_msgs/SteeringCmd                               [ff1fa11624bdc2aff2aeee5aa6014057]
             dbw_mkz_msgs/SteeringReport                            [435efc512abdd87ef2f942c0e8ed296d]
             dbw_mkz_msgs/SurroundReport                            [17a8c9ed72da4f55d44d6d71483cf0e3]
             dbw_mkz_msgs/ThrottleCmd                               [d75259a1444adebea30e45b37542c415]
             dbw_mkz_msgs/ThrottleInfoReport                        [8255d20d2bbc661ad39074024259c71a]
             dbw_mkz_msgs/ThrottleReport                            [dc371d36db36a47de2ffaa1302bf4aec]
             dbw_mkz_msgs/TurnSignalCmd                             [f1310dcd252c98fc408c6df907b9495a]
             dbw_mkz_msgs/WheelPositionReport                       [0e6f28c4c7a099c93cc2173da9808a16]

回放

cd bagfile
rosbag play <bagfile_name>

預設情況下,rosbag play命令會等待0.2秒之後才開始釋出資訊,這是為了在釋出資訊之前通知所有訂閱資訊的節點,以使它們能夠及時地接收到rosbag play釋出的資訊。這個等待時間可以用-d選項指定。

因為rosbag record記錄資料是有延遲的,所以在執行rosbag play最初的一小段時間裡訊息不會發布,使用-s選項後跟秒數可以跳過bag檔案記錄的前幾秒。

-r,它可以改變資訊釋出的速度:

rosbag play -r 2 <bagfile_name>   #以兩倍的速度釋出記錄的訊息

三、選定話題記錄

1、查詢話題:

在資料回放的時候:新建終端,在終端輸入:

rostopic list -v


就會得到如圖:

[email protected]:~$ rostopic list -v

Published topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 4 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
 * /rosout [rosgraph_msgs/Log] 1 subscriber
 * /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber

2、提取其中的資料成立新的bag包

在一個包含數百個話題的大型系統中,經常會發布諸如影象等的大量的資訊,把它們都記錄到一個檔案裡是不現實的,好在rosbag record命令提供了僅記錄部分話題的能力。

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

-O選項指定了我們要儲存的bag檔案的名字(subset.bag),後面的/turtle1/cmd_vel/turtle1/pose則指定了我們要記錄資訊的話題。

如果只是記錄num次資料:可以在-O 後買你新增引數:-r num

注:rosbag record/play無法完美重現系統的狀態。

四、.bag檔案轉.txt

file_name.bag檔案中topic_name話題的訊息轉換到Txt_name.txt檔案中:

rostopic echo -b file_name.bag -p /topic_name > Txt_name.txt

五、.bag檔案生成失敗,只出現.bag.active檔案

根據目前的經驗,出現這情況是因為電腦在記錄訊息時卡掉了,沒有完成最終的錄製。可以轉換成.bag檔案,但是訊息有丟失(電腦卡掉後的話題內容)恢復:

  • ①切換到”xxx.bag.active”檔案所在的目錄下;
  • ②命令列輸入“rosbag reindex xxx.bag.active”;
  • ③輸入”rosbag fix xxx.bag.active outfile_name.abg”;

注: 在第二步結束後,除了原來的以.bag.active為字尾的檔案之外,還會生成一個以.bag.org.active為字尾的檔案,注意該檔案只是中間檔案,第三部輸入的時候不要對該檔案進行修復。

在第三步結束之後,會生成正常的.bag檔案