ROS2學習之旅(11)——記錄和回放數據


ros2 bag是一個命令行工具,用於記錄發布在系統中話題上的數據。它累積記錄任意數量話題的數據,並將其保存在數據庫中。然后可以重放數據以再現測試和實驗的結果。記錄話題數據也是分享工作和讓別人重現工作的好方法。

1.准備

接下來在turtlesim系統中記錄鍵盤輸入,將其保存並回放它們。

所以,運行/turtlesim/teleop_turtle兩個節點,分別在兩個終端運行:

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

此時,出現窗口:

創建一個文件夾已保存記錄文件:

mkdir bag_files
cd bag_files

2.選擇話題

ros2 bag只能記錄發布的話題的數據,要查看系統的話題列表,打開一個新終端,並運行以下命令:

ros2 topic list

此時返回:

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

/turtle_teleop節點在/turtle1/cmd_vel話題上發布命令以使海龜在turtlesim中移動。

要查看/turtle1/cmd_vel發布的數據,運行以下命令:

ros2 topic echo /turtle1/cmd_vel

一開始什么都不會顯示出來,因為teleop沒有發布任何數據。返回運行teleop的終端,使其處於活動狀態。使用方向鍵移動海龜,將看到在運行ros2 topic echo的終端上發布的數據。

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

3.ros2 bag record

為了記錄話題發布的數據,使用命令語法:

ros2 bag record <topic_name>

打開一個新的終端並移動到之前創建的bag_files目錄中,因為rosbag文件將保存在運行它的目錄中,然后執行:

ros2 bag record /turtle1/cmd_vel

將在終端中看到以下消息(日期和時間會不同):

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_07_14-09_39_06/rosbag2_2021_07_14-09_39_06_0.db3' for READ_WRITE.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

現在,ros2 bag正在記錄/turtle1/cmd_vel話題上發布的數據:

按下ctrl+c來停止記錄。

保存的文件名稱具有以下格式:

rosbag2_year_month_day-hour_minute_second

3.1記錄多個話題

使用ros2 bag同樣可以記錄多個數據:

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose

-o選項允許為包文件選擇一個唯一的名稱,下面的字符串(subset)是文件名。

要一次記錄多個話題,只需用空格分隔出每個話題即可。

將看到以下消息,確認正在錄制兩個話題:

[INFO] [rosbag2_storage]: Opened database 'subset/subset_0.db3' for READ_WRITE.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

按下ctrl+c結束記錄,此時記錄的文件夾為:

image-20210714094952319

注意:

還可以向命令添加另一個選項-a,它記錄系統上的所有話題。

4.ros2 bag info

可以查看記錄包的細節:

ros2 bag info <bag_file_name>

subset包文件上運行這個命令將返回一個關於該文件的信息列表:

Files:             subset_0.db3
Bag size:          25.2 KiB
Storage id:        sqlite3
Duration:          1.551s
Start:             Jul 14 2021 09:48:54.316 (1626227334.316)
End:               Jul 14 2021 09:48:55.868 (1626227335.868)
Messages:          98
Topic information: Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 98 | Serialization Format: cdr
                   Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 0 | Serialization Format: cdr

要查看各個消息,必須打開數據庫(在本例中是sqlite3)來檢查它,這超出了ROS2的范圍。

5.ros2 bag play

在運行teleop的終端中鍵入Ctrl+C,重新播放bag文件,確保海龜窗口是可見的:

ros2 bag play rosbag2_2021_07_14-09_39_06

終端返回:

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_07_14-09_39_06/rosbag2_2021_07_14-09_39_06_0.db3' for READ_ONLY.

海龜將遵循在記錄時輸入的相同路徑(盡管不是100%准確,turtlesim對系統時間的微小變化很敏感)。

6.總結

可以使用ros2 bag命令記錄在ROS2系統中傳遞的話題上的數據。無論是在與他人分享工作,還是在檢查自己的實驗,這都是一個值得了解的好工具。

如果給您帶來幫助,希望能給點個關注,以后還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。


免責聲明!

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



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